{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/aurelia-binding/dist/native-modules/aurelia-binding.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/aurelia-dependency-injection/dist/native-modules/aurelia-dependency-injection.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/aurelia-logging/dist/native-modules/aurelia-logging.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-SG.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///src/home/jadev/Documenti/Profile/src/services/authentication.ts","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/et.js","webpack:///src/home/jadev/Documenti/Profile/src/helpers/utils.ts","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///src/home/jadev/Documenti/Profile/src/definitions.ts","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/aurelia-path/dist/native-modules/aurelia-path.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/core-js/internals/global.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/core-js/internals/define-well-known-symbol.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/aurelia-task-queue/dist/native-modules/aurelia-task-queue.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/aurelia-pal/dist/native-modules/aurelia-pal.js","webpack:///./node_modules/core-js/internals/well-known-symbol.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/aurelia-loader/dist/native-modules/aurelia-loader.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/zxcvbn/lib/adjacency_graphs.js","webpack:///./node_modules/@firebase/storage/dist/index.esm.js","webpack:///src/home/jadev/Documenti/Profile/src/services/storage.ts","webpack:///./node_modules/markdown-it/dist/markdown-it.js","webpack:///./node_modules/markdown-it-emoji/index.js","webpack:///./node_modules/markdown-it-bracketed-spans/index.js","webpack:///./node_modules/markdown-it-attrs/index.js","webpack:///./node_modules/core-js/internals/has.js","webpack:///./node_modules/@firebase/auth/dist/auth.esm.js","webpack:///./node_modules/@firebase/polyfill/dist/index.esm.js","webpack:///./node_modules/@firebase/polyfill/node_modules/whatwg-fetch/fetch.js","webpack:///./node_modules/promise-polyfill/lib/polyfill.js","webpack:///./node_modules/core-js/features/array/find.js","webpack:///./node_modules/core-js/es/array/find.js","webpack:///./node_modules/core-js/modules/es.array.find.js","webpack:///./node_modules/core-js/internals/a-function.js","webpack:///./node_modules/core-js/internals/native-weak-map.js","webpack:///./node_modules/firebase/app/dist/index.cjs.js","webpack:///./node_modules/core-js/internals/own-keys.js","webpack:///./node_modules/core-js/internals/array-includes.js","webpack:///./node_modules/core-js/internals/to-absolute-index.js","webpack:///./node_modules/core-js/internals/is-forced.js","webpack:///./node_modules/core-js/internals/object-define-properties.js","webpack:///./node_modules/core-js/internals/html.js","webpack:///./node_modules/core-js/features/array/find-index.js","webpack:///./node_modules/core-js/es/array/find-index.js","webpack:///./node_modules/core-js/modules/es.array.find-index.js","webpack:///./node_modules/core-js/features/object/assign.js","webpack:///./node_modules/core-js/internals/fails.js","webpack:///./node_modules/core-js/es/object/assign.js","webpack:///./node_modules/core-js/modules/es.object.assign.js","webpack:///./node_modules/core-js/internals/object-assign.js","webpack:///./node_modules/core-js/features/string/starts-with.js","webpack:///./node_modules/core-js/es/string/starts-with.js","webpack:///./node_modules/core-js/modules/es.string.starts-with.js","webpack:///./node_modules/core-js/internals/validate-string-method-arguments.js","webpack:///./node_modules/core-js/internals/is-regexp.js","webpack:///./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack:///./node_modules/core-js/features/string/repeat.js","webpack:///./node_modules/core-js/internals/is-object.js","webpack:///./node_modules/core-js/es/string/repeat.js","webpack:///./node_modules/core-js/modules/es.string.repeat.js","webpack:///./node_modules/core-js/internals/string-repeat.js","webpack:///./node_modules/core-js/features/symbol/index.js","webpack:///./node_modules/core-js/es/symbol/index.js","webpack:///./node_modules/core-js/modules/es.array.concat.js","webpack:///./node_modules/core-js/internals/create-property.js","webpack:///./node_modules/core-js/internals/array-method-has-species-support.js","webpack:///./node_modules/core-js/modules/es.object.to-string.js","webpack:///./node_modules/core-js/internals/object-to-string.js","webpack:///./node_modules/core-js/internals/hide.js","webpack:///./node_modules/core-js/internals/classof.js","webpack:///./node_modules/core-js/modules/es.symbol.js","webpack:///./node_modules/core-js/internals/enum-keys.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack:///./node_modules/core-js/modules/es.symbol.async-iterator.js","webpack:///./node_modules/core-js/modules/es.symbol.description.js","webpack:///./node_modules/core-js/modules/es.symbol.has-instance.js","webpack:///./node_modules/core-js/modules/es.symbol.is-concat-spreadable.js","webpack:///./node_modules/core-js/modules/es.symbol.match.js","webpack:///./node_modules/core-js/modules/es.symbol.replace.js","webpack:///./node_modules/core-js/internals/export.js","webpack:///./node_modules/core-js/modules/es.symbol.search.js","webpack:///./node_modules/core-js/modules/es.symbol.species.js","webpack:///./node_modules/core-js/modules/es.symbol.split.js","webpack:///./node_modules/core-js/modules/es.symbol.to-primitive.js","webpack:///./node_modules/core-js/modules/es.symbol.to-string-tag.js","webpack:///./node_modules/core-js/modules/es.symbol.unscopables.js","webpack:///./node_modules/core-js/modules/es.math.to-string-tag.js","webpack:///./node_modules/core-js/modules/es.json.to-string-tag.js","webpack:///./node_modules/core-js/modules/esnext.symbol.dispose.js","webpack:///./node_modules/core-js/modules/esnext.symbol.observable.js","webpack:///./node_modules/core-js/internals/object-define-property.js","webpack:///./node_modules/core-js/modules/esnext.symbol.pattern-match.js","webpack:///./node_modules/core-js/features/symbol/iterator.js","webpack:///./node_modules/core-js/es/symbol/iterator.js","webpack:///./node_modules/core-js/modules/es.string.iterator.js","webpack:///./node_modules/core-js/internals/string-at.js","webpack:///./node_modules/core-js/internals/create-iterator-constructor.js","webpack:///./node_modules/core-js/internals/correct-prototype-getter.js","webpack:///./node_modules/core-js/internals/object-set-prototype-of.js","webpack:///./node_modules/core-js/internals/validate-set-prototype-of-arguments.js","webpack:///./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack:///./node_modules/aurelia-metadata/dist/native-modules/aurelia-metadata.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/core-js/internals/dom-iterables.js","webpack:///./node_modules/core-js/modules/es.array.iterator.js","webpack:///./node_modules/@firebase/database/dist/index.cjs.js","webpack:///./node_modules/@firebase/logger/dist/index.esm.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/core-js/internals/descriptors.js","webpack:///./node_modules/zxcvbn/lib/matching.js","webpack:///./node_modules/zxcvbn/lib/frequency_lists.js","webpack:///./node_modules/zxcvbn/lib/time_estimates.js","webpack:///./node_modules/zxcvbn/lib/feedback.js","webpack:///./node_modules/markdown-it-emoji/lib/data/shortcuts.js","webpack:///./node_modules/markdown-it-emoji/lib/render.js","webpack:///./node_modules/markdown-it-emoji/lib/replace.js","webpack:///./node_modules/core-js/internals/an-object.js","webpack:///./node_modules/markdown-it-emoji/lib/normalize_opts.js","webpack:///./node_modules/markdown-it-attrs/patterns.js","webpack:///./node_modules/markdown-it-attrs/utils.js","webpack:///./node_modules/core-js/internals/to-indexed-object.js","webpack:///src/home/jadev/Documenti/Profile/src/helpers/validationFormRender.ts","webpack:///./node_modules/@firebase/functions/dist/index.cjs.js","webpack:///./node_modules/aurelia-webpack-plugin/runtime/pal-loader-entry.js","webpack:///./node_modules/aurelia-loader-webpack/dist/native-modules/aurelia-loader-webpack.js","webpack:///(webpack)/buildin/harmony-module.js","webpack:///./node_modules/aurelia-bootstrapper/dist/native-modules/aurelia-bootstrapper.js","webpack:///./node_modules/aurelia-polyfills/dist/native-modules/aurelia-polyfills.js","webpack:///./node_modules/core-js/internals/require-object-coercible.js","webpack:///./node_modules/core-js/internals/shared.js","webpack:///./node_modules/core-js/internals/create-property-descriptor.js","webpack:///./node_modules/core-js/internals/set-to-string-tag.js","webpack:///./node_modules/aurelia-history/dist/native-modules/aurelia-history.js","webpack:///./node_modules/aurelia-templating/dist/native-modules/aurelia-templating.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/tslib/tslib.es6.js","webpack:///./node_modules/core-js/internals/classof-raw.js","webpack:///./node_modules/core-js/internals/to-object.js","webpack:///./node_modules/core-js/internals/to-length.js","webpack:///./node_modules/core-js/internals/to-integer.js","webpack:///./node_modules/core-js/internals/to-primitive.js","webpack:///./node_modules/core-js/internals/is-pure.js","webpack:///./node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///./node_modules/core-js/internals/redefine.js","webpack:///src/home/jadev/Documenti/Profile/src/services/database.ts","webpack:///./node_modules/core-js/internals/internal-state.js","webpack:///./node_modules/core-js/internals/shared-key.js","webpack:///./node_modules/core-js/internals/hidden-keys.js","webpack:///./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///./node_modules/core-js/internals/object-keys.js","webpack:///./node_modules/core-js/internals/entry-unbind.js","webpack:///./node_modules/bluebird/js/browser/bluebird.js-exposed","webpack:///src/home/jadev/Documenti/Profile/src/services/functions.ts","webpack:///./node_modules/bluebird/js/browser/bluebird.js","webpack:///src/home/jadev/Documenti/Profile/src/helpers/logger.ts","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/core-js/internals/indexed-object.js","webpack:///./node_modules/core-js/internals/is-array.js","webpack:///./node_modules/core-js/internals/set-global.js","webpack:///./node_modules/core-js/internals/uid.js","webpack:///./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///./node_modules/core-js/internals/object-get-own-property-names.js","webpack:///./node_modules/core-js/internals/enum-bug-keys.js","webpack:///./node_modules/core-js/internals/add-to-unscopables.js","webpack:///./node_modules/core-js/internals/object-create.js","webpack:///src/home/jadev/Documenti/Profile/src/helpers/errorManager.ts","webpack:///./node_modules/core-js/internals/path.js","webpack:///./node_modules/core-js/internals/wrapped-well-known-symbol.js","webpack:///./node_modules/core-js/internals/iterators.js","webpack:///./node_modules/zxcvbn/lib/scoring.js","webpack:///./node_modules/zxcvbn/lib/main.js","webpack:///./node_modules/markdown-it-container/index.js","webpack:///./node_modules/a-color-picker/dist/acolorpicker.js","webpack:///./node_modules/firebase/auth/dist/index.esm.js","webpack:///./node_modules/@firebase/util/dist/index.cjs.js","webpack:///./node_modules/core-js/internals/array-methods.js","webpack:///./node_modules/aurelia-route-recognizer/dist/native-modules/aurelia-route-recognizer.js","webpack:///./node_modules/aurelia-router/dist/native-modules/aurelia-router.js","webpack:///./node_modules/core-js/internals/bind-context.js","webpack:///./node_modules/core-js/internals/array-species-create.js","webpack:///./node_modules/core-js/internals/ie8-dom-define.js","webpack:///./node_modules/core-js/internals/document-create-element.js","webpack:///./node_modules/core-js/internals/native-symbol.js","webpack:///./node_modules/core-js/internals/function-to-string.js","webpack:///./node_modules/core-js/internals/copy-constructor-properties.js","webpack:///./node_modules/core-js/internals/object-keys-internal.js","webpack:///./node_modules/core-js/modules/es.symbol.iterator.js","webpack:///./node_modules/core-js/internals/define-iterator.js","webpack:///./node_modules/@firebase/app/dist/index.cjs.js","webpack:///./node_modules/core-js/internals/iterators-core.js","webpack:///./node_modules/core-js/internals/object-get-prototype-of.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///src/home/jadev/Documenti/Profile/src/app.ts","webpack:///./src/app.html","webpack:///./node_modules/aurelia-event-aggregator/dist/native-modules/aurelia-event-aggregator.js","webpack:///./node_modules/aurelia-framework/dist/native-modules/aurelia-framework.js","webpack:///./node_modules/aurelia-history-browser/dist/native-modules/aurelia-history-browser.js","webpack:///./node_modules/aurelia-logging-console/dist/native-modules/aurelia-logging-console.js","webpack:///./node_modules/aurelia-pal-browser/dist/native-modules/aurelia-pal-browser.js","webpack:///./node_modules/aurelia-templating-binding/dist/native-modules/aurelia-templating-binding.js","webpack:///./node_modules/aurelia-templating-resources/dist/native-modules/aurelia-templating-resources.js","webpack:///./node_modules/aurelia-templating-router/dist/native-modules/aurelia-templating-router.js","webpack:///./node_modules/aurelia-validation/dist/native-modules/aurelia-validation.js","webpack:///src/home/jadev/Documenti/Profile/src/common/attributes/popover.ts","webpack:///src/home/jadev/Documenti/Profile/src/common/attributes/tooltip.ts","webpack:///src/home/jadev/Documenti/Profile/src/common/colorPicker/colorPicker.ts","webpack:///./src/common/colorPicker/colorPicker.html","webpack:///src/home/jadev/Documenti/Profile/src/common/inputEditable/InputEditable.ts","webpack:///./src/common/inputEditable/InputEditable.html","webpack:///src/home/jadev/Documenti/Profile/src/common/loading/LoadingComponent.ts","webpack:///./src/common/loading/LoadingComponent.html","webpack:///src/home/jadev/Documenti/Profile/src/converters/dateFormat.ts","webpack:///src/home/jadev/Documenti/Profile/src/converters/dateRelative.ts","webpack:///src/home/jadev/Documenti/Profile/src/converters/filterElements.ts","webpack:///src/home/jadev/Documenti/Profile/src/converters/markdown.ts","webpack:///src/home/jadev/Documenti/Profile/src/converters/sortElement.ts","webpack:///src/home/jadev/Documenti/Profile/src/converters/takeElements.ts","webpack:///src/home/jadev/Documenti/Profile/src/main.ts","webpack:///src/home/jadev/Documenti/Profile/src/pages/BetaTesterPage.ts","webpack:///./src/pages/BetaTesterPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvPage.ts","webpack:///./src/pages/CvPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/ConfirmsCvPage.ts","webpack:///./src/pages/CvSubpages/ConfirmsCvPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/ConfirmsCvSubpages/ConfirmRequestedComponent.ts","webpack:///./src/pages/CvSubpages/ConfirmsCvSubpages/ConfirmRequestedComponent.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/ConfirmsCvSubpages/ConfirmToReviewComponent.ts","webpack:///./src/pages/CvSubpages/ConfirmsCvSubpages/ConfirmToReviewComponent.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/ConfirmsCvSubpages/ConfirmsListPage.ts","webpack:///./src/pages/CvSubpages/ConfirmsCvSubpages/ConfirmsListPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/ConfirmsCvSubpages/NewConfirmPage.ts","webpack:///./src/pages/CvSubpages/ConfirmsCvSubpages/NewConfirmPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/EditCvComponents/CategoryComponent.ts","webpack:///./src/pages/CvSubpages/EditCvComponents/CategoryComponent.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/EditCvComponents/CurriculumComponent.ts","webpack:///./src/pages/CvSubpages/EditCvComponents/CurriculumComponent.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/EditCvComponents/CurriculumNavbarComponent.ts","webpack:///./src/pages/CvSubpages/EditCvComponents/CurriculumNavbarComponent.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/EditCvComponents/ElementComponent.ts","webpack:///./src/pages/CvSubpages/EditCvComponents/ElementComponent.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/EditCvComponents/PageIndexComponent.ts","webpack:///./src/pages/CvSubpages/EditCvComponents/PageIndexComponent.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/EditCvPage.ts","webpack:///./src/pages/CvSubpages/EditCvPage.html","webpack:///./node_modules/d3-array/src/ascending.js","webpack:///./node_modules/d3-array/src/bisector.js","webpack:///./node_modules/d3-array/src/bisect.js","webpack:///./node_modules/d3-array/src/cross.js","webpack:///./node_modules/d3-array/src/array.js","webpack:///./node_modules/d3-array/src/ticks.js","webpack:///./node_modules/d3-array/src/threshold/sturges.js","webpack:///./node_modules/d3-array/src/merge.js","webpack:///./node_modules/d3-axis/src/array.js","webpack:///./node_modules/d3-dispatch/src/dispatch.js","webpack:///./node_modules/d3-selection/src/namespaces.js","webpack:///./node_modules/d3-selection/src/namespace.js","webpack:///./node_modules/d3-selection/src/creator.js","webpack:///./node_modules/d3-selection/src/selector.js","webpack:///./node_modules/d3-selection/src/selectorAll.js","webpack:///./node_modules/d3-selection/src/matcher.js","webpack:///./node_modules/d3-selection/src/selection/sparse.js","webpack:///./node_modules/d3-selection/src/selection/enter.js","webpack:///./node_modules/d3-selection/src/constant.js","webpack:///./node_modules/d3-selection/src/selection/data.js","webpack:///./node_modules/d3-selection/src/selection/sort.js","webpack:///./node_modules/d3-selection/src/selection/attr.js","webpack:///./node_modules/d3-selection/src/window.js","webpack:///./node_modules/d3-selection/src/selection/style.js","webpack:///./node_modules/d3-selection/src/selection/property.js","webpack:///./node_modules/d3-selection/src/selection/classed.js","webpack:///./node_modules/d3-selection/src/selection/text.js","webpack:///./node_modules/d3-selection/src/selection/html.js","webpack:///./node_modules/d3-selection/src/selection/raise.js","webpack:///./node_modules/d3-selection/src/selection/lower.js","webpack:///./node_modules/d3-selection/src/selection/insert.js","webpack:///./node_modules/d3-selection/src/selection/remove.js","webpack:///./node_modules/d3-selection/src/selection/clone.js","webpack:///./node_modules/d3-selection/src/selection/on.js","webpack:///./node_modules/d3-selection/src/selection/dispatch.js","webpack:///./node_modules/d3-selection/src/selection/index.js","webpack:///./node_modules/d3-selection/src/selection/select.js","webpack:///./node_modules/d3-selection/src/selection/selectAll.js","webpack:///./node_modules/d3-selection/src/selection/filter.js","webpack:///./node_modules/d3-selection/src/selection/exit.js","webpack:///./node_modules/d3-selection/src/selection/join.js","webpack:///./node_modules/d3-selection/src/selection/merge.js","webpack:///./node_modules/d3-selection/src/selection/order.js","webpack:///./node_modules/d3-selection/src/selection/call.js","webpack:///./node_modules/d3-selection/src/selection/nodes.js","webpack:///./node_modules/d3-selection/src/selection/node.js","webpack:///./node_modules/d3-selection/src/selection/size.js","webpack:///./node_modules/d3-selection/src/selection/empty.js","webpack:///./node_modules/d3-selection/src/selection/each.js","webpack:///./node_modules/d3-selection/src/selection/append.js","webpack:///./node_modules/d3-selection/src/selection/datum.js","webpack:///./node_modules/d3-selection/src/select.js","webpack:///./node_modules/d3-selection/src/local.js","webpack:///./node_modules/d3-drag/src/event.js","webpack:///./node_modules/d3-drag/src/drag.js","webpack:///./node_modules/d3-color/src/define.js","webpack:///./node_modules/d3-color/src/color.js","webpack:///./node_modules/d3-color/src/math.js","webpack:///./node_modules/d3-color/src/lab.js","webpack:///./node_modules/d3-color/src/cubehelix.js","webpack:///./node_modules/d3-interpolate/src/basis.js","webpack:///./node_modules/d3-interpolate/src/constant.js","webpack:///./node_modules/d3-interpolate/src/color.js","webpack:///./node_modules/d3-interpolate/src/rgb.js","webpack:///./node_modules/d3-interpolate/src/basisClosed.js","webpack:///./node_modules/d3-interpolate/src/number.js","webpack:///./node_modules/d3-interpolate/src/string.js","webpack:///./node_modules/d3-interpolate/src/transform/parse.js","webpack:///./node_modules/d3-interpolate/src/transform/decompose.js","webpack:///./node_modules/d3-interpolate/src/transform/index.js","webpack:///./node_modules/d3-interpolate/src/zoom.js","webpack:///./node_modules/d3-interpolate/src/hsl.js","webpack:///./node_modules/d3-interpolate/src/hcl.js","webpack:///./node_modules/d3-interpolate/src/cubehelix.js","webpack:///./node_modules/d3-interpolate/src/quantize.js","webpack:///./node_modules/d3-timer/src/timer.js","webpack:///./node_modules/d3-timer/src/timeout.js","webpack:///./node_modules/d3-transition/src/transition/schedule.js","webpack:///./node_modules/d3-transition/src/interrupt.js","webpack:///./node_modules/d3-transition/src/transition/tween.js","webpack:///./node_modules/d3-transition/src/transition/interpolate.js","webpack:///./node_modules/d3-transition/src/transition/attr.js","webpack:///./node_modules/d3-transition/src/transition/attrTween.js","webpack:///./node_modules/d3-transition/src/transition/delay.js","webpack:///./node_modules/d3-transition/src/transition/duration.js","webpack:///./node_modules/d3-transition/src/transition/ease.js","webpack:///./node_modules/d3-transition/src/transition/on.js","webpack:///./node_modules/d3-transition/src/transition/remove.js","webpack:///./node_modules/d3-transition/src/transition/selection.js","webpack:///./node_modules/d3-transition/src/transition/style.js","webpack:///./node_modules/d3-transition/src/transition/styleTween.js","webpack:///./node_modules/d3-transition/src/transition/text.js","webpack:///./node_modules/d3-transition/src/transition/index.js","webpack:///./node_modules/d3-transition/src/transition/select.js","webpack:///./node_modules/d3-transition/src/transition/selectAll.js","webpack:///./node_modules/d3-transition/src/transition/filter.js","webpack:///./node_modules/d3-transition/src/transition/merge.js","webpack:///./node_modules/d3-transition/src/transition/transition.js","webpack:///./node_modules/d3-transition/src/transition/end.js","webpack:///./node_modules/d3-ease/src/poly.js","webpack:///./node_modules/d3-ease/src/sin.js","webpack:///./node_modules/d3-ease/src/back.js","webpack:///./node_modules/d3-ease/src/elastic.js","webpack:///./node_modules/d3-transition/src/selection/transition.js","webpack:///./node_modules/d3-ease/src/cubic.js","webpack:///./node_modules/d3-transition/src/selection/index.js","webpack:///./node_modules/d3-transition/src/selection/interrupt.js","webpack:///./node_modules/d3-brush/src/brush.js","webpack:///./node_modules/d3-chord/src/math.js","webpack:///./node_modules/d3-chord/src/array.js","webpack:///./node_modules/d3-chord/src/chord.js","webpack:///./node_modules/d3-path/src/path.js","webpack:///./node_modules/d3-collection/src/map.js","webpack:///./node_modules/d3-collection/src/set.js","webpack:///./node_modules/d3-contour/src/array.js","webpack:///./node_modules/d3-contour/src/density.js","webpack:///./node_modules/d3-dsv/src/dsv.js","webpack:///./node_modules/d3-dsv/src/csv.js","webpack:///./node_modules/d3-dsv/src/tsv.js","webpack:///./node_modules/d3-fetch/src/text.js","webpack:///./node_modules/d3-fetch/src/dsv.js","webpack:///./node_modules/d3-fetch/src/xml.js","webpack:///./node_modules/d3-quadtree/src/add.js","webpack:///./node_modules/d3-quadtree/src/cover.js","webpack:///./node_modules/d3-quadtree/src/quad.js","webpack:///./node_modules/d3-quadtree/src/x.js","webpack:///./node_modules/d3-quadtree/src/y.js","webpack:///./node_modules/d3-quadtree/src/quadtree.js","webpack:///./node_modules/d3-quadtree/src/data.js","webpack:///./node_modules/d3-quadtree/src/extent.js","webpack:///./node_modules/d3-quadtree/src/find.js","webpack:///./node_modules/d3-quadtree/src/remove.js","webpack:///./node_modules/d3-quadtree/src/root.js","webpack:///./node_modules/d3-quadtree/src/size.js","webpack:///./node_modules/d3-quadtree/src/visit.js","webpack:///./node_modules/d3-quadtree/src/visitAfter.js","webpack:///./node_modules/d3-force/src/simulation.js","webpack:///./node_modules/d3-format/src/formatDecimal.js","webpack:///./node_modules/d3-format/src/exponent.js","webpack:///./node_modules/d3-format/src/formatSpecifier.js","webpack:///./node_modules/d3-format/src/formatTrim.js","webpack:///./node_modules/d3-format/src/formatPrefixAuto.js","webpack:///./node_modules/d3-format/src/defaultLocale.js","webpack:///./node_modules/d3-format/src/formatRounded.js","webpack:///./node_modules/d3-format/src/formatTypes.js","webpack:///./node_modules/d3-format/src/identity.js","webpack:///./node_modules/d3-format/src/locale.js","webpack:///./node_modules/d3-format/src/formatGroup.js","webpack:///./node_modules/d3-format/src/formatNumerals.js","webpack:///./node_modules/d3-format/src/precisionFixed.js","webpack:///./node_modules/d3-geo/src/adder.js","webpack:///./node_modules/d3-geo/src/math.js","webpack:///./node_modules/d3-geo/src/noop.js","webpack:///./node_modules/d3-geo/src/area.js","webpack:///./node_modules/d3-geo/src/cartesian.js","webpack:///./node_modules/d3-geo/src/bounds.js","webpack:///./node_modules/d3-geo/src/rotation.js","webpack:///./node_modules/d3-geo/src/circle.js","webpack:///./node_modules/d3-geo/src/clip/buffer.js","webpack:///./node_modules/d3-geo/src/pointEqual.js","webpack:///./node_modules/d3-geo/src/clip/rejoin.js","webpack:///./node_modules/d3-geo/src/polygonContains.js","webpack:///./node_modules/d3-geo/src/clip/index.js","webpack:///./node_modules/d3-geo/src/clip/antimeridian.js","webpack:///./node_modules/d3-geo/src/length.js","webpack:///./node_modules/d3-geo/src/path/area.js","webpack:///./node_modules/d3-geo/src/path/context.js","webpack:///./node_modules/d3-geo/src/path/measure.js","webpack:///./node_modules/d3-geo/src/path/string.js","webpack:///./node_modules/d3-geo/src/transform.js","webpack:///./node_modules/d3-geo/src/projection/resample.js","webpack:///./node_modules/d3-geo/src/projection/index.js","webpack:///./node_modules/d3-geo/src/projection/azimuthal.js","webpack:///./node_modules/d3-geo/src/projection/azimuthalEqualArea.js","webpack:///./node_modules/d3-geo/src/projection/azimuthalEquidistant.js","webpack:///./node_modules/d3-geo/src/projection/mercator.js","webpack:///./node_modules/d3-geo/src/projection/equirectangular.js","webpack:///./node_modules/d3-geo/src/projection/conicEquidistant.js","webpack:///./node_modules/d3-geo/src/projection/equalEarth.js","webpack:///./node_modules/d3-geo/src/projection/gnomonic.js","webpack:///./node_modules/d3-geo/src/projection/naturalEarth1.js","webpack:///./node_modules/d3-geo/src/projection/orthographic.js","webpack:///./node_modules/d3-geo/src/projection/stereographic.js","webpack:///./node_modules/d3-geo/src/projection/transverseMercator.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/count.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/index.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/each.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/sum.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/sort.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/path.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/ancestors.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/descendants.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/leaves.js","webpack:///./node_modules/d3-hierarchy/src/hierarchy/links.js","webpack:///./node_modules/d3-hierarchy/src/array.js","webpack:///./node_modules/d3-hierarchy/src/treemap/round.js","webpack:///./node_modules/d3-hierarchy/src/treemap/dice.js","webpack:///./node_modules/d3-hierarchy/src/tree.js","webpack:///./node_modules/d3-hierarchy/src/treemap/slice.js","webpack:///./node_modules/d3-hierarchy/src/treemap/squarify.js","webpack:///./node_modules/d3-hierarchy/src/treemap/resquarify.js","webpack:///./node_modules/d3-polygon/src/hull.js","webpack:///./node_modules/d3-random/src/defaultSource.js","webpack:///./node_modules/d3-random/src/normal.js","webpack:///./node_modules/d3-random/src/uniform.js","webpack:///./node_modules/d3-random/src/irwinHall.js","webpack:///./node_modules/d3-random/src/logNormal.js","webpack:///./node_modules/d3-random/src/bates.js","webpack:///./node_modules/d3-random/src/exponential.js","webpack:///./node_modules/d3-scale/src/array.js","webpack:///./node_modules/d3-time/src/interval.js","webpack:///./node_modules/d3-time/src/millisecond.js","webpack:///./node_modules/d3-time/src/duration.js","webpack:///./node_modules/d3-time/src/second.js","webpack:///./node_modules/d3-time/src/minute.js","webpack:///./node_modules/d3-time/src/hour.js","webpack:///./node_modules/d3-time/src/day.js","webpack:///./node_modules/d3-time/src/week.js","webpack:///./node_modules/d3-time/src/month.js","webpack:///./node_modules/d3-time/src/year.js","webpack:///./node_modules/d3-time/src/utcMinute.js","webpack:///./node_modules/d3-time/src/utcHour.js","webpack:///./node_modules/d3-time/src/utcDay.js","webpack:///./node_modules/d3-time/src/utcWeek.js","webpack:///./node_modules/d3-time/src/utcMonth.js","webpack:///./node_modules/d3-time/src/utcYear.js","webpack:///./node_modules/d3-time-format/src/locale.js","webpack:///./node_modules/d3-time-format/src/defaultLocale.js","webpack:///./node_modules/d3-time-format/src/isoFormat.js","webpack:///./node_modules/d3-time-format/src/isoParse.js","webpack:///./node_modules/d3-shape/src/math.js","webpack:///./node_modules/d3-shape/src/constant.js","webpack:///./node_modules/d3-shape/src/curve/linear.js","webpack:///./node_modules/d3-shape/src/curve/radial.js","webpack:///./node_modules/d3-shape/src/array.js","webpack:///./node_modules/d3-shape/src/symbol/diamond.js","webpack:///./node_modules/d3-shape/src/symbol/circle.js","webpack:///./node_modules/d3-shape/src/symbol/star.js","webpack:///./node_modules/d3-shape/src/noop.js","webpack:///./node_modules/d3-shape/src/symbol/triangle.js","webpack:///./node_modules/d3-shape/src/symbol/wye.js","webpack:///./node_modules/d3-shape/src/curve/basis.js","webpack:///./node_modules/d3-shape/src/curve/basisClosed.js","webpack:///./node_modules/d3-shape/src/curve/basisOpen.js","webpack:///./node_modules/d3-shape/src/curve/bundle.js","webpack:///./node_modules/d3-shape/src/curve/cardinal.js","webpack:///./node_modules/d3-shape/src/curve/cardinalClosed.js","webpack:///./node_modules/d3-shape/src/curve/cardinalOpen.js","webpack:///./node_modules/d3-shape/src/curve/catmullRom.js","webpack:///./node_modules/d3-shape/src/curve/catmullRomClosed.js","webpack:///./node_modules/d3-shape/src/curve/catmullRomOpen.js","webpack:///./node_modules/d3-shape/src/curve/linearClosed.js","webpack:///./node_modules/d3-shape/src/curve/monotone.js","webpack:///./node_modules/d3-shape/src/curve/natural.js","webpack:///./node_modules/d3-shape/src/curve/step.js","webpack:///./node_modules/d3-voronoi/src/RedBlackTree.js","webpack:///./node_modules/d3-voronoi/src/Edge.js","webpack:///./node_modules/d3-voronoi/src/Cell.js","webpack:///./node_modules/d3-voronoi/src/Circle.js","webpack:///./node_modules/d3-voronoi/src/Beach.js","webpack:///./node_modules/d3-voronoi/src/Diagram.js","webpack:///./node_modules/d3-zoom/src/transform.js","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/InsightCvPage.ts","webpack:///./src/pages/CvSubpages/InsightCvPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/ProtectionCvPage.ts","webpack:///./src/pages/CvSubpages/ProtectionCvPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/ProtectionCvSubpages/MultipleCodePage.ts","webpack:///./src/pages/CvSubpages/ProtectionCvSubpages/MultipleCodePage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/ProtectionCvSubpages/SingleCodePage.ts","webpack:///./src/pages/CvSubpages/ProtectionCvSubpages/SingleCodePage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/SettingCvPage.ts","webpack:///./src/pages/CvSubpages/SettingCvPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/SettingCvSubpages/FormatPage.ts","webpack:///./src/pages/CvSubpages/SettingCvSubpages/FormatPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/SettingCvSubpages/StylePage.ts","webpack:///./src/pages/CvSubpages/SettingCvSubpages/StylePage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/CvSubpages/ViewCvPage.ts","webpack:///./src/pages/CvSubpages/ViewCvPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/DashboardComponents/DashboardCurriculumComponent.ts","webpack:///./src/pages/DashboardComponents/DashboardCurriculumComponent.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/DashboardPage.ts","webpack:///./src/pages/DashboardPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/IndexPage.ts","webpack:///./src/pages/IndexPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/LoginPage.ts","webpack:///./src/pages/LoginPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/LogoutPage.ts","webpack:///./src/pages/LogoutPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/RegistrationPage.ts","webpack:///./src/pages/RegistrationPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/UserPage.ts","webpack:///./src/pages/UserPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/UserSubpages/AccountPage.ts","webpack:///./src/pages/UserSubpages/AccountPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/UserSubpages/EmailPage.ts","webpack:///./src/pages/UserSubpages/EmailPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/UserSubpages/NotificationsPage.ts","webpack:///./src/pages/UserSubpages/NotificationsPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/UserSubpages/ProfilePage.ts","webpack:///./src/pages/UserSubpages/ProfilePage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/UserSubpages/SecurityPage.ts","webpack:///./src/pages/UserSubpages/SecurityPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/ViewPage.ts","webpack:///./src/pages/ViewPage.html","webpack:///src/home/jadev/Documenti/Profile/src/pages/_404Page.ts","webpack:///./src/pages/_404Page.html","webpack:///src/home/jadev/Documenti/Profile/src/sections/FooterSection.ts","webpack:///./src/sections/FooterSection.html","webpack:///src/home/jadev/Documenti/Profile/src/sections/NavbarSection.ts","webpack:///./src/sections/NavbarSection.html"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_class","_class2","_class3","_class5","_class7","_class8","_class9","_class10","_class12","_temp","_class13","_class14","_temp2","_createClass","defineProperties","target","props","length","descriptor","configurable","writable","Constructor","protoProps","staticProps","_typeof","iterator","obj","constructor","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","TypeError","setPrototypeOf","__proto__","targetContext","sourceContext","map","camelCase","result","charAt","toLowerCase","slice","replace","_","x","toUpperCase","createOverrideContext","bindingContext","parentOverrideContext","getContextFor","scope","ancestor","oc","overrideContext","slotNames","versionSlotNames","lastSlot","ensureEnoughSlotNames","currentSlot","ii","addObserver","observer","observerSlots","undefined","this","_observerSlots","subscribe","_version","observeProperty","propertyName","observerLocator","getObserver","observeArray","array","getArrayObserver","unobserve","all","unsubscribe","connectable","queue","queued","nextId","minimumImmediate","frameBudget","isFlushRequested","immediate","flush","animationFrameStart","binding","__connectQueueId","connect","performance","now","splice","requestAnimationFrame","enqueueBindingConnect","id","push","addSubscriber","context","callable","hasSubscriber","_context0","_context1","_context2","_contextsRest","_callablesRest","_callable2","_callable1","_callable0","removeSubscriber","callables","contexts","arrayPool1","arrayPool2","poolUtilization","callSubscribers","newValue","oldValue","context0","callable0","context1","callable1","context2","callable2","contextsRest","callablesRest","poolIndex","hasSubscribers","index","subscriberCollection","ExpressionObserver","_dec","_dec2","expression","lookupFunctions","getValue","evaluate","setValue","assign","_this","arguments","Function","dispose","toNumber","newSplice","removed","addedCount","ArraySplice","calcEditDistances","current","currentStart","currentEnd","old","oldStart","oldEnd","rowCount","columnCount","distances","Array","north","west","j","_i","_j","equals","spliceOperationsFromEditDistances","edits","northWest","min","reverse","calcSplices","prefixCount","suffixCount","minLength","Math","sharedPrefix","sharedSuffix","_splice","ops","splices","oldIndex","searchLength","index1","index2","count","calculateSplices","previous","currentValue","previousValue","arraySplice","mergeSplice","start1","end1","start2","end2","inserted","insertionOffset","intersectCount","deleteCount","currentRemoved","prepend","apply","append","offset","projectArraySplices","changeRecords","record","type","console","error","JSON","stringify","createInitialSplices","forEach","concat","ModifyCollectionObserver","_dec3","taskQueue","collection","oldCollection","lengthPropertyName","Map","Set","addChangeRecord","changeRecord","lengthObserver","arrayLength","queueMicroTask","flushChangeRecords","reset","getLengthObserver","CollectionLengthObserver","records","entries","size","keys","item","next","done","newRecord","getChangeRecords","_dec4","arrayProto","pop","shift","sort","unshift","__au_patched__","warn","Reflect","notEmpty","methodCallResult","__array_observer__","oldArray","ModifyArrayObserver","_ModifyCollectionObse","for","Expression","isAssignable","args","Error","toString","FEATURE_NO_UNPARSER","_Unparser","unparse","BindingBehavior","_Expression","_this3","accept","visitor","visitBindingBehavior","behavior","bindingBehaviors","behaviorKey","evalList","unbind","ValueConverter","_Expression2","_this4","allArgs","converter","valueConverters","toView","fromView","visitValueConverter","expressions","signals","connectBindingToSignal","Assign","_Expression3","_this5","vistor","visitAssign","Conditional","_Expression4","condition","yes","no","_this6","visitConditional","AccessThis","_Expression5","_this7","visitAccessThis","AccessScope","_Expression6","_this8","visitAccessScope","AccessMember","_Expression7","_this9","instance","visitAccessMember","AccessKeyed","_Expression8","_this10","isArray","parseInt","getKeyed","setKeyed","visitAccessKeyed","CallScope","_Expression9","_this11","mustEvaluate","func","getFunction","visitCallScope","CallMember","_Expression10","_this12","visitCallMember","CallFunction","_Expression11","_this13","visitCallFunction","Binary","_Expression12","operation","left","right","_this14","a","b","autoConvertAdd","visitBinary","Unary","_Expression13","_this15","visitPrefix","LiteralPrimitive","_Expression14","_this16","visitLiteralPrimitive","LiteralString","_Expression15","_this17","visitLiteralString","LiteralTemplate","_Expression16","cooked","raw","tag","_this18","tagged","contextType","getScopeContext","getObjectContext","results","_i2","String","visitLiteralTemplate","LiteralArray","_Expression17","elements","_this19","visitLiteralArray","LiteralObject","_Expression18","values","_this20","visitLiteralObject","list","mustExist","Unparser","buffer","join","write","text","writeArgs","conditional","access","prefix","charCodeAt","binary","literal","escaped","ExpressionCloner","cloneExpressionArray","clonedArray","visitUnary","unary","bindingMode","oneTime","oneWay","twoWay","Parser","cache","parse","src","ParserImplementation","parseBindingBehavior","fromCharCode","idx","start","len","tkn","T$EOF","val","ch","nextToken","T$ExpressionTerminal","err","parseValueConverter","opt","T$Ampersand","parseVariadicArgs","parseExpression","T$Bar","T$Colon","exprStart","parseConditional","T$Eq","parseBinary","T$Question","expect","minPrecedence","parseLeftHandSide","T$BinaryOp","opToken","T$Precedence","TokenValues","T$TokenMask","primary","T$Plus","T$Minus","T$Bang","T$TypeofKeyword","T$VoidKeyword","op","T$ParentScope","T$Period","T$AccessScopeTerminal","C$Ancestor","C$ShorthandProp","C$This","T$Identifier","C$Scope","T$ThisScope","T$LParen","T$RParen","C$Primary","T$LBracket","_elements","T$RBracket","T$Comma","T$LBrace","T$RBrace","T$IdentifierOrKeyword","T$Literal","T$StringLiteral","T$TemplateTail","T$TemplateContinuation","parseTemplate","T$NumericLiteral","T$NullKeyword","T$UndefinedKeyword","T$TrueKeyword","T$FalseKeyword","T$MemberOrCallExpression","C$Member","C$Keyed","C$Call","C$Tagged","scanTemplateTail","scanIdentifier","CharScanners","AsciiIdParts","has","IdParts","KeywordLookup","scanNumber","isFloat","pow","_start","parseFloat","scanString","quote","marker","_unescaped","hex","test","unescape","last","unescaped","scanTemplate","tail","message","column","token","code","T$BarBar","T$AmpersandAmpersand","T$Caret","T$EqEq","T$BangEq","T$EqEqEq","T$BangEqEq","T$Lt","T$Gt","T$LtEq","T$GtEq","T$InKeyword","T$InstanceOfKeyword","T$Star","T$Percent","T$Slash","true","null","false","$this","$parent","in","instanceof","typeof","void","codes","decompress","lookup","set","compressed","rangeCount","end","add","returnToken","unexpectedCharacter","Uint8Array","ci","mapProto","ModifyMapObserver","_ModifyCollectionObse2","__map_observer__","proto","delete","clear","hasValue","emLogger","findOriginalEventTarget","event","path","deepPath","stopPropagation","standardStopPropagation","propagationStopped","handleCapturedEvent","orderedCallbacks","capturedCallbacks","callback","parentNode","orderedCallback","handleEvent","CapturedHandlerEntry","eventName","increment","addEventListener","decrement","removeEventListener","handleDelegatedEvent","delegatedCallbacks","DelegateHandlerEntry","DelegationEntryHandler","entry","targetEvent","EventHandler","DefaultEventStrategy","delegatedHandlers","capturedHandlers","strategy","disposable","handlerEntry","delegationStrategy","bubbling","previousCallback","capturing","none","EventManager","elementHandlerLookup","eventStrategyLookup","registerElementConfig","tagName","properties","checked","files","scrollTop","scrollLeft","defaultEventStrategy","config","registerEventStrategy","getElementHandler","EventSubscriber","callbackOrListener","delegate","events","element","handler","DirtyChecker","tracked","checkDelay","addProperty","scheduleDirtyCheck","removeProperty","indexOf","_this22","setTimeout","check","isDirty","DirtyCheckProperty","_dec5","dirtyChecker","logger","propertyAccessor","PrimitiveObserver","primitive","doNotCache","SetterObserver","_dec6","observing","getterValue","setterValue","convertProperty","propertyIsEnumerable","XLinkAttributeObserver","attributeName","getAttributeNS","setAttributeNS","nodeName","dataAttributeAccessor","getAttribute","removeAttribute","setAttribute","DataAttributeObserver","StyleObserver","styles","version","style","cssText","_setProperty","priority","setProperty","rx","pair","exec","ValueAttributeObserver","_dec7","notify","CheckedObserver","_dec8","initialSync","arrayObserver","synchronizeElement","valueObserver","__observers__","model","elementValue","isRadio","matcher","findIndex","synchronizeValue","SelectValueObserver","_dec9","multiple","synchronizeOptions","options","_loop","option","optionValue","selected","_this23","_option","_ret2","_loop2","_loop3","v","_this24","domObserver","createMutationObserver","observe","childList","subtree","characterData","disconnect","ClassObserver","nameIndex","names","split","classList","remove","computedFrom","_len","rest","_key","dependencies","ComputedExpression","_Expression19","_this25","svgElements","svgPresentationElements","svgPresentationAttributes","svgAnalyzer","FEATURE_NO_SVG","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","foreignObject","g","glyph","glyphRef","hkern","image","line","linearGradient","mask","metadata","mpath","pattern","polygon","polyline","radialGradient","rect","script","stop","svg","switch","symbol","textPath","title","tref","tspan","use","view","vkern","createElement","html","div","innerHTML","firstChild","SVGAnalyzer","firstElementChild","altglyph","altglyphdef","altglyphitem","glyphref","isStandardSvgAttribute","presentationElements","presentationAttributes","_class11","ObserverLocator","eventManager","parser","adapters","observersLookup","createPropertyObserver","getOrCreateObserversLookup","createObserversLookup","addAdapter","adapter","getAdapterObserver","xlinkResult","Element","SVGElement","hasDeclaredDependencies","getPropertyDescriptor","createComputedObserver","existingGetterOrSetter","adapterObserver","getMapObserver","getSetObserver","getAccessor","_getArrayObserver","_getMapObserver","ModifySetObserver","_getSetObserver","inject","BindingExpression","ObjectObservationAdapter","targetProperty","sourceExpression","attribute","discrete","createBinding","Binding","_dec10","updateTarget","targetObserver","updateSource","source","isBound","method","CallExpression","Call","callSource","$event","prop","_this26","ValueConverterResource","convention","endsWith","substring","initialize","container","register","registry","registerValueConverter","load","valueConverter","nameOrTarget","define","resource","BindingBehaviorResource","registerBindingBehavior","bindingBehavior","ListenerExpression","preventDefault","Listener","_handler","getAU","au","NameExpression","apiName","NameBinder","locateAPI","controller","viewModel","LookupFunctions","BindingEngine","createBindingExpression","propertyObserver","_this27","collectionObserver","_this28","expressionObserver","registerAdapter","setProto","_ModifyCollectionObse3","__set_observer__","oldSize","from","signalBindings","hookCallback","some","hooks","input","isObject","isUndefined","isNumber","isDate","Date","arr","fn","res","hasOwnProp","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","bigHour","isFrozen","createInvalid","NaN","fun","momentProperties","copyConfig","to","_isAMomentObject","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","updateOffset","isMoment","absFloor","number","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","lengthDiff","abs","diffs","msg","suppressDeprecationWarnings","deprecate","firstTime","deprecationHandler","arg","stack","deprecations","deprecateSimple","isFunction","mergeConfigs","parentConfig","childConfig","Locale","aliases","addUnitAlias","unit","shorthand","lowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","ordinal","localeData","formatMoment","expandFormat","match","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","year","isLeapYear","y","parseTwoDigitYear","getSetYear","makeGetSet","keepTime","set$1","month","date","daysInMonth","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","defaultLocaleMonthsShort","handleStrictParse","monthName","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createDate","h","M","ms","getFullYear","setFullYear","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","day","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","hh","dd","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","e","data","getLocale","defineLocale","abbr","_config","parentLocale","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","defaults","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","_useUTC","getUTCMonth","getUTCDate","getMonth","getDate","currentDateArray","w","weekYear","temp","weekdayOverflow","GG","W","E","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","string","configFromStringAndFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","monthStr","dayStr","hourStr","minuteStr","secondStr","parsedArray","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","second","millisecond","configFromObject","configFromInput","isUTC","getOwnPropertyNames","k","isObjectEmpty","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","separator","utcOffset","sign","offsetFromString","chunkOffset","matches","parts","cloneWithOffset","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","setWeekAll","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toArray","toObject","toDate","toISOString","keepOffset","inspect","zone","isLocal","suffix","toJSON","unix","creationData","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","_calendar","_longDateFormat","formatUpper","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","isFormat","_monthsShort","_monthsParseExact","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","_weekdaysParseExact","_fullWeekdaysParse","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","substituteTimeAgo","abs$1","toISOString$1","Y","D","toFixed","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","factory","__decorate","decorators","getOwnPropertyDescriptor","decorate","__metadata","metadataKey","metadataValue","autoinject","potentialTarget","deco","getOwn","paramTypes","_emptyParameters","resolver","isStrategy","actual","expected","state","StrategyResolver","singleton","invoke","Number","Lazy","Lazy_1","of","Optional","All","All_1","getAll","checkParent","_checkParent","Optional_1","hasResolver","Boolean","Parent","Parent_1","parent","Factory","Factory_1","getResolver","NewInstance","dynamicDependencies","asKey","NewInstance_1","dependency","registerInstance","validateKey","freeze","registration","invoker","resolverDecorates","decorates","InvocationHandler","invokeWithDynamicDependencies","classInvoker","Type","deps","instances","dep","construct","staticDependencies","Container","configuration","_configuration","_onHandlerCreated","onHandlerCreated","_handlers","handlers","_resolvers","root","makeGlobal","setHandlerCreatedCallback","registerResolver","registerSingleton","registerTransient","registerHandler","registerAlias","originalKey","aliasKey","resolver$$1","allResolvers","autoRegister","autoRegisterAll","fns","unregister","_get","createChild","child","_createInvocationHandler","f","ctor","getPrototypeOf","FactoryInvoker","TransientRegistration","existingResolver","SingletonRegistration","keyOrRegisterInChild","registerInChild","_registerInChild","targetContainer","moment","suffixes","1","5","8","70","80","2","7","20","50","3","4","100","6","9","10","30","60","90","weekdaysParseExact","relativeTimeWithPlural","num","forms","standalone","lastDigit","last2Digits","symbolMap","numberMap","relativeTimeWithMutation","mutationTable","softMutation","mutation","lastNumber","translate","monthsParseExact","ll","lll","llll","plural","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","logLevel","info","debug","loggers","appenders","globalDefaultLevel","standardLevels","isStandardLevel","level","appendArgs","logFactory","_appenders$i","logFactoryCustom","appender","connectLoggers","Logger","_level","getLogger","addAppender","removeAppender","getAppenders","clearAppenders","_level2","disconnectLoggers","addCustomLevel","removeCustomLevel","setLevel","getLevel","cached","isDebugEnabled","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","errorManager","setStyle","colors","blue","white","setDefaultPrefix","currentUserChanged","_db","auth","success","currentUser","onAuthStateChanged","user","loggedStatusChanged","getCurrentUser","uid","loginWithUsernameAndPassword","email","password","Promise","ok","ko","signInWithEmailAndPassword","then","db","appendLog","dateTime","subject","security","catch","logout","signOut","createUserWithEmailAndPassword","updateProfile","profile","displayName","photoURL","updateEmail","oldEmail","newEmail","reAuthenticateUser","updatePassword","oldPassword","newPassword","sendPasswordResetEmail","sendEmailVerification","deleteUser","cred","EmailAuthProvider","credential","reauthenticateAndRetrieveDataWithCredential","Authentication","monthsShortDot","toArrayOfObjects","validateEmail","setToDefaultValues","def","strictly","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","Functions","maxPosition","position","minPosition","nextPosition","previousPosition","toDatabase","log","isSecurity","toLocaleString","getTagCategories","cats","tags","trim","lastIndexOf","includes","defaultElement","idCategory","description","defaultCategory","idCurriculum","defaultCurriculum","defaultCurriculumStyle","textFamily","textColorPrimary","textColorSecondary","textColorMore","textSizeRatio","iconsEnabled","iconsPack","layoutProportions","layourBorder","tagsStyle","tagsShape","tagsSize","str","weekEndings","relativeToFile","file","fileParts","nameParts","normalizedBaseParts","ary","part","trimDots","path1","path2","schemeMatch","scheme","urlPrefix","trailingSlash","url1","url2","url3","_ii","encode","encodeURIComponent","encodeKey","buildParam","traditional","arrayKey","buildQueryString","params","pairs","processScalarParam","existedParam","parseComplexParam","queryParams","currentParams","keysLastIndex","prevValue","parseQueryString","queryString","query","decodeURIComponent","0","40","isUpper","window","eifelerRegelAppliesToNumber","translateSingular","special","relativeTimeWithSingular","translator","words","correctGrammaticalCase","wordKey","relativeTimeMr","wrappedWellKnownSymbolModule","NAME","monthsNominative","monthsSubjective","makeRequestFlushFromTimer","timeoutHandle","handleFlushTimer","intervalHandle","setInterval","clearTimeout","clearInterval","TaskQueue","node","flushing","longStacks","microTaskQueue","microTaskQueueCapacity","mutationObserver","requestFlushMicroTaskQueue","flushMicroTaskQueue","createTextNode","requestFlushTaskQueue","flushTaskQueue","_flushQueue","capacity","task","scan","newLength","filterFlushStack","onError","prepareQueueStack","queueTask","MAX_VALUE","filterQueueStack","captureStack","AggregateError","innerError","skipIfAlreadyAggregate","FEATURE","PLATFORM","noop","eachModule","moduleName","_moduleName","_x","global","DOM","isInitialized","initializePAL","pd","store","NATIVE_SYMBOL","12","13","numbersNouns","numberNoun","hundred","ten","one","word","numberAsNoun","processHoursFunction","TemplateDependency","TemplateRegistryEntry","address","templateIsLoaded","factoryIsReady","resources","onReady","_template","_factory","addDependency","finalSrc","requires","content","querySelectorAll","removeChild","Loader","templateRegistry","normalizeSync","relativeTo","normalize","loadModule","loadAllModules","ids","loadTemplate","url","loadText","applyPluginToUrl","pluginName","addPlugin","implementation","getOrCreateTemplateRegistryEntry","adjacency_graphs","qwerty","\"","dvorak","keypad","mac_keypad","DEFAULT_HOST","DEFAULT_MAX_OPERATION_RETRY_TIME","DEFAULT_MAX_UPLOAD_RETRY_TIME","MIN_SAFE_INTEGER","FirebaseStorageError","code_","prependCode","message_","serverResponse_","name_","codeProp","codeEquals","serverResponseProp","setServerResponseProp","serverResponse","Code","UNKNOWN","OBJECT_NOT_FOUND","BUCKET_NOT_FOUND","PROJECT_NOT_FOUND","QUOTA_EXCEEDED","UNAUTHENTICATED","UNAUTHORIZED","RETRY_LIMIT_EXCEEDED","INVALID_CHECKSUM","CANCELED","INVALID_EVENT_NAME","INVALID_URL","INVALID_DEFAULT_BUCKET","NO_DEFAULT_BUCKET","CANNOT_SLICE_BLOB","SERVER_FILE_WRONG_SIZE","NO_DOWNLOAD_URL","INVALID_ARGUMENT","INVALID_ARGUMENT_COUNT","APP_DELETED","INVALID_ROOT_OPERATION","INVALID_FORMAT","INTERNAL_ERROR","unknown","canceled","cannotSliceBlob","noDownloadURL","invalidArgument","fnName","appDeleted","internalError","StringFormat","RAW","BASE64","BASE64URL","DATA_URL","formatValidator","stringFormat","StringData","opt_contentType","contentType","dataFromString","utf8Bytes_","base64Bytes_","DataURLParts","base64","decoded","percentEncodedBytes_","dataURLBytes_","dataURLContentType_","hasMinus","hasUnder","hasPlus","hasSlash","bytes","atob","dataURL","middle","ErrorCode","TaskEvent","STATE_CHANGED","InternalTaskState","RUNNING","PAUSING","PAUSED","SUCCESS","CANCELING","ERROR","TaskState","taskStateFromInternalTaskState","contains","make","resolve","isDef","isJustDef","isNonNullObject","isString","isNativeBlob","isNativeBlobDefined","Blob","NetworkXhrIo","sent_","xhr_","XMLHttpRequest","errorCode_","NO_ERROR","sendPromise_","reject","ABORT","NETWORK_ERROR","send","opt_body","opt_headers","open","setRequestHeader","getErrorCode","getStatus","status","getResponseText","responseText","abort","getResponseHeader","header","addUploadProgressListener","listener","upload","removeUploadProgressListener","XhrIoPool","createXhrIo","jsonObjectOrNull","Location","bucket","path_","fullServerUrl","bucketOnlyServerUrl","makeFromBucketSpec","bucketString","bucketLocation","makeFromUrl","location","gsRegex","hostRegex","groups","indices","postModify","loc","group","captures","bucketValue","pathValue","invalidUrl","childPath","canonicalChildPath","component","lastComponent","makeUrl","urlPart","makeQueryString","queryPart","nextPart","noXform_","Mapping","server","opt_local","opt_writable","opt_xform","xform","mappings_","getMappings","mappings","nameMapping","fullPath","xformPath","sizeMapping","fromResource","authWrapper","mapping","makeStorageReference","addRef","fromResourceString","resourceString","toResourceString","metadataValidator","validate","specs","passed","minArgs","maxArgs","optional","argMin","argMax","real","countPart","validator","ArgSpec","opt_optional","stringSpec","opt_validator","stringValidator","v1","v2","uploadDataSpec","ArrayBuffer","metadataSpec","nonNegativeNumberSpec","looseObjectSpec","nullFunctionSpec","getBlobBuilder","BlobBuilder","WebKitBlobBuilder","getBlob","var_args","bb","FbsBlob","opt_elideCopy","blobType","data_","byteLength","size_","type_","startByte","endByte","sliced","blob","webkitSlice","mozSlice","sliceBlob","blobby","uint8Arrays","finalLength_1","merged_1","index_1","uploadData","contains$1","elem","RequestInfo","timeout","urlParams","headers","body","errorHandler","progressCallback","successCodes","additionalRetryCodes","handlerCheck","cndn","metadataHandler","xhr","downloadUrlHandler","alt","downloadUrlFromResourceString","sharedErrorHandler","newErr","objectErrorHandler","shared","getMetadata","maxOperationRetryTime","requestInfo","getDownloadUrl","updateMetadata","deleteObject","metadataForUpload_","opt_metadata","determineContentType_","ResumableUploadStatus","finalized","checkResumeHeader_","opt_allowed","continueResumableUpload","chunkSize","opt_status","opt_progressCallback","bytesLeft","bytesToUpload","maxUploadRetryTime","uploadStatus","newCurrent","Observer","nextOrObserver","opt_error","opt_complete","complete","UploadTaskSnapshot","bytesTransferred","totalBytes","ref","argsToForward","UploadTask","transferred_","needToFetchStatus_","needToFetchMetadata_","observers_","error_","uploadUrl_","request_","chunkMultiplier_","resolve_","reject_","ref_","authWrapper_","location_","blob_","metadata_","resumable_","shouldDoResumable_","state_","errorHandler_","completeTransitions_","transition_","metadataErrorHandler_","promise_","start_","makeProgressCallback_","sizeBefore","loaded","updateProgress_","createResumable_","fetchStatus_","fetchMetadata_","continueUpload_","oneShotUpload_","resolveToken_","getAuthToken","authToken","createResumableUpload","createRequest","makeRequest","getPromise","sizeString","getResumableUploadStatus","statusRequest","uploadRequest","newStatus","increaseMultiplier_","metadataRequest","boundary","random","genBoundary","preBlobPart","postBlobPart","multipartUpload","multipartRequest","transferred","notifyObservers_","cancel","wasPaused","externalState","on","completed","typeValidator","_p","nextOrObserverMessage","nextValidator","observerValidator","nextOrObserverValidator","makeBinder","addObserver_","removeObserver_","binderNextOrObserverValidator","binderSpecs","typeOnly","onFulfilled","onRejected","notifyObserver_","arraylike","finishPromise_","triggered","snapshot","resume","valid","pause","Reference","newRef","newPath","service","put","throwIfRoot_","putString","getDownloadURL","invalidRootOperation","FailRequest","appDelete","RequestMap","map_","id_","addRequest","unmap","AuthWrapper","app","maker","requestMaker","pool","bucket_","deleted_","app_","extractBucket_","storageRefMaker_","requestMaker_","pool_","service_","maxOperationRetryTime_","maxUploadRetryTime_","requestMap_","INTERNAL","getToken","response","accessToken","_error","request","deleteApp","setMaxUploadRetryTime","setMaxOperationRetryTime","NetworkRequest","errorCallback","pendingXhr_","backoffId_","canceled_","appDelete_","url_","method_","headers_","body_","successCodes_","additionalRetryCodes_","callback_","errorCallback_","progressCallback_","timeout_","backoffDone","requestWentThrough","wasSuccessCode","RequestEndStatus","waitSeconds","timeoutId","hitTimeout","cancelState","triggeredCallback","triggerCallback","callWithDelay","millis","waitMillis","stopped","wasTimeout","backoffCallback","progressListener","hitServer","isRetryStatusCode_","successCode","wasCanceled","progressEvent","lengthComputable","isFiveHundredCode","isExtraRetryCode","isRequestSpecificRetryCode","opt_canceled","addAuthHeader_","SDK_VERSION","addVersionHeader_","namespaceExports","Service","authWrapperBucket","internals_","ServiceInternals","refFromURL","STORAGE_TYPE","unused","opt_url","Storage","registerService","default","noIcon","icons","ExternalResources","orange","_auth","storage","uploadProfilePicture","callbackOnProgress","callbackOnCompleted","LocalResources","uploadTask","downloadURL","Storage_","require","open_tag","close_tag","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","_hasOwnProperty","isValidEntityCode","fromCodePoint","surrogate1","surrogate2","UNESCAPE_MD_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","entities","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","REGEXP_ESCAPE_RE","UNICODE_PUNCT_RE","lib","mdurl","ucmicro","unescapeMd","unescapeAll","entity","replaceEntityPattern","escapeHtml","arrayReplaceAt","newElements","isSpace","isWhiteSpace","isMdAsciiPunct","isPunctChar","escapeRE","normalizeReference","parseLinkLabel","parseLinkDestination","parseLinkTitle","lines","disableNested","found","prevPos","labelEnd","posMax","oldPos","md","inline","skipToken","utils","helpers","Renderer","ParserCore","ParserBlock","ParserInline","LinkifyIt","punycode","zero","commonmark","BAD_PROTO_RE","GOOD_DATA_RE","validateLink","RECODE_HOSTNAME_FOR","normalizeLink","parsed","hostname","protocol","toASCII","er","normalizeLinkText","toUnicode","decode","MarkdownIt","presetName","block","core","renderer","linkify","configure","presets","components","rules","ruler","enableOnly","rules2","ruler2","enable","ignoreInvalid","chain","missed","disable","plugin","env","State","process","render","parseInline","inlineMode","renderInline","Ruler","_rules","tokenize","startLine","endLine","getRules","hasEmptyLines","maxNesting","skipEmptyLines","sCount","blkIndent","tight","isEmpty","outTokens","lineMax","11","Core","_rules2","postProcess","pending","pushPending","xhtmlOut","breaks","langPrefix","typographer","quotes","highlight","14","15","16","default_rules","code_inline","slf","renderAttrs","code_block","fence","highlighted","tmpAttrs","tmpToken","langName","attrIndex","attrs","renderInlineAsText","children","renderToken","hardbreak","softbreak","html_block","html_inline","needLf","hidden","nesting","17","__rules__","__cache__","__find__","__compile__","chains","rule","enabled","altName","at","before","beforeName","ruleName","after","afterName","chainName","18","silent","adjustTab","initial","lastLineEmpty","nextLine","oldBMarks","oldBSCount","oldIndent","oldParentType","oldSCount","oldTShift","spaceAfterMarker","terminate","terminatorRules","wasOutdented","oldLineMax","bMarks","tShift","eMarks","bsCount","parentType","markup","19","getLines","mem","haveEndMarker","skipChars","skipSpaces","21","skipSpacesBack","skipCharsBack","22","cnt","23","block_names","HTML_SEQUENCES","lineText","24","25","skipBulletListMarker","skipOrderedListMarker","contentStart","indent","indentAfterMarker","isOrdered","itemLines","listLines","listTokIdx","markerCharCode","markerValue","oldLIndent","oldTight","posAfterMarker","prevEmptyEnd","isTerminatingParagraph","markTightParagraphs","26","27","_endLine","destEndPos","destEndLineNo","href","label","references","28","Token","StateBlock","indent_found","ddIndent","begin","keepLastLF","lineIndent","first","lineStart","29","getLine","escapedSplit","escapes","lastPos","backTicked","lastBackTick","columns","aligns","tableLines","tbodyLines","31","tok","32","isLinkClose","currentToken","nodes","ln","htmlLinkLevel","fullUrl","urlText","links","blockTokens","pretest","schema","33","NEWLINES_RE","NULL_RE","34","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","tm","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","blkIdx","35","QUOTE_TEST_RE","QUOTE_RE","APOSTROPHE","replaceAt","process_inlines","thisLevel","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","canOpen","canClose","isSingle","openQuote","closeQuote","OUTER","single","36","StateCore","37","EMAIL_RE","AUTOLINK_RE","linkMatch","emailMatch","38","matchStart","matchEnd","39","lastDelim","currDelim","delimiters","close","jump","scanned","scanDelims","can_open","can_close","startDelim","endDelim","isStrong","41","DIGITAL_RE","NAMED_RE","42","ESCAPED","43","lc","isLetter","44","labelStart","45","parseReference","46","pmax","47","StateInline","pendingLevel","canSplitWord","left_flanking","right_flanking","48","loneMarkers","49","isTerminatorChar","curr","51","meta","attrPush","attrData","attrSet","attrGet","attrJoin","52","53","defaultOptions","fuzzyLink","fuzzyEmail","fuzzyIP","defaultSchemas","re","http","src_auth","src_host_port_strict","src_path","no_http","src_domain","src_domain_root","src_port","src_host_terminator","mailto","src_email_name","src_host_strict","tlds_2ch_src_re","tlds_default","compile","__opts__","tlds","__tlds__","untpl","tpl","src_tlds","onCompile","__tlds_replaced__","src_xn","email_fuzzy","tpl_email_fuzzy","link_fuzzy","tpl_link_fuzzy","link_no_ip_fuzzy","tpl_link_no_ip_fuzzy","host_fuzzy_test","tpl_host_fuzzy_test","schemaError","__compiled__","__schemas__","compiled","link","isRegExp","createValidator","slist","schema_test","src_ZPCc","schema_search","__index__","__text_cache__","resetScanCache","Match","__last_index__","__schema__","createMatch","schemas","reduce","acc","definition","ml","me","tld_pos","testSchemaAt","search","keepOld","el","54","opts","src_Any","src_Cc","src_Z","src_P","src_ZCc","src_pseudo_letter","src_ip4","src_host","tpl_host_fuzzy","tpl_host_no_ip_fuzzy","tpl_host_fuzzy_strict","tpl_host_port_fuzzy_strict","tpl_host_port_no_ip_fuzzy_strict","55","decodeCache","exclude","defaultChars","getDecodeCache","seq","b1","b2","b3","b4","chr","componentChars","56","encodeCache","keepEscaped","nextCode","getEncodeCache","57","slashes","port","pathname","hash","58","59","Url","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","slashesDenoteHost","lowerProto","hec","simplePath","atSign","hostEnd","host","parseHost","ipv6Hostname","hostparts","newpart","validParts","notHost","bit","qm","freeExports","nodeType","freeModule","freeGlobal","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexPunycode","regexNonASCII","regexSeparators","errors","baseMinusTMin","stringFromCharCode","RangeError","mapDomain","ucs2decode","extra","counter","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","basic","oldi","baseMinusT","codePoint","inputLength","bias","handledCPCount","basicLength","q","handledCPCountPlusOne","qMinusT","61","62","63","64","65","Any","Cc","Cf","P","Z","66","67","emojies_defs","emojies_shortcuts","emoji_html","emoji_replace","normalize_opts","shortcuts","emoji","scanRE","replaceRE","patternsConfig","leftDelimiter","rightDelimiter","allowedAttributes","isArrayOfObjects","childTests","every","tt","isArrayOfFunctions","options_","patterns","tests","transform","it","aa","ba","ca","ea","fa","ha","ia","ja","ka","la","ma","na","oa","pa","qa","pb","gd","ra","$goog_Thenable","captureStackTrace","sa","ta","ua","va","wa","ya","xa","za","Aa","Ba","Da","Ea","Ha","Ia","Ca","Ja","Ka","Ua","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Va","navigator","Wa","userAgent","B","Xa","Ya","Za","eb","hb","$a","ab","cb","gb","kb","setImmediate","Window","MessageChannel","postMessage","document","display","documentElement","appendChild","contentWindow","origin","port1","onmessage","port2","xb","onreadystatechange","fb","ib","jb","C","lb","mb","nb","ob","qb","rb","sb","tb","ub","wb","Eb","reason","yb","Cb","Pc","Qc","Gb","Db","Yb","Ab","Bb","Fb","zb","Hb","Ib","Jb","Kb","Lb","Vb","Ob","Pb","Qb","Rb","Sb","Tb","Ub","documentMode","Wb","Xb","$b","Nb","Zb","Mb","ac","compatMode","bc","cc","dc","ec","F","hc","relatedTarget","button","screenY","screenX","clientY","clientX","metaKey","shiftKey","altKey","ctrlKey","pointerId","pointerType","changedTouches","srcElement","fromElement","toElement","pageX","pageY","ic","defaultPrevented","returnValue","keyCode","jc","kc","proxy","capture","mc","nc","pc","qc","rc","tc","once","uc","vc","wc","xc","yc","Bc","zc","attachEvent","Ac","addListener","removeListener","sc","G","Dc","detachEvent","Ec","Fc","Gc","H","Hc","Ic","Jc","Kc","S","Lc","U","Nc","Oc","dispatchEvent","Sc","Tc","Uc","Vc","Wc","Xc","kd","cd","Yc","I","ed","fd","decodeURI","encodeURI","hd","Zc","$c","ad","bd","Rc","jd","ld","nd","od","qd","rd","sd","td","ud","vd","wd","xd","zd","yd","Ad","Bd","Cd","Dd","Ed","Fd","Gd","Hd","Jd","Ld","getElementById","Md","className","htmlFor","Nd","cellpadding","cellspacing","colspan","frameborder","height","maxlength","nonce","role","rowspan","usemap","valign","width","Od","Qd","Pd","Rd","Sd","Ud","Td","Vd","Wd","Xd","J","Yd","Zd","de","ee","fe","screen","availHeight","availWidth","top","resizable","statusbar","toolbar","be","ge","scrollbars","noreferrer","createEvent","initMouseEvent","opener","Id","noopener","focus","ie","je","ke","readyState","ne","oe","pe","WorkerGlobalScope","importScripts","qe","ce","te","ue","K","ve","localStorage","we","setItem","removeItem","indexedDB","xe","ye","ze","Ae","Be","Ce","De","Ee","___jsl","CP","Fe","Ge","visibilityState","Ie","toUTCString","Je","onLine","connection","Oe","Me","Ne","Pe","abcd","Qe","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","N","cf","df","ef","ff","gf","hf","jf","kf","lf","mf","nf","pf","qf","continueUrl","canHandleCodeInApp","androidPackageName","androidMinimumVersion","androidInstallApp","iOSBundleId","dynamicLinkDomain","sf","tf","uf","z","wf","vf","xf","sub","provider_id","firebase","sign_in_provider","is_anonymous","yf","zf","iss","aud","exp","Af","Bf","firebaseEndpoint","secureTokenEndpoint","Df","Ef","Ff","Gf","Hf","If","Jf","Kf","Lf","Mf","Nf","Of","Pf","isNewUser","kind","rawUserInfo","providerId","login","screenName","Qf","Rf","Sf","Tf","Uf","Vf","Xf","pendingToken","requestUri","$f","signInMethod","ag","idToken","oauthToken","oauthTokenSecret","bg","id_token","access_token","secret","oauth_token_secret","postBody","cg","oauthIdToken","oauthAccessToken","dg","isOAuthProvider","eg","O","fg","hg","ig","jg","kg","lg","mg","ng","og","EMAIL_LINK_SIGN_IN_METHOD","EMAIL_PASSWORD_SIGN_IN_METHOD","tg","ug","vg","wg","Fa","$","Ag","verificationId","verificationCode","temporaryProof","phoneNumber","xg","sessionInfo","Bg","Dg","Eg","rawNonce","Fg","Gg","Hg","eventId","urlResponse","sessionId","Ig","Wf","Yf","Zf","pg","oobCode","qg","rg","sg","PROVIDER_ID","yg","zg","verify","yi","Cg","recaptchaToken","PHONE_SIGN_IN_METHOD","getUid","Pg","Jg","Kg","Lg","Mg","Ng","Og","Qg","Rg","ActiveXObject","Sg","Tg","XDomainRequest","responseType","statusText","onload","fc","onerror","onprogress","gc","ontimeout","Ug","Vg","getAllResponseHeaders","Xg","Yg","Wg","Zg","$g","ah","bh","dh","eh","fh","gh","ih","jh","Headers","mh","read","lh","kh","nh","A","oh","credentials","fetch","Request","arrayBuffer","ReadableStream","getReader","TextDecoder","stream","ph","qh","rh","sh","th","Mc","Ga","FormData","withCredentials","uh","vh","wh","xh","yh","zh","Ah","Ch","Dh","Gh","Hh","Fh","Ih","Kh","Lh","Mh","Nh","Eh","getResponse","mozResponseArrayBuffer","Oh","Ph","Qh","Rh","Sh","attributes","charset","querySelector","Kd","getElementsByTagName","Th","Uh","Vh","secureTokenTimeout","Wh","secureTokenHeaders","Xh","firebaseTimeout","Yh","firebaseHeaders","Zh","$h","ai","bi","ae","gapi","client","fi","Jh","ei","di","Bh","ji","ki","qi","ri","setApiKey","setToken","authType","si","ti","ui","photoUrl","Ci","Di","Ei","needConfirmation","errorMessage","Fi","returnIdpCredential","Gi","Hi","autoCreate","Ii","Ji","deleteAttribute","requestType","vi","wi","xi","zi","Ki","Li","Mi","endpoint","da","Ni","R","mi","Oi","T","Bi","deleteProvider","Pi","pi","vb","Qi","recaptchaSiteKey","Ri","USER_NOT_FOUND","Se","returnSecureToken","hi","keyInvalid","ipRefererBlocked","INVALID_CUSTOM_TOKEN","CREDENTIAL_MISMATCH","MISSING_CUSTOM_TOKEN","INVALID_IDENTIFIER","MISSING_CONTINUE_URI","INVALID_EMAIL","INVALID_PASSWORD","USER_DISABLED","MISSING_PASSWORD","EMAIL_EXISTS","PASSWORD_LOGIN_DISABLED","INVALID_IDP_RESPONSE","INVALID_PENDING_TOKEN","FEDERATED_USER_ID_ALREADY_LINKED","MISSING_OR_INVALID_NONCE","INVALID_MESSAGE_PAYLOAD","INVALID_RECIPIENT_EMAIL","INVALID_SENDER","EMAIL_NOT_FOUND","RESET_PASSWORD_EXCEED_LIMIT","EXPIRED_OOB_CODE","INVALID_OOB_CODE","MISSING_OOB_CODE","INVALID_PROVIDER_ID","CREDENTIAL_TOO_OLD_LOGIN_AGAIN","INVALID_ID_TOKEN","TOKEN_EXPIRED","CORS_UNSUPPORTED","DYNAMIC_LINK_NOT_ACTIVATED","INVALID_APP_ID","TOO_MANY_ATTEMPTS_TRY_LATER","WEAK_PASSWORD","OPERATION_NOT_ALLOWED","USER_CANCELLED","CAPTCHA_CHECK_FAILED","INVALID_APP_CREDENTIAL","INVALID_CODE","INVALID_PHONE_NUMBER","INVALID_SESSION_INFO","INVALID_TEMPORARY_PROOF","MISSING_APP_CREDENTIAL","MISSING_CODE","MISSING_PHONE_NUMBER","MISSING_SESSION_INFO","SESSION_EXPIRED","REJECTED_CREDENTIAL","INVALID_CONTINUE_URI","MISSING_ANDROID_PACKAGE_NAME","MISSING_IOS_BUNDLE_ID","UNAUTHORIZED_DOMAIN","INVALID_DYNAMIC_LINK_DOMAIN","INVALID_OAUTH_CLIENT_ID","INVALID_CERT_HASH","ADMIN_ONLY_OPERATION","Si","$i","Zi","Yi","where","messageHandlersFilter","dontclear","restyle","setHideOnLeave","Vi","ping","Ti","aj","bj","cj","dj","ej","authorizedDomains","oi","fj","Xi","authEvent","gj","ij","jj","kj","reactNative","AsyncStorage","lj","ga","Wi","webStorageSupport","hj","closed","he","getItem","vj","mj","oj","pj","qj","messageChannel","onMessage","eventType","rj","sj","tj","nj","uj","keyProcessed","serviceWorker","ready","active","Le","fulfilled","xj","onupgradeneeded","createObjectStore","keyPath","onsuccess","objectStoreNames","deleteDatabase","wj","yj","zj","objectStore","Aj","transaction","Bj","Cj","Ke","openCursor","fbase_key","$d","Ej","Fj","Gj","Hj","Jj","Ij","Kj","Lj","Nj","sessionStorage","Mj","Oj","Browser","Pj","Node","Qj","ReactNative","Rj","Worker","Sj","ports","Dj","Tj","Xj","Uj","NONE","Wj","Yj","Zj","ak","ck","ek","fk","dk","mk","gk","ik","kk","lk","Int32Array","nk","pk","qk","rk","sk","tk","uk","vk","wk","xk","zk","rf","Dk","Ak","Ck","handleOpenURL","Ek","hk","Fk","yk","ibi","apn","appDisplayName","Bk","Gk","Ik","Kk","Lk","Mk","signInViaRedirect","linkViaRedirect","reauthViaRedirect","signInViaPopup","linkViaPopup","reauthViaPopup","Nk","Ok","Pk","Qk","Rk","Jk","Sk","Tk","Uk","Hk","Vk","Wk","Xk","$k","Zk","cl","dl","fl","auth_time","iat","expirationTime","authTime","issuedAtTime","signInProvider","claims","gl","jl","kl","refreshToken","expiresIn","nl","grant_type","refresh_token","gi","expires_in","ol","lastSignInTime","creationTime","ql","rl","Q","apiKey","appName","authDomain","sl","tl","ul","V","X","vl","wl","xl","yl","zl","Al","Cl","Dl","emailVerified","isAnonymous","createdAt","lastLoginAt","providerData","El","Fl","Gl","Hl","Il","Jl","Kl","pl","Ll","Ml","Nl","Ql","Pl","additionalUserInfo","operationType","Rl","reload","Sl","Tl","Ul","Vl","Wl","Xl","Yl","stsTokenManager","redirectEventId","am","Yk","al","bl","confirm","hl","il","He","users","localId","providerUserInfo","rawId","Ol","passwordHash","Ai","Re","cm","em","bk","gm","dm","fm","jm","km","lm","createSubscribe","nm","bm","xm","om","pm","logFramework","rm","sm","um","vm","Zl","wm","Bl","ym","Am","_lat","Bm","Cm","Vj","languages","language","userLanguage","im","$l","addAuthTokenListener","zm","removeAuthTokenListener","identifier","continueUri","allProviders","li","signinMethods","ni","execute","Dm","Fm","Gm","Em","Hm","Im","se","Jm","Km","grecaptcha","Infinity","Lm","Mm","Nm","Om","theme","Pm","Qm","hasChildNodes","Rm","Sm","Tm","Vm","Wm","Xm","settings","appVerificationDisabledForTesting","Ym","Zm","Um","$m","an","bn","hn","jn","kn","Persistence","LOCAL","SESSION","appVerificationDisabled","Auth","AuthCredential","App","extendNamespace","User","support","searchParams","iterable","formData","viewClasses","isDataView","DataView","isPrototypeOf","isArrayBufferView","isView","normalizeName","normalizeValue","thisArg","items","iteratorFor","methods","_bodyInit","Body","Response","redirectStatuses","redirect","init","rawHeaders","responseURL","polyfill","consumed","bodyUsed","fileReaderReady","reader","readBlobAsArrayBuffer","FileReader","promise","readAsArrayBuffer","bufferClone","buf","_initBody","_bodyText","_bodyBlob","_bodyFormData","URLSearchParams","_bodyArrayBuffer","rejected","readAsText","chars","readArrayBufferAsText","json","upcased","referrer","form","bodyInit","finallyConstructor","setTimeoutFunc","_state","_handled","_value","_deferreds","doResolve","handle","deferred","_immediateFn","finale","_unhandledRejectionFn","Handler","ex","prom","remaining","race","globalNS","internalFind","SKIPS_HOLES","forced","find","callbackfn","nativeFunctionToString","WeakMap","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","anObject","ownKeys","getOwnPropertySymbols","toIndexedObject","toLength","toAbsoluteIndex","IS_INCLUDES","fromIndex","toInteger","integer","fails","replacement","isForced","feature","detection","POLYFILL","NATIVE","DESCRIPTORS","definePropertyModule","objectKeys","Properties","internalFindIndex","stat","propertyIsEnumerableModule","IndexedObject","nativeAssign","argumentsLength","validateArguments","CORRECT_IS_REGEXP_LOGIC","nativeStartsWith","startsWith","searchString","requireObjectCoercible","classof","MATCH","METHOD_NAME","regexp","repeat","createProperty","arraySpeciesCreate","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","FORCED","toPrimitive","createPropertyDescriptor","propertyKey","SPECIES","foo","ObjectPrototype","unsafe","classofRaw","TO_STRING_TAG","CORRECT_ARGUMENTS","tryGet","callee","IS_PURE","$export","redefine","hiddenKeys","setToStringTag","wellKnownSymbol","defineWellKnownSymbol","enumKeys","nativeObjectCreate","getOwnPropertyNamesExternal","getOwnPropertyDescriptorModule","hide","HIDDEN","InternalStateModule","setInternalState","getInternalState","getterFor","nativeGetOwnPropertyDescriptor","nativeDefineProperty","nativeGetOwnPropertyNames","$Symbol","nativeJSONStringify","TO_PRIMITIVE","nativePropertyIsEnumerable","SymbolRegistry","AllSymbols","ObjectPrototypeSymbols","WellKnownSymbolsStore","QObject","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","wrap","isSymbol","$defineProperty","$defineProperties","$propertyIsEnumerable","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","sham","wellKnownSymbols","keyFor","sym","useSetter","useSimple","replacer","$replacer","symbols","windowNames","getWindowNames","copyConstructorProperties","NativeSymbol","EmptyStringDescriptionStore","SymbolWrapper","symbolPrototype","symbolToString","native","setGlobal","sourceProperty","TARGET","GLOBAL","STATIC","noTargetGet","IE8_DOM_DEFINE","Attributes","codePointAt","defineIterator","iterated","point","CONVERT_TO_STRING","IteratorPrototype","Iterators","returnThis","IteratorConstructor","validateSetPrototypeOfArguments","correctSetter","DOMIterables","ArrayIteratorMethods","ITERATOR","ArrayValues","COLLECTION_NAME","Collection","CollectionPrototype","propertyType","targetKey","getOwnMetadata","defineMetadata","getOrCreateOwn","originStorage","unknownOrigin","moduleMember","Origin","mixin","instanceKeys","possible","decorator","resolvedTarget","alwaysValid","noCompose","ensureProtocolOptions","compose","createProtocolValidator","createProtocolAsserter","assert","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","run","runClearTimeout","Item","nextTick","browser","argv","versions","off","removeAllListeners","emit","prependListener","prependOnceListener","listeners","cwd","chdir","dir","umask","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","addToUnscopables","Arguments","tslib_1","util","logger$1","DOMStorageWrapper","domStorage_","prefix_","prefixedName_","storedVal","jsonEval","MemoryStorage","cache_","isInMemoryStorage","createStoragefor","domStorageName","domStorage","PersistentStorage","SessionStorage","logClient","LUIDGenerator","sha1","utf8Bytes","stringToByteArray","Sha1","update","sha1Bytes","digest","encodeByteArray","buildLogMessage_","firstLog_","enableLogging","logger_","persistent","LogLevel","VERBOSE","logWrapper","fatal","isInvalidJSONNumber","POSITIVE_INFINITY","NEGATIVE_INFINITY","MIN_NAME","MAX_NAME","nameCompare","aAsInt","tryParseInt","bAsInt","stringCompare","requireKey","ObjectToUniqueKey","splitStringBySize","segsize","dataSegs","each","doubleToIEEE754String","bits","LN2","hexByteString","hexByte","INTEGER_REGEXP_","intVal","exceptionGuard","beingCrawled","setTimeoutNonBlocking","Path","pathOrString","pieceNum","pieces_","copyTo","pieceNum_","getFront","getLength","popFront","getBack","pathString","toUrlEncodedString","pieces","childPathObj","childPieces","relativePath","outerPath","innerPath","outer","inner","comparePaths","leftKeys","rightKeys","cmp","ValidationPath","errorPrefix_","parts_","byteLength_","checkValid_","MAX_PATH_LENGTH_BYTES","MAX_PATH_DEPTH","toErrorString","LONG_POLLING","RepoInfo","secure","namespace","webSocketOnly","persistenceKey","domain","internalHost","needsQueryParam","isCustomHost","isCacheableHost","isDemoHost","updateHost","newHost","connectionURL","connURL","toURLString","PUSH_CHARS","lastPushTime","lastRandChars","__EMPTY_NODE","MAX_NODE","parseRepoInfo","parsedUrl","parseURL","subdomain","repoInfo","colonInd","slashInd","questionMarkInd","pathStringDecoded","piece","decodePath","segment","kv","decodeQuery","INVALID_KEY_REGEX_","INVALID_PATH_REGEX_","isValidKey","isValidPathString","isValidPriority","validateFirebaseDataArg","argumentNumber","validateFirebaseData","errorPrefix","hasDotValue_1","hasActualChild_1","validateFirebaseMergeDataArg","mergePaths","curPath","prevPath","validateFirebaseMergePaths","validatePriority","validateEventType","validatePathString","validateRootPathString","validateWritablePath","validateUrl","isValidRootPathString","validateBoolean","bool","OnDisconnect","repo_","onComplete","validateArgCount","validateCallback","Deferred","onDisconnectCancel","wrapCallback","onDisconnectSet","setWithPriority","onDisconnectSetWithPriority","objectToMerge","newObjectToMerge","onDisconnectUpdate","TransactionResult","committed","nextPushId","duplicateTime","timeStampChars","NamedNode","Wrap","Index","getCompare","compare","indexedValueChanged","oldNode","newNode","oldWrapped","newWrapped","minPost","MIN","KeyIndex","_super","__extends","isDefinedOn","assertionError","maxPost","makePost","indexValue","KEY_INDEX","__childrenNodeConstructor","nodeFromJSON","MAX_NODE$1","priorityHashText","validatePriorityNode","priorityNode","isLeafNode","getPriority","LeafNode","value_","priorityNode_","EMPTY_NODE","lazyHash_","updatePriority","newPriorityNode","getImmediateChild","childName","getChild","hasChild","getPredecessorChildName","childNode","updateImmediateChild","newChildNode","updateChild","front","numChildren","forEachChild","action","exportFormat","toHash","compareTo","compareToLeafNode_","otherLeaf","otherLeafType","thisLeafType","otherIndex","VALUE_TYPE_ORDER","thisIndex","withIndex","isIndexed","_defaultIndexMap","PRIORITY_INDEX","PriorityIndex","aPriority","bPriority","indexCmp","SortedMapIterator","startKey","comparator","isReverse_","resultGenerator_","nodeStack_","getNext","hasNext","peek","LLRBNode","color","RED","SortedMap","copy","inorderTraversal","reverseTraversal","min_","minKey","maxKey","insert","fixUp_","removeMin_","isRed_","moveRedLeft_","smallest","rotateRight_","moveRedRight_","rotateLeft_","colorFlip_","nr","checkMaxDepth_","blackDepth","check_","BLACK","LLRBEmptyNode","comparator_","root_","getPredecessorKey","rightParent","getIterator","resultGenerator","getIteratorFrom","getReverseIteratorFrom","getReverseIterator","LOG_2","Base12Num","current_","bits_","nextBitIsOne","buildChildSet","keyFn","mapSortFn","buildBalancedTree","low","high","namedNode","base12","buildPennant","childTree","attachPennant","pennant","isOne","buildFrom12Array","fallbackObject","IndexMap","indexes_","indexSet_","indexKey","sortedMap","safeGet","hasIndex","indexDefinition","addIndex","existingChildren","newIndex","sawIndexedValue","iter","indexName","newIndexSet","newIndexes","addToIndexes","indexedChildren","existingSnap","newChildren","removeFromIndexes","NAME_ONLY_COMPARATOR","NAME_COMPARATOR","ChildrenNode","children_","indexMap_","Default","newPriority","newIndexMap","newImmediateChild","numKeys","allIntegerKeys","toHash_1","childHash","resolveIndex_","predecessor","getFirstChildName","getFirstChild","getLastChildName","getLastChild","wrappedNode","startPost","endPost","MAX_NODE$2","otherChildrenNode","thisIter","otherIter","thisCurrent","otherCurrent","MaxNode","MAX","setMaxNode$1","USE_HINZE","nodeFromJSON$1","node_1","jsonObj_1","childData","children_1","childrenHavePriority_1","hinzeJsonObj_1","childSet","sortedChildSet","setNodeFromJSON","__referenceConstructor","OperationType","VALUE_INDEX","ValueIndex","valueNode","PathIndex","indexPath_","extractChild","snap","aChild","bChild","DataSnapshot","node_","index_","exportVal","exists","childPathString","childRef","childrenNode","hasChildren","getKey","getRef","DataEvent","eventRegistration","prevName","getPath","getParent","getEventType","getEventRunner","CancelEvent","ValueEventRegistration","cancelCallback_","context_","respondsTo","change","getQueryParams","getIndex","snapshotNode","eventData","ctx","cancelCB_1","cb_1","createCancelEvent","hasAnyCallback","ChildEventRegistration","callbacks_","eventToCheck","cancelCB_2","cb_2","otherCount","getCount","otherKey","getAnyKey","thisKey","Query","repo","queryParams_","orderByCalled_","validateQueryEndpoints_","startNode","endNode","hasStart","getIndexStartValue","hasEnd","getIndexEndValue","tooManyArgsError","wrongArgTypeError","getIndexStartName","getIndexEndName","validateLimit_","hasLimit","hasAnchoredLimit","validateNoPreviousOrderByCall_","cancelCallbackOrContext","getCancelAndContextArgs_","onValueEvent","callbacks","onChildEvent","cancelCallback","addEventCallbackForQuery","validateContextObject","valueCallback","removeEventCallbackForQuery","userCallback","cancelOrContext","firstCall","onceCallback","limitToFirst","limitToLast","orderByChild","parsedPath","newParams","orderBy","orderByKey","orderByPriority","orderByValue","startAt","endAt","equalTo","queryObject","getQueryObject","queryIdentifier","isEqual","sameRepo","samePath","sameQueryIdentifier","CountedSet","SparseSnapshotTree","childKey","remember","forget","self_1","tree","forEachTree","prefixPath","resolveDeferredValue","serverValues","resolveDeferredValueSnapshot","rawPri","leafNode","emptyChildrenSingleton","__referenceConstructor$1","OperationSource","fromUser","fromServer","queryId","Server","forServerTaggedQuery","AckUserWrite","affectedTree","revert","ACK_USER_WRITE","operationForChild","Empty","EmptyChildren","ImmutableTree","fromObject","childSnap","findRootMostMatchingPathAndValue","predicate","childExistingPathAndValue","findRootMostValueAndPath","toSet","newChild","setTree","newTree","fold","fold_","pathSoFar","accum","findOnPath","findOnPath_","pathToFollow","nextChild","foreachOnPath","foreachOnPath_","currentRelativePath","foreach","foreach_","foreachChild","ListenComplete","LISTEN_COMPLETE","Overwrite","OVERWRITE","Merge","MERGE","CacheNode","fullyInitialized_","filtered_","isFullyInitialized","isFiltered","isCompleteForPath","isCompleteForChild","getNode","ViewCache","eventCache_","serverCache_","updateEventSnap","eventSnap","filtered","updateServerSnap","serverSnap","getEventCache","getCompleteEventSnap","getServerCache","getCompleteServerSnap","Change","oldSnap","valueChange","VALUE","childAddedChange","CHILD_ADDED","childRemovedChange","CHILD_REMOVED","childChangedChange","newSnapshot","oldSnapshot","CHILD_CHANGED","childMovedChange","CHILD_MOVED","IndexedFilter","affectedPath","optChangeAccumulator","oldChild","trackChildChange","updateFullNode","newSnap","filtersNodes","getIndexedFilter","ChildChangeAccumulator","changeMap_","oldChange","oldType","getChanges","getValues","NO_COMPLETE_CHILD_SOURCE","NoCompleteChildSource_","getCompleteChild","getChildAfterChild","WriteTreeCompleteChildSource","writes_","viewCache_","optCompleteServerCache_","serverNode","calcCompleteChild","completeServerData","calcIndexedSlice","ProcessorResult","viewCache","changes","ViewProcessor","filter_","assertIndexed","applyOperation","oldViewCache","writesCache","completeCache","newViewCache","filterServerNode","accumulator","overwrite","applyUserOverwrite_","applyServerOverwrite_","merge","applyUserMerge_","applyServerMerge_","ackUserWrite","revertUserWrite_","ackUserWrite_","listenComplete_","maybeAddValueEvent_","isLeafOrEmpty","oldCompleteSnap","generateEventCacheAfterServerEvent_","changePath","oldEventSnap","shadowingWrite","newEventCache","serverCache","completeChildren","completeEventChildren","calcCompleteEventChildren","completeNode","calcCompleteEventCache","oldEventNode","updatedPriority","calcEventCacheAfterServerOverwrite","childChangePath","newEventChild","eventChildUpdate","changedSnap","newServerCache","oldServerSnap","serverFilter","newServerNode","newEventSnap","cacheHasChild_","changedChildren","curViewCache","writePath","applyMerge_","viewMergeTree","serverChild","childMergeTree","isUnknownDeepMerge","ackPath","changedChildren_1","changedChildren_2","mergePath","serverCachePath","oldServerNode","completeServerCache","oldEventCache","serverChildren","EventGenerator","query_","generateEventsForChanges","eventCache","eventRegistrations","moves","generateEventsForType_","registrations","filteredChanges","compareChanges_","materializedChange","materializeSingleChange_","aWrapped","bWrapped","View","initialViewCache","eventRegistrations_","indexFilter","getNodeFilter","processor_","initialServerCache","initialEventCache","eventGenerator_","getQuery","getCompleteServerCache","loadsAllData","addEventRegistration","removeEventRegistration","cancelError","cancelEvents","path_1","maybeEvent","existing","generateEventsForChanges_","getInitialEvents","initialChanges","SyncPoint","views_","optCompleteServerCache","events_1","serverCacheComplete","eventCacheComplete","hadCompleteView","hasCompleteView","viewQueryId","getQueryViews","viewForQuery","getCompleteView","viewExistsForQuery","findValue","CompoundWrite","writeTree_","addWrite","rootmost","rootMostPath","addWrites","updates","newWrite","removeWrite","hasCompleteWrite","getCompleteNode","getCompleteChildren","childCompoundWrite","shadowingNode","applySubtreeWrite_","writeTree","priorityWrite_1","WriteTree","visibleWrites_","allWrites_","lastWriteId_","childWrites","WriteTreeRef","addOverwrite","writeId","visible","addMerge","getWrite","writeToRemove","removedWriteWasVisible","removedWriteOverlapsWithOtherWrites","currentWrite","recordContainsPath_","resetTree_","getCompleteWriteData","treePath","writeIdsToExclude","includeHiddenWrites","mergeAtPath","layerTree_","layeredCache","subMerge","completeServerChildren","topLevelSet","merge_1","existingEventSnap","existingServerSnap","childMerge","toIterate","writeRecord","findKey","DefaultFilter_","writes","treeRoot","compoundWrite","deepNode","treePath_","existingServerCache","SyncTree","listenProvider_","syncPointTree_","pendingWriteTree_","tagToQueryMap_","queryToTagMap_","applyUserOverwrite","newData","applyOperationToSyncPoints_","applyUserMerge","changeTree","affectedTree_1","applyServerOverwrite","applyServerMerge","applyListenComplete","applyTaggedQueryOverwrite","queryKey","queryKeyForTag_","parseQueryKey_","queryPath","applyTaggedOperation_","applyTaggedQueryMerge","applyTaggedListenComplete","foundAncestorDefaultView","pathToSyncPoint","sp","syncPoint","childSyncPoint","viewAlreadyExists","makeQueryKey_","getNextQueryTag_","setupListener_","maybeSyncPoint","removedAndEvents","removingDefault","covered","parentSyncPoint","newViews","collectDistinctViewsForSubTree_","newQuery","createListenerForView_","startListening","queryForListening_","tagForQuery_","hashFn","stopListening","queryToRemove","tagToRemove","removeTags_","maybeChildSyncPoint","childMap","views_1","childViews","queries","removedQuery","removedQueryKey","removedQueryTag","isDefault","queriesToStop","queries_1","childQueries","queryToStop","errorForServerCode","splitIndex","nextQueryTag_","applyOperationHelper_","syncPointTree","applyOperationDescendantsHelper_","childOperation","childServerCache","childWritesCache","SnapshotHolder","rootNode_","updateSnapshot","newSnapshotNode","AuthTokenProvider","forceRefresh","addTokenChangeListener","removeTokenChangeListener","notifyForInvalidToken","StatsCollection","counters_","incrementCounter","amount","deepCopy","StatsManager","getCollection","hashString","collections_","getOrCreateReporter","creatorFunction","reporters_","StatsListener","collection_","last_","newStats","FIRST_STATS_MIN_TIME","FIRST_STATS_MAX_TIME","StatsReporter","server_","statsToReport_","statsListener_","reportStats_","includeStat","stats","reportedStats","haveStatsToReport","reportStats","EventQueue","eventLists_","recursionDepth_","queueEvents","eventDataList","currList","eventPath","EventList","raiseEventsAtPath","raiseQueuedEventsMatchingPredicate_","raiseEventsForChangedPath","changedPath","sentAll","eventList","raise","events_","eventFn","EventEmitter","allowedEvents_","listeners_","trigger","validateEventType_","getInitialEvent","et","VisibilityMonitor","visibilityChange","visible_","getInstance","OnlineMonitor","online_","isMobileCordova","currentlyOnline","PacketReceiver","onMessage_","pendingResponses","currentResponseNum","closeAfterResponse","onClose","closeAfter","responseNum","handleResponse","requestNum","_loop_1","toProcess","this_1","_loop_2","FIREBASE_LONGPOLL_COMMAND_CB_NAME","FIREBASE_LONGPOLL_DATA_CB_NAME","BrowserPollConnection","connId","transportSessionId","lastSessionId","bytesSent","bytesReceived","everConnected_","log_","stats_","urlFn","onDisconnect","curSegmentNum","onDisconnect_","myPacketOrderer","isClosed_","connectTimeoutTimer_","onClosed_","isNodeSdk","called_1","wrappedFn_1","executeWhenDOMReady","scriptTagHolder","FirebaseIFrameScriptHolder","command","arg1","arg2","incrementIncomingBytes_","sendNewPolls","pN","uniqueCallbackIdentifier","connectURL","addTag","startLongPoll","addDisconnectPingFrame","forceAllow","forceAllow_","forceDisallow","forceDisallow_","isAvailable","Windows","UI","markConnectionHealthy","shutdown_","myDisconnFrame","dataStr","base64data","base64Encode","MAX_URL_DATA_SIZE","enqueueSegment","pw","commandCB","onMessageCB","outstandingRequests","pendingSegs","currentSerial","myIFrame","createIFrame_","iframeContents","doc","iframe","contentDocument","alive","myID","myPW","theURL","nodeRestRequest","newRequest_","curDataString","theSeg","seg","ts","addLongPollTag_","segnum","totalsegs","serial","doNewRequest","keepaliveTimeout","loadCB","doNodeLongPoll","newScript_1","async","rstate","WebSocketImpl","MozWebSocket","WebSocket","WebSocketConnection","keepaliveTimer","frames","totalFrames","connectionURL_","device","CONSTANTS","NODE_ADMIN","platform","mySock","onopen","onclose","handleIncomingFrame","isOldAndroid","oldAndroidMatch","previouslyFailed","appendFrame_","fullMess","jsonMess","handleNewFrameCount_","frameCount","extractFrameCount_","mess","resetKeepAlive","remainingData","sendString_","responsesRequiredToBeHealthy","healthyTimeout","TransportManager","initTransports_","isWebSocketsAvailable","isSkipPollConnection","transports_","transports_1","ALL_TRANSPORTS","transport","initialTransport","upgradeTransport","Connection","repoInfo_","onReady_","onKill_","connectionCount","pendingDataMessages","transportManager_","conn","conn_","nextTransportId_","primaryResponsesRequired_","onMessageReceived","connReceiver_","onConnectionLost","disconnReceiver_","tx_","rx_","secondaryConn_","isHealthy_","healthyTimeout_ms","healthyTimeout_","everConnected","onConnectionLost_","onSecondaryConnectionLost_","onPrimaryMessageReceived_","onSecondaryMessageReceived_","sendRequest","dataMsg","sendData_","tryCleanupConnection","onSecondaryControl_","controlData","cmd","upgradeIfSecondaryHealthy_","secondaryResponsesRequired_","parsedData","layer","proceedWithUpgrade_","onControl_","onDataMessage_","onPrimaryResponse_","payload","onHandshake_","onConnectionShutdown_","onReset_","sendPingOnPrimaryIfNecessary_","handshake","timestamp","onConnectionEstablished_","tryStartUpgrade_","startUpgrade_","closeConnections_","ServerActions","refreshAuthToken","onDisconnectPut","onDisconnectMerge","RECONNECT_MIN_DELAY","RECONNECT_MAX_DELAY_DEFAULT","PersistentConnection","onDataUpdate_","onConnectStatus_","onServerInfoUpdate_","authTokenProvider_","authOverride_","nextPersistentConnectionId_","interruptReasons_","listens_","outstandingPuts_","outstandingPutCount_","onDisconnectRequestQueue_","connected_","reconnectDelay_","maxReconnectDelay_","securityDebugCallback_","establishConnectionTimer_","requestCBHash_","requestNumber_","realtime_","authToken_","forceTokenRefresh_","invalidAuthTokenCount_","firstConnection_","lastConnectionAttemptTime_","lastConnectionEstablishedTime_","scheduleConnect_","onVisible_","onOnline_","onResponse","curReqNum","listen","currentHashFn","listenSpec","sendListen_","req","warnOnListenWarnings_","removeListen_","warnings","indexSpec","indexPath","tryAuth","reduceReconnectDelayIfAdminCredential_","isAdmin","token_1","authMethod","isValidFormat","requestData","onAuthRevoked_","unlisten","sendUnlisten_","queryObj","sendOnDisconnect_","putInternal","sendPut_","errorReason","reqNum","onDataPush_","onListenRevoked_","onSecurityDebugPacket_","handleTimestamp_","sendConnectStats_","restoreState_","establishConnection_","online","onRealtimeDisconnect_","cancelSentTransactions_","shouldReconnect_","timeSinceLastConnectAttempt","reconnectDelay","onDataMessage_1","onReady_1","onDisconnect_1","connId_1","nextConnectionId_","lastSessionId_1","canceled_1","connection_1","closeFn_1","interrupt","serverTimeOffset","normalizedPathString","statusCode","explanation","clientName","NODE_CLIENT","isReactNative","ReadonlyRestClient","getListenId_","listenId","thisListen","queryStringParameters","toRestQueryStringParameters","restRequest_","authTokenData","querystring","Repo","forceRestClient","dataUpdateCount","eventQueue_","nextWriteId_","interceptServerDataCallback_","persistentConnection_","authTokenProvider","authOverride","statsReporter_","transactions_init_","infoData_","infoSyncTree_","infoEvents","updateInfo_","serverSyncTree_","serverTime","generateServerValues","isMerge","taggedChildren","taggedSnap","rerunTransactions_","interceptServerData_","connectStatus","runOnDisconnectEvents_","getNextWriteId_","newVal","newNodeUnresolved","clearEvents","callOnCompleteCallback","abortTransactions_","childrenToMerge","changedKey","changedValue","writeId_1","resolvedOnDisconnectTree","resolvedTree","resolveDeferredValueTree","showDelta","longestName","statsIncrementCounter","metric","__database","Database","RangedFilter","indexedFilter_","startPost_","getStartPost_","endPost_","getEndPost_","getStartPost","getEndPost","startName","endName","LimitedFilter","rangedFilter_","limit_","getLimit","reverse_","isViewFromLeft","fullLimitUpdateChild_","indexCompare_1","foundStartPost","changeAccumulator","indexCmp_1","newChildNamedNode","windowBoundary","inRange","oldChildSnap","compareNext","QueryParams","limitSet_","startSet_","startNameSet_","endSet_","endNameSet_","viewFrom_","indexStartValue_","indexStartName_","indexEndValue_","indexEndName_","WIRE_PROTOCOL_CONSTANTS_","VIEW_FROM_LEFT","copy_","newLimit","VIEW_FROM_RIGHT","WIRE_PROTOCOL_CONSTANTS","INDEX_START_VALUE","INDEX_START_NAME","INDEX_END_VALUE","INDEX_END_NAME","LIMIT","viewFrom","VIEW_FROM","INDEX","REST_CONSTANTS","REST_QUERY_CONSTANTS_","qs","ORDER_BY","START_AT","END_AT","LIMIT_TO_FIRST","LIMIT_TO_LAST","DEFAULT","parentPath","getRoot","databaseProp","database","transactionUpdate","applyLocally","promiseComplete","startTransaction","setPriority","thennablePushRef","pushRef","TransactionStatus","TreeNode","childCount","Tree","parent_","subTree","pathObj","updateParents_","forEachDescendant","includeSelf","childrenFirst","forEachAncestor","forEachImmediateDescendantWithValue","updateChild_","childEmpty","childExists","MAX_TRANSACTION_RETRIES_","transactionQueueTree_","watchRef","order","retryCount","unwatcher","abortReason","currentWriteId","currentInputSnapshot","currentOutputSnapshotRaw","currentOutputSnapshotResolved","currentState","getLatestState_","RUN","queueNode","nodeQueue","priorityForNode","sendReadyTransactions_","excludeSets","pruneCompletedTransactionsBelowNode_","buildTransactionQueue_","sendTransactionQueue_","setsToIgnore","txn","latestState","snapToSend","latestHash","SENT","dataToSend","pathToSend","COMPLETED","SENT_NEEDS_ABORT","NEEDS_ABORT","rootMostTransactionNode","getAncestorTransactionNode_","rerunTransactionQueue_","abortTransaction","currentNode","newDataNode","oldWriteId","newNodeResolved","lastInput","transactionNode","transactionQueue","aggregateTransactionQueuesForNode_","abortTransactionsOnNode_","lastSent","_staticInstance","RepoManager","repos_","useRestClient_","dbUrl","databaseFromApp","createRepo","deleteRepo","appRepos","DatabaseInternals","checkDeleted_","parsedURL","goOffline","goOnline","ServerValue","TIMESTAMP","__awaiter","__generator","forceLongPolling","forceWebSockets","setSecurityDebugCallback","interceptServerData","DataConnection","simpleListen","echo","onEcho","RealTimeConnection","ConnectionTarget","TEST_ACCESS","hijackHash","newHash","oldPut","opt_onComplete","opt_hash","listens","firebaseRef","registerDatabase","defaultLogLevel","INFO","defaultLogHandler","logType","DEBUG","WARN","_logLevel","_logHandler","setLogLevel","inst","webpackPolyfill","paths","webpackContext","webpackContextResolve","DATE_SPLITS","GRAPHS","L33T_TABLE","RANKED_DICTIONARIES","REGEXEN","build_ranked_dict","frequency_lists","lst","matching","scoring","ordered_list","len1","recent_year","lst2","chr_map","mod","sorted","m1","m2","omnimatch","matchers","dictionary_match","reverse_dictionary_match","l33t_match","spatial_match","repeat_match","sequence_match","regex_match","date_match","_ranked_dictionaries","dictionary_name","password_lower","rank","ranked_dict","ref1","ref2","matched_word","reversed","l33t","reversed_password","set_user_input_dictionary","relevant_l33t_subtable","table","letter","password_chars","relevant_subs","subs","subtable","len2","enumerate_l33t_subs","dedup","helper","l33t_chr","sub_dict","sub_dicts","assoc","deduped","members","dup_l33t_index","first_key","next_subs","rest_keys","sub_alternative","sub_extension","_l33t_table","match_sub","subbed_chr","subbed_password","sub_display","_graphs","graph","graph_name","spatial_match_helper","SHIFTED_RX","adj","adjacents","cur_char","cur_direction","found_direction","last_direction","shifted_count","turns","base_analysis","base_guesses","base_matches","base_token","greedy","greedy_match","lazy","lazy_anchored","lazy_match","most_guessable_match_sequence","sequence","guesses","repeat_count","MAX_DELTA","last_delta","sequence_name","sequence_space","ascending","_regexen","rx_match","regex_name","best_candidate","candidate","candidates","distance","dmy","maybe_date_no_separator","maybe_date_with_separator","min_distance","ref3","ref4","ref5","ref6","ref7","ref8","ref9","map_ints_to_dmy","REFERENCE_YEAR","is_submatch","len3","other_match","ints","int","over_12","over_31","possible_year_splits","under_1","map_ints_to_dm","two_to_four_digit_year","passwords","english_wikipedia","female_names","surnames","us_tv_and_film","male_names","time_estimates","estimate_attack_times","crack_times_display","crack_times_seconds","scenario","online_throttling_100_per_hour","online_no_throttling_10_per_second","offline_slow_hashing_1e4_per_second","offline_fast_hashing_1e10_per_second","display_time","guesses_to_score","display_num","display_str","feedback","default_feedback","warning","suggestions","get_feedback","extra_feedback","longest_match","get_match_feedback","is_sole_match","get_dictionary_match_feedback","guesses_log10","START_UPPER","ALL_UPPER","angry","blush","broken_heart","confused","cry","frowning","heart","imp","innocent","joy","kissing","laughing","neutral_face","open_mouth","rage","smile","smiley","smiling_imp","sob","stuck_out_tongue","sunglasses","sweat","sweat_smile","unamused","wink","emojies","ucm","ZPCc","splitTextToken","last_pos","emoji_name","autolinkLevel","__hr","escapeRegExp","hasDelimiters","getAttrs","addAttrs","removeDelimiter","endChar","attrToken","tableOpen","getMatchingOpeningToken","openingToken","trimmed","allowedKeyChars","parsingKey","valueInsideQuotes","char_","attrPair","attr","allowedAttribute","minCurlyLength","rightDelimiterMinimumShift","curly","isClass","isId","validCurlyLength","instruction","unrender","formGroup","closest","textContent","BootstrapValidationControllerFactory","createForCurrentScope","ctrl","addRenderer","BootstrapFormRenderer","errorCodeMap","OK","CANCELLED","DEADLINE_EXCEEDED","NOT_FOUND","ALREADY_EXISTS","PERMISSION_DENIED","RESOURCE_EXHAUSTED","FAILED_PRECONDITION","ABORTED","OUT_OF_RANGE","UNIMPLEMENTED","UNAVAILABLE","DATA_LOSS","HttpsErrorImpl","details","ContextProvider","trys","sent","getInstanceIdToken","messaging","getContext","instanceIdToken","mapValues","Serializer","region_","serializer","emulatorOrigin","deleteService","contextProvider","cancelAllRequests","_url","projectId","region","useFunctionsEmulator","httpsCallable","postJSON","responseData","bodyJSON","codeForHTTPStatus","errorJSON","status_1","_errorForResponse","FUNCTIONS_TYPE","registerFunctions","WebpackLoader","extendStatics","__","_arguments","generator","step","verb","TextTemplateLoader","loader","template","createTemplateFromMarkup","ensureOriginOnExports","moduleExports","exportedValue","__useDefault","moduleRegistry","loaderPlugins","modulesBeingLoaded","useTemplateLoader","templateLoader","_import","defaultHMR","addressParts","loaderPlugin","plugin_1","asyncModuleId","hot","hmrContext","handleModuleChange","beingLoaded","originalModule","bootstrapPromises","startResolve","startPromise","isNodeLike","createLoader","preparePlatform","normalized","isRenderer","palModule","globalize","initializePal","bootstrapperName","frameworkPromise","frameworkName","_ref","fx","Aurelia","appHost","configModuleId","aurelia","customConfig","standardConfiguration","developmentLogging","setRoot","bootstrap","starting","appHosts","toConsole","bootstraps","dP","ObjectProto","iterCall","FEATURE_NO_ES2015","GOPS","setDescriptor","prefixLength","internalSymbol","DP","DPies","GOPN","GOPD","PIE","gOPN","gOPD","hOP","pIE","addInternalIfNeeded","createWithSymbols","descriptors","onlyNonSymbols","onlySymbols","setAndGetSymbol","sourceConstructor","_Symbol","sourceMap","newDescriptor","copyAsNonEnumerable","cachedWindowNames","originalObjectGetOwnPropertyNames","o_O","protoDescriptor","tst","AP","SP","subjectString","return","arrayLike","aLen","mapfn","iterFn","FEATURE_NO_ES2016","searchElement","currentElement","hasDontEnumBug","dontEnums","dontEnumsLength","needsFix","gOPS","filterOS","keyOrSymbol","is","_createCollection","_createCollection2","createCollection","sharedDelete","sharedClear","sharedGet","mapHas","sharedSet","sharedIterator","_itp","_keys","sharedValues","mapEntries","sharedForEach","setHas","sharedAdd","_values","objectOnly","sharedSize","itp","WeakSet","Target","FEATURE_NO_ESNEXT","emptyMetadata","metadataContainer","copyright","bitmap","TAG","History","activate","deactivate","getAbsoluteRoot","navigate","fragment","navigateBack","setTitle","setState","getState","getHistoryIndex","go","movement","_class4","_class6","_temp3","_temp4","_class15","_class16","_temp5","_class17","_class18","_class19","Animator","enter","leave","removeClass","addClass","runSequence","animations","registerEffect","effectName","unregisterEffect","CompositionTransactionNotifier","owner","_compositionCount","_tryCompleteTransaction","CompositionTransactionOwnershipToken","_ownershipToken","thenable","_createThenable","waitForCompositionComplete","_resolveCallback","CompositionTransaction","tryCapture","enlist","capitalMatcher","addHyphenAndLower","char","_hyphenate","_isAllWhitespace","auInterpolationTarget","ViewEngineHooksResource","registerViewEngineHooks","ElementEvents","subscriptions","_enqueueHandler","_dequeueHandler","publish","detail","bubbles","cancelable","createCustomEvent","captureOrOptions","defaultListenerOptions","EventHandlerImpl","subscribeOnce","subscription","disposeAll","ResourceLoadContext","hasDependency","ViewCompileInstruction","targetShadowDOM","compileSurrogate","associatedModuleId","normal","BehaviorInstruction","enhance","unitTest","anchorIsContainer","hasAttribute","containerless","initiatedByBehavior","attrName","dynamic","viewFactory","inheritBindingContext","biProto","partReplacements","originalAttrName","skipContentProcessing","contentFactory","TargetInstruction","shadowSlot","parentInjectorId","contentExpression","letElement","lifting","liftingInstruction","noExpressions","behaviorInstructions","providers","injectorId","elementInstruction","surrogate","tiProto","slotName","slotFallbackFactory","viewStrategy","loadViewFactory","makeRelativeTo","RelativeViewStrategy","absolutePath","viewEngine","compileInstruction","loadContext","ConventionalViewStrategy","viewLocator","viewUrl","convertOriginToViewUrl","NoViewStrategy","dependencyBaseUrl","TemplateRegistryViewStrategy","InlineViewStrategy","StaticViewStrategy","_this2","appResources","viewCompiler","viewResources","ViewResources","elDeps","_iterator","_isArray","elementName","_key2","exported","ViewLocator","getViewStrategy","_origin","$view","_view","viewStrategyMetadataKey","createFallbackViewStrategy","BindingLanguage","inspectAttribute","attrValue","createAttributeInstruction","existingInstruction","createLetExpressions","inspectTextContent","noNodes","SlotCustomAttribute","auSlotAttribute","valueChanged","PassThroughSlot","destinationName","fallbackFactory","viewSlot","destinationSlot","projections","contentView","renderFallbackContent","projectionSource","ownerView","slots","ShadowDOM","distributeView","passThroughTo","addNode","removeNodes","detached","removeView","needsFallbackRendering","removeAll","projectFrom","created","attached","ShadowSlot","isContentProjectionSource","projectFromAnchors","destinationSlots","destination","distributeNodes","auOwnerView","auProjectionSource","auAssignedSlot","_findAnchor","insertBefore","undistributeView","hasSlots","auSlotProjectFrom","_children","auProjectionChildren","_child","undistributeAll","_children2","_child2","_children3","viewIndex","lastView","projectTo","createComment","insertNodesBefore","slot","fallbackSlots","getSlotName","defaultSlotKey","destinationOverride","childNodes","_slotName","validateBehaviorName","newName","bindingLanguage","hasParent","getValueConverter","getBindingBehavior","attributeMap","beforeCompile","afterCompile","beforeCreate","afterCreate","beforeBind","beforeUnbind","$resource","HtmlBehaviorResource","resourceType","_name","liftsContent","templateController","attributeDefaultBindingMode","defaultBindingMode","_bindables","bindables","currentProps","newProp","BindableProperty","existed","registerWith","_tryAddHook","callbackName","_invokeHook","two","three","four","getBindingLanguage","bindingLanguageFallback","patchInParent","newParent","originalParent","relativeToView","registerElement","getElement","mapAttribute","registerAttribute","knownAttribute","registerValue","impl","resourceTypeMeta","controllers","bindings","_key3","lastChild","fromCache","isAttached","viewModelScope","animatableElement","_isUserControlled","returnToCache","returnViewToCache","_systemUpdate","addBinding","refNode","appendNodesTo","nextSibling","getAnimatableElement","ViewSlot","animator","contentSelectors","animateView","transformChildNodesIntoView","_children4","move","sourceIndex","targetIndex","skipAnimation","removeAt","removeMany","viewsToRemove","rmPromises","animation","removeAction","_child3","projectToSlots","_projectionAdd","_projectionInsert","_projectionMove","_projectionRemove","_projectionRemoveAt","_projectionRemoveMany","_projectionRemoveAll","providerResolverInstance","ProviderResolver","__providerId__","elementContainerGet","BoundViewFactory","boundViewFactory","_partReplacements","elementEvents","compositionTransaction","superGet","_element","applyInstructions","containers","shadowSlots","elementContainer","commentAnchor","slotDestination","replaceNode","contentElement","makeElementIntoAnchor","createElementContainer","styleStringToObject","firstIndexOfColon","styleObjectToString","_key4","parentContainer","factoryCreateInstruction","setCacheSize","doNotOverrideIfAlreadySet","getCachedView","isCaching","ViewFactory","instructions","cacheSize","createInstruction","cachedView","cloneNode","instructables","instructable","surrogateInstruction","currentAttributeValue","_key5","styleObject","applySurrogateInstruction","nextInjectorId","lastAUTargetID","makeIntoInstructionTarget","auTargetID","defaultLetHandler","ViewCompiler","adoptNode","shadowDOM","_compileNode","targetId","ins","_compileSurrogate","targetLightDOM","_compileElement","wholeText","currentChild","hasValues","hasOptions","primaryProperty","_primaryProperty","alteredAttr","_configureProperties","attrToRemove","elementProperty","compiler","auShadowSlot","createDocumentFragment","_child4","makeShadowSlot","namespaceURI","processAttributes","_primaryProperty2","ResourceModule","moduleInstance","mainResource","onLoaded","vs","main","loads","ResourceDescription","ModuleAnalyzer","getAnalysis","analyze","mainResourceKey","fallbackValue","fallbackKey","conventional","resourceModule","ProxyViewFactory","auSlotBehavior","ViewEngine","moduleAnalyzer","_pluginMap","addResourcePlugin","extension","urlOrRegistryEntry","ensureRegistryEntry","registryEntry","loadTemplateResources","importIds","viewModelRequires","viewModelRequireMetadataKey","templateImportCount","importId","importViewResources","importViewModelResource","moduleImport","viewModelModule","normalizedId","moduleIds","_applyLoaderPlugin","imports","analysis","associatedModule","allAnalysis","ext","Controller","observerLookup","handlesBind","boundProperties","_ensurePropertiesDefined","_initialize","owningView","handlesCreated","automate","skipSelfSubscriber","selfSubscriber","publishing","__parentOverrideContext","_ii2","_boundProperties","_i3","handlesUnbind","handlesAttached","handlesDetached","BehaviorPropertyObserver","initialValue","notqueued","_behavior","nameOrConfig","changeHandler","_configureDescriptor","defaultValue","initializer","defineOn","handlerName","createObserver","changeHandlerName","propertyChanged","behaviorHandlesBind","isDynamic","_key6","_createDynamicProperty","lastProviderId","doProcessContent","doProcessAttributes","shadowDOMOptions","processContent","usesShadowDOM","childBindings","hasDynamicOptions","addChildBinding","htmlName","_copyInheritedProperties","transientView","_partReplacements2","toReplace","removeNode","viewHost","attachShadow","_i4","_ii3","_i5","_ii4","_i6","_ii5","_i7","_ii6","_i8","_ii7","__propertiesDefined__","derived","_i9","_ii8","ChildObserver","selector","ChildObserverBinder","noMutations","trackMutation","groupedMutations","binder","mutations","onChildChange","binders","bindersLength","_i10","_ii9","added","addedNodes","removedNodes","_node","onRemove","_jj","_node2","_k","_binder","onAdd","assignedSlot","anchors","_i11","_ii10","__childObserver__","nextElementSibling","_value2","_value3","prev","previousElementSibling","SwapStrategies","with","tryActivateViewModel","skipActivation","CompositionEngine","_swap","swapStrategy","swapOrder","previousViews","currentController","compositionTransactionNotifier","_createControllerAndSwap","createController","compositionTransactionOwnershipToken","childContainer","viewModelResource","ensureViewModel","ElementConfigResource","instanceOrConfig","customElement","customAttribute","bindable","nameOrConfigOrTarget","key2","descriptor2","actualTarget","_target","defaultShadowDOMOptions","useShadowDOM","targetOrOptions","useViewStrategy","useView","inlineView","noView","targetOrDependencies","TemplatingEngine","_dec11","compositionEngine","_container","_moduleAnalyzer","_viewCompiler","_compositionEngine","configureAnimator","compilerInstructions","letExpressions","Timeout","clearFn","_id","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","__assign","__rest","__param","paramIndex","__exportStar","__values","__read","ar","__spread","__await","__asyncGenerator","asyncIterator","fulfill","settle","__asyncDelegator","__asyncValues","__makeTemplateObject","__importStar","__importDefault","argument","NASHORN_BUG","enforceInternalState","enforce","TEMPLATE","simple","Action","ChildPath","indigo","appendConfirm","_rev","newRevKey","confirms","appendHistoryConfirm","idRev","itemIndex","historyConfirm","_log","newLogKey","logs","appendUser","_user","updateUser","isTodo","appendCurriculum","_curriculum","curriculum","newCurriculumKey","curricula","updateCurriculum","updateCurriculumStyle","curriculumStyle","deleteCurriculum","categories","cat","deleteCategory","appendCategory","_category","category","newCategoryKey","updateCategory","aggiornamenti","appendElement","newElementKey","updateElement","eles","deleteElement","NATIVE_WEAK_MAP","objectHas","sharedKey","wmget","wmhas","wmset","STATE","TYPE","internalObjectKeys","enumBugKeys","CONSTRUCTOR","METHOD","teal","functions","_dereq_","SomePromiseArray","_SomePromiseArray","any","promises","setHowMany","setUnwrap","firstLineError","schedule","Queue","Async","_customScheduler","_isTickUsed","_lateQueue","_normalQueue","_haveDrainedQueues","_trampolineEnabled","drainQueues","_drainQueues","_schedule","AsyncInvokeLater","receiver","_queueTick","AsyncInvoke","AsyncSettlePromises","_pushOne","_drainQueue","_drainQueueStep","_settlePromises","setScheduler","hasCustomScheduler","enableTrampoline","disableTrampolineIfNecessary","hasDevTools","haveItemsQueued","fatalError","isNode","stderr","exit","throwLater","invokeLater","settlePromises","_reset","tryConvertToPromise","calledBind","rejectThis","_reject","targetRejected","promiseRejectionQueued","bindingPromise","_then","bindingResolved","_bitField","bindingRejected","_propagateFrom","propagateFromFunction","_boundValue","boundValueFunction","maybePromise","_setBoundTo","_setOnCancel","_boundTo","_isBound","bluebird","noConflict","cr","callerCache","getterCache","canEvaluate","caller","methodName","classString","ensureMethod","namedGetter","indexedGetter","isIdentifier","maybeGetter","getGetter","PromiseArray","apiRejection","tryCatch","errorObj","_async","cancellation","_warn","_isCancellable","_cancelBy","_isFollowing","_followee","_cancelBranched","_cancellationParent","_setWillBeCancelled","_branchHasCancelled","_branchesRemainingToCancel","_enoughBranchesHaveCancelled","canceller","_invokeOnCancel","_cancel","_setCancelled","_cancelPromises","_length","_unsetOnCancel","_onCancelField","isPending","_isCancelled","isCancellable","isCancelled","_doInvokeOnCancel","onCancelCallback","internalOnly","_attachExtraTrace","_resultCancelled","_onCancel","_invokeInternalOnCancel","NEXT_FILTER","getKeys","boundTo","predicateLoop","matchesPredicate","longStackTraces","contextStack","Context","_trace","CapturedTrace","peekContext","_promiseCreated","_pushContext","_popContext","_peekContext","trace","deactivateLongStackTraces","activateLongStackTraces","Promise_pushContext","Promise_popContext","Promise_PeekContext","Promise_peekContext","Promise_promiseCreated","unhandledRejectionHandled","possiblyUnhandledRejection","printWarning","getDomain","_getDomain","Warning","es5","canAttachTrace","bluebirdFramePattern","nodeFramePattern","parseLinePattern","stackFramePattern","formatStack","indentStackFrames","debugging","wForgottenReturn","suppressUnhandledRejections","_ensurePossibleRejectionHandled","_setRejectionIsUnhandled","_notifyUnhandledRejection","_notifyUnhandledRejectionIsHandled","fireRejectionEvent","_setReturnedNonUndefined","_returnedNonUndefined","_isRejectionUnhandled","_settledValue","_setUnhandledRejectionIsNotified","_unsetUnhandledRejectionIsNotified","_isUnhandledRejectionNotified","_unsetRejectionIsUnhandled","shouldUseOwnTrace","onPossiblyUnhandledRejection","domainBind","onUnhandledRejectionHandled","disableLongStackTraces","longStackTracesIsSupported","Promise_captureStackTrace","_captureStackTrace","Promise_attachExtraTrace","Promise_dereferenceTrace","_dereferenceTrace","longStackTracesCaptureStackTrace","longStackTracesAttachExtraTrace","longStackTracesDereferenceTrace","hasLongStackTraces","fireDomEvent","CustomEvent","domEvent","Event","initCustomEvent","fireGlobalEvent","generatePromiseLifecycleEventObject","eventToObjectGenerator","promiseCreated","promiseFulfilled","promiseRejected","promiseResolved","promiseCancelled","promiseChained","unhandledRejection","rejectionHandled","activeFireEvent","globalEventFired","domEventFired","defaultFireEvent","cancellationExecute","executor","onCancel","_attachCancellationCallback","cancellationAttachCancellationCallback","previousOnCancel","cancellationOnCancel","cancellationSetOnCancel","cancellationClearCancellationData","cancellationPropagateFrom","branchesRemainingToCancel","warningsOption","_clearCancellationData","_execute","monitoring","_fireEvent","isFulfilled","ignoreSelf","_parent","attachExtraTrace","__stackCleaned__","parseStackAndMessage","notEnumerableProp","formatAndLogError","cleanStack","isTraceLine","isInternalFrame","shouldIgnore","stackFramesAsArray","isSoft","localHandler","localEventFired","formatNonError","maxChars","snip","parseLineInfoRegex","parseLineInfo","fileName","_promisesCreated","uncycle","inherits","stackToIndex","cycleEdgeNode","currentChildLength","stacks","currentLastIndex","currentLastLine","commonRootMeetPoint","removeCommonRoots","removeDuplicateOrEmptyJumps","reconstructStack","v8stackFramePattern","v8stackFormatter","stackTraceLimit","ignoreUntil","hasStackAfterThrow","isTTY","checkForgottenReturns","handlerLine","creatorLine","traceLines","lineMatches","firstUserLine","setBounds","lastLineError","firstFileName","lastFileName","firstStackLines","lastStackLines","firstIndex","deprecated","returner","thrower","thenReturn","thenThrow","catchThrow","_reason","caught","catchReturn","PromiseReduce","PromiseAll","promiseAllThis","mapSeries","_TypeError","_RangeError","Objectfreeze","subError","nameProperty","defaultMessage","SubError","CancellationError","TimeoutError","OperationalError","cause","errorTypes","RejectionError","isES5","getDescriptor","propertyIsWritable","ObjectKeys","PromiseMap","catchFilter","PassThroughHandlerContext","called","cancelPromise","FinallyHandlerCancelReaction","finallyHandler","checkCancel","succeed","fail","reasonOrValue","isFinallyHandler","isRejected","_passThrough","lastly","tap","tapCatch","handlerOrPredicate","catchInstances","Proxyable","yieldHandlers","PromiseSpawn","generatorFunction","yieldHandler","internal","_finallyPromise","_promise","_stack","_generatorFunction","_receiver","_generator","_yieldHandlers","_yieldedPromise","_cancellationPhase","_isResolved","_cleanup","_fulfill","_promiseCancelled","coroutine","returnSentinel","_continue","_promiseFulfilled","_promiseRejected","_run","_rejectCallback","traceParent","promiseFromYieldHandler","bitField","_proxy","PromiseSpawn$","spawn","addYieldHandler","spread","MappingPromiseArray","_filter","constructor$","_callback","_preservedValues","_limit","_inFlight","_queue","_asyncInit","concurrency","_init$","_init","preservedValues","_totalResolved","_resolve","booleans","_resolveFromSyncValue","attempt","maybeWrapAsError","rErrorKey","wrapAsOperationalError","isUntypedError","markAsOriginatingFromRejection","multiArgs","wrapped","spreadAdapter","nodeback","successAdapter","errorAdapter","newReason","asCallback","nodeify","makeSelfResolutionError","reflectHandler","PromiseInspection","UNDEFINED_BINDING","APPLY","createContext","nodebackForPromise","_fulfillmentHandler0","_rejectionHandler0","_promise0","_receiver0","_resolveFromExecutor","deferResolve","deferReject","fillTypes","reflect","didFulfill","didReject","_setIsFinal","fulfillmentValue","rejectionReason","originatesFromRejection","getNewLibraryCopy","fromNode","fromCallback","_isFateSealed","_setAsyncGuaranteed","cast","_setFulfilled","internalData","haveInternalData","settler","_settlePromiseCtx","_settlePromiseLateCancellationObserver","_addCallbacks","_setLength","_setRejected","_setFollowing","_isFinal","_unsetCancelled","_receiverAt","_promiseAt","_fulfillmentHandlerAt","_rejectionHandlerAt","_migrateCallback0","follower","_migrateCallbackAt","proxyable","shouldBind","_setFollowee","synchronous","ignoreNonErrorWarnings","ensureErrorObject","hasStack","_settlePromiseFromHandler","_settlePromise","isPromise","asyncGuaranteed","_settlePromise0","_clearCallbackDataAtIndex","_fulfillPromises","_rejectPromises","defer","toFastProperties","resolveValueIfEmpty","asArray","_iterate","_resolveEmptyArray","toResolutionValue","getActualLength","shouldCopyValues","isResolved","THIS","withAppended","defaultPromisified","__isPromisified__","noCopyPropsPattern","defaultFilter","propsFilter","isPromisified","hasPromisified","getDataPropertyOrDefault","promisifiableMethods","suffixRegexp","inheritedDataKeys","passesDefaultFilter","keyWithoutAsyncSuffix","checkValid","escapeIdentRegex","makeNodePromisified","makeNodePromisifiedEval","defaultThis","promisified","promisifyAll","promisifier","promisifiedKey","promisify","copyDescriptors","Es6Map","mapToEntries","extractEntry","PropertiesPromiseArray","isMap","_isMap","castValue","entriesToMap","keyOffset","_capacity","_front","_willBeOverCapacity","_checkCapacity","wrapMask","_resizeTo","oldCapacity","srcIndex","dst","dstIndex","arrayMove","raceLater","ReductionPromiseArray","_each","_fn","_initialValue","_currentCancellable","_eachValues","valueOrReason","gotAccum","_gotAccum","gotValue","_eachComplete","sender","_resultCancelled$","toggleScheduled","div2","NativePromise","getNativePromise","MutationObserver","GlobalSetImmediate","ProcessNextTick","isRecentNode","nativePromise","cordova","toggle","SettledPromiseArray","_promiseResolved","inspection","_settledValueField","CANCELLATION","_howMany","_unwrap","_initialized","howMany","isArrayResolved","_canPossiblyFulfill","_getRangeError","_addFulfilled","_fulfilled","_addRejected","_checkOutcome","_rejected","__isCancelled","hasProp","doGetThen","getThen","isAnyBluebirdPromise","doThenable","HandleWrapper","afterValue","delay","successClear","failureClear","handleWrapper","afterTimeout","NULL","_isDisposable","_getDisposer","_setDisposable","castPreservingDisposable","tryDispose","Disposer","_context","FunctionDisposer","maybeUnwrapDisposer","isDisposer","ResourceList","doDispose","_unsetDisposable","using","spreadArgs","disposer","reflectedResources","resultPromise","inspections","_disposer","tryCatchTarget","globalObject","tryCatcher","Child","isPrimitive","maybeError","safeToString","appendee","excludedPrototypes","isExcludedProto","visitedKeys","enumeration","thisAssignmentPattern","hasMethods","hasMethodsOtherThanConstructor","hasThisAssignmentAndStaticMethods","FakeConstructor","rident","filledRange","isError","ignore","ArrayFrom","itResult","hasEnvVariables","chrome","loadTimes","prefixStyle","lightblue","arrow","_docLog","_fixmeLog","_todoLog","isDoc","isFixme","defaultPrefix","s1","callingDebugMode","evtobj","alert","onkeydown","s2","pink","fill","black","green","classicLog","grouped","groupCollapsed","groupEnd","openGroup","closeGroup","isEnabled","purple","red","yellow","cyan","gray","graydark","secondary","light","dark","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","runIfPresent","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","postfix","UNSCOPABLES","ArrayPrototype","documentCreateElement","IE_PROTO","createDict","iframeDocument","lt","getLastError","getAllErrors","errorStack","ConsoleUnavailable","calc_average_degree","average","neighbors","nCk","log10","log2","factorial","_exclude_additive","bruteforce_update","make_bruteforce_match","matches_by_j","optimal","optimal_l","optimal_match_sequence","unwind","competing_g","competing_l","estimate_guesses","last_m","results1","candidate_g","candidate_l","min_guesses","bruteforce","bruteforce_guesses","dictionary","dictionary_guesses","spatial","spatial_guesses","repeat_guesses","sequence_guesses","regex_guesses","date_guesses","MIN_SUBMATCH_GUESSES_SINGLE_CHAR","MIN_SUBMATCH_GUESSES_MULTI_CHAR","first_chr","MIN_YEAR_SPACE","char_class_bases","year_space","alpha_lower","alpha_upper","alpha","alphanumeric","digits","KEYBOARD_AVERAGE_DEGREE","KEYPAD_AVERAGE_DEGREE","KEYBOARD_STARTING_POSITIONS","KEYPAD_STARTING_POSITIONS","shifted_variations","reversed_variations","uppercase_variations","l33t_variations","END_UPPER","ALL_LOWER","variations","chrs","possibilities","subbed","unsubbed","zxcvbn","user_inputs","attack_times","sanitized_inputs","calc_time","min_markers","marker_str","marker_char","marker_len","_options","marker_count","old_parent","old_line_max","auto_closed","VERSION","PALETTE_MATERIAL_CHROME","PALETTE_MATERIAL_500","COLOR_NAMES","getLuminance","intToRgb","rgbToInt","rgbToHsv","rgbToHsl","hslToRgb","rgbToHex","parseColor","parseColorToHsla","parseColorToHsl","parseColorToRgba","parseColorToRgb","createPicker","showHSL","showRGB","showHEX","showAlpha","palette","paletteEditable","useAlphaInPalette","slBarSize","hueBarSize","alphaBarSize","HTMLElement","jquery","createLinearGradient","addColorStop","setHue","fillStyle","fillRect","globalCompositeOperation","grabColor","getImageData","findColor","nvl","setupHueCanvas","hueBarHelper","huePointer","setupSlCanvas","slBarHelper","slPointer","preview","setupClipboard","setupInput","inputH","inputS","inputL","inputR","inputG","inputB","inputRGBHEX","setPalette","setupAlphaCanvas","alphaPointer","onValueChanged","getBoundingClientRect","select","execCommand","ensureArray","backgroundColor","onPaletteColorAdd","onPaletteColorRemove","updatePointerH","updateInputHSL","updateInputRGB","updateInputRGBHEX","updatePointerSL","updatePointerA","cssColorToRgb","onColorChanged","onchange","oncoloradd","oncolorremove","coloradd","colorremove","destroy","cssHslaToHsla","cssHslToHsl","cssRgbaToRgba","cssRgbToRgb","cssColorToRgba","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","grey","greenyellow","honeydew","hotpink","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","plum","powderblue","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellowgreen","btoa","sources","sourceRoot","assertion","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","HAS_NATIVE_SUPPORT","opt_webSafe","init_","byteToCharMap","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","encodeString","decodeString","c1","c2","c3","byteArrayToString","decodeStringToByteArray","charToByteMap","byte4","ENCODED_VALS","ENCODED_VALS_WEBSAFE","base64Decode","deepExtend","getUA","ERROR_NAME","FirebaseError","ErrorFactory","serviceName","fullCode","PATTERN","replaceTemplate","fullMessage","signature","objTo","objFrom","opt_this","chain_","buf_","W_","pad_","inbuf_","total_","blockSize","compress_","opt_offset","opt_length","lengthMinusBlock","inbuf","totalBits","ObserverProxy","onNoObservers","observers","unsubscribes","observerCount","forEachObserver","methods_1","implementsAnyMethods","unsub","unsubscribeOne","finalError","sendOne","argName","rv","isValidTimestamp","validSince","validUntil","opt_obj","patchProperty","querystringParams","arrayVal","querystringDecode","minCount","maxCount","argCount","argError","validateNamespace","specificCreate","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","boundFunction","charSpec","nextStates","validChars","invalidChars","escapeRegex","StaticSegment","caseSensitive","eachChar","generate","DynamicSegment","StarSegment","EpsilonSegment","RouteRecognizer","rootState","routes","route","skippableStates","types","statics","dynamics","stars","routeName","segments","normalizedRoute","splitRoute","_match","_addSegment","addSegment","firstState","nextState","routeNames","getRoute","nameOrRoute","handlersFor","hasRoute","generationUsesHref","routeParams","segmentValue","param","recognize","states","isSlashDropped","normalizedPath","queryStart","pathLen","recognizeChar","solutions","sortSolutions","currentCapture","RecognizeResults","_names","_params","findHandler","NavigationInstruction","plan","viewPortInstructions","ancestorParams","hasChildRouter","getWildCardName","parentInstruction","allParams","lifecycleArgs","getAllInstructions","childInstruction","childNavigationInstruction","getAllPreviousInstructions","previousInstruction","addViewPortInstruction","nameOrInitOptions","viewPortInstruction","viewPortName","currentViewPort","childRouter","configRoute","wildcardIndex","getWildcardPath","wildcardName","getBaseUrl","$encodeURI","nonEmptyRoute","router","_commitChanges","waitToSwap","currentInstruction","navModel","isActive","refreshNavigation","delaySwaps","viewPort","viewPorts","childNavInstruction","parentCatchHandler","swap","prune","_updateTitle","_buildTitle","titleSeparator","history","childTitles","navModelTitle","instructionRouter","transformTitle","child_nav_instruction","childTitle","NavModel","relativeHref","updateTitle","_normalizeAbsolutePath","hasPushState","absolute","_createRootedPath","baseUrl","isAbsoluteUrl","_ensureArrayWithSingleRoutePerConfig","routeConfigs","isRootedPath","RouterConfiguration","pipelineSteps","addPipelineStep","addAuthorizeStep","addPreActivateStep","addPreRenderStep","addPostRenderStep","fallbackRoute","_fallbackRoute","mapRoute","useViewPortDefaults","viewPortConfig","viewPortDefaults","routeConfig","createNavModel","addRoute","mapUnknownRoutes","unknownRouteConfig","exportToRouter","handleUnknownRoutes","pipelineStepCount","isRoot","pipelineProvider","_b","name_1","addStep","Router","isConfigured","isNavigating","isExplicitNavigation","isExplicitNavigationBack","isNavigatingFirst","isNavigatingNew","isNavigatingRefresh","isNavigatingForward","isNavigatingBack","couldDeactivate","navigation","_fallbackOrder","_recognizer","_childRecognizer","_configuredPromise","_resolveConfiguredPromise","registerViewPort","ensureConfigured","callbackOrConfig","_resolveUrl","_hasPushState","navigateToRoute","recognizer","rootedPath","nav","validateRouteConfig","navigationStrategy","withChild","hasOwnRoute","catchAllHandler","_createRouteConfig","parentRouter","length_1","$viewPortDefaults","_refreshBaseUrl","generateBaseUrl","_createNavigationInstruction","queryIndex","urlRecognizationResults","instructionInit","compareQueryParams","evaluateNavigationStrategy","_parentCatchAllHandler","newParentInstruction","_findParentInstructionFromRouter","evaluator","createCompletionHandler","Pipeline","steps","getSteps","currentStep","createNextFn","nextFn","isNavigationCommand","Redirect","shouldContinueProcessing","setRouter","appRouter","useAppRouter","RedirectToRoute","_buildNavigationPlan","forceLifecycleMinimum","buildRedirectPlan","prevInstruction","defaultViewPortConfigs","buildTransitionPlans","viewPortPlans","viewPortConfigs","InternalActivationStrategy","redirectInstruction","originalInstructionParams","redirectInstructionParams","redirectLocation","newInstructionConfig","hasNewParams","hasDifferentParameterValues","previousViewPortInstructions","prevViewPortInstruction","prevViewPortComponent","newInstructionViewPortConfigs","nextViewPortConfig","viewPortActivationStrategy","determineActivationStrategy","viewPortPlan","prevComponent","prevModuleId","childPlan","currentNavInstruction","newViewPortConfig","prevViewPortViewModel","activationStrategy","prevParams","nextParams","nextWildCardName","prevQueryParams","nextQueryParams","BuildNavigationPlanStep","navigationInstruction","loadNewRoute","routeLoader","loadPromises","determineLoadingPlans","loadingPlan","loadRoute","loadingPlans","planConfig","loadComponent","childRouter_1","getChildRouter","configureRouter","RouteLoader","LoadRouteStep","CommitChangesStep","PipelineStatus","RouterEvent","PipelineSlotName","processDeactivatable","ignoreResult","infos","findDeactivatable","shouldContinue","iterate","processPotential","addPreviousDeactivatable","prevViewModel","processActivatable","findActivatable","current_1","viewPortComponent","SafeSubscription","subscriptionFunc","_subscribed","_subscription","obs_1","subscribed","CanDeactivatePreviousStep","CanActivateNextStep","DeactivatePreviousStep","ActivateNextStep","PipelineSlot","slotAlias","PipelineProvider","createPipelineSlot","createPipeline","useCanDeactivateStep","pipeline","_findStep","slotSteps","removeStep","_clearSteps","AppRouter","maxInstructionCount","loadUrl","_queueInstruction","restorePreviousLocation","$viewPort","_dequeueInstruction","viewModel_1","_findViewModel","resolveConfiguredPromise_1","routeHandler","instructionCount","navtracker","currentNavTracker","currentNavigationTracker","processResult","resolveInstruction","finalResult","navigationCommandResult","innerResult","isInnerInstruction","eventAggregator","eventArgs","previousLocation","aFunction","originalArray","exist","arrayIndexOf","createIteratorConstructor","IteratorsCore","BUGGY_SAFARI_ITERATORS","Iterable","IS_SET","CurrentIteratorPrototype","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","ERRORS","appErrors","DEFAULT_ENTRY_NAME","tokenListeners","FirebaseAppImpl","firebase_","isDeleted_","services_","automaticDataCollectionEnabled_","automaticDataCollectionEnabled","checkDestroyed_","removeApp","services","serviceKey","_c","instanceKey","_getService","instanceIdentifier","instanceSpecifier","factories","extendApp","sdkVersion","createFirebaseNamespace","firebaseAppImpl","apps","appHooks","initializeApp","rawConfig","callAppHooks","createService","serviceProperties","appHook","allowMultipleInstances","getApps","serviceNamespace","appArg","serviceFxn","useAsService","factoryName","useService","createFirebaseNamespaceCore","PrototypeOfArrayIteratorPrototype","arrayIterator","CORRECT_PROTOTYPE_GETTER","pluralForm","plurals","pluralize","loadingCompleted","fireSetup","databaseURL","storageBucket","messagingSenderId","appVersionInfo","stage","releaseDate","author","fire","pushState","visibility","navPosition","focusMode","onLoadingCompleted","AuthorizeStep","loginRequired","messageType","invokeCallback","invokeHandler","EventAggregator","eventLookup","messageHandlers","subscribers","FrameworkConfiguration","hostConfigured","_started","evt","applicationHost","_configureHost","engine","_onAureliaComposed","initialComposition","hostSlot","extPattern","runTasks","tasks","loadResources","resourcesToLoad","getExt","isOtherResource","removeExt","addOriginalExt","_normalize","loadBehaviors","behaviorsToLoad","assertProcessed","plugins","processed","invalidConfigMsg","cfg","preTasks","postTasks","configuredPlugins","preTask","postTask","_instance","transient","_moduleId","resourcesRelativeTo","globalResources","toAdd","grandParent","globalName","resourcePath","_plugin","pluginConfig","_addNormalizedPlugin","defaultBindingLanguage","defaultResources","basicConfiguration","ConsoleAppender","fwConfig","_loadPlugin","loadPlugin","LinkHandler","DefaultLinkHandler","getEventInfo","shouldHandleEvent","findClosestAnchor","targetIsThisWindow","leftButtonClicked","which","isRelative","targetWindow","win","BrowserHistory","linkHandler","_isActive","_checkUrlCallback","_checkUrl","$history","wantsPushState","normalizedOptions","rootUrl","rootStripper","wantsHashChange","_wantsHashChange","hashChange","$location","atRoot","_getFragment","_getHash","routeStripper","replaceState","_loadUrl","absoluteUrl","updateHash","back","historyIndex","forcePushState","location_1","fragmentOverride","$config","_console","_console2","_len2","_console3","_len3","_console4","_len4","_PLATFORM","FEATURE_NO_IE","createElementNS","testElement","createMethod","original","_toggle","force","strTrim","arrIndexOf","emptyArray","DOMEx","DOMException","checkTokenAndGetIndex","ClassList","trimmedClasses","classes","_updateClassName","classListProto","updated","_filterEntries","_entries","_clearEntries","entryType","nowOffset","timing","navigationStart","_marksIndex","mark","webkitMark","startTime","measure","webkitMeasure","startMark","endMark","getEntriesByType","webkitGetEntriesByType","getEntriesByName","webkitGetEntriesByName","clearMarks","webkitClearMarks","clearMeasures","webkitClearMeasures","con","nop","memory","_CustomEvent","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","_FEATURE","scopedCSS","htmlTemplateElement","WebKitMutationObserver","ensureHTMLTemplateElement","fixSVGTemplateElement","ownerDocument","fixHTMLTemplateElement","childTemplates","shadowPoly","ShadowDOMPolyfill","_DOM","createAttribute","createTemplateElement","getComputedStyle","appendNode","replaceChild","unwrap","injectStyles","oldStyle","head","dom","activeElement","AttributeMap","allElements","registerUniversal","InterpolationBindingExpression","ChildInterpolationBinding","InterpolationBinding","validateTarget","parentElement","targetAccessor","interpolate","updateOneTimeBindings","rawValue","LetExpression","toBindingContext","LetBinding","LetInterpolationBindingExpression","LetInterpolationBinding","interpolationBinding","createInterpolationBinding","SyntaxInterpreter","interpret","handleUnknownCommand","determineDefaultBindingMode","contentEditable","inString","inEscape","foundName","_getPrimaryPropertyName","isDestructuring","keyValue","TemplatingBindingLanguage","_BindingLanguage","syntaxInterpreter","emptyStringExpression","toBindingContextAttr","interpolationParts","parseInterpolation","theInfo","nodeValue","interpolationStart","partIndex","ActivationStrategy","Compose","InvokeLifecycle","currentViewModel","pendingTask","processChanges","modelChanged","requestUpdate","viewChanged","viewModelChanged","composer","Replace","needsReInitialization","completeCompositionTask","updateRequested","IfCore","showing","_show","_hide","_unbindView","conditionChanged","_update","show","animating","elseVm","Else","_registerInIf","ifVm","previousSibling","if","With","updateOverrideContexts","views","startIndex","updateOverrideContext","createFullOverrideContext","even","$index","$first","$last","$middle","$odd","$even","updateOneTimeBinding","ArrayRepeatStrategy","getCollectionObserver","instanceChanged","$repeat","itemsLength","viewsLength","viewsRequireLifecycle","childrenSnapshot","itemNameInBindingContext","matcher_1","itemsPreviouslyInViews_1","oldItem","updateViews","removePromise","removeViews","indexOfView","insertView","moveView","_inPlaceProcessItems","removeAllViews","_standardProcessInstanceChanged","addView","viewCount","updateBindings","instanceMutated","__queuedSplices","__array","_runSplices","queuedSplices_1","runQueuedSplices_1","nextPromise","removeDelta","viewOrPromise","spliceIndexLow","_handleAddedSplices","spliceIndex","MapRepeatStrategy","_standardProcessItems","removeIndex","_getViewIndexByKey","NullRepeatStrategy","NumberRepeatStrategy","childrenLength","SetRepeatStrategy","_getViewIndexByValue","RepeatStrategyLocator","strategies","addStrategy","getStrategy","lifecycleOptionalBehaviors","behaviorRequiresLifecycle","targetRequiresLifecycle","behaviors","_viewsRequireLifecycle","Repeat","strategyLocator","ignoreMutation","getItemsSourceExpression","isOneTime","Repeat_1","matcherBinding","_captureAndRemoveMatcherBinding","itemsChanged","_unsubscribeCollection","callContext","_observeInnerCollection","_observeCollection","_getInnerCollection","unwrapped","unwrapExpression","handleCollectionMutated","handleInnerCollectionMutated","newItems","useInnerMatcher","extractMatcherBindingExpression","repeatedElement","repeatedElementTargetId","AbstractRepeater","targetedElementId","instructionIds","instructionId","matcherBindingExpression","aureliaHideClass","injectAureliaHideStyleAtBoundary","domBoundary","hasAureliaHideStyle","Show","Hide","SCRIPT_REGEX","needsToWarn","HTMLSanitizer","sanitize","SanitizeHTMLValueConverter","sanitizer","untrustedMarkup","Replaceable","Focus","needsApply","_apply","blur","cssUrlMatcher","CSSResource","_scoped","_global","_alreadyGloballyInjected","css","fixupCSSUrls","CSSViewEngineHooks","AttrBindingBehavior","modeBindingBehavior","originalMode","OneTimeBindingBehavior","OneWayBindingBehavior","ToViewBindingBehavior","FromViewBindingBehavior","TwoWayBindingBehavior","throttle","throttleState","elapsed","throttledMethod","ThrottleBindingBehavior","methodToThrottle","originalName","unset","debounceCallSource","debounceState","debouncedMethod","debounceCall","callContextToDebounce","_oldValue","DebounceBindingBehavior","isCallSource","methodToDebounce","debouncer","handleSelfEvent","selfEventCallSource","SelfBindingBehavior","BindingSignaler","signal","SignalBindingBehavior","bindingSignaler","signalName","name_2","eventNamesRequired","notApplicableMessage","UpdateTriggerBindingBehavior","originalHandler","bindableNames","useShadowDOMmode","DynamicElement","_createDynamicElement","configure$1","styleResourcePlugin","ViewCSS","_createCSSResource","EmptyLayoutViewModel","RouterView","$viewPortInstruction","RouterViewLocator","_notify","layoutInstruction","layoutViewModel","layoutView","layoutModel","viewPortComponentBehaviorInstruction","viewPortController","previousView","work","owningView_or_layoutView","transactionOwnerShipToken","layoutController","newView","notifier","findNearest","routerView","EmptyClass","TemplatingRouteLoader","resolveViewModel","DynamicClass","createDynamicClass","createChildContainer","_navInstruction","RouteHref","processChange","attributeChanged","getTargetDOMElement","getObject","objectExpression","getPropertyInfo","originalExpression","PropertyAccessorParser","accessorText","getAccessorExpression","accessor","validateTrigger","Validator","ValidateResult","ValidateEvent","controllerValidateResult","ValidationController","propertyParser","renderers","validating","objects","finishValidating","eventCallbacks","addObject","removeObject","processResultDelta","addError","resolvedPropertyName","__manuallyAdded__","removeError","removeRenderer","registerBinding","propertyInfo","unregisterBinding","resetBinding","getInstructionPredicate","predicate_1","object_1","propertyName_1","rules_1","ruleExists","object_2","propertyName_2","rules_2","validateObject","validateProperty","_e","resultSets","returnPromise","newResults","oldResults","invokeCallbacks","exception","getAssociatedElements","oldResult","newResultIndex","newResult","elements_1","oldResults_1","newResults_1","validateBinding","registeredBinding","changeTrigger","newTrigger","bindings_1","revalidateErrors","ValidateBindingBehaviorBase","rulesOrController","validationController","getValidateTrigger","vbbUpdateSource","validateBlurHandler","manual","standardUpdateTarget","ValidateBindingBehavior","ValidateManuallyBindingBehavior","ValidateOnBlurBindingBehavior","ValidateOnChangeBindingBehavior","ValidateOnChangeOrBlurBindingBehavior","changeOrBlur","ValidationControllerFactory","ValidationErrorsCustomAttribute","boundaryElement","controllerAccessor","errorsInternal","targets","compareDocumentPosition","interestingElements","ValidationRendererCustomAttribute","Rules","ExpressionVisitor","visitChain","visitArgs","ValidationMessageParser","bindinqLanguage","nullExpression","undefinedExpression","coalesce","MessageExpressionValidator","originalMessage","validationMessages","required","maxLength","minItems","maxItems","range","between","ValidationMessageProvider","getMessage","getDisplayName","StandardValidator","messageProvider","messageKey","$displayName","$propertyName","$value","$object","$getDisplayName","validateRuleSequence","ruleSequence","validateAllProperties","allValid","when","promiseOrBoolean","FluentRuleCustomizer","fluentEnsure","fluentRules","parsers","_addRule","withMessageKey","withMessage","ensure","ensureObject","satisfies","satisfiesRule","expectedValue","FluentRules","customRules","argsToConfig","constraint","FluentEnsure","assertInitialized","mergeRules","existingRules","ValidationRules","messageParser","customRule","taggedRules","untaggedRules","AureliaValidationConfiguration","validatorType","customValidator","frameworkConfig","popover","BootstrapPopoverAttribute","tooltip","BootstrapTooltipAttribute","pickerVisible","colorPickerId","picker","ColorPicker","canEdit","isEditing","placeholder","placeholderTextarea","textSuggestion","maxRows","setTextareaHeight","textarea","lineHeight","fontSize","textChanged","_new","_old","setEditing","stopImmediatePropagation","InputEditable","timeoutDec","timeoutPerc","loadingText","eval","MarkdownValueConverter","tag1","endPos","scrollTo","icon","CvPage","ConfirmsCvPage","isLoadingData","i1","i2","viewExperience","experienceId","goto","lastStatus","ConfirmRequestedComponent","idExperience","onValue","experience","unchangeableState","prompt","incomplete","ConfirmToReviewComponent","funct","controllerFactory","idCv","filterBy","selectedState","selectedDate","idReviewer","onConfirmsReading","onRequestsReading","requests","dConfirm","dselected","today","emailReviewerChanged","_n","_o","emailReviewer","ConfirmslistPage","textConfirmRequest","userResults","new","sendConfirmRequest","newConfirmRequest","closeNewConfirmPage","getUserByEmail","NewConfirmPage","iconBasePath","isLoadingElements","inFirstPosition","inLastPosition","onChanged","onCategoryChanged","onAdded","onElementAdded","onRemoved","onElementRemoved","idElements","saveChanges","addElement","ele","idElement","moveUpElement","e1","pprevious","e2","moveDownElement","pnext","getIconsInPack","isLoadingElementsChanged","CategoryComponent","bengine","isLoadingCategories","currentIdCategoryInViewport","onscroll","idUser","onCurriculumChanged","onCategoryAdded","onCategoryRemoved","idCategories","scroll","pageYOffset","offsetParent","addCategory","changeCurriculumStyle","moveUpCategory","moveDownCategory","isLoadingCategoriesChanged","onCategoryLoaded","linktag","fontLink","CurriculumComponent","CurriculumNavbarComponent","editing","onElementChanged","valueToSave","idConfirm","requestConfirm","ElementComponent","signaler","menuOpen","moreLinks","setMenuState","gotoLink","scrollIntoView","currentIdCategoryInViewportChanged","inViewportCss","PageIndexComponent","isLoadingCompleted","onCurriculumReading","isLoadingCompletedChanged","EditCvPage","lo","mid","ascendingBisect","bisector","sqrt","merged","arrays","dispatch","Dispatch","parseTypenames","typenames","typename","xhtml","xlink","xml","xmlns","namespaces","space","creatorInherit","uri","creatorFixed","fullname","EnterNode","datum","_next","__data__","keyPrefix","bindIndex","groupLength","dataLength","bindKey","nodeByKeyValue","keyValues","attrRemove","attrRemoveNS","removeAttributeNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","defaultView","styleRemove","styleConstant","styleFunction","styleValue","getPropertyValue","propertyRemove","propertyConstant","propertyFunction","classArray","classedAdd","classedRemove","classedTrue","classedFalse","classedFunction","textRemove","textConstant","textFunction","htmlRemove","htmlConstant","htmlFunction","lower","constantNull","selection_cloneShallow","selection_cloneDeep","filterEvents","mouseenter","mouseleave","filterContextListener","contextListener","related","event1","event0","__on","initEvent","dispatchConstant","dispatchFunction","Selection","parents","_groups","_parents","subgroups","subnode","subgroup","selectAll","selectorAll","enterGroup","updateGroup","i0","_enter","_exit","sparse","onenter","onupdate","onexit","groups0","groups1","selection","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","classed","creator","deep","Local","DragEvent","dx","dy","Color","reI","reN","reP","reHex3","reHex6","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","indianred","color_formatHex","rgb","formatHex","color_formatRgb","formatRgb","Rgb","rgbn","rgba","hsla","rgbConvert","opacity","rgb_formatHex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","channels","displayable","formatHsl","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","t3","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","cos","sin","ED","EB","BC_DA","Cubehelix","cubehelixConvert","basis","t1","v0","v3","t2","cosh","sinh","linear","gamma","nogamma","exponential","rgbGamma","rgbSpline","spline","reA","reB","cssNode","cssRoot","cssView","svgNode","bs","degrees","translateX","translateY","rotate","skewX","scaleX","scaleY","atan","interpolateTransform","pxComma","pxParen","degParen","scale","interpolateTransformCss","decompose","interpolateTransformSvg","baseVal","consolidate","matrix","SQRT2","hue","cubehelixGamma","cubehelix","taskHead","taskTail","pokeDelay","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","_call","_time","timer","restart","wake","timerFlush","t0","sleep","nap","poke","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","ENDING","ENDED","schedules","__transition","tween","tick","ease","tweenRemove","tween0","tween1","tweenFunction","tweenValue","transition","value1","string00","interpolate0","string1","string0","string10","attrTweenNS","attrInterpolateNS","attrTween","attrInterpolate","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","onFunction","on0","on1","sit","styleTween","styleInterpolate","Transition","newId","selection_prototype","inherit","id0","id1","styleNull","listener0","styleMaybeRemove","custom","polyIn","exponent","polyOut","polyInOut","backIn","overshoot","backOut","backInOut","tau","defaultTiming","asin","elasticIn","amplitude","elasticOut","elasticInOut","number1","number2","tauEpsilon","_x0","_y0","_x1","_y1","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","acos","t01","t21","arc","a0","a1","ccw","cw","EOL","EOF","QUOTE","NEWLINE","RETURN","objectConverter","inferColumns","rows","columnSet","row","pad","formatDate","getUTCHours","getUTCSeconds","getUTCMilliseconds","reFormat","DELIMITER","parseRows","eof","eol","preformatBody","formatValue","formatRow","convert","customConverter","formatBody","formatRows","csv","dsv","csvParse","tsv","tsvParse","dsvParse","DOMParser","parseFromString","xp","yp","bottom","_root","leaf","_y","quadtree","Quadtree","addAll","leaf_copy","treeProto","cover","xz","yz","visit","extent","x3","y3","quads","radius","d2","retainer","visitAfter","toExponential","coefficient","formatDecimal","formatSpecifier","specifier","FormatSpecifier","align","comma","precision","prefixExponent","toPrecision","formatRounded","prefixes","grouping","thousands","currency","decimal","numerals","formatNumerals","percent","newFormat","formatTypes","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","formatTrim","padding","formatPrefix","Adder","adder","bv","av","quarterPi","radians","spherical","lambda","phi","cosPhi","cartesianCross","cartesianNormalizeInPlace","rotationIdentity","invert","lineEnd","rejoin","Intersection","points","clip","p0","pointEqual","compareIntersection","startInside","isSubject","longitude","sinPhi","angle","winding","ring","point0","lambda0","phi0","sinPhi0","cosPhi0","lambda1","sinPhi1","cosPhi1","point1","phi1","absDelta","antimeridian","intersection","phiArc","sink","clipLine","ringBuffer","ringSink","polygonStarted","polygonStart","pointRing","ringStart","ringEnd","polygonEnd","polygonContains","sphere","pointVisible","pointLine","clean","ringSegments","validSegment","sign0","sign1","sinLambda0Lambda1","clipAntimeridianIntersect","PathContext","_radius","pointRadius","_line","_point","PathString","_string","_circle","transformer","TransformStream","azimuthalRaw","cx","cy","azimuthalInvert","azimuthalEqualAreaRaw","cxcy","azimuthalEquidistantRaw","mercatorRaw","equirectangularRaw","A1","A2","A3","A4","equalEarthRaw","l2","l6","gnomonicRaw","naturalEarth1Raw","phi2","phi4","orthographicRaw","stereographicRaw","transverseMercatorRaw","sum","hierarchy","childs","valued","defaultChildren","depth","eachBefore","computeHeight","copyData","eachAfter","aNodes","ancestors","bNodes","leastCommonAncestor","descendants","leaves","squarifyRatio","ratio","sumValue","minValue","maxValue","newRatio","minRatio","beta","dice","squarify","resquarify","_squarify","randomUniform","sourceRandomUniform","randomNormal","mu","sigma","sourceRandomNormal","randomLogNormal","sourceRandomLogNormal","randomIrwinHall","sourceRandomIrwinHall","randomBates","irwinHall","sourceRandomBates","randomExponential","sourceRandomExponential","newInterval","floori","offseti","interval","d0","d1","durationMinute","durationWeek","getMilliseconds","getSeconds","getMinutes","getHours","setHours","setDate","sunday","monday","tuesday","wednesday","thursday","friday","saturday","utcMinute","setUTCSeconds","utcHour","utcDay","setUTCHours","setUTCDate","utcWeekday","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","utcYear","localDate","utcDate","newYear","utcFormat","utcParse","pads","numberRe","percentRe","requoteRe","requote","formatRe","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","parseWeekNumberMonday","parseFullYear","parseYear","parseMonthNumber","parseDayOfMonth","parseDayOfYear","parseHour24","parseMinutes","parseSeconds","parseMilliseconds","parseMicroseconds","parseLiteralPercent","parseUnixTimestamp","parseUnixTimestampSeconds","formatDayOfMonth","formatHour24","formatHour12","formatDayOfYear","formatMilliseconds","formatMicroseconds","formatMonthNumber","formatMinutes","formatSeconds","formatWeekdayNumberMonday","formatWeekNumberSunday","formatWeekNumberISO","formatWeekdayNumberSunday","formatWeekNumberMonday","formatFullYear","formatZone","formatUTCDayOfMonth","formatUTCHour24","formatUTCHour12","formatUTCDayOfYear","formatUTCMilliseconds","formatUTCMicroseconds","formatUTCMonthNumber","formatUTCMinutes","formatUTCSeconds","formatUTCWeekdayNumberMonday","formatUTCWeekNumberSunday","formatUTCWeekNumberISO","formatUTCWeekdayNumberSunday","formatUTCWeekNumberMonday","formatUTCYear","formatUTCFullYear","formatUTCZone","formatLiteralPercent","formatUnixTimestamp","formatUnixTimestampSeconds","locale_dateTime","locale_date","locale_time","locale_periods","periods","locale_weekdays","locale_shortWeekdays","shortDays","locale_months","locale_shortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","utcFormats","parses","parseSpecifier","newParse","newDate","formatLocale","Linear","areaStart","areaEnd","curveRadial","Radial","curve","_curve","radial","kr","Basis","BasisClosed","_x2","_x3","_x4","_y2","_y3","_y4","BasisOpen","Bundle","_basis","_beta","bundle","Cardinal","tension","cardinal","CardinalClosed","_x5","_y5","CardinalOpen","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","CatmullRom","_alpha","x23","y23","catmullRom","CatmullRomClosed","CatmullRomOpen","LinearClosed","slope3","h0","h1","s0","slope2","MonotoneX","MonotoneY","ReflectContext","Natural","controlPoints","_t0","px","py","Step","_t","RedBlackTree","RedBlackNode","RedBlackRotateLeft","RedBlackRotateRight","RedBlackFirst","grandpa","uncle","sibling","createEdge","edge","setEdgeEnd","cells","halfedges","createBorderEdge","vertex","clipEdge","ax","ay","connectEdge","lx","ly","ry","fy","cellHalfedgeAngle","cell","site","cellHalfedgeStart","cellHalfedgeEnd","firstCircle","circlePool","Circle","attachCircle","lArc","rArc","lSite","cSite","rSite","bx","by","detachCircle","beachPool","Beach","createBeach","beach","detachBeach","beaches","removeBeach","disappearing","iArc","nArcs","addBeach","dxl","dxr","directrix","leftBreakPoint","rightBreakPoint","createCell","newArc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","aby2","lexicographic","Diagram","sites","sortCellHalfedges","clipEdges","iCell","iHalfedge","nHalfedges","startX","startY","endX","endY","nCells","v00","v01","v11","v10","clipCells","edges","polygons","triangles","_found","vx","vy","Transform","applyX","applyY","invertX","invertY","rescaleX","rescaleY","dochart_1","dochart_2","InsightCvPage","ProtectionCvPage","MultipleCodePage","SingleCodePage","save","SettingCvPage","FormatPage","cvStyle","iconsPacks","iconsPackMatcher","propObserverSubscription","resetDefault","onCurriculumStyleRead","changeFontFamily","localIconPack","localIconPackChanged","fontFamily","localFontFamily","scrollToSection","section","onHovering","onUnHovering","StylePage","ViewCvPage","onDelete","DashboardCurriculumComponent","onUserRead","openCurriculum","createCurriculum","lastUpdate","DashboardPage","offsetHeight","IndexPage","attempts","resetPasswordEmailSent","isLogged","sendEmailToResetPassword","LoginPage","LogoutPage","lastname","registerUser","lastLogin","dor","RegistrationPage","UserPage","newPassword1","newPassword2","reauthenticated","passwordStrength","newPassword1Changed","reAuthenticate","deleteAccount","sugg","fin","AccountPage","otherEmails","addEmail","EmailPage","dob","gender","newProfileImage","uploadProgress","newProfileImageChanged","onProgress","onCompleted","progress","toMillisecond","submit","ProfilePage","currentPage","logsPerPage","onlySecurity","onLogsRead","onlySecurityChanged","SecurityPage","ViewPage","_404Page","iconPos","focusModeChanged","FooterSection","onUserLogged","NavbarSection"],"mappings":"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K,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,MAAO,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,MAAO,MACrC,KAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,OACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,MAAO,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,OACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,OAEtCC,OAAQ,CACN,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,MAAO,MACrCD,IAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,MACrC,IAAK,CAAC,MAAO,KAAM,KAAM,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,MAAO,MACrC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,OACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,MAAO,KAAM,KAAM,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,MAAO,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,OACpC,EAAK,CAAC,KAAM,MAAO,KAAM,KAAM,KAAM,MACrC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,KAAM,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACrC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,IAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,MAAO,KAAM,KAAM,KAAM,MACrC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,MACpC,EAAK,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,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,gBAAiB,IACjB,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,UAAW,IACX,aAAc,IACd,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,aAAc,IACd,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,IACR,UAAW,IACX,OAAQ,I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","file":"main.7327469fac486ce50bda.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 227);\n","export { _getArrayObserver as getArrayObserver };\nexport { _getMapObserver as getMapObserver };\nexport { _getSetObserver as getSetObserver };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _dec, _dec2, _class, _dec3, _class2, _dec4, _class3, _dec5, _class5, _dec6, _class7, _dec7, _class8, _dec8, _class9, _dec9, _class10, _class12, _temp, _dec10, _class13, _class14, _temp2;\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nimport * as LogManager from 'aurelia-logging';\nimport { PLATFORM, DOM } from 'aurelia-pal';\nimport { TaskQueue } from 'aurelia-task-queue';\nimport { metadata } from 'aurelia-metadata';\n\nexport var targetContext = 'Binding:target';\nexport var sourceContext = 'Binding:source';\n\nvar map = Object.create(null);\n\nexport function camelCase(name) {\n  if (name in map) {\n    return map[name];\n  }\n  var result = name.charAt(0).toLowerCase() + name.slice(1).replace(/[_.-](\\w|$)/g, function (_, x) {\n    return x.toUpperCase();\n  });\n  map[name] = result;\n  return result;\n}\n\nexport function createOverrideContext(bindingContext, parentOverrideContext) {\n  return {\n    bindingContext: bindingContext,\n    parentOverrideContext: parentOverrideContext || null\n  };\n}\n\nexport function getContextFor(name, scope, ancestor) {\n  var oc = scope.overrideContext;\n\n  if (ancestor) {\n    while (ancestor && oc) {\n      ancestor--;\n      oc = oc.parentOverrideContext;\n    }\n    if (ancestor || !oc) {\n      return undefined;\n    }\n    return name in oc ? oc : oc.bindingContext;\n  }\n\n  while (oc && !(name in oc) && !(oc.bindingContext && name in oc.bindingContext)) {\n    oc = oc.parentOverrideContext;\n  }\n  if (oc) {\n    return name in oc ? oc : oc.bindingContext;\n  }\n\n  return scope.bindingContext || scope.overrideContext;\n}\n\nexport function createScopeForTest(bindingContext, parentBindingContext) {\n  if (parentBindingContext) {\n    return {\n      bindingContext: bindingContext,\n      overrideContext: createOverrideContext(bindingContext, createOverrideContext(parentBindingContext))\n    };\n  }\n  return {\n    bindingContext: bindingContext,\n    overrideContext: createOverrideContext(bindingContext)\n  };\n}\n\nvar slotNames = [];\nvar versionSlotNames = [];\nvar lastSlot = -1;\nfunction ensureEnoughSlotNames(currentSlot) {\n  if (currentSlot === lastSlot) {\n    lastSlot += 5;\n    var ii = slotNames.length = versionSlotNames.length = lastSlot + 1;\n    for (var i = currentSlot + 1; i < ii; ++i) {\n      slotNames[i] = '_observer' + i;\n      versionSlotNames[i] = '_observerVersion' + i;\n    }\n  }\n}\nensureEnoughSlotNames(-1);\n\nfunction addObserver(observer) {\n  var observerSlots = this._observerSlots === undefined ? 0 : this._observerSlots;\n  var i = observerSlots;\n  while (i-- && this[slotNames[i]] !== observer) {}\n\n  if (i === -1) {\n    i = 0;\n    while (this[slotNames[i]]) {\n      i++;\n    }\n    this[slotNames[i]] = observer;\n    observer.subscribe(sourceContext, this);\n\n    if (i === observerSlots) {\n      this._observerSlots = i + 1;\n    }\n  }\n\n  if (this._version === undefined) {\n    this._version = 0;\n  }\n  this[versionSlotNames[i]] = this._version;\n  ensureEnoughSlotNames(i);\n}\n\nfunction observeProperty(obj, propertyName) {\n  var observer = this.observerLocator.getObserver(obj, propertyName);\n  addObserver.call(this, observer);\n}\n\nfunction observeArray(array) {\n  var observer = this.observerLocator.getArrayObserver(array);\n  addObserver.call(this, observer);\n}\n\nfunction unobserve(all) {\n  var i = this._observerSlots;\n  while (i--) {\n    if (all || this[versionSlotNames[i]] !== this._version) {\n      var observer = this[slotNames[i]];\n      this[slotNames[i]] = null;\n      if (observer) {\n        observer.unsubscribe(sourceContext, this);\n      }\n    }\n  }\n}\n\nexport function connectable() {\n  return function (target) {\n    target.prototype.observeProperty = observeProperty;\n    target.prototype.observeArray = observeArray;\n    target.prototype.unobserve = unobserve;\n    target.prototype.addObserver = addObserver;\n  };\n}\n\nvar queue = [];\nvar queued = {};\nvar nextId = 0;\nvar minimumImmediate = 100;\nvar frameBudget = 15;\n\nvar isFlushRequested = false;\nvar immediate = 0;\n\nfunction flush(animationFrameStart) {\n  var length = queue.length;\n  var i = 0;\n  while (i < length) {\n    var binding = queue[i];\n    queued[binding.__connectQueueId] = false;\n    binding.connect(true);\n    i++;\n\n    if (i % 100 === 0 && PLATFORM.performance.now() - animationFrameStart > frameBudget) {\n      break;\n    }\n  }\n  queue.splice(0, i);\n\n  if (queue.length) {\n    PLATFORM.requestAnimationFrame(flush);\n  } else {\n    isFlushRequested = false;\n    immediate = 0;\n  }\n}\n\nexport function enqueueBindingConnect(binding) {\n  if (immediate < minimumImmediate) {\n    immediate++;\n    binding.connect(false);\n  } else {\n    var id = binding.__connectQueueId;\n    if (id === undefined) {\n      id = nextId;\n      nextId++;\n      binding.__connectQueueId = id;\n    }\n\n    if (!queued[id]) {\n      queue.push(binding);\n      queued[id] = true;\n    }\n  }\n  if (!isFlushRequested) {\n    isFlushRequested = true;\n    PLATFORM.requestAnimationFrame(flush);\n  }\n}\n\nexport function setConnectQueueThreshold(value) {\n  minimumImmediate = value;\n}\n\nexport function enableConnectQueue() {\n  setConnectQueueThreshold(100);\n}\n\nexport function disableConnectQueue() {\n  setConnectQueueThreshold(Number.MAX_SAFE_INTEGER);\n}\n\nexport function getConnectQueueSize() {\n  return queue.length;\n}\n\nfunction addSubscriber(context, callable) {\n  if (this.hasSubscriber(context, callable)) {\n    return false;\n  }\n  if (!this._context0) {\n    this._context0 = context;\n    this._callable0 = callable;\n    return true;\n  }\n  if (!this._context1) {\n    this._context1 = context;\n    this._callable1 = callable;\n    return true;\n  }\n  if (!this._context2) {\n    this._context2 = context;\n    this._callable2 = callable;\n    return true;\n  }\n  if (!this._contextsRest) {\n    this._contextsRest = [context];\n    this._callablesRest = [callable];\n    return true;\n  }\n  this._contextsRest.push(context);\n  this._callablesRest.push(callable);\n  return true;\n}\n\nfunction removeSubscriber(context, callable) {\n  if (this._context0 === context && this._callable0 === callable) {\n    this._context0 = null;\n    this._callable0 = null;\n    return true;\n  }\n  if (this._context1 === context && this._callable1 === callable) {\n    this._context1 = null;\n    this._callable1 = null;\n    return true;\n  }\n  if (this._context2 === context && this._callable2 === callable) {\n    this._context2 = null;\n    this._callable2 = null;\n    return true;\n  }\n  var callables = this._callablesRest;\n  if (callables === undefined || callables.length === 0) {\n    return false;\n  }\n  var contexts = this._contextsRest;\n  var i = 0;\n  while (!(callables[i] === callable && contexts[i] === context) && callables.length > i) {\n    i++;\n  }\n  if (i >= callables.length) {\n    return false;\n  }\n  contexts.splice(i, 1);\n  callables.splice(i, 1);\n  return true;\n}\n\nvar arrayPool1 = [];\nvar arrayPool2 = [];\nvar poolUtilization = [];\n\nfunction callSubscribers(newValue, oldValue) {\n  var context0 = this._context0;\n  var callable0 = this._callable0;\n  var context1 = this._context1;\n  var callable1 = this._callable1;\n  var context2 = this._context2;\n  var callable2 = this._callable2;\n  var length = this._contextsRest ? this._contextsRest.length : 0;\n  var contextsRest = void 0;\n  var callablesRest = void 0;\n  var poolIndex = void 0;\n  var i = void 0;\n  if (length) {\n    poolIndex = poolUtilization.length;\n    while (poolIndex-- && poolUtilization[poolIndex]) {}\n    if (poolIndex < 0) {\n      poolIndex = poolUtilization.length;\n      contextsRest = [];\n      callablesRest = [];\n      poolUtilization.push(true);\n      arrayPool1.push(contextsRest);\n      arrayPool2.push(callablesRest);\n    } else {\n      poolUtilization[poolIndex] = true;\n      contextsRest = arrayPool1[poolIndex];\n      callablesRest = arrayPool2[poolIndex];\n    }\n\n    i = length;\n    while (i--) {\n      contextsRest[i] = this._contextsRest[i];\n      callablesRest[i] = this._callablesRest[i];\n    }\n  }\n\n  if (context0) {\n    if (callable0) {\n      callable0.call(context0, newValue, oldValue);\n    } else {\n      context0(newValue, oldValue);\n    }\n  }\n  if (context1) {\n    if (callable1) {\n      callable1.call(context1, newValue, oldValue);\n    } else {\n      context1(newValue, oldValue);\n    }\n  }\n  if (context2) {\n    if (callable2) {\n      callable2.call(context2, newValue, oldValue);\n    } else {\n      context2(newValue, oldValue);\n    }\n  }\n  if (length) {\n    for (i = 0; i < length; i++) {\n      var callable = callablesRest[i];\n      var context = contextsRest[i];\n      if (callable) {\n        callable.call(context, newValue, oldValue);\n      } else {\n        context(newValue, oldValue);\n      }\n      contextsRest[i] = null;\n      callablesRest[i] = null;\n    }\n    poolUtilization[poolIndex] = false;\n  }\n}\n\nfunction hasSubscribers() {\n  return !!(this._context0 || this._context1 || this._context2 || this._contextsRest && this._contextsRest.length);\n}\n\nfunction hasSubscriber(context, callable) {\n  var has = this._context0 === context && this._callable0 === callable || this._context1 === context && this._callable1 === callable || this._context2 === context && this._callable2 === callable;\n  if (has) {\n    return true;\n  }\n  var index = void 0;\n  var contexts = this._contextsRest;\n  if (!contexts || (index = contexts.length) === 0) {\n    return false;\n  }\n  var callables = this._callablesRest;\n  while (index--) {\n    if (contexts[index] === context && callables[index] === callable) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function subscriberCollection() {\n  return function (target) {\n    target.prototype.addSubscriber = addSubscriber;\n    target.prototype.removeSubscriber = removeSubscriber;\n    target.prototype.callSubscribers = callSubscribers;\n    target.prototype.hasSubscribers = hasSubscribers;\n    target.prototype.hasSubscriber = hasSubscriber;\n  };\n}\n\nexport var ExpressionObserver = (_dec = connectable(), _dec2 = subscriberCollection(), _dec(_class = _dec2(_class = function () {\n  function ExpressionObserver(scope, expression, observerLocator, lookupFunctions) {\n    \n\n    this.scope = scope;\n    this.expression = expression;\n    this.observerLocator = observerLocator;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  ExpressionObserver.prototype.getValue = function getValue() {\n    return this.expression.evaluate(this.scope, this.lookupFunctions);\n  };\n\n  ExpressionObserver.prototype.setValue = function setValue(newValue) {\n    this.expression.assign(this.scope, newValue);\n  };\n\n  ExpressionObserver.prototype.subscribe = function subscribe(context, callable) {\n    var _this = this;\n\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.expression.evaluate(this.scope, this.lookupFunctions);\n      this.expression.connect(this, this.scope);\n    }\n    this.addSubscriber(context, callable);\n    if (arguments.length === 1 && context instanceof Function) {\n      return {\n        dispose: function dispose() {\n          _this.unsubscribe(context, callable);\n        }\n      };\n    }\n  };\n\n  ExpressionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.unobserve(true);\n      this.oldValue = undefined;\n    }\n  };\n\n  ExpressionObserver.prototype.call = function call() {\n    var newValue = this.expression.evaluate(this.scope, this.lookupFunctions);\n    var oldValue = this.oldValue;\n    if (newValue !== oldValue) {\n      this.oldValue = newValue;\n      this.callSubscribers(newValue, oldValue);\n    }\n    this._version++;\n    this.expression.connect(this, this.scope);\n    this.unobserve(false);\n  };\n\n  return ExpressionObserver;\n}()) || _class) || _class);\n\nfunction isIndex(s) {\n  return +s === s >>> 0;\n}\n\nfunction toNumber(s) {\n  return +s;\n}\n\nfunction newSplice(index, removed, addedCount) {\n  return {\n    index: index,\n    removed: removed,\n    addedCount: addedCount\n  };\n}\n\nvar EDIT_LEAVE = 0;\nvar EDIT_UPDATE = 1;\nvar EDIT_ADD = 2;\nvar EDIT_DELETE = 3;\n\nfunction ArraySplice() {}\n\nArraySplice.prototype = {\n  calcEditDistances: function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n    var rowCount = oldEnd - oldStart + 1;\n    var columnCount = currentEnd - currentStart + 1;\n    var distances = new Array(rowCount);\n    var north = void 0;\n    var west = void 0;\n\n    for (var i = 0; i < rowCount; ++i) {\n      distances[i] = new Array(columnCount);\n      distances[i][0] = i;\n    }\n\n    for (var j = 0; j < columnCount; ++j) {\n      distances[0][j] = j;\n    }\n\n    for (var _i = 1; _i < rowCount; ++_i) {\n      for (var _j = 1; _j < columnCount; ++_j) {\n        if (this.equals(current[currentStart + _j - 1], old[oldStart + _i - 1])) {\n          distances[_i][_j] = distances[_i - 1][_j - 1];\n        } else {\n          north = distances[_i - 1][_j] + 1;\n          west = distances[_i][_j - 1] + 1;\n          distances[_i][_j] = north < west ? north : west;\n        }\n      }\n    }\n\n    return distances;\n  },\n\n  spliceOperationsFromEditDistances: function spliceOperationsFromEditDistances(distances) {\n    var i = distances.length - 1;\n    var j = distances[0].length - 1;\n    var current = distances[i][j];\n    var edits = [];\n    while (i > 0 || j > 0) {\n      if (i === 0) {\n        edits.push(EDIT_ADD);\n        j--;\n        continue;\n      }\n      if (j === 0) {\n        edits.push(EDIT_DELETE);\n        i--;\n        continue;\n      }\n      var northWest = distances[i - 1][j - 1];\n      var west = distances[i - 1][j];\n      var north = distances[i][j - 1];\n\n      var min = void 0;\n      if (west < north) {\n        min = west < northWest ? west : northWest;\n      } else {\n        min = north < northWest ? north : northWest;\n      }\n\n      if (min === northWest) {\n        if (northWest === current) {\n          edits.push(EDIT_LEAVE);\n        } else {\n          edits.push(EDIT_UPDATE);\n          current = northWest;\n        }\n        i--;\n        j--;\n      } else if (min === west) {\n        edits.push(EDIT_DELETE);\n        i--;\n        current = west;\n      } else {\n        edits.push(EDIT_ADD);\n        j--;\n        current = north;\n      }\n    }\n\n    edits.reverse();\n    return edits;\n  },\n\n  calcSplices: function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n    var prefixCount = 0;\n    var suffixCount = 0;\n\n    var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n    if (currentStart === 0 && oldStart === 0) {\n      prefixCount = this.sharedPrefix(current, old, minLength);\n    }\n\n    if (currentEnd === current.length && oldEnd === old.length) {\n      suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);\n    }\n\n    currentStart += prefixCount;\n    oldStart += prefixCount;\n    currentEnd -= suffixCount;\n    oldEnd -= suffixCount;\n\n    if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) {\n      return [];\n    }\n\n    if (currentStart === currentEnd) {\n      var _splice = newSplice(currentStart, [], 0);\n      while (oldStart < oldEnd) {\n        _splice.removed.push(old[oldStart++]);\n      }\n\n      return [_splice];\n    } else if (oldStart === oldEnd) {\n      return [newSplice(currentStart, [], currentEnd - currentStart)];\n    }\n\n    var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd));\n\n    var splice = undefined;\n    var splices = [];\n    var index = currentStart;\n    var oldIndex = oldStart;\n    for (var i = 0; i < ops.length; ++i) {\n      switch (ops[i]) {\n        case EDIT_LEAVE:\n          if (splice) {\n            splices.push(splice);\n            splice = undefined;\n          }\n\n          index++;\n          oldIndex++;\n          break;\n        case EDIT_UPDATE:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.addedCount++;\n          index++;\n\n          splice.removed.push(old[oldIndex]);\n          oldIndex++;\n          break;\n        case EDIT_ADD:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.addedCount++;\n          index++;\n          break;\n        case EDIT_DELETE:\n          if (!splice) {\n            splice = newSplice(index, [], 0);\n          }\n\n          splice.removed.push(old[oldIndex]);\n          oldIndex++;\n          break;\n      }\n    }\n\n    if (splice) {\n      splices.push(splice);\n    }\n    return splices;\n  },\n\n  sharedPrefix: function sharedPrefix(current, old, searchLength) {\n    for (var i = 0; i < searchLength; ++i) {\n      if (!this.equals(current[i], old[i])) {\n        return i;\n      }\n    }\n\n    return searchLength;\n  },\n\n  sharedSuffix: function sharedSuffix(current, old, searchLength) {\n    var index1 = current.length;\n    var index2 = old.length;\n    var count = 0;\n    while (count < searchLength && this.equals(current[--index1], old[--index2])) {\n      count++;\n    }\n\n    return count;\n  },\n\n  calculateSplices: function calculateSplices(current, previous) {\n    return this.calcSplices(current, 0, current.length, previous, 0, previous.length);\n  },\n\n  equals: function equals(currentValue, previousValue) {\n    return currentValue === previousValue;\n  }\n};\n\nvar arraySplice = new ArraySplice();\n\nexport function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {\n  return arraySplice.calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd);\n}\n\nfunction intersect(start1, end1, start2, end2) {\n  if (end1 < start2 || end2 < start1) {\n    return -1;\n  }\n\n  if (end1 === start2 || end2 === start1) {\n    return 0;\n  }\n\n  if (start1 < start2) {\n    if (end1 < end2) {\n      return end1 - start2;\n    }\n\n    return end2 - start2;\n  }\n\n  if (end2 < end1) {\n    return end2 - start1;\n  }\n\n  return end1 - start1;\n}\n\nexport function mergeSplice(splices, index, removed, addedCount) {\n  var splice = newSplice(index, removed, addedCount);\n\n  var inserted = false;\n  var insertionOffset = 0;\n\n  for (var i = 0; i < splices.length; i++) {\n    var current = splices[i];\n    current.index += insertionOffset;\n\n    if (inserted) {\n      continue;\n    }\n\n    var intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount);\n\n    if (intersectCount >= 0) {\n\n      splices.splice(i, 1);\n      i--;\n\n      insertionOffset -= current.addedCount - current.removed.length;\n\n      splice.addedCount += current.addedCount - intersectCount;\n      var deleteCount = splice.removed.length + current.removed.length - intersectCount;\n\n      if (!splice.addedCount && !deleteCount) {\n        inserted = true;\n      } else {\n        var currentRemoved = current.removed;\n\n        if (splice.index < current.index) {\n          var prepend = splice.removed.slice(0, current.index - splice.index);\n          Array.prototype.push.apply(prepend, currentRemoved);\n          currentRemoved = prepend;\n        }\n\n        if (splice.index + splice.removed.length > current.index + current.addedCount) {\n          var append = splice.removed.slice(current.index + current.addedCount - splice.index);\n          Array.prototype.push.apply(currentRemoved, append);\n        }\n\n        splice.removed = currentRemoved;\n        if (current.index < splice.index) {\n          splice.index = current.index;\n        }\n      }\n    } else if (splice.index < current.index) {\n\n      inserted = true;\n\n      splices.splice(i, 0, splice);\n      i++;\n\n      var offset = splice.addedCount - splice.removed.length;\n      current.index += offset;\n      insertionOffset += offset;\n    }\n  }\n\n  if (!inserted) {\n    splices.push(splice);\n  }\n}\n\nfunction createInitialSplices(array, changeRecords) {\n  var splices = [];\n\n  for (var i = 0; i < changeRecords.length; i++) {\n    var record = changeRecords[i];\n    switch (record.type) {\n      case 'splice':\n        mergeSplice(splices, record.index, record.removed.slice(), record.addedCount);\n        break;\n      case 'add':\n      case 'update':\n      case 'delete':\n        if (!isIndex(record.name)) {\n          continue;\n        }\n\n        var index = toNumber(record.name);\n        if (index < 0) {\n          continue;\n        }\n\n        mergeSplice(splices, index, [record.oldValue], record.type === 'delete' ? 0 : 1);\n        break;\n      default:\n        console.error('Unexpected record type: ' + JSON.stringify(record));\n        break;\n    }\n  }\n\n  return splices;\n}\n\nexport function projectArraySplices(array, changeRecords) {\n  var splices = [];\n\n  createInitialSplices(array, changeRecords).forEach(function (splice) {\n    if (splice.addedCount === 1 && splice.removed.length === 1) {\n      if (splice.removed[0] !== array[splice.index]) {\n        splices.push(splice);\n      }\n\n      return;\n    }\n\n    splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length));\n  });\n\n  return splices;\n}\n\nfunction newRecord(type, object, key, oldValue) {\n  return {\n    type: type,\n    object: object,\n    key: key,\n    oldValue: oldValue\n  };\n}\n\nexport function getChangeRecords(map) {\n  var entries = new Array(map.size);\n  var keys = map.keys();\n  var i = 0;\n  var item = void 0;\n\n  while (item = keys.next()) {\n    if (item.done) {\n      break;\n    }\n\n    entries[i] = newRecord('added', map, item.value);\n    i++;\n  }\n\n  return entries;\n}\n\nexport var ModifyCollectionObserver = (_dec3 = subscriberCollection(), _dec3(_class2 = function () {\n  function ModifyCollectionObserver(taskQueue, collection) {\n    \n\n    this.taskQueue = taskQueue;\n    this.queued = false;\n    this.changeRecords = null;\n    this.oldCollection = null;\n    this.collection = collection;\n    this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';\n  }\n\n  ModifyCollectionObserver.prototype.subscribe = function subscribe(context, callable) {\n    this.addSubscriber(context, callable);\n  };\n\n  ModifyCollectionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  ModifyCollectionObserver.prototype.addChangeRecord = function addChangeRecord(changeRecord) {\n    if (!this.hasSubscribers() && !this.lengthObserver) {\n      return;\n    }\n\n    if (changeRecord.type === 'splice') {\n      var index = changeRecord.index;\n      var arrayLength = changeRecord.object.length;\n      if (index > arrayLength) {\n        index = arrayLength - changeRecord.addedCount;\n      } else if (index < 0) {\n        index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount;\n      }\n      if (index < 0) {\n        index = 0;\n      }\n      changeRecord.index = index;\n    }\n\n    if (this.changeRecords === null) {\n      this.changeRecords = [changeRecord];\n    } else {\n      this.changeRecords.push(changeRecord);\n    }\n\n    if (!this.queued) {\n      this.queued = true;\n      this.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  ModifyCollectionObserver.prototype.flushChangeRecords = function flushChangeRecords() {\n    if (this.changeRecords && this.changeRecords.length || this.oldCollection) {\n      this.call();\n    }\n  };\n\n  ModifyCollectionObserver.prototype.reset = function reset(oldCollection) {\n    this.oldCollection = oldCollection;\n\n    if (this.hasSubscribers() && !this.queued) {\n      this.queued = true;\n      this.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  ModifyCollectionObserver.prototype.getLengthObserver = function getLengthObserver() {\n    return this.lengthObserver || (this.lengthObserver = new CollectionLengthObserver(this.collection));\n  };\n\n  ModifyCollectionObserver.prototype.call = function call() {\n    var changeRecords = this.changeRecords;\n    var oldCollection = this.oldCollection;\n    var records = void 0;\n\n    this.queued = false;\n    this.changeRecords = [];\n    this.oldCollection = null;\n\n    if (this.hasSubscribers()) {\n      if (oldCollection) {\n        if (this.collection instanceof Map || this.collection instanceof Set) {\n          records = getChangeRecords(oldCollection);\n        } else {\n          records = calcSplices(this.collection, 0, this.collection.length, oldCollection, 0, oldCollection.length);\n        }\n      } else {\n        if (this.collection instanceof Map || this.collection instanceof Set) {\n          records = changeRecords;\n        } else {\n          records = projectArraySplices(this.collection, changeRecords);\n        }\n      }\n\n      this.callSubscribers(records);\n    }\n\n    if (this.lengthObserver) {\n      this.lengthObserver.call(this.collection[this.lengthPropertyName]);\n    }\n  };\n\n  return ModifyCollectionObserver;\n}()) || _class2);\n\nexport var CollectionLengthObserver = (_dec4 = subscriberCollection(), _dec4(_class3 = function () {\n  function CollectionLengthObserver(collection) {\n    \n\n    this.collection = collection;\n    this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';\n    this.currentValue = collection[this.lengthPropertyName];\n  }\n\n  CollectionLengthObserver.prototype.getValue = function getValue() {\n    return this.collection[this.lengthPropertyName];\n  };\n\n  CollectionLengthObserver.prototype.setValue = function setValue(newValue) {\n    this.collection[this.lengthPropertyName] = newValue;\n  };\n\n  CollectionLengthObserver.prototype.subscribe = function subscribe(context, callable) {\n    this.addSubscriber(context, callable);\n  };\n\n  CollectionLengthObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  CollectionLengthObserver.prototype.call = function call(newValue) {\n    var oldValue = this.currentValue;\n    this.callSubscribers(newValue, oldValue);\n    this.currentValue = newValue;\n  };\n\n  return CollectionLengthObserver;\n}()) || _class3);\n\nvar arrayProto = Array.prototype;\nvar pop = arrayProto.pop;\nvar push = arrayProto.push;\nvar reverse = arrayProto.reverse;\nvar shift = arrayProto.shift;\nvar sort = arrayProto.sort;\nvar splice = arrayProto.splice;\nvar unshift = arrayProto.unshift;\n\nif (arrayProto.__au_patched__) {\n  LogManager.getLogger('array-observation').warn('Detected 2nd attempt of patching array from Aurelia binding.' + ' This is probably caused by dependency mismatch between core modules and a 3rd party plugin.' + ' Please see https://github.com/aurelia/cli/pull/906 if you are using webpack.');\n} else {\n  Reflect.defineProperty(arrayProto, '__au_patched__', { value: 1 });\n  arrayProto.pop = function () {\n    var notEmpty = this.length > 0;\n    var methodCallResult = pop.apply(this, arguments);\n    if (notEmpty && this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'delete',\n        object: this,\n        name: this.length,\n        oldValue: methodCallResult\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.push = function () {\n    var methodCallResult = push.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'splice',\n        object: this,\n        index: this.length - arguments.length,\n        removed: [],\n        addedCount: arguments.length\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.reverse = function () {\n    var oldArray = void 0;\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.flushChangeRecords();\n      oldArray = this.slice();\n    }\n    var methodCallResult = reverse.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.reset(oldArray);\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.shift = function () {\n    var notEmpty = this.length > 0;\n    var methodCallResult = shift.apply(this, arguments);\n    if (notEmpty && this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'delete',\n        object: this,\n        name: 0,\n        oldValue: methodCallResult\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.sort = function () {\n    var oldArray = void 0;\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.flushChangeRecords();\n      oldArray = this.slice();\n    }\n    var methodCallResult = sort.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.reset(oldArray);\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.splice = function () {\n    var methodCallResult = splice.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'splice',\n        object: this,\n        index: +arguments[0],\n        removed: methodCallResult,\n        addedCount: arguments.length > 2 ? arguments.length - 2 : 0\n      });\n    }\n    return methodCallResult;\n  };\n\n  arrayProto.unshift = function () {\n    var methodCallResult = unshift.apply(this, arguments);\n    if (this.__array_observer__ !== undefined) {\n      this.__array_observer__.addChangeRecord({\n        type: 'splice',\n        object: this,\n        index: 0,\n        removed: [],\n        addedCount: arguments.length\n      });\n    }\n    return methodCallResult;\n  };\n}\n\nfunction _getArrayObserver(taskQueue, array) {\n  return ModifyArrayObserver.for(taskQueue, array);\n}\n\nvar ModifyArrayObserver = function (_ModifyCollectionObse) {\n  _inherits(ModifyArrayObserver, _ModifyCollectionObse);\n\n  function ModifyArrayObserver(taskQueue, array) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse.call(this, taskQueue, array));\n  }\n\n  ModifyArrayObserver.for = function _for(taskQueue, array) {\n    if (!('__array_observer__' in array)) {\n      Reflect.defineProperty(array, '__array_observer__', {\n        value: ModifyArrayObserver.create(taskQueue, array),\n        enumerable: false, configurable: false\n      });\n    }\n    return array.__array_observer__;\n  };\n\n  ModifyArrayObserver.create = function create(taskQueue, array) {\n    return new ModifyArrayObserver(taskQueue, array);\n  };\n\n  return ModifyArrayObserver;\n}(ModifyCollectionObserver);\n\nexport var Expression = function () {\n  function Expression() {\n    \n\n    this.isAssignable = false;\n  }\n\n  Expression.prototype.evaluate = function evaluate(scope, lookupFunctions, args) {\n    throw new Error('Binding expression \"' + this + '\" cannot be evaluated.');\n  };\n\n  Expression.prototype.assign = function assign(scope, value, lookupFunctions) {\n    throw new Error('Binding expression \"' + this + '\" cannot be assigned to.');\n  };\n\n  Expression.prototype.toString = function toString() {\n    return typeof FEATURE_NO_UNPARSER === 'undefined' ? _Unparser.unparse(this) : Function.prototype.toString.call(this);\n  };\n\n  return Expression;\n}();\n\nexport var BindingBehavior = function (_Expression) {\n  _inherits(BindingBehavior, _Expression);\n\n  function BindingBehavior(expression, name, args) {\n    \n\n    var _this3 = _possibleConstructorReturn(this, _Expression.call(this));\n\n    _this3.expression = expression;\n    _this3.name = name;\n    _this3.args = args;\n    return _this3;\n  }\n\n  BindingBehavior.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.expression.evaluate(scope, lookupFunctions);\n  };\n\n  BindingBehavior.prototype.assign = function assign(scope, value, lookupFunctions) {\n    return this.expression.assign(scope, value, lookupFunctions);\n  };\n\n  BindingBehavior.prototype.accept = function accept(visitor) {\n    return visitor.visitBindingBehavior(this);\n  };\n\n  BindingBehavior.prototype.connect = function connect(binding, scope) {\n    this.expression.connect(binding, scope);\n  };\n\n  BindingBehavior.prototype.bind = function bind(binding, scope, lookupFunctions) {\n    if (this.expression.expression && this.expression.bind) {\n      this.expression.bind(binding, scope, lookupFunctions);\n    }\n    var behavior = lookupFunctions.bindingBehaviors(this.name);\n    if (!behavior) {\n      throw new Error('No BindingBehavior named \"' + this.name + '\" was found!');\n    }\n    var behaviorKey = 'behavior-' + this.name;\n    if (binding[behaviorKey]) {\n      throw new Error('A binding behavior named \"' + this.name + '\" has already been applied to \"' + this.expression + '\"');\n    }\n    binding[behaviorKey] = behavior;\n    behavior.bind.apply(behavior, [binding, scope].concat(evalList(scope, this.args, binding.lookupFunctions)));\n  };\n\n  BindingBehavior.prototype.unbind = function unbind(binding, scope) {\n    var behaviorKey = 'behavior-' + this.name;\n    binding[behaviorKey].unbind(binding, scope);\n    binding[behaviorKey] = null;\n    if (this.expression.expression && this.expression.unbind) {\n      this.expression.unbind(binding, scope);\n    }\n  };\n\n  return BindingBehavior;\n}(Expression);\n\nexport var ValueConverter = function (_Expression2) {\n  _inherits(ValueConverter, _Expression2);\n\n  function ValueConverter(expression, name, args) {\n    \n\n    var _this4 = _possibleConstructorReturn(this, _Expression2.call(this));\n\n    _this4.expression = expression;\n    _this4.name = name;\n    _this4.args = args;\n    _this4.allArgs = [expression].concat(args);\n    return _this4;\n  }\n\n  ValueConverter.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var converter = lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n\n    if ('toView' in converter) {\n      return converter.toView.apply(converter, evalList(scope, this.allArgs, lookupFunctions));\n    }\n\n    return this.allArgs[0].evaluate(scope, lookupFunctions);\n  };\n\n  ValueConverter.prototype.assign = function assign(scope, value, lookupFunctions) {\n    var converter = lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n\n    if ('fromView' in converter) {\n      value = converter.fromView.apply(converter, [value].concat(evalList(scope, this.args, lookupFunctions)));\n    }\n\n    return this.allArgs[0].assign(scope, value, lookupFunctions);\n  };\n\n  ValueConverter.prototype.accept = function accept(visitor) {\n    return visitor.visitValueConverter(this);\n  };\n\n  ValueConverter.prototype.connect = function connect(binding, scope) {\n    var expressions = this.allArgs;\n    var i = expressions.length;\n    while (i--) {\n      expressions[i].connect(binding, scope);\n    }\n    var converter = binding.lookupFunctions.valueConverters(this.name);\n    if (!converter) {\n      throw new Error('No ValueConverter named \"' + this.name + '\" was found!');\n    }\n    var signals = converter.signals;\n    if (signals === undefined) {\n      return;\n    }\n    i = signals.length;\n    while (i--) {\n      connectBindingToSignal(binding, signals[i]);\n    }\n  };\n\n  return ValueConverter;\n}(Expression);\n\nexport var Assign = function (_Expression3) {\n  _inherits(Assign, _Expression3);\n\n  function Assign(target, value) {\n    \n\n    var _this5 = _possibleConstructorReturn(this, _Expression3.call(this));\n\n    _this5.target = target;\n    _this5.value = value;\n    _this5.isAssignable = true;\n    return _this5;\n  }\n\n  Assign.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.target.assign(scope, this.value.evaluate(scope, lookupFunctions));\n  };\n\n  Assign.prototype.accept = function accept(vistor) {\n    vistor.visitAssign(this);\n  };\n\n  Assign.prototype.connect = function connect(binding, scope) {};\n\n  Assign.prototype.assign = function assign(scope, value) {\n    this.value.assign(scope, value);\n    this.target.assign(scope, value);\n  };\n\n  return Assign;\n}(Expression);\n\nexport var Conditional = function (_Expression4) {\n  _inherits(Conditional, _Expression4);\n\n  function Conditional(condition, yes, no) {\n    \n\n    var _this6 = _possibleConstructorReturn(this, _Expression4.call(this));\n\n    _this6.condition = condition;\n    _this6.yes = yes;\n    _this6.no = no;\n    return _this6;\n  }\n\n  Conditional.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return !!this.condition.evaluate(scope, lookupFunctions) ? this.yes.evaluate(scope, lookupFunctions) : this.no.evaluate(scope, lookupFunctions);\n  };\n\n  Conditional.prototype.accept = function accept(visitor) {\n    return visitor.visitConditional(this);\n  };\n\n  Conditional.prototype.connect = function connect(binding, scope) {\n    this.condition.connect(binding, scope);\n    if (this.condition.evaluate(scope)) {\n      this.yes.connect(binding, scope);\n    } else {\n      this.no.connect(binding, scope);\n    }\n  };\n\n  return Conditional;\n}(Expression);\n\nexport var AccessThis = function (_Expression5) {\n  _inherits(AccessThis, _Expression5);\n\n  function AccessThis(ancestor) {\n    \n\n    var _this7 = _possibleConstructorReturn(this, _Expression5.call(this));\n\n    _this7.ancestor = ancestor;\n    return _this7;\n  }\n\n  AccessThis.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var oc = scope.overrideContext;\n    var i = this.ancestor;\n    while (i-- && oc) {\n      oc = oc.parentOverrideContext;\n    }\n    return i < 1 && oc ? oc.bindingContext : undefined;\n  };\n\n  AccessThis.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessThis(this);\n  };\n\n  AccessThis.prototype.connect = function connect(binding, scope) {};\n\n  return AccessThis;\n}(Expression);\n\nexport var AccessScope = function (_Expression6) {\n  _inherits(AccessScope, _Expression6);\n\n  function AccessScope(name, ancestor) {\n    \n\n    var _this8 = _possibleConstructorReturn(this, _Expression6.call(this));\n\n    _this8.name = name;\n    _this8.ancestor = ancestor;\n    _this8.isAssignable = true;\n    return _this8;\n  }\n\n  AccessScope.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    return context[this.name];\n  };\n\n  AccessScope.prototype.assign = function assign(scope, value) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    return context ? context[this.name] = value : undefined;\n  };\n\n  AccessScope.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessScope(this);\n  };\n\n  AccessScope.prototype.connect = function connect(binding, scope) {\n    var context = getContextFor(this.name, scope, this.ancestor);\n    binding.observeProperty(context, this.name);\n  };\n\n  return AccessScope;\n}(Expression);\n\nexport var AccessMember = function (_Expression7) {\n  _inherits(AccessMember, _Expression7);\n\n  function AccessMember(object, name) {\n    \n\n    var _this9 = _possibleConstructorReturn(this, _Expression7.call(this));\n\n    _this9.object = object;\n    _this9.name = name;\n    _this9.isAssignable = true;\n    return _this9;\n  }\n\n  AccessMember.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    return instance === null || instance === undefined ? instance : instance[this.name];\n  };\n\n  AccessMember.prototype.assign = function assign(scope, value) {\n    var instance = this.object.evaluate(scope);\n\n    if (instance === null || instance === undefined) {\n      instance = {};\n      this.object.assign(scope, instance);\n    }\n\n    instance[this.name] = value;\n    return value;\n  };\n\n  AccessMember.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessMember(this);\n  };\n\n  AccessMember.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (obj) {\n      binding.observeProperty(obj, this.name);\n    }\n  };\n\n  return AccessMember;\n}(Expression);\n\nexport var AccessKeyed = function (_Expression8) {\n  _inherits(AccessKeyed, _Expression8);\n\n  function AccessKeyed(object, key) {\n    \n\n    var _this10 = _possibleConstructorReturn(this, _Expression8.call(this));\n\n    _this10.object = object;\n    _this10.key = key;\n    _this10.isAssignable = true;\n    return _this10;\n  }\n\n  AccessKeyed.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    var lookup = this.key.evaluate(scope, lookupFunctions);\n    return getKeyed(instance, lookup);\n  };\n\n  AccessKeyed.prototype.assign = function assign(scope, value) {\n    var instance = this.object.evaluate(scope);\n    var lookup = this.key.evaluate(scope);\n    return setKeyed(instance, lookup, value);\n  };\n\n  AccessKeyed.prototype.accept = function accept(visitor) {\n    return visitor.visitAccessKeyed(this);\n  };\n\n  AccessKeyed.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (obj instanceof Object) {\n      this.key.connect(binding, scope);\n      var key = this.key.evaluate(scope);\n\n      if (key !== null && key !== undefined && !(Array.isArray(obj) && typeof key === 'number')) {\n        binding.observeProperty(obj, key);\n      }\n    }\n  };\n\n  return AccessKeyed;\n}(Expression);\n\nexport var CallScope = function (_Expression9) {\n  _inherits(CallScope, _Expression9);\n\n  function CallScope(name, args, ancestor) {\n    \n\n    var _this11 = _possibleConstructorReturn(this, _Expression9.call(this));\n\n    _this11.name = name;\n    _this11.args = args;\n    _this11.ancestor = ancestor;\n    return _this11;\n  }\n\n  CallScope.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var args = evalList(scope, this.args, lookupFunctions);\n    var context = getContextFor(this.name, scope, this.ancestor);\n    var func = getFunction(context, this.name, mustEvaluate);\n    if (func) {\n      return func.apply(context, args);\n    }\n    return undefined;\n  };\n\n  CallScope.prototype.accept = function accept(visitor) {\n    return visitor.visitCallScope(this);\n  };\n\n  CallScope.prototype.connect = function connect(binding, scope) {\n    var args = this.args;\n    var i = args.length;\n    while (i--) {\n      args[i].connect(binding, scope);\n    }\n  };\n\n  return CallScope;\n}(Expression);\n\nexport var CallMember = function (_Expression10) {\n  _inherits(CallMember, _Expression10);\n\n  function CallMember(object, name, args) {\n    \n\n    var _this12 = _possibleConstructorReturn(this, _Expression10.call(this));\n\n    _this12.object = object;\n    _this12.name = name;\n    _this12.args = args;\n    return _this12;\n  }\n\n  CallMember.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var instance = this.object.evaluate(scope, lookupFunctions);\n    var args = evalList(scope, this.args, lookupFunctions);\n    var func = getFunction(instance, this.name, mustEvaluate);\n    if (func) {\n      return func.apply(instance, args);\n    }\n    return undefined;\n  };\n\n  CallMember.prototype.accept = function accept(visitor) {\n    return visitor.visitCallMember(this);\n  };\n\n  CallMember.prototype.connect = function connect(binding, scope) {\n    this.object.connect(binding, scope);\n    var obj = this.object.evaluate(scope);\n    if (getFunction(obj, this.name, false)) {\n      var args = this.args;\n      var i = args.length;\n      while (i--) {\n        args[i].connect(binding, scope);\n      }\n    }\n  };\n\n  return CallMember;\n}(Expression);\n\nexport var CallFunction = function (_Expression11) {\n  _inherits(CallFunction, _Expression11);\n\n  function CallFunction(func, args) {\n    \n\n    var _this13 = _possibleConstructorReturn(this, _Expression11.call(this));\n\n    _this13.func = func;\n    _this13.args = args;\n    return _this13;\n  }\n\n  CallFunction.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var func = this.func.evaluate(scope, lookupFunctions);\n    if (typeof func === 'function') {\n      return func.apply(null, evalList(scope, this.args, lookupFunctions));\n    }\n    if (!mustEvaluate && (func === null || func === undefined)) {\n      return undefined;\n    }\n    throw new Error(this.func + ' is not a function');\n  };\n\n  CallFunction.prototype.accept = function accept(visitor) {\n    return visitor.visitCallFunction(this);\n  };\n\n  CallFunction.prototype.connect = function connect(binding, scope) {\n    this.func.connect(binding, scope);\n    var func = this.func.evaluate(scope);\n    if (typeof func === 'function') {\n      var args = this.args;\n      var i = args.length;\n      while (i--) {\n        args[i].connect(binding, scope);\n      }\n    }\n  };\n\n  return CallFunction;\n}(Expression);\n\nexport var Binary = function (_Expression12) {\n  _inherits(Binary, _Expression12);\n\n  function Binary(operation, left, right) {\n    \n\n    var _this14 = _possibleConstructorReturn(this, _Expression12.call(this));\n\n    _this14.operation = operation;\n    _this14.left = left;\n    _this14.right = right;\n    return _this14;\n  }\n\n  Binary.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var left = this.left.evaluate(scope, lookupFunctions);\n\n    switch (this.operation) {\n      case '&&':\n        return left && this.right.evaluate(scope, lookupFunctions);\n      case '||':\n        return left || this.right.evaluate(scope, lookupFunctions);\n    }\n\n    var right = this.right.evaluate(scope, lookupFunctions);\n\n    switch (this.operation) {\n      case '==':\n        return left == right;\n      case '===':\n        return left === right;\n      case '!=':\n        return left != right;\n      case '!==':\n        return left !== right;\n      case 'instanceof':\n        return typeof right === 'function' && left instanceof right;\n      case 'in':\n        return (typeof right === 'undefined' ? 'undefined' : _typeof(right)) === 'object' && right !== null && left in right;\n    }\n\n    if (left === null || right === null || left === undefined || right === undefined) {\n      switch (this.operation) {\n        case '+':\n          if (left !== null && left !== undefined) return left;\n          if (right !== null && right !== undefined) return right;\n          return 0;\n        case '-':\n          if (left !== null && left !== undefined) return left;\n          if (right !== null && right !== undefined) return 0 - right;\n          return 0;\n      }\n\n      return null;\n    }\n\n    switch (this.operation) {\n      case '+':\n        return autoConvertAdd(left, right);\n      case '-':\n        return left - right;\n      case '*':\n        return left * right;\n      case '/':\n        return left / right;\n      case '%':\n        return left % right;\n      case '<':\n        return left < right;\n      case '>':\n        return left > right;\n      case '<=':\n        return left <= right;\n      case '>=':\n        return left >= right;\n      case '^':\n        return left ^ right;\n    }\n\n    throw new Error('Internal error [' + this.operation + '] not handled');\n  };\n\n  Binary.prototype.accept = function accept(visitor) {\n    return visitor.visitBinary(this);\n  };\n\n  Binary.prototype.connect = function connect(binding, scope) {\n    this.left.connect(binding, scope);\n    var left = this.left.evaluate(scope);\n    if (this.operation === '&&' && !left || this.operation === '||' && left) {\n      return;\n    }\n    this.right.connect(binding, scope);\n  };\n\n  return Binary;\n}(Expression);\n\nexport var Unary = function (_Expression13) {\n  _inherits(Unary, _Expression13);\n\n  function Unary(operation, expression) {\n    \n\n    var _this15 = _possibleConstructorReturn(this, _Expression13.call(this));\n\n    _this15.operation = operation;\n    _this15.expression = expression;\n    return _this15;\n  }\n\n  Unary.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    switch (this.operation) {\n      case '!':\n        return !this.expression.evaluate(scope, lookupFunctions);\n      case 'typeof':\n        return _typeof(this.expression.evaluate(scope, lookupFunctions));\n      case 'void':\n        return void this.expression.evaluate(scope, lookupFunctions);\n    }\n\n    throw new Error('Internal error [' + this.operation + '] not handled');\n  };\n\n  Unary.prototype.accept = function accept(visitor) {\n    return visitor.visitPrefix(this);\n  };\n\n  Unary.prototype.connect = function connect(binding, scope) {\n    this.expression.connect(binding, scope);\n  };\n\n  return Unary;\n}(Expression);\n\nexport var LiteralPrimitive = function (_Expression14) {\n  _inherits(LiteralPrimitive, _Expression14);\n\n  function LiteralPrimitive(value) {\n    \n\n    var _this16 = _possibleConstructorReturn(this, _Expression14.call(this));\n\n    _this16.value = value;\n    return _this16;\n  }\n\n  LiteralPrimitive.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.value;\n  };\n\n  LiteralPrimitive.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralPrimitive(this);\n  };\n\n  LiteralPrimitive.prototype.connect = function connect(binding, scope) {};\n\n  return LiteralPrimitive;\n}(Expression);\n\nexport var LiteralString = function (_Expression15) {\n  _inherits(LiteralString, _Expression15);\n\n  function LiteralString(value) {\n    \n\n    var _this17 = _possibleConstructorReturn(this, _Expression15.call(this));\n\n    _this17.value = value;\n    return _this17;\n  }\n\n  LiteralString.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return this.value;\n  };\n\n  LiteralString.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralString(this);\n  };\n\n  LiteralString.prototype.connect = function connect(binding, scope) {};\n\n  return LiteralString;\n}(Expression);\n\nexport var LiteralTemplate = function (_Expression16) {\n  _inherits(LiteralTemplate, _Expression16);\n\n  function LiteralTemplate(cooked, expressions, raw, tag) {\n    \n\n    var _this18 = _possibleConstructorReturn(this, _Expression16.call(this));\n\n    _this18.cooked = cooked;\n    _this18.expressions = expressions || [];\n    _this18.length = _this18.expressions.length;\n    _this18.tagged = tag !== undefined;\n    if (_this18.tagged) {\n      _this18.cooked.raw = raw;\n      _this18.tag = tag;\n      if (tag instanceof AccessScope) {\n        _this18.contextType = 'Scope';\n      } else if (tag instanceof AccessMember || tag instanceof AccessKeyed) {\n        _this18.contextType = 'Object';\n      } else {\n        throw new Error(_this18.tag + ' is not a valid template tag');\n      }\n    }\n    return _this18;\n  }\n\n  LiteralTemplate.prototype.getScopeContext = function getScopeContext(scope, lookupFunctions) {\n    return getContextFor(this.tag.name, scope, this.tag.ancestor);\n  };\n\n  LiteralTemplate.prototype.getObjectContext = function getObjectContext(scope, lookupFunctions) {\n    return this.tag.object.evaluate(scope, lookupFunctions);\n  };\n\n  LiteralTemplate.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {\n    var results = new Array(this.length);\n    for (var i = 0; i < this.length; i++) {\n      results[i] = this.expressions[i].evaluate(scope, lookupFunctions);\n    }\n    if (this.tagged) {\n      var func = this.tag.evaluate(scope, lookupFunctions);\n      if (typeof func === 'function') {\n        var context = this['get' + this.contextType + 'Context'](scope, lookupFunctions);\n        return func.call.apply(func, [context, this.cooked].concat(results));\n      }\n      if (!mustEvaluate) {\n        return null;\n      }\n      throw new Error(this.tag + ' is not a function');\n    }\n    var result = this.cooked[0];\n    for (var _i2 = 0; _i2 < this.length; _i2++) {\n      result = String.prototype.concat(result, results[_i2], this.cooked[_i2 + 1]);\n    }\n    return result;\n  };\n\n  LiteralTemplate.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralTemplate(this);\n  };\n\n  LiteralTemplate.prototype.connect = function connect(binding, scope) {\n    for (var i = 0; i < this.length; i++) {\n      this.expressions[i].connect(binding, scope);\n    }\n    if (this.tagged) {\n      this.tag.connect(binding, scope);\n    }\n  };\n\n  return LiteralTemplate;\n}(Expression);\n\nexport var LiteralArray = function (_Expression17) {\n  _inherits(LiteralArray, _Expression17);\n\n  function LiteralArray(elements) {\n    \n\n    var _this19 = _possibleConstructorReturn(this, _Expression17.call(this));\n\n    _this19.elements = elements;\n    return _this19;\n  }\n\n  LiteralArray.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var elements = this.elements;\n    var result = [];\n\n    for (var i = 0, length = elements.length; i < length; ++i) {\n      result[i] = elements[i].evaluate(scope, lookupFunctions);\n    }\n\n    return result;\n  };\n\n  LiteralArray.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralArray(this);\n  };\n\n  LiteralArray.prototype.connect = function connect(binding, scope) {\n    var length = this.elements.length;\n    for (var i = 0; i < length; i++) {\n      this.elements[i].connect(binding, scope);\n    }\n  };\n\n  return LiteralArray;\n}(Expression);\n\nexport var LiteralObject = function (_Expression18) {\n  _inherits(LiteralObject, _Expression18);\n\n  function LiteralObject(keys, values) {\n    \n\n    var _this20 = _possibleConstructorReturn(this, _Expression18.call(this));\n\n    _this20.keys = keys;\n    _this20.values = values;\n    return _this20;\n  }\n\n  LiteralObject.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    var instance = {};\n    var keys = this.keys;\n    var values = this.values;\n\n    for (var i = 0, length = keys.length; i < length; ++i) {\n      instance[keys[i]] = values[i].evaluate(scope, lookupFunctions);\n    }\n\n    return instance;\n  };\n\n  LiteralObject.prototype.accept = function accept(visitor) {\n    return visitor.visitLiteralObject(this);\n  };\n\n  LiteralObject.prototype.connect = function connect(binding, scope) {\n    var length = this.keys.length;\n    for (var i = 0; i < length; i++) {\n      this.values[i].connect(binding, scope);\n    }\n  };\n\n  return LiteralObject;\n}(Expression);\n\nfunction evalList(scope, list, lookupFunctions) {\n  var length = list.length;\n  var result = [];\n  for (var i = 0; i < length; i++) {\n    result[i] = list[i].evaluate(scope, lookupFunctions);\n  }\n  return result;\n}\n\nfunction autoConvertAdd(a, b) {\n  if (a !== null && b !== null) {\n    if (typeof a === 'string' && typeof b !== 'string') {\n      return a + b.toString();\n    }\n\n    if (typeof a !== 'string' && typeof b === 'string') {\n      return a.toString() + b;\n    }\n\n    return a + b;\n  }\n\n  if (a !== null) {\n    return a;\n  }\n\n  if (b !== null) {\n    return b;\n  }\n\n  return 0;\n}\n\nfunction getFunction(obj, name, mustExist) {\n  var func = obj === null || obj === undefined ? null : obj[name];\n  if (typeof func === 'function') {\n    return func;\n  }\n  if (!mustExist && (func === null || func === undefined)) {\n    return null;\n  }\n  throw new Error(name + ' is not a function');\n}\n\nfunction getKeyed(obj, key) {\n  if (Array.isArray(obj)) {\n    return obj[parseInt(key, 10)];\n  } else if (obj) {\n    return obj[key];\n  } else if (obj === null || obj === undefined) {\n    return undefined;\n  }\n\n  return obj[key];\n}\n\nfunction setKeyed(obj, key, value) {\n  if (Array.isArray(obj)) {\n    var index = parseInt(key, 10);\n\n    if (obj.length <= index) {\n      obj.length = index + 1;\n    }\n\n    obj[index] = value;\n  } else {\n    obj[key] = value;\n  }\n\n  return value;\n}\n\nvar _Unparser = null;\n\nexport { _Unparser as Unparser };\nif (typeof FEATURE_NO_UNPARSER === 'undefined') {\n  _Unparser = function () {\n    function Unparser(buffer) {\n      \n\n      this.buffer = buffer;\n    }\n\n    Unparser.unparse = function unparse(expression) {\n      var buffer = [];\n      var visitor = new _Unparser(buffer);\n\n      expression.accept(visitor);\n\n      return buffer.join('');\n    };\n\n    Unparser.prototype.write = function write(text) {\n      this.buffer.push(text);\n    };\n\n    Unparser.prototype.writeArgs = function writeArgs(args) {\n      this.write('(');\n\n      for (var i = 0, length = args.length; i < length; ++i) {\n        if (i !== 0) {\n          this.write(',');\n        }\n\n        args[i].accept(this);\n      }\n\n      this.write(')');\n    };\n\n    Unparser.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {\n      var args = behavior.args;\n\n      behavior.expression.accept(this);\n      this.write('&' + behavior.name);\n\n      for (var i = 0, length = args.length; i < length; ++i) {\n        this.write(':');\n        args[i].accept(this);\n      }\n    };\n\n    Unparser.prototype.visitValueConverter = function visitValueConverter(converter) {\n      var args = converter.args;\n\n      converter.expression.accept(this);\n      this.write('|' + converter.name);\n\n      for (var i = 0, length = args.length; i < length; ++i) {\n        this.write(':');\n        args[i].accept(this);\n      }\n    };\n\n    Unparser.prototype.visitAssign = function visitAssign(assign) {\n      assign.target.accept(this);\n      this.write('=');\n      assign.value.accept(this);\n    };\n\n    Unparser.prototype.visitConditional = function visitConditional(conditional) {\n      conditional.condition.accept(this);\n      this.write('?');\n      conditional.yes.accept(this);\n      this.write(':');\n      conditional.no.accept(this);\n    };\n\n    Unparser.prototype.visitAccessThis = function visitAccessThis(access) {\n      if (access.ancestor === 0) {\n        this.write('$this');\n        return;\n      }\n      this.write('$parent');\n      var i = access.ancestor - 1;\n      while (i--) {\n        this.write('.$parent');\n      }\n    };\n\n    Unparser.prototype.visitAccessScope = function visitAccessScope(access) {\n      var i = access.ancestor;\n      while (i--) {\n        this.write('$parent.');\n      }\n      this.write(access.name);\n    };\n\n    Unparser.prototype.visitAccessMember = function visitAccessMember(access) {\n      access.object.accept(this);\n      this.write('.' + access.name);\n    };\n\n    Unparser.prototype.visitAccessKeyed = function visitAccessKeyed(access) {\n      access.object.accept(this);\n      this.write('[');\n      access.key.accept(this);\n      this.write(']');\n    };\n\n    Unparser.prototype.visitCallScope = function visitCallScope(call) {\n      var i = call.ancestor;\n      while (i--) {\n        this.write('$parent.');\n      }\n      this.write(call.name);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitCallFunction = function visitCallFunction(call) {\n      call.func.accept(this);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitCallMember = function visitCallMember(call) {\n      call.object.accept(this);\n      this.write('.' + call.name);\n      this.writeArgs(call.args);\n    };\n\n    Unparser.prototype.visitPrefix = function visitPrefix(prefix) {\n      this.write('(' + prefix.operation);\n      if (prefix.operation.charCodeAt(0) >= 97) {\n        this.write(' ');\n      }\n      prefix.expression.accept(this);\n      this.write(')');\n    };\n\n    Unparser.prototype.visitBinary = function visitBinary(binary) {\n      binary.left.accept(this);\n      if (binary.operation.charCodeAt(0) === 105) {\n        this.write(' ' + binary.operation + ' ');\n      } else {\n        this.write(binary.operation);\n      }\n      binary.right.accept(this);\n    };\n\n    Unparser.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {\n      this.write('' + literal.value);\n    };\n\n    Unparser.prototype.visitLiteralArray = function visitLiteralArray(literal) {\n      var elements = literal.elements;\n\n      this.write('[');\n\n      for (var i = 0, length = elements.length; i < length; ++i) {\n        if (i !== 0) {\n          this.write(',');\n        }\n\n        elements[i].accept(this);\n      }\n\n      this.write(']');\n    };\n\n    Unparser.prototype.visitLiteralObject = function visitLiteralObject(literal) {\n      var keys = literal.keys;\n      var values = literal.values;\n\n      this.write('{');\n\n      for (var i = 0, length = keys.length; i < length; ++i) {\n        if (i !== 0) {\n          this.write(',');\n        }\n\n        this.write('\\'' + keys[i] + '\\':');\n        values[i].accept(this);\n      }\n\n      this.write('}');\n    };\n\n    Unparser.prototype.visitLiteralString = function visitLiteralString(literal) {\n      var escaped = literal.value.replace(/'/g, \"\\'\");\n      this.write('\\'' + escaped + '\\'');\n    };\n\n    Unparser.prototype.visitLiteralTemplate = function visitLiteralTemplate(literal) {\n      var cooked = literal.cooked,\n          expressions = literal.expressions;\n\n      var length = expressions.length;\n      this.write('`');\n      this.write(cooked[0]);\n      for (var i = 0; i < length; i++) {\n        expressions[i].accept(this);\n        this.write(cooked[i + 1]);\n      }\n      this.write('`');\n    };\n\n    return Unparser;\n  }();\n}\n\nexport var ExpressionCloner = function () {\n  function ExpressionCloner() {\n    \n  }\n\n  ExpressionCloner.prototype.cloneExpressionArray = function cloneExpressionArray(array) {\n    var clonedArray = [];\n    var i = array.length;\n    while (i--) {\n      clonedArray[i] = array[i].accept(this);\n    }\n    return clonedArray;\n  };\n\n  ExpressionCloner.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {\n    return new BindingBehavior(behavior.expression.accept(this), behavior.name, this.cloneExpressionArray(behavior.args));\n  };\n\n  ExpressionCloner.prototype.visitValueConverter = function visitValueConverter(converter) {\n    return new ValueConverter(converter.expression.accept(this), converter.name, this.cloneExpressionArray(converter.args));\n  };\n\n  ExpressionCloner.prototype.visitAssign = function visitAssign(assign) {\n    return new Assign(assign.target.accept(this), assign.value.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitConditional = function visitConditional(conditional) {\n    return new Conditional(conditional.condition.accept(this), conditional.yes.accept(this), conditional.no.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitAccessThis = function visitAccessThis(access) {\n    return new AccessThis(access.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitAccessScope = function visitAccessScope(access) {\n    return new AccessScope(access.name, access.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitAccessMember = function visitAccessMember(access) {\n    return new AccessMember(access.object.accept(this), access.name);\n  };\n\n  ExpressionCloner.prototype.visitAccessKeyed = function visitAccessKeyed(access) {\n    return new AccessKeyed(access.object.accept(this), access.key.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitCallScope = function visitCallScope(call) {\n    return new CallScope(call.name, this.cloneExpressionArray(call.args), call.ancestor);\n  };\n\n  ExpressionCloner.prototype.visitCallFunction = function visitCallFunction(call) {\n    return new CallFunction(call.func.accept(this), this.cloneExpressionArray(call.args));\n  };\n\n  ExpressionCloner.prototype.visitCallMember = function visitCallMember(call) {\n    return new CallMember(call.object.accept(this), call.name, this.cloneExpressionArray(call.args));\n  };\n\n  ExpressionCloner.prototype.visitUnary = function visitUnary(unary) {\n    return new Unary(prefix.operation, prefix.expression.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitBinary = function visitBinary(binary) {\n    return new Binary(binary.operation, binary.left.accept(this), binary.right.accept(this));\n  };\n\n  ExpressionCloner.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {\n    return new LiteralPrimitive(literal);\n  };\n\n  ExpressionCloner.prototype.visitLiteralArray = function visitLiteralArray(literal) {\n    return new LiteralArray(this.cloneExpressionArray(literal.elements));\n  };\n\n  ExpressionCloner.prototype.visitLiteralObject = function visitLiteralObject(literal) {\n    return new LiteralObject(literal.keys, this.cloneExpressionArray(literal.values));\n  };\n\n  ExpressionCloner.prototype.visitLiteralString = function visitLiteralString(literal) {\n    return new LiteralString(literal.value);\n  };\n\n  ExpressionCloner.prototype.visitLiteralTemplate = function visitLiteralTemplate(literal) {\n    return new LiteralTemplate(literal.cooked, this.cloneExpressionArray(literal.expressions), literal.raw, literal.tag && literal.tag.accept(this));\n  };\n\n  return ExpressionCloner;\n}();\n\nexport function cloneExpression(expression) {\n  var visitor = new ExpressionCloner();\n  return expression.accept(visitor);\n}\n\nexport var bindingMode = {\n  oneTime: 0,\n  toView: 1,\n  oneWay: 1,\n  twoWay: 2,\n  fromView: 3\n};\n\nexport var Parser = function () {\n  function Parser() {\n    \n\n    this.cache = Object.create(null);\n  }\n\n  Parser.prototype.parse = function parse(src) {\n    src = src || '';\n\n    return this.cache[src] || (this.cache[src] = new ParserImplementation(src).parseBindingBehavior());\n  };\n\n  return Parser;\n}();\n\nvar fromCharCode = String.fromCharCode;\n\nexport var ParserImplementation = function () {\n  _createClass(ParserImplementation, [{\n    key: 'raw',\n    get: function get() {\n      return this.src.slice(this.start, this.idx);\n    }\n  }]);\n\n  function ParserImplementation(src) {\n    \n\n    this.idx = 0;\n\n    this.start = 0;\n\n    this.src = src;\n    this.len = src.length;\n\n    this.tkn = T$EOF;\n\n    this.val = undefined;\n\n    this.ch = src.charCodeAt(0);\n  }\n\n  ParserImplementation.prototype.parseBindingBehavior = function parseBindingBehavior() {\n    this.nextToken();\n    if (this.tkn & T$ExpressionTerminal) {\n      this.err('Invalid start of expression');\n    }\n    var result = this.parseValueConverter();\n    while (this.opt(T$Ampersand)) {\n      result = new BindingBehavior(result, this.val, this.parseVariadicArgs());\n    }\n    if (this.tkn !== T$EOF) {\n      this.err('Unconsumed token ' + this.raw);\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseValueConverter = function parseValueConverter() {\n    var result = this.parseExpression();\n    while (this.opt(T$Bar)) {\n      result = new ValueConverter(result, this.val, this.parseVariadicArgs());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseVariadicArgs = function parseVariadicArgs() {\n    this.nextToken();\n    var result = [];\n    while (this.opt(T$Colon)) {\n      result.push(this.parseExpression());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseExpression = function parseExpression() {\n    var exprStart = this.idx;\n    var result = this.parseConditional();\n\n    while (this.tkn === T$Eq) {\n      if (!result.isAssignable) {\n        this.err('Expression ' + this.src.slice(exprStart, this.start) + ' is not assignable');\n      }\n      this.nextToken();\n      exprStart = this.idx;\n      result = new Assign(result, this.parseConditional());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseConditional = function parseConditional() {\n    var result = this.parseBinary(0);\n\n    if (this.opt(T$Question)) {\n      var yes = this.parseExpression();\n      this.expect(T$Colon);\n      result = new Conditional(result, yes, this.parseExpression());\n    }\n    return result;\n  };\n\n  ParserImplementation.prototype.parseBinary = function parseBinary(minPrecedence) {\n    var left = this.parseLeftHandSide(0);\n\n    while (this.tkn & T$BinaryOp) {\n      var opToken = this.tkn;\n      if ((opToken & T$Precedence) <= minPrecedence) {\n        break;\n      }\n      this.nextToken();\n      left = new Binary(TokenValues[opToken & T$TokenMask], left, this.parseBinary(opToken & T$Precedence));\n    }\n    return left;\n  };\n\n  ParserImplementation.prototype.parseLeftHandSide = function parseLeftHandSide(context) {\n    var result = void 0;\n\n    primary: switch (this.tkn) {\n      case T$Plus:\n        this.nextToken();\n        return this.parseLeftHandSide(0);\n      case T$Minus:\n        this.nextToken();\n        return new Binary('-', new LiteralPrimitive(0), this.parseLeftHandSide(0));\n      case T$Bang:\n      case T$TypeofKeyword:\n      case T$VoidKeyword:\n        var op = TokenValues[this.tkn & T$TokenMask];\n        this.nextToken();\n        return new Unary(op, this.parseLeftHandSide(0));\n      case T$ParentScope:\n        {\n          do {\n            this.nextToken();\n            context++;\n            if (this.opt(T$Period)) {\n              if (this.tkn === T$Period) {\n                this.err();\n              }\n              continue;\n            } else if (this.tkn & T$AccessScopeTerminal) {\n              result = new AccessThis(context & C$Ancestor);\n\n              context = context & C$ShorthandProp | C$This;\n              break primary;\n            } else {\n              this.err();\n            }\n          } while (this.tkn === T$ParentScope);\n        }\n\n      case T$Identifier:\n        {\n          result = new AccessScope(this.val, context & C$Ancestor);\n          this.nextToken();\n          context = context & C$ShorthandProp | C$Scope;\n          break;\n        }\n      case T$ThisScope:\n        this.nextToken();\n        result = new AccessThis(0);\n        context = context & C$ShorthandProp | C$This;\n        break;\n      case T$LParen:\n        this.nextToken();\n        result = this.parseExpression();\n        this.expect(T$RParen);\n        context = C$Primary;\n        break;\n      case T$LBracket:\n        {\n          this.nextToken();\n          var _elements = [];\n          if (this.tkn !== T$RBracket) {\n            do {\n              _elements.push(this.parseExpression());\n            } while (this.opt(T$Comma));\n          }\n          this.expect(T$RBracket);\n          result = new LiteralArray(_elements);\n          context = C$Primary;\n          break;\n        }\n      case T$LBrace:\n        {\n          var keys = [];\n          var values = [];\n          this.nextToken();\n          while (this.tkn !== T$RBrace) {\n            if (this.tkn & T$IdentifierOrKeyword) {\n              var ch = this.ch,\n                  tkn = this.tkn,\n                  idx = this.idx;\n\n              keys.push(this.val);\n              this.nextToken();\n              if (this.opt(T$Colon)) {\n                values.push(this.parseExpression());\n              } else {\n                this.ch = ch;\n                this.tkn = tkn;\n                this.idx = idx;\n                values.push(this.parseLeftHandSide(C$ShorthandProp));\n              }\n            } else if (this.tkn & T$Literal) {\n              keys.push(this.val);\n              this.nextToken();\n              this.expect(T$Colon);\n              values.push(this.parseExpression());\n            } else {\n              this.err();\n            }\n            if (this.tkn !== T$RBrace) {\n              this.expect(T$Comma);\n            }\n          }\n          this.expect(T$RBrace);\n          result = new LiteralObject(keys, values);\n          context = C$Primary;\n          break;\n        }\n      case T$StringLiteral:\n        result = new LiteralString(this.val);\n        this.nextToken();\n        context = C$Primary;\n        break;\n      case T$TemplateTail:\n        result = new LiteralTemplate([this.val]);\n        this.nextToken();\n        context = C$Primary;\n        break;\n      case T$TemplateContinuation:\n        result = this.parseTemplate(0);\n        context = C$Primary;\n        break;\n      case T$NumericLiteral:\n        {\n          result = new LiteralPrimitive(this.val);\n          this.nextToken();\n\n          break;\n        }\n      case T$NullKeyword:\n      case T$UndefinedKeyword:\n      case T$TrueKeyword:\n      case T$FalseKeyword:\n        result = new LiteralPrimitive(TokenValues[this.tkn & T$TokenMask]);\n        this.nextToken();\n        context = C$Primary;\n        break;\n      default:\n        if (this.idx >= this.len) {\n          this.err('Unexpected end of expression');\n        } else {\n          this.err();\n        }\n    }\n\n    if (context & C$ShorthandProp) {\n      return result;\n    }\n\n    var name = this.val;\n    while (this.tkn & T$MemberOrCallExpression) {\n      switch (this.tkn) {\n        case T$Period:\n          this.nextToken();\n          if (!(this.tkn & T$IdentifierOrKeyword)) {\n            this.err();\n          }\n          name = this.val;\n          this.nextToken();\n\n          context = context & C$Primary | (context & (C$This | C$Scope)) << 1 | context & C$Member | (context & C$Keyed) >> 1 | (context & C$Call) >> 2;\n          if (this.tkn === T$LParen) {\n            continue;\n          }\n          if (context & C$Scope) {\n            result = new AccessScope(name, result.ancestor);\n          } else {\n            result = new AccessMember(result, name);\n          }\n          continue;\n        case T$LBracket:\n          this.nextToken();\n          context = C$Keyed;\n          result = new AccessKeyed(result, this.parseExpression());\n          this.expect(T$RBracket);\n          break;\n        case T$LParen:\n          this.nextToken();\n          var args = [];\n          while (this.tkn !== T$RParen) {\n            args.push(this.parseExpression());\n            if (!this.opt(T$Comma)) {\n              break;\n            }\n          }\n          this.expect(T$RParen);\n          if (context & C$Scope) {\n            result = new CallScope(name, args, result.ancestor);\n          } else if (context & (C$Member | C$Primary)) {\n            result = new CallMember(result, name, args);\n          } else {\n            result = new CallFunction(result, args);\n          }\n          context = C$Call;\n          break;\n        case T$TemplateTail:\n          result = new LiteralTemplate([this.val], [], [this.raw], result);\n          this.nextToken();\n          break;\n        case T$TemplateContinuation:\n          result = this.parseTemplate(context | C$Tagged, result);\n      }\n    }\n\n    return result;\n  };\n\n  ParserImplementation.prototype.parseTemplate = function parseTemplate(context, func) {\n    var cooked = [this.val];\n    var raw = context & C$Tagged ? [this.raw] : undefined;\n    this.expect(T$TemplateContinuation);\n    var expressions = [this.parseExpression()];\n\n    while ((this.tkn = this.scanTemplateTail()) !== T$TemplateTail) {\n      cooked.push(this.val);\n      if (context & C$Tagged) {\n        raw.push(this.raw);\n      }\n      this.expect(T$TemplateContinuation);\n      expressions.push(this.parseExpression());\n    }\n\n    cooked.push(this.val);\n    if (context & C$Tagged) {\n      raw.push(this.raw);\n    }\n    this.nextToken();\n    return new LiteralTemplate(cooked, expressions, raw, func);\n  };\n\n  ParserImplementation.prototype.nextToken = function nextToken() {\n    while (this.idx < this.len) {\n      if (this.ch <= 0x20) {\n        this.next();\n        continue;\n      }\n      this.start = this.idx;\n      if (this.ch === 0x24 || this.ch >= 0x61 && this.ch <= 0x7A) {\n        this.tkn = this.scanIdentifier();\n        return;\n      }\n\n      if ((this.tkn = CharScanners[this.ch](this)) !== null) {\n        return;\n      }\n    }\n    this.tkn = T$EOF;\n  };\n\n  ParserImplementation.prototype.next = function next() {\n    return this.ch = this.src.charCodeAt(++this.idx);\n  };\n\n  ParserImplementation.prototype.scanIdentifier = function scanIdentifier() {\n    while (AsciiIdParts.has(this.next()) || this.ch > 0x7F && IdParts[this.ch]) {}\n\n    return KeywordLookup[this.val = this.raw] || T$Identifier;\n  };\n\n  ParserImplementation.prototype.scanNumber = function scanNumber(isFloat) {\n    if (isFloat) {\n      this.val = 0;\n    } else {\n      this.val = this.ch - 0x30;\n      while (this.next() <= 0x39 && this.ch >= 0x30) {\n        this.val = this.val * 10 + this.ch - 0x30;\n      }\n    }\n\n    if (isFloat || this.ch === 0x2E) {\n      if (!isFloat) {\n        this.next();\n      }\n      var start = this.idx;\n      var value = this.ch - 0x30;\n      while (this.next() <= 0x39 && this.ch >= 0x30) {\n        value = value * 10 + this.ch - 0x30;\n      }\n      this.val = this.val + value / Math.pow(10, this.idx - start);\n    }\n\n    if (this.ch === 0x65 || this.ch === 0x45) {\n      var _start = this.idx;\n\n      this.next();\n      if (this.ch === 0x2D || this.ch === 0x2B) {\n        this.next();\n      }\n\n      if (!(this.ch >= 0x30 && this.ch <= 0x39)) {\n        this.idx = _start;\n        this.err('Invalid exponent');\n      }\n      while (this.next() <= 0x39 && this.ch >= 0x30) {}\n      this.val = parseFloat(this.src.slice(this.start, this.idx));\n    }\n\n    return T$NumericLiteral;\n  };\n\n  ParserImplementation.prototype.scanString = function scanString() {\n    var quote = this.ch;\n    this.next();\n\n    var buffer = void 0;\n    var marker = this.idx;\n\n    while (this.ch !== quote) {\n      if (this.ch === 0x5C) {\n        if (!buffer) {\n          buffer = [];\n        }\n\n        buffer.push(this.src.slice(marker, this.idx));\n\n        this.next();\n\n        var _unescaped = void 0;\n\n        if (this.ch === 0x75) {\n          this.next();\n\n          if (this.idx + 4 < this.len) {\n            var hex = this.src.slice(this.idx, this.idx + 4);\n\n            if (!/[A-Z0-9]{4}/i.test(hex)) {\n              this.err('Invalid unicode escape [\\\\u' + hex + ']');\n            }\n\n            _unescaped = parseInt(hex, 16);\n            this.idx += 4;\n            this.ch = this.src.charCodeAt(this.idx);\n          } else {\n            this.err();\n          }\n        } else {\n          _unescaped = unescape(this.ch);\n          this.next();\n        }\n\n        buffer.push(fromCharCode(_unescaped));\n        marker = this.idx;\n      } else if (this.ch === 0 || this.idx >= this.len) {\n        this.err('Unterminated quote');\n      } else {\n        this.next();\n      }\n    }\n\n    var last = this.src.slice(marker, this.idx);\n    this.next();\n    var unescaped = last;\n\n    if (buffer !== null && buffer !== undefined) {\n      buffer.push(last);\n      unescaped = buffer.join('');\n    }\n\n    this.val = unescaped;\n    return T$StringLiteral;\n  };\n\n  ParserImplementation.prototype.scanTemplate = function scanTemplate() {\n    var tail = true;\n    var result = '';\n\n    while (this.next() !== 0x60) {\n      if (this.ch === 0x24) {\n        if (this.idx + 1 < this.len && this.src.charCodeAt(this.idx + 1) === 0x7B) {\n          this.idx++;\n          tail = false;\n          break;\n        } else {\n          result += '$';\n        }\n      } else if (this.ch === 0x5C) {\n        result += fromCharCode(unescape(this.next()));\n      } else if (this.ch === 0 || this.idx >= this.len) {\n        this.err('Unterminated template literal');\n      } else {\n        result += fromCharCode(this.ch);\n      }\n    }\n\n    this.next();\n    this.val = result;\n    if (tail) {\n      return T$TemplateTail;\n    }\n    return T$TemplateContinuation;\n  };\n\n  ParserImplementation.prototype.scanTemplateTail = function scanTemplateTail() {\n    if (this.idx >= this.len) {\n      this.err('Unterminated template');\n    }\n    this.idx--;\n    return this.scanTemplate();\n  };\n\n  ParserImplementation.prototype.err = function err() {\n    var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Unexpected token ' + this.raw;\n    var column = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.start;\n\n    throw new Error('Parser Error: ' + message + ' at column ' + column + ' in expression [' + this.src + ']');\n  };\n\n  ParserImplementation.prototype.opt = function opt(token) {\n    if (this.tkn === token) {\n      this.nextToken();\n      return true;\n    }\n\n    return false;\n  };\n\n  ParserImplementation.prototype.expect = function expect(token) {\n    if (this.tkn === token) {\n      this.nextToken();\n    } else {\n      this.err('Missing expected token ' + TokenValues[token & T$TokenMask], this.idx);\n    }\n  };\n\n  return ParserImplementation;\n}();\n\nfunction unescape(code) {\n  switch (code) {\n    case 0x66:\n      return 0xC;\n    case 0x6E:\n      return 0xA;\n    case 0x72:\n      return 0xD;\n    case 0x74:\n      return 0x9;\n    case 0x76:\n      return 0xB;\n    default:\n      return code;\n  }\n}\n\nvar C$This = 1 << 10;\nvar C$Scope = 1 << 11;\nvar C$Member = 1 << 12;\nvar C$Keyed = 1 << 13;\nvar C$Call = 1 << 14;\nvar C$Primary = 1 << 15;\nvar C$ShorthandProp = 1 << 16;\nvar C$Tagged = 1 << 17;\n\nvar C$Ancestor = (1 << 9) - 1;\n\nvar T$TokenMask = (1 << 6) - 1;\n\nvar T$PrecShift = 6;\n\nvar T$Precedence = 7 << T$PrecShift;\n\nvar T$ExpressionTerminal = 1 << 11;\n\nvar T$ClosingToken = 1 << 12;\n\nvar T$OpeningToken = 1 << 13;\n\nvar T$AccessScopeTerminal = 1 << 14;\nvar T$Keyword = 1 << 15;\nvar T$EOF = 1 << 16 | T$AccessScopeTerminal | T$ExpressionTerminal;\nvar T$Identifier = 1 << 17;\nvar T$IdentifierOrKeyword = T$Identifier | T$Keyword;\nvar T$Literal = 1 << 18;\nvar T$NumericLiteral = 1 << 19 | T$Literal;\nvar T$StringLiteral = 1 << 20 | T$Literal;\nvar T$BinaryOp = 1 << 21;\n\nvar T$UnaryOp = 1 << 22;\n\nvar T$MemberExpression = 1 << 23;\n\nvar T$MemberOrCallExpression = 1 << 24;\nvar T$TemplateTail = 1 << 25 | T$MemberOrCallExpression;\nvar T$TemplateContinuation = 1 << 26 | T$MemberOrCallExpression;\n\nvar T$FalseKeyword = 0 | T$Keyword | T$Literal;\nvar T$TrueKeyword = 1 | T$Keyword | T$Literal;\nvar T$NullKeyword = 2 | T$Keyword | T$Literal;\nvar T$UndefinedKeyword = 3 | T$Keyword | T$Literal;\nvar T$ThisScope = 4 | T$IdentifierOrKeyword;\nvar T$ParentScope = 5 | T$IdentifierOrKeyword;\n\nvar T$LParen = 6 | T$OpeningToken | T$AccessScopeTerminal | T$MemberOrCallExpression;\nvar T$LBrace = 7 | T$OpeningToken;\nvar T$Period = 8 | T$MemberExpression | T$MemberOrCallExpression;\nvar T$RBrace = 9 | T$AccessScopeTerminal | T$ClosingToken | T$ExpressionTerminal;\nvar T$RParen = 10 | T$AccessScopeTerminal | T$ClosingToken | T$ExpressionTerminal;\nvar T$Comma = 11 | T$AccessScopeTerminal;\nvar T$LBracket = 12 | T$OpeningToken | T$AccessScopeTerminal | T$MemberExpression | T$MemberOrCallExpression;\nvar T$RBracket = 13 | T$ClosingToken | T$ExpressionTerminal;\nvar T$Colon = 14 | T$AccessScopeTerminal;\nvar T$Question = 15;\n\nvar T$Ampersand = 18 | T$AccessScopeTerminal;\nvar T$Bar = 19 | T$AccessScopeTerminal;\nvar T$BarBar = 20 | 1 << T$PrecShift | T$BinaryOp;\nvar T$AmpersandAmpersand = 21 | 2 << T$PrecShift | T$BinaryOp;\nvar T$Caret = 22 | 3 << T$PrecShift | T$BinaryOp;\nvar T$EqEq = 23 | 4 << T$PrecShift | T$BinaryOp;\nvar T$BangEq = 24 | 4 << T$PrecShift | T$BinaryOp;\nvar T$EqEqEq = 25 | 4 << T$PrecShift | T$BinaryOp;\nvar T$BangEqEq = 26 | 4 << T$PrecShift | T$BinaryOp;\nvar T$Lt = 27 | 5 << T$PrecShift | T$BinaryOp;\nvar T$Gt = 28 | 5 << T$PrecShift | T$BinaryOp;\nvar T$LtEq = 29 | 5 << T$PrecShift | T$BinaryOp;\nvar T$GtEq = 30 | 5 << T$PrecShift | T$BinaryOp;\nvar T$InKeyword = 31 | 5 << T$PrecShift | T$BinaryOp | T$Keyword;\nvar T$InstanceOfKeyword = 32 | 5 << T$PrecShift | T$BinaryOp | T$Keyword;\nvar T$Plus = 33 | 6 << T$PrecShift | T$BinaryOp | T$UnaryOp;\nvar T$Minus = 34 | 6 << T$PrecShift | T$BinaryOp | T$UnaryOp;\nvar T$TypeofKeyword = 35 | T$UnaryOp | T$Keyword;\nvar T$VoidKeyword = 36 | T$UnaryOp | T$Keyword;\nvar T$Star = 37 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Percent = 38 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Slash = 39 | 7 << T$PrecShift | T$BinaryOp;\nvar T$Eq = 40;\nvar T$Bang = 41 | T$UnaryOp;\n\nvar KeywordLookup = Object.create(null);\nKeywordLookup.true = T$TrueKeyword;\nKeywordLookup.null = T$NullKeyword;\nKeywordLookup.false = T$FalseKeyword;\nKeywordLookup.undefined = T$UndefinedKeyword;\nKeywordLookup.$this = T$ThisScope;\nKeywordLookup.$parent = T$ParentScope;\nKeywordLookup.in = T$InKeyword;\nKeywordLookup.instanceof = T$InstanceOfKeyword;\nKeywordLookup.typeof = T$TypeofKeyword;\nKeywordLookup.void = T$VoidKeyword;\n\nvar TokenValues = [false, true, null, undefined, '$this', '$parent', '(', '{', '.', '}', ')', ',', '[', ']', ':', '?', '\\'', '\"', '&', '|', '||', '&&', '^', '==', '!=', '===', '!==', '<', '>', '<=', '>=', 'in', 'instanceof', '+', '-', 'typeof', 'void', '*', '%', '/', '=', '!'];\n\nvar codes = {\n  AsciiIdPart: [0x24, 0, 0x30, 0x3A, 0x41, 0x5B, 0x5F, 0, 0x61, 0x7B],\n  IdStart: [0x24, 0, 0x41, 0x5B, 0x5F, 0, 0x61, 0x7B, 0xAA, 0, 0xBA, 0, 0xC0, 0xD7, 0xD8, 0xF7, 0xF8, 0x2B9, 0x2E0, 0x2E5, 0x1D00, 0x1D26, 0x1D2C, 0x1D5D, 0x1D62, 0x1D66, 0x1D6B, 0x1D78, 0x1D79, 0x1DBF, 0x1E00, 0x1F00, 0x2071, 0, 0x207F, 0, 0x2090, 0x209D, 0x212A, 0x212C, 0x2132, 0, 0x214E, 0, 0x2160, 0x2189, 0x2C60, 0x2C80, 0xA722, 0xA788, 0xA78B, 0xA7AF, 0xA7B0, 0xA7B8, 0xA7F7, 0xA800, 0xAB30, 0xAB5B, 0xAB5C, 0xAB65, 0xFB00, 0xFB07, 0xFF21, 0xFF3B, 0xFF41, 0xFF5B],\n  Digit: [0x30, 0x3A],\n  Skip: [0, 0x21, 0x7F, 0xA1]\n};\n\nfunction decompress(lookup, set, compressed, value) {\n  var rangeCount = compressed.length;\n  for (var i = 0; i < rangeCount; i += 2) {\n    var start = compressed[i];\n    var end = compressed[i + 1];\n    end = end > 0 ? end : start + 1;\n    if (lookup) {\n      var j = start;\n      while (j < end) {\n        lookup[j] = value;\n        j++;\n      }\n    }\n    if (set) {\n      for (var ch = start; ch < end; ch++) {\n        set.add(ch);\n      }\n    }\n  }\n}\n\nfunction returnToken(token) {\n  return function (p) {\n    p.next();\n    return token;\n  };\n}\nfunction unexpectedCharacter(p) {\n  p.err('Unexpected character [' + fromCharCode(p.ch) + ']');\n  return null;\n}\n\nvar AsciiIdParts = new Set();\ndecompress(null, AsciiIdParts, codes.AsciiIdPart, true);\n\nvar IdParts = new Uint8Array(0xFFFF);\ndecompress(IdParts, null, codes.IdStart, 1);\ndecompress(IdParts, null, codes.Digit, 1);\n\nvar CharScanners = new Array(0xFFFF);\nvar ci = 0;\nwhile (ci < 0xFFFF) {\n  CharScanners[ci] = unexpectedCharacter;\n  ci++;\n}\n\ndecompress(CharScanners, null, codes.Skip, function (p) {\n  p.next();\n  return null;\n});\ndecompress(CharScanners, null, codes.IdStart, function (p) {\n  return p.scanIdentifier();\n});\ndecompress(CharScanners, null, codes.Digit, function (p) {\n  return p.scanNumber(false);\n});\n\nCharScanners[0x22] = CharScanners[0x27] = function (p) {\n  return p.scanString();\n};\nCharScanners[0x60] = function (p) {\n  return p.scanTemplate();\n};\n\nCharScanners[0x21] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Bang;\n  }\n  if (p.next() !== 0x3D) {\n    return T$BangEq;\n  }\n  p.next();\n  return T$BangEqEq;\n};\n\nCharScanners[0x3D] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Eq;\n  }\n  if (p.next() !== 0x3D) {\n    return T$EqEq;\n  }\n  p.next();\n  return T$EqEqEq;\n};\n\nCharScanners[0x26] = function (p) {\n  if (p.next() !== 0x26) {\n    return T$Ampersand;\n  }\n  p.next();\n  return T$AmpersandAmpersand;\n};\n\nCharScanners[0x7C] = function (p) {\n  if (p.next() !== 0x7C) {\n    return T$Bar;\n  }\n  p.next();\n  return T$BarBar;\n};\n\nCharScanners[0x2E] = function (p) {\n  if (p.next() <= 0x39 && p.ch >= 0x30) {\n    return p.scanNumber(true);\n  }\n  return T$Period;\n};\n\nCharScanners[0x3C] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Lt;\n  }\n  p.next();\n  return T$LtEq;\n};\n\nCharScanners[0x3E] = function (p) {\n  if (p.next() !== 0x3D) {\n    return T$Gt;\n  }\n  p.next();\n  return T$GtEq;\n};\n\nCharScanners[0x25] = returnToken(T$Percent);\nCharScanners[0x28] = returnToken(T$LParen);\nCharScanners[0x29] = returnToken(T$RParen);\nCharScanners[0x2A] = returnToken(T$Star);\nCharScanners[0x2B] = returnToken(T$Plus);\nCharScanners[0x2C] = returnToken(T$Comma);\nCharScanners[0x2D] = returnToken(T$Minus);\nCharScanners[0x2F] = returnToken(T$Slash);\nCharScanners[0x3A] = returnToken(T$Colon);\nCharScanners[0x3F] = returnToken(T$Question);\nCharScanners[0x5B] = returnToken(T$LBracket);\nCharScanners[0x5D] = returnToken(T$RBracket);\nCharScanners[0x5E] = returnToken(T$Caret);\nCharScanners[0x7B] = returnToken(T$LBrace);\nCharScanners[0x7D] = returnToken(T$RBrace);\n\nvar mapProto = Map.prototype;\n\nfunction _getMapObserver(taskQueue, map) {\n  return ModifyMapObserver.for(taskQueue, map);\n}\n\nvar ModifyMapObserver = function (_ModifyCollectionObse2) {\n  _inherits(ModifyMapObserver, _ModifyCollectionObse2);\n\n  function ModifyMapObserver(taskQueue, map) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse2.call(this, taskQueue, map));\n  }\n\n  ModifyMapObserver.for = function _for(taskQueue, map) {\n    if (!('__map_observer__' in map)) {\n      Reflect.defineProperty(map, '__map_observer__', {\n        value: ModifyMapObserver.create(taskQueue, map),\n        enumerable: false, configurable: false\n      });\n    }\n    return map.__map_observer__;\n  };\n\n  ModifyMapObserver.create = function create(taskQueue, map) {\n    var observer = new ModifyMapObserver(taskQueue, map);\n\n    var proto = mapProto;\n    if (proto.set !== map.set || proto.delete !== map.delete || proto.clear !== map.clear) {\n      proto = {\n        set: map.set,\n        delete: map.delete,\n        clear: map.clear\n      };\n    }\n\n    map.set = function () {\n      var hasValue = map.has(arguments[0]);\n      var type = hasValue ? 'update' : 'add';\n      var oldValue = map.get(arguments[0]);\n      var methodCallResult = proto.set.apply(map, arguments);\n      if (!hasValue || oldValue !== map.get(arguments[0])) {\n        observer.addChangeRecord({\n          type: type,\n          object: map,\n          key: arguments[0],\n          oldValue: oldValue\n        });\n      }\n      return methodCallResult;\n    };\n\n    map.delete = function () {\n      var hasValue = map.has(arguments[0]);\n      var oldValue = map.get(arguments[0]);\n      var methodCallResult = proto.delete.apply(map, arguments);\n      if (hasValue) {\n        observer.addChangeRecord({\n          type: 'delete',\n          object: map,\n          key: arguments[0],\n          oldValue: oldValue\n        });\n      }\n      return methodCallResult;\n    };\n\n    map.clear = function () {\n      var methodCallResult = proto.clear.apply(map, arguments);\n      observer.addChangeRecord({\n        type: 'clear',\n        object: map\n      });\n      return methodCallResult;\n    };\n\n    return observer;\n  };\n\n  return ModifyMapObserver;\n}(ModifyCollectionObserver);\n\nvar emLogger = LogManager.getLogger('event-manager');\n\nfunction findOriginalEventTarget(event) {\n  return event.path && event.path[0] || event.deepPath && event.deepPath[0] || event.target;\n}\n\nfunction stopPropagation() {\n  this.standardStopPropagation();\n  this.propagationStopped = true;\n}\n\nfunction handleCapturedEvent(event) {\n  event.propagationStopped = false;\n  var target = findOriginalEventTarget(event);\n\n  var orderedCallbacks = [];\n\n  while (target) {\n    if (target.capturedCallbacks) {\n      var callback = target.capturedCallbacks[event.type];\n      if (callback) {\n        if (event.stopPropagation !== stopPropagation) {\n          event.standardStopPropagation = event.stopPropagation;\n          event.stopPropagation = stopPropagation;\n        }\n        orderedCallbacks.push(callback);\n      }\n    }\n    target = target.parentNode;\n  }\n  for (var i = orderedCallbacks.length - 1; i >= 0 && !event.propagationStopped; i--) {\n    var orderedCallback = orderedCallbacks[i];\n    if ('handleEvent' in orderedCallback) {\n      orderedCallback.handleEvent(event);\n    } else {\n      orderedCallback(event);\n    }\n  }\n}\n\nvar CapturedHandlerEntry = function () {\n  function CapturedHandlerEntry(eventName) {\n    \n\n    this.eventName = eventName;\n    this.count = 0;\n  }\n\n  CapturedHandlerEntry.prototype.increment = function increment() {\n    this.count++;\n\n    if (this.count === 1) {\n      DOM.addEventListener(this.eventName, handleCapturedEvent, true);\n    }\n  };\n\n  CapturedHandlerEntry.prototype.decrement = function decrement() {\n    if (this.count === 0) {\n      emLogger.warn('The same EventListener was disposed multiple times.');\n    } else if (--this.count === 0) {\n      DOM.removeEventListener(this.eventName, handleCapturedEvent, true);\n    }\n  };\n\n  return CapturedHandlerEntry;\n}();\n\nfunction handleDelegatedEvent(event) {\n  event.propagationStopped = false;\n  var target = findOriginalEventTarget(event);\n\n  while (target && !event.propagationStopped) {\n    if (target.delegatedCallbacks) {\n      var callback = target.delegatedCallbacks[event.type];\n      if (callback) {\n        if (event.stopPropagation !== stopPropagation) {\n          event.standardStopPropagation = event.stopPropagation;\n          event.stopPropagation = stopPropagation;\n        }\n        if ('handleEvent' in callback) {\n          callback.handleEvent(event);\n        } else {\n          callback(event);\n        }\n      }\n    }\n\n    target = target.parentNode;\n  }\n}\n\nvar DelegateHandlerEntry = function () {\n  function DelegateHandlerEntry(eventName) {\n    \n\n    this.eventName = eventName;\n    this.count = 0;\n  }\n\n  DelegateHandlerEntry.prototype.increment = function increment() {\n    this.count++;\n\n    if (this.count === 1) {\n      DOM.addEventListener(this.eventName, handleDelegatedEvent, false);\n    }\n  };\n\n  DelegateHandlerEntry.prototype.decrement = function decrement() {\n    if (this.count === 0) {\n      emLogger.warn('The same EventListener was disposed multiple times.');\n    } else if (--this.count === 0) {\n      DOM.removeEventListener(this.eventName, handleDelegatedEvent, false);\n    }\n  };\n\n  return DelegateHandlerEntry;\n}();\n\nvar DelegationEntryHandler = function () {\n  function DelegationEntryHandler(entry, lookup, targetEvent) {\n    \n\n    this.entry = entry;\n    this.lookup = lookup;\n    this.targetEvent = targetEvent;\n  }\n\n  DelegationEntryHandler.prototype.dispose = function dispose() {\n    if (this.lookup[this.targetEvent]) {\n      this.entry.decrement();\n      this.lookup[this.targetEvent] = null;\n    } else {\n      emLogger.warn('Calling .dispose() on already disposed eventListener');\n    }\n  };\n\n  return DelegationEntryHandler;\n}();\n\nvar EventHandler = function () {\n  function EventHandler(target, targetEvent, callback) {\n    \n\n    this.target = target;\n    this.targetEvent = targetEvent;\n    this.callback = callback;\n  }\n\n  EventHandler.prototype.dispose = function dispose() {\n    this.target.removeEventListener(this.targetEvent, this.callback);\n  };\n\n  return EventHandler;\n}();\n\nvar DefaultEventStrategy = function () {\n  function DefaultEventStrategy() {\n    \n\n    this.delegatedHandlers = {};\n    this.capturedHandlers = {};\n  }\n\n  DefaultEventStrategy.prototype.subscribe = function subscribe(target, targetEvent, callback, strategy, disposable) {\n    var delegatedHandlers = void 0;\n    var capturedHandlers = void 0;\n    var handlerEntry = void 0;\n\n    if (strategy === delegationStrategy.bubbling) {\n      delegatedHandlers = this.delegatedHandlers;\n      handlerEntry = delegatedHandlers[targetEvent] || (delegatedHandlers[targetEvent] = new DelegateHandlerEntry(targetEvent));\n      var delegatedCallbacks = target.delegatedCallbacks || (target.delegatedCallbacks = {});\n      if (!delegatedCallbacks[targetEvent]) {\n        handlerEntry.increment();\n      } else {\n        emLogger.warn('Overriding previous callback for event listener', { event: targetEvent, callback: callback, previousCallback: delegatedCallbacks[targetEvent] });\n      }\n      delegatedCallbacks[targetEvent] = callback;\n\n      if (disposable === true) {\n        return new DelegationEntryHandler(handlerEntry, delegatedCallbacks, targetEvent);\n      }\n\n      return function () {\n        handlerEntry.decrement();\n        delegatedCallbacks[targetEvent] = null;\n      };\n    }\n    if (strategy === delegationStrategy.capturing) {\n      capturedHandlers = this.capturedHandlers;\n      handlerEntry = capturedHandlers[targetEvent] || (capturedHandlers[targetEvent] = new CapturedHandlerEntry(targetEvent));\n      var capturedCallbacks = target.capturedCallbacks || (target.capturedCallbacks = {});\n      if (!capturedCallbacks[targetEvent]) {\n        handlerEntry.increment();\n      } else {\n        emLogger.error('already have a callback for event', { event: targetEvent, callback: callback });\n      }\n      capturedCallbacks[targetEvent] = callback;\n\n      if (disposable === true) {\n        return new DelegationEntryHandler(handlerEntry, capturedCallbacks, targetEvent);\n      }\n\n      return function () {\n        handlerEntry.decrement();\n        capturedCallbacks[targetEvent] = null;\n      };\n    }\n\n    target.addEventListener(targetEvent, callback);\n\n    if (disposable === true) {\n      return new EventHandler(target, targetEvent, callback);\n    }\n\n    return function () {\n      target.removeEventListener(targetEvent, callback);\n    };\n  };\n\n  return DefaultEventStrategy;\n}();\n\nexport var delegationStrategy = {\n  none: 0,\n  capturing: 1,\n  bubbling: 2\n};\n\nexport var EventManager = function () {\n  function EventManager() {\n    \n\n    this.elementHandlerLookup = {};\n    this.eventStrategyLookup = {};\n\n    this.registerElementConfig({\n      tagName: 'input',\n      properties: {\n        value: ['change', 'input'],\n        checked: ['change', 'input'],\n        files: ['change', 'input']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'textarea',\n      properties: {\n        value: ['change', 'input']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'select',\n      properties: {\n        value: ['change']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'content editable',\n      properties: {\n        value: ['change', 'input', 'blur', 'keyup', 'paste']\n      }\n    });\n\n    this.registerElementConfig({\n      tagName: 'scrollable element',\n      properties: {\n        scrollTop: ['scroll'],\n        scrollLeft: ['scroll']\n      }\n    });\n\n    this.defaultEventStrategy = new DefaultEventStrategy();\n  }\n\n  EventManager.prototype.registerElementConfig = function registerElementConfig(config) {\n    var tagName = config.tagName.toLowerCase();\n    var properties = config.properties;\n    var propertyName = void 0;\n\n    var lookup = this.elementHandlerLookup[tagName] = {};\n\n    for (propertyName in properties) {\n      if (properties.hasOwnProperty(propertyName)) {\n        lookup[propertyName] = properties[propertyName];\n      }\n    }\n  };\n\n  EventManager.prototype.registerEventStrategy = function registerEventStrategy(eventName, strategy) {\n    this.eventStrategyLookup[eventName] = strategy;\n  };\n\n  EventManager.prototype.getElementHandler = function getElementHandler(target, propertyName) {\n    var tagName = void 0;\n    var lookup = this.elementHandlerLookup;\n\n    if (target.tagName) {\n      tagName = target.tagName.toLowerCase();\n\n      if (lookup[tagName] && lookup[tagName][propertyName]) {\n        return new EventSubscriber(lookup[tagName][propertyName]);\n      }\n\n      if (propertyName === 'textContent' || propertyName === 'innerHTML') {\n        return new EventSubscriber(lookup['content editable'].value);\n      }\n\n      if (propertyName === 'scrollTop' || propertyName === 'scrollLeft') {\n        return new EventSubscriber(lookup['scrollable element'][propertyName]);\n      }\n    }\n\n    return null;\n  };\n\n  EventManager.prototype.addEventListener = function addEventListener(target, targetEvent, callbackOrListener, delegate, disposable) {\n    return (this.eventStrategyLookup[targetEvent] || this.defaultEventStrategy).subscribe(target, targetEvent, callbackOrListener, delegate, disposable);\n  };\n\n  return EventManager;\n}();\n\nexport var EventSubscriber = function () {\n  function EventSubscriber(events) {\n    \n\n    this.events = events;\n    this.element = null;\n    this.handler = null;\n  }\n\n  EventSubscriber.prototype.subscribe = function subscribe(element, callbackOrListener) {\n    this.element = element;\n    this.handler = callbackOrListener;\n\n    var events = this.events;\n    for (var i = 0, ii = events.length; ii > i; ++i) {\n      element.addEventListener(events[i], callbackOrListener);\n    }\n  };\n\n  EventSubscriber.prototype.dispose = function dispose() {\n    if (this.element === null) {\n      return;\n    }\n    var element = this.element;\n    var callbackOrListener = this.handler;\n    var events = this.events;\n    for (var i = 0, ii = events.length; ii > i; ++i) {\n      element.removeEventListener(events[i], callbackOrListener);\n    }\n    this.element = this.handler = null;\n  };\n\n  return EventSubscriber;\n}();\n\nexport var DirtyChecker = function () {\n  function DirtyChecker() {\n    \n\n    this.tracked = [];\n    this.checkDelay = 120;\n  }\n\n  DirtyChecker.prototype.addProperty = function addProperty(property) {\n    var tracked = this.tracked;\n\n    tracked.push(property);\n\n    if (tracked.length === 1) {\n      this.scheduleDirtyCheck();\n    }\n  };\n\n  DirtyChecker.prototype.removeProperty = function removeProperty(property) {\n    var tracked = this.tracked;\n    tracked.splice(tracked.indexOf(property), 1);\n  };\n\n  DirtyChecker.prototype.scheduleDirtyCheck = function scheduleDirtyCheck() {\n    var _this22 = this;\n\n    setTimeout(function () {\n      return _this22.check();\n    }, this.checkDelay);\n  };\n\n  DirtyChecker.prototype.check = function check() {\n    var tracked = this.tracked;\n    var i = tracked.length;\n\n    while (i--) {\n      var current = tracked[i];\n\n      if (current.isDirty()) {\n        current.call();\n      }\n    }\n\n    if (tracked.length) {\n      this.scheduleDirtyCheck();\n    }\n  };\n\n  return DirtyChecker;\n}();\n\nexport var DirtyCheckProperty = (_dec5 = subscriberCollection(), _dec5(_class5 = function () {\n  function DirtyCheckProperty(dirtyChecker, obj, propertyName) {\n    \n\n    this.dirtyChecker = dirtyChecker;\n    this.obj = obj;\n    this.propertyName = propertyName;\n  }\n\n  DirtyCheckProperty.prototype.getValue = function getValue() {\n    return this.obj[this.propertyName];\n  };\n\n  DirtyCheckProperty.prototype.setValue = function setValue(newValue) {\n    this.obj[this.propertyName] = newValue;\n  };\n\n  DirtyCheckProperty.prototype.call = function call() {\n    var oldValue = this.oldValue;\n    var newValue = this.getValue();\n\n    this.callSubscribers(newValue, oldValue);\n\n    this.oldValue = newValue;\n  };\n\n  DirtyCheckProperty.prototype.isDirty = function isDirty() {\n    return this.oldValue !== this.obj[this.propertyName];\n  };\n\n  DirtyCheckProperty.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.getValue();\n      this.dirtyChecker.addProperty(this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  DirtyCheckProperty.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.dirtyChecker.removeProperty(this);\n    }\n  };\n\n  return DirtyCheckProperty;\n}()) || _class5);\n\nvar logger = LogManager.getLogger('property-observation');\n\nexport var propertyAccessor = {\n  getValue: function getValue(obj, propertyName) {\n    return obj[propertyName];\n  },\n  setValue: function setValue(value, obj, propertyName) {\n    obj[propertyName] = value;\n  }\n};\n\nexport var PrimitiveObserver = function () {\n  function PrimitiveObserver(primitive, propertyName) {\n    \n\n    this.doNotCache = true;\n\n    this.primitive = primitive;\n    this.propertyName = propertyName;\n  }\n\n  PrimitiveObserver.prototype.getValue = function getValue() {\n    return this.primitive[this.propertyName];\n  };\n\n  PrimitiveObserver.prototype.setValue = function setValue() {\n    var type = _typeof(this.primitive);\n    throw new Error('The ' + this.propertyName + ' property of a ' + type + ' (' + this.primitive + ') cannot be assigned.');\n  };\n\n  PrimitiveObserver.prototype.subscribe = function subscribe() {};\n\n  PrimitiveObserver.prototype.unsubscribe = function unsubscribe() {};\n\n  return PrimitiveObserver;\n}();\n\nexport var SetterObserver = (_dec6 = subscriberCollection(), _dec6(_class7 = function () {\n  function SetterObserver(taskQueue, obj, propertyName) {\n    \n\n    this.taskQueue = taskQueue;\n    this.obj = obj;\n    this.propertyName = propertyName;\n    this.queued = false;\n    this.observing = false;\n  }\n\n  SetterObserver.prototype.getValue = function getValue() {\n    return this.obj[this.propertyName];\n  };\n\n  SetterObserver.prototype.setValue = function setValue(newValue) {\n    this.obj[this.propertyName] = newValue;\n  };\n\n  SetterObserver.prototype.getterValue = function getterValue() {\n    return this.currentValue;\n  };\n\n  SetterObserver.prototype.setterValue = function setterValue(newValue) {\n    var oldValue = this.currentValue;\n\n    if (oldValue !== newValue) {\n      if (!this.queued) {\n        this.oldValue = oldValue;\n        this.queued = true;\n        this.taskQueue.queueMicroTask(this);\n      }\n\n      this.currentValue = newValue;\n    }\n  };\n\n  SetterObserver.prototype.call = function call() {\n    var oldValue = this.oldValue;\n    var newValue = this.currentValue;\n\n    this.queued = false;\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  SetterObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.observing) {\n      this.convertProperty();\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  SetterObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  SetterObserver.prototype.convertProperty = function convertProperty() {\n    this.observing = true;\n    this.currentValue = this.obj[this.propertyName];\n    this.setValue = this.setterValue;\n    this.getValue = this.getterValue;\n\n    if (!Reflect.defineProperty(this.obj, this.propertyName, {\n      configurable: true,\n      enumerable: this.propertyName in this.obj ? this.obj.propertyIsEnumerable(this.propertyName) : true,\n      get: this.getValue.bind(this),\n      set: this.setValue.bind(this)\n    })) {\n      logger.warn('Cannot observe property \\'' + this.propertyName + '\\' of object', this.obj);\n    }\n  };\n\n  return SetterObserver;\n}()) || _class7);\n\nexport var XLinkAttributeObserver = function () {\n  function XLinkAttributeObserver(element, propertyName, attributeName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n    this.attributeName = attributeName;\n  }\n\n  XLinkAttributeObserver.prototype.getValue = function getValue() {\n    return this.element.getAttributeNS('http://www.w3.org/1999/xlink', this.attributeName);\n  };\n\n  XLinkAttributeObserver.prototype.setValue = function setValue(newValue) {\n    return this.element.setAttributeNS('http://www.w3.org/1999/xlink', this.attributeName, newValue);\n  };\n\n  XLinkAttributeObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return XLinkAttributeObserver;\n}();\n\nexport var dataAttributeAccessor = {\n  getValue: function getValue(obj, propertyName) {\n    return obj.getAttribute(propertyName);\n  },\n  setValue: function setValue(value, obj, propertyName) {\n    if (value === null || value === undefined) {\n      obj.removeAttribute(propertyName);\n    } else {\n      obj.setAttribute(propertyName, value);\n    }\n  }\n};\n\nexport var DataAttributeObserver = function () {\n  function DataAttributeObserver(element, propertyName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n  }\n\n  DataAttributeObserver.prototype.getValue = function getValue() {\n    return this.element.getAttribute(this.propertyName);\n  };\n\n  DataAttributeObserver.prototype.setValue = function setValue(newValue) {\n    if (newValue === null || newValue === undefined) {\n      return this.element.removeAttribute(this.propertyName);\n    }\n    return this.element.setAttribute(this.propertyName, newValue);\n  };\n\n  DataAttributeObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return DataAttributeObserver;\n}();\n\nexport var StyleObserver = function () {\n  function StyleObserver(element, propertyName) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n\n    this.styles = null;\n    this.version = 0;\n  }\n\n  StyleObserver.prototype.getValue = function getValue() {\n    return this.element.style.cssText;\n  };\n\n  StyleObserver.prototype._setProperty = function _setProperty(style, value) {\n    var priority = '';\n\n    if (value !== null && value !== undefined && typeof value.indexOf === 'function' && value.indexOf('!important') !== -1) {\n      priority = 'important';\n      value = value.replace('!important', '');\n    }\n    this.element.style.setProperty(style, value, priority);\n  };\n\n  StyleObserver.prototype.setValue = function setValue(newValue) {\n    var styles = this.styles || {};\n    var style = void 0;\n    var version = this.version;\n\n    if (newValue !== null && newValue !== undefined) {\n      if (newValue instanceof Object) {\n        var value = void 0;\n        for (style in newValue) {\n          if (newValue.hasOwnProperty(style)) {\n            value = newValue[style];\n            style = style.replace(/([A-Z])/g, function (m) {\n              return '-' + m.toLowerCase();\n            });\n            styles[style] = version;\n            this._setProperty(style, value);\n          }\n        }\n      } else if (newValue.length) {\n        var rx = /\\s*([\\w\\-]+)\\s*:\\s*((?:(?:[\\w\\-]+\\(\\s*(?:\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[\\w\\-]+\\(\\s*(?:^\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^\\)]*)\\),?|[^\\)]*)\\),?|\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|[^;]*),?\\s*)+);?/g;\n        var pair = void 0;\n        while ((pair = rx.exec(newValue)) !== null) {\n          style = pair[1];\n          if (!style) {\n            continue;\n          }\n\n          styles[style] = version;\n          this._setProperty(style, pair[2]);\n        }\n      }\n    }\n\n    this.styles = styles;\n    this.version += 1;\n\n    if (version === 0) {\n      return;\n    }\n\n    version -= 1;\n    for (style in styles) {\n      if (!styles.hasOwnProperty(style) || styles[style] !== version) {\n        continue;\n      }\n\n      this.element.style.removeProperty(style);\n    }\n  };\n\n  StyleObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"' + this.propertyName + '\" property is not supported.');\n  };\n\n  return StyleObserver;\n}();\n\nexport var ValueAttributeObserver = (_dec7 = subscriberCollection(), _dec7(_class8 = function () {\n  function ValueAttributeObserver(element, propertyName, handler) {\n    \n\n    this.element = element;\n    this.propertyName = propertyName;\n    this.handler = handler;\n    if (propertyName === 'files') {\n      this.setValue = function () {};\n    }\n  }\n\n  ValueAttributeObserver.prototype.getValue = function getValue() {\n    return this.element[this.propertyName];\n  };\n\n  ValueAttributeObserver.prototype.setValue = function setValue(newValue) {\n    newValue = newValue === undefined || newValue === null ? '' : newValue;\n    if (this.element[this.propertyName] !== newValue) {\n      this.element[this.propertyName] = newValue;\n      this.notify();\n    }\n  };\n\n  ValueAttributeObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.getValue();\n\n    this.callSubscribers(newValue, oldValue);\n\n    this.oldValue = newValue;\n  };\n\n  ValueAttributeObserver.prototype.handleEvent = function handleEvent() {\n    this.notify();\n  };\n\n  ValueAttributeObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.oldValue = this.getValue();\n      this.handler.subscribe(this.element, this);\n    }\n\n    this.addSubscriber(context, callable);\n  };\n\n  ValueAttributeObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  return ValueAttributeObserver;\n}()) || _class8);\n\nvar checkedArrayContext = 'CheckedObserver:array';\nvar checkedValueContext = 'CheckedObserver:value';\n\nexport var CheckedObserver = (_dec8 = subscriberCollection(), _dec8(_class9 = function () {\n  function CheckedObserver(element, handler, observerLocator) {\n    \n\n    this.element = element;\n    this.handler = handler;\n    this.observerLocator = observerLocator;\n  }\n\n  CheckedObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  CheckedObserver.prototype.setValue = function setValue(newValue) {\n    if (this.initialSync && this.value === newValue) {\n      return;\n    }\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(checkedArrayContext, this);\n      this.arrayObserver = null;\n    }\n\n    if (this.element.type === 'checkbox' && Array.isArray(newValue)) {\n      this.arrayObserver = this.observerLocator.getArrayObserver(newValue);\n      this.arrayObserver.subscribe(checkedArrayContext, this);\n    }\n\n    this.oldValue = this.value;\n    this.value = newValue;\n    this.synchronizeElement();\n    this.notify();\n\n    if (!this.initialSync) {\n      this.initialSync = true;\n      this.observerLocator.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  CheckedObserver.prototype.call = function call(context, splices) {\n    this.synchronizeElement();\n\n    if (!this.valueObserver) {\n      this.valueObserver = this.element.__observers__.model || this.element.__observers__.value;\n      if (this.valueObserver) {\n        this.valueObserver.subscribe(checkedValueContext, this);\n      }\n    }\n  };\n\n  CheckedObserver.prototype.synchronizeElement = function synchronizeElement() {\n    var value = this.value;\n    var element = this.element;\n    var elementValue = element.hasOwnProperty('model') ? element.model : element.value;\n    var isRadio = element.type === 'radio';\n    var matcher = element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    element.checked = isRadio && !!matcher(value, elementValue) || !isRadio && value === true || !isRadio && Array.isArray(value) && value.findIndex(function (item) {\n      return !!matcher(item, elementValue);\n    }) !== -1;\n  };\n\n  CheckedObserver.prototype.synchronizeValue = function synchronizeValue() {\n    var value = this.value;\n    var element = this.element;\n    var elementValue = element.hasOwnProperty('model') ? element.model : element.value;\n    var index = void 0;\n    var matcher = element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    if (element.type === 'checkbox') {\n      if (Array.isArray(value)) {\n        index = value.findIndex(function (item) {\n          return !!matcher(item, elementValue);\n        });\n        if (element.checked && index === -1) {\n          value.push(elementValue);\n        } else if (!element.checked && index !== -1) {\n          value.splice(index, 1);\n        }\n\n        return;\n      }\n\n      value = element.checked;\n    } else if (element.checked) {\n      value = elementValue;\n    } else {\n      return;\n    }\n\n    this.oldValue = this.value;\n    this.value = value;\n    this.notify();\n  };\n\n  CheckedObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.value;\n\n    if (newValue === oldValue) {\n      return;\n    }\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  CheckedObserver.prototype.handleEvent = function handleEvent() {\n    this.synchronizeValue();\n  };\n\n  CheckedObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.handler.subscribe(this.element, this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  CheckedObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  CheckedObserver.prototype.unbind = function unbind() {\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(checkedArrayContext, this);\n      this.arrayObserver = null;\n    }\n    if (this.valueObserver) {\n      this.valueObserver.unsubscribe(checkedValueContext, this);\n    }\n  };\n\n  return CheckedObserver;\n}()) || _class9);\n\nvar selectArrayContext = 'SelectValueObserver:array';\n\nexport var SelectValueObserver = (_dec9 = subscriberCollection(), _dec9(_class10 = function () {\n  function SelectValueObserver(element, handler, observerLocator) {\n    \n\n    this.element = element;\n    this.handler = handler;\n    this.observerLocator = observerLocator;\n  }\n\n  SelectValueObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  SelectValueObserver.prototype.setValue = function setValue(newValue) {\n    if (newValue !== null && newValue !== undefined && this.element.multiple && !Array.isArray(newValue)) {\n      throw new Error('Only null or Array instances can be bound to a multi-select.');\n    }\n    if (this.value === newValue) {\n      return;\n    }\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(selectArrayContext, this);\n      this.arrayObserver = null;\n    }\n\n    if (Array.isArray(newValue)) {\n      this.arrayObserver = this.observerLocator.getArrayObserver(newValue);\n      this.arrayObserver.subscribe(selectArrayContext, this);\n    }\n\n    this.oldValue = this.value;\n    this.value = newValue;\n    this.synchronizeOptions();\n    this.notify();\n\n    if (!this.initialSync) {\n      this.initialSync = true;\n      this.observerLocator.taskQueue.queueMicroTask(this);\n    }\n  };\n\n  SelectValueObserver.prototype.call = function call(context, splices) {\n    this.synchronizeOptions();\n  };\n\n  SelectValueObserver.prototype.synchronizeOptions = function synchronizeOptions() {\n    var value = this.value;\n    var isArray = void 0;\n\n    if (Array.isArray(value)) {\n      isArray = true;\n    }\n\n    var options = this.element.options;\n    var i = options.length;\n    var matcher = this.element.matcher || function (a, b) {\n      return a === b;\n    };\n\n    var _loop = function _loop() {\n      var option = options.item(i);\n      var optionValue = option.hasOwnProperty('model') ? option.model : option.value;\n      if (isArray) {\n        option.selected = value.findIndex(function (item) {\n          return !!matcher(optionValue, item);\n        }) !== -1;\n        return 'continue';\n      }\n      option.selected = !!matcher(optionValue, value);\n    };\n\n    while (i--) {\n      var _ret = _loop();\n\n      if (_ret === 'continue') continue;\n    }\n  };\n\n  SelectValueObserver.prototype.synchronizeValue = function synchronizeValue() {\n    var _this23 = this;\n\n    var options = this.element.options;\n    var count = 0;\n    var value = [];\n\n    for (var i = 0, ii = options.length; i < ii; i++) {\n      var _option = options.item(i);\n      if (!_option.selected) {\n        continue;\n      }\n      value.push(_option.hasOwnProperty('model') ? _option.model : _option.value);\n      count++;\n    }\n\n    if (this.element.multiple) {\n      if (Array.isArray(this.value)) {\n        var _ret2 = function () {\n          var matcher = _this23.element.matcher || function (a, b) {\n            return a === b;\n          };\n\n          var i = 0;\n\n          var _loop2 = function _loop2() {\n            var a = _this23.value[i];\n            if (value.findIndex(function (b) {\n              return matcher(a, b);\n            }) === -1) {\n              _this23.value.splice(i, 1);\n            } else {\n              i++;\n            }\n          };\n\n          while (i < _this23.value.length) {\n            _loop2();\n          }\n\n          i = 0;\n\n          var _loop3 = function _loop3() {\n            var a = value[i];\n            if (_this23.value.findIndex(function (b) {\n              return matcher(a, b);\n            }) === -1) {\n              _this23.value.push(a);\n            }\n            i++;\n          };\n\n          while (i < value.length) {\n            _loop3();\n          }\n          return {\n            v: void 0\n          };\n        }();\n\n        if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === \"object\") return _ret2.v;\n      }\n    } else {\n      if (count === 0) {\n        value = null;\n      } else {\n        value = value[0];\n      }\n    }\n\n    if (value !== this.value) {\n      this.oldValue = this.value;\n      this.value = value;\n      this.notify();\n    }\n  };\n\n  SelectValueObserver.prototype.notify = function notify() {\n    var oldValue = this.oldValue;\n    var newValue = this.value;\n\n    this.callSubscribers(newValue, oldValue);\n  };\n\n  SelectValueObserver.prototype.handleEvent = function handleEvent() {\n    this.synchronizeValue();\n  };\n\n  SelectValueObserver.prototype.subscribe = function subscribe(context, callable) {\n    if (!this.hasSubscribers()) {\n      this.handler.subscribe(this.element, this);\n    }\n    this.addSubscriber(context, callable);\n  };\n\n  SelectValueObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {\n      this.handler.dispose();\n    }\n  };\n\n  SelectValueObserver.prototype.bind = function bind() {\n    var _this24 = this;\n\n    this.domObserver = DOM.createMutationObserver(function () {\n      _this24.synchronizeOptions();\n      _this24.synchronizeValue();\n    });\n    this.domObserver.observe(this.element, { childList: true, subtree: true, characterData: true });\n  };\n\n  SelectValueObserver.prototype.unbind = function unbind() {\n    this.domObserver.disconnect();\n    this.domObserver = null;\n\n    if (this.arrayObserver) {\n      this.arrayObserver.unsubscribe(selectArrayContext, this);\n      this.arrayObserver = null;\n    }\n  };\n\n  return SelectValueObserver;\n}()) || _class10);\n\nexport var ClassObserver = function () {\n  function ClassObserver(element) {\n    \n\n    this.element = element;\n    this.doNotCache = true;\n    this.value = '';\n    this.version = 0;\n  }\n\n  ClassObserver.prototype.getValue = function getValue() {\n    return this.value;\n  };\n\n  ClassObserver.prototype.setValue = function setValue(newValue) {\n    var nameIndex = this.nameIndex || {};\n    var version = this.version;\n    var names = void 0;\n    var name = void 0;\n\n    if (newValue !== null && newValue !== undefined && newValue.length) {\n      names = newValue.split(/\\s+/);\n      for (var i = 0, length = names.length; i < length; i++) {\n        name = names[i];\n        if (name === '') {\n          continue;\n        }\n        nameIndex[name] = version;\n        this.element.classList.add(name);\n      }\n    }\n\n    this.value = newValue;\n    this.nameIndex = nameIndex;\n    this.version += 1;\n\n    if (version === 0) {\n      return;\n    }\n\n    version -= 1;\n    for (name in nameIndex) {\n      if (!nameIndex.hasOwnProperty(name) || nameIndex[name] !== version) {\n        continue;\n      }\n      this.element.classList.remove(name);\n    }\n  };\n\n  ClassObserver.prototype.subscribe = function subscribe() {\n    throw new Error('Observation of a \"' + this.element.nodeName + '\" element\\'s \"class\" property is not supported.');\n  };\n\n  return ClassObserver;\n}();\n\nexport function hasDeclaredDependencies(descriptor) {\n  return !!(descriptor && descriptor.get && descriptor.get.dependencies);\n}\n\nexport function declarePropertyDependencies(ctor, propertyName, dependencies) {\n  var descriptor = Object.getOwnPropertyDescriptor(ctor.prototype, propertyName);\n  descriptor.get.dependencies = dependencies;\n}\n\nexport function computedFrom() {\n  for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n    rest[_key] = arguments[_key];\n  }\n\n  return function (target, key, descriptor) {\n    descriptor.get.dependencies = rest;\n    return descriptor;\n  };\n}\n\nexport var ComputedExpression = function (_Expression19) {\n  _inherits(ComputedExpression, _Expression19);\n\n  function ComputedExpression(name, dependencies) {\n    \n\n    var _this25 = _possibleConstructorReturn(this, _Expression19.call(this));\n\n    _this25.name = name;\n    _this25.dependencies = dependencies;\n    _this25.isAssignable = true;\n    return _this25;\n  }\n\n  ComputedExpression.prototype.evaluate = function evaluate(scope, lookupFunctions) {\n    return scope.bindingContext[this.name];\n  };\n\n  ComputedExpression.prototype.assign = function assign(scope, value) {\n    scope.bindingContext[this.name] = value;\n  };\n\n  ComputedExpression.prototype.accept = function accept(visitor) {\n    throw new Error('not implemented');\n  };\n\n  ComputedExpression.prototype.connect = function connect(binding, scope) {\n    var dependencies = this.dependencies;\n    var i = dependencies.length;\n    while (i--) {\n      dependencies[i].connect(binding, scope);\n    }\n  };\n\n  return ComputedExpression;\n}(Expression);\n\nexport function createComputedObserver(obj, propertyName, descriptor, observerLocator) {\n  var dependencies = descriptor.get.dependencies;\n  if (!(dependencies instanceof ComputedExpression)) {\n    var i = dependencies.length;\n    while (i--) {\n      dependencies[i] = observerLocator.parser.parse(dependencies[i]);\n    }\n    dependencies = descriptor.get.dependencies = new ComputedExpression(propertyName, dependencies);\n  }\n\n  var scope = { bindingContext: obj, overrideContext: createOverrideContext(obj) };\n  return new ExpressionObserver(scope, dependencies, observerLocator);\n}\n\nvar svgElements = void 0;\nvar svgPresentationElements = void 0;\nvar svgPresentationAttributes = void 0;\nvar svgAnalyzer = void 0;\n\nif (typeof FEATURE_NO_SVG === 'undefined') {\n  svgElements = {\n    a: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'target', 'transform', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    altGlyph: ['class', 'dx', 'dy', 'externalResourcesRequired', 'format', 'glyphRef', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    altGlyphDef: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    altGlyphItem: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    animate: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateColor: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateMotion: ['accumulate', 'additive', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keyPoints', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'origin', 'path', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'rotate', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    animateTransform: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'type', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    circle: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'r', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    clipPath: ['class', 'clipPathUnits', 'externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    'color-profile': ['id', 'local', 'name', 'rendering-intent', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    cursor: ['externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    defs: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    desc: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    ellipse: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    feBlend: ['class', 'height', 'id', 'in', 'in2', 'mode', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feColorMatrix: ['class', 'height', 'id', 'in', 'result', 'style', 'type', 'values', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feComponentTransfer: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feComposite: ['class', 'height', 'id', 'in', 'in2', 'k1', 'k2', 'k3', 'k4', 'operator', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feConvolveMatrix: ['bias', 'class', 'divisor', 'edgeMode', 'height', 'id', 'in', 'kernelMatrix', 'kernelUnitLength', 'order', 'preserveAlpha', 'result', 'style', 'targetX', 'targetY', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feDiffuseLighting: ['class', 'diffuseConstant', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feDisplacementMap: ['class', 'height', 'id', 'in', 'in2', 'result', 'scale', 'style', 'width', 'x', 'xChannelSelector', 'xml:base', 'xml:lang', 'xml:space', 'y', 'yChannelSelector'],\n    feDistantLight: ['azimuth', 'elevation', 'id', 'xml:base', 'xml:lang', 'xml:space'],\n    feFlood: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feFuncA: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncB: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncG: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feFuncR: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    feGaussianBlur: ['class', 'height', 'id', 'in', 'result', 'stdDeviation', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feImage: ['class', 'externalResourcesRequired', 'height', 'id', 'preserveAspectRatio', 'result', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feMerge: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feMergeNode: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    feMorphology: ['class', 'height', 'id', 'in', 'operator', 'radius', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feOffset: ['class', 'dx', 'dy', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    fePointLight: ['id', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],\n    feSpecularLighting: ['class', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'specularConstant', 'specularExponent', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feSpotLight: ['id', 'limitingConeAngle', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'specularExponent', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],\n    feTile: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    feTurbulence: ['baseFrequency', 'class', 'height', 'id', 'numOctaves', 'result', 'seed', 'stitchTiles', 'style', 'type', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    filter: ['class', 'externalResourcesRequired', 'filterRes', 'filterUnits', 'height', 'id', 'primitiveUnits', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    font: ['class', 'externalResourcesRequired', 'horiz-adv-x', 'horiz-origin-x', 'horiz-origin-y', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face': ['accent-height', 'alphabetic', 'ascent', 'bbox', 'cap-height', 'descent', 'font-family', 'font-size', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'hanging', 'id', 'ideographic', 'mathematical', 'overline-position', 'overline-thickness', 'panose-1', 'slope', 'stemh', 'stemv', 'strikethrough-position', 'strikethrough-thickness', 'underline-position', 'underline-thickness', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'widths', 'x-height', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-format': ['id', 'string', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-name': ['id', 'name', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-src': ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    'font-face-uri': ['id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    foreignObject: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    g: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    glyph: ['arabic-form', 'class', 'd', 'glyph-name', 'horiz-adv-x', 'id', 'lang', 'orientation', 'style', 'unicode', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    glyphRef: ['class', 'dx', 'dy', 'format', 'glyphRef', 'id', 'style', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    hkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space'],\n    image: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    line: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'x1', 'x2', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],\n    linearGradient: ['class', 'externalResourcesRequired', 'gradientTransform', 'gradientUnits', 'id', 'spreadMethod', 'style', 'x1', 'x2', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],\n    marker: ['class', 'externalResourcesRequired', 'id', 'markerHeight', 'markerUnits', 'markerWidth', 'orient', 'preserveAspectRatio', 'refX', 'refY', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],\n    mask: ['class', 'externalResourcesRequired', 'height', 'id', 'maskContentUnits', 'maskUnits', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    metadata: ['id', 'xml:base', 'xml:lang', 'xml:space'],\n    'missing-glyph': ['class', 'd', 'horiz-adv-x', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],\n    mpath: ['externalResourcesRequired', 'id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    path: ['class', 'd', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'pathLength', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    pattern: ['class', 'externalResourcesRequired', 'height', 'id', 'patternContentUnits', 'patternTransform', 'patternUnits', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'viewBox', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    polygon: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    polyline: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    radialGradient: ['class', 'cx', 'cy', 'externalResourcesRequired', 'fx', 'fy', 'gradientTransform', 'gradientUnits', 'id', 'r', 'spreadMethod', 'style', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    rect: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    script: ['externalResourcesRequired', 'id', 'type', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    set: ['attributeName', 'attributeType', 'begin', 'dur', 'end', 'externalResourcesRequired', 'fill', 'id', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    stop: ['class', 'id', 'offset', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    style: ['id', 'media', 'title', 'type', 'xml:base', 'xml:lang', 'xml:space'],\n    svg: ['baseProfile', 'class', 'contentScriptType', 'contentStyleType', 'externalResourcesRequired', 'height', 'id', 'onabort', 'onactivate', 'onclick', 'onerror', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onresize', 'onscroll', 'onunload', 'onzoom', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'version', 'viewBox', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'zoomAndPan'],\n    switch: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],\n    symbol: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],\n    text: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'transform', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    textPath: ['class', 'externalResourcesRequired', 'id', 'lengthAdjust', 'method', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'spacing', 'startOffset', 'style', 'systemLanguage', 'textLength', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],\n    title: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],\n    tref: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    tspan: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    use: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],\n    view: ['externalResourcesRequired', 'id', 'preserveAspectRatio', 'viewBox', 'viewTarget', 'xml:base', 'xml:lang', 'xml:space', 'zoomAndPan'],\n    vkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space']\n  };\n\n\n  svgPresentationElements = {\n    'a': true,\n    'altGlyph': true,\n    'animate': true,\n    'animateColor': true,\n    'circle': true,\n    'clipPath': true,\n    'defs': true,\n    'ellipse': true,\n    'feBlend': true,\n    'feColorMatrix': true,\n    'feComponentTransfer': true,\n    'feComposite': true,\n    'feConvolveMatrix': true,\n    'feDiffuseLighting': true,\n    'feDisplacementMap': true,\n    'feFlood': true,\n    'feGaussianBlur': true,\n    'feImage': true,\n    'feMerge': true,\n    'feMorphology': true,\n    'feOffset': true,\n    'feSpecularLighting': true,\n    'feTile': true,\n    'feTurbulence': true,\n    'filter': true,\n    'font': true,\n    'foreignObject': true,\n    'g': true,\n    'glyph': true,\n    'glyphRef': true,\n    'image': true,\n    'line': true,\n    'linearGradient': true,\n    'marker': true,\n    'mask': true,\n    'missing-glyph': true,\n    'path': true,\n    'pattern': true,\n    'polygon': true,\n    'polyline': true,\n    'radialGradient': true,\n    'rect': true,\n    'stop': true,\n    'svg': true,\n    'switch': true,\n    'symbol': true,\n    'text': true,\n    'textPath': true,\n    'tref': true,\n    'tspan': true,\n    'use': true\n  };\n\n  svgPresentationAttributes = {\n    'alignment-baseline': true,\n    'baseline-shift': true,\n    'clip-path': true,\n    'clip-rule': true,\n    'clip': true,\n    'color-interpolation-filters': true,\n    'color-interpolation': true,\n    'color-profile': true,\n    'color-rendering': true,\n    'color': true,\n    'cursor': true,\n    'direction': true,\n    'display': true,\n    'dominant-baseline': true,\n    'enable-background': true,\n    'fill-opacity': true,\n    'fill-rule': true,\n    'fill': true,\n    'filter': true,\n    'flood-color': true,\n    'flood-opacity': true,\n    'font-family': true,\n    'font-size-adjust': true,\n    'font-size': true,\n    'font-stretch': true,\n    'font-style': true,\n    'font-variant': true,\n    'font-weight': true,\n    'glyph-orientation-horizontal': true,\n    'glyph-orientation-vertical': true,\n    'image-rendering': true,\n    'kerning': true,\n    'letter-spacing': true,\n    'lighting-color': true,\n    'marker-end': true,\n    'marker-mid': true,\n    'marker-start': true,\n    'mask': true,\n    'opacity': true,\n    'overflow': true,\n    'pointer-events': true,\n    'shape-rendering': true,\n    'stop-color': true,\n    'stop-opacity': true,\n    'stroke-dasharray': true,\n    'stroke-dashoffset': true,\n    'stroke-linecap': true,\n    'stroke-linejoin': true,\n    'stroke-miterlimit': true,\n    'stroke-opacity': true,\n    'stroke-width': true,\n    'stroke': true,\n    'text-anchor': true,\n    'text-decoration': true,\n    'text-rendering': true,\n    'unicode-bidi': true,\n    'visibility': true,\n    'word-spacing': true,\n    'writing-mode': true\n  };\n\n  var createElement = function createElement(html) {\n    var div = DOM.createElement('div');\n    div.innerHTML = html;\n    return div.firstChild;\n  };\n\n  svgAnalyzer = function () {\n    function SVGAnalyzer() {\n      \n\n      if (createElement('<svg><altGlyph /></svg>').firstElementChild.nodeName === 'altglyph' && elements.altGlyph) {\n        elements.altglyph = elements.altGlyph;\n        delete elements.altGlyph;\n        elements.altglyphdef = elements.altGlyphDef;\n        delete elements.altGlyphDef;\n        elements.altglyphitem = elements.altGlyphItem;\n        delete elements.altGlyphItem;\n        elements.glyphref = elements.glyphRef;\n        delete elements.glyphRef;\n      }\n    }\n\n    SVGAnalyzer.prototype.isStandardSvgAttribute = function isStandardSvgAttribute(nodeName, attributeName) {\n      return presentationElements[nodeName] && presentationAttributes[attributeName] || elements[nodeName] && elements[nodeName].indexOf(attributeName) !== -1;\n    };\n\n    return SVGAnalyzer;\n  }();\n}\n\nexport var elements = svgElements;\nexport var presentationElements = svgPresentationElements;\nexport var presentationAttributes = svgPresentationAttributes;\nexport var SVGAnalyzer = svgAnalyzer || function () {\n  function _class11() {\n    \n  }\n\n  _class11.prototype.isStandardSvgAttribute = function isStandardSvgAttribute() {\n    return false;\n  };\n\n  return _class11;\n}();\n\nexport var ObserverLocator = (_temp = _class12 = function () {\n  function ObserverLocator(taskQueue, eventManager, dirtyChecker, svgAnalyzer, parser) {\n    \n\n    this.taskQueue = taskQueue;\n    this.eventManager = eventManager;\n    this.dirtyChecker = dirtyChecker;\n    this.svgAnalyzer = svgAnalyzer;\n    this.parser = parser;\n\n    this.adapters = [];\n    this.logger = LogManager.getLogger('observer-locator');\n  }\n\n  ObserverLocator.prototype.getObserver = function getObserver(obj, propertyName) {\n    var observersLookup = obj.__observers__;\n    var observer = void 0;\n\n    if (observersLookup && propertyName in observersLookup) {\n      return observersLookup[propertyName];\n    }\n\n    observer = this.createPropertyObserver(obj, propertyName);\n\n    if (!observer.doNotCache) {\n      if (observersLookup === undefined) {\n        observersLookup = this.getOrCreateObserversLookup(obj);\n      }\n\n      observersLookup[propertyName] = observer;\n    }\n\n    return observer;\n  };\n\n  ObserverLocator.prototype.getOrCreateObserversLookup = function getOrCreateObserversLookup(obj) {\n    return obj.__observers__ || this.createObserversLookup(obj);\n  };\n\n  ObserverLocator.prototype.createObserversLookup = function createObserversLookup(obj) {\n    var value = {};\n\n    if (!Reflect.defineProperty(obj, '__observers__', {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: value\n    })) {\n      this.logger.warn('Cannot add observers to object', obj);\n    }\n\n    return value;\n  };\n\n  ObserverLocator.prototype.addAdapter = function addAdapter(adapter) {\n    this.adapters.push(adapter);\n  };\n\n  ObserverLocator.prototype.getAdapterObserver = function getAdapterObserver(obj, propertyName, descriptor) {\n    for (var i = 0, ii = this.adapters.length; i < ii; i++) {\n      var adapter = this.adapters[i];\n      var observer = adapter.getObserver(obj, propertyName, descriptor);\n      if (observer) {\n        return observer;\n      }\n    }\n    return null;\n  };\n\n  ObserverLocator.prototype.createPropertyObserver = function createPropertyObserver(obj, propertyName) {\n    var descriptor = void 0;\n    var handler = void 0;\n    var xlinkResult = void 0;\n\n    if (!(obj instanceof Object)) {\n      return new PrimitiveObserver(obj, propertyName);\n    }\n\n    if (obj instanceof DOM.Element) {\n      if (propertyName === 'class') {\n        return new ClassObserver(obj);\n      }\n      if (propertyName === 'style' || propertyName === 'css') {\n        return new StyleObserver(obj, propertyName);\n      }\n      handler = this.eventManager.getElementHandler(obj, propertyName);\n      if (propertyName === 'value' && obj.tagName.toLowerCase() === 'select') {\n        return new SelectValueObserver(obj, handler, this);\n      }\n      if (propertyName === 'checked' && obj.tagName.toLowerCase() === 'input') {\n        return new CheckedObserver(obj, handler, this);\n      }\n      if (handler) {\n        return new ValueAttributeObserver(obj, propertyName, handler);\n      }\n      xlinkResult = /^xlink:(.+)$/.exec(propertyName);\n      if (xlinkResult) {\n        return new XLinkAttributeObserver(obj, propertyName, xlinkResult[1]);\n      }\n      if (propertyName === 'role' && (obj instanceof DOM.Element || obj instanceof DOM.SVGElement) || /^\\w+:|^data-|^aria-/.test(propertyName) || obj instanceof DOM.SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName)) {\n        return new DataAttributeObserver(obj, propertyName);\n      }\n    }\n\n    descriptor = Object.getPropertyDescriptor(obj, propertyName);\n\n    if (hasDeclaredDependencies(descriptor)) {\n      return createComputedObserver(obj, propertyName, descriptor, this);\n    }\n\n    if (descriptor) {\n      var existingGetterOrSetter = descriptor.get || descriptor.set;\n      if (existingGetterOrSetter) {\n        if (existingGetterOrSetter.getObserver) {\n          return existingGetterOrSetter.getObserver(obj);\n        }\n\n        var adapterObserver = this.getAdapterObserver(obj, propertyName, descriptor);\n        if (adapterObserver) {\n          return adapterObserver;\n        }\n        return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n      }\n    }\n\n    if (obj instanceof Array) {\n      if (propertyName === 'length') {\n        return this.getArrayObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    } else if (obj instanceof Map) {\n      if (propertyName === 'size') {\n        return this.getMapObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    } else if (obj instanceof Set) {\n      if (propertyName === 'size') {\n        return this.getSetObserver(obj).getLengthObserver();\n      }\n\n      return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);\n    }\n\n    return new SetterObserver(this.taskQueue, obj, propertyName);\n  };\n\n  ObserverLocator.prototype.getAccessor = function getAccessor(obj, propertyName) {\n    if (obj instanceof DOM.Element) {\n      if (propertyName === 'class' || propertyName === 'style' || propertyName === 'css' || propertyName === 'value' && (obj.tagName.toLowerCase() === 'input' || obj.tagName.toLowerCase() === 'select') || propertyName === 'checked' && obj.tagName.toLowerCase() === 'input' || propertyName === 'model' && obj.tagName.toLowerCase() === 'input' || /^xlink:.+$/.exec(propertyName)) {\n        return this.getObserver(obj, propertyName);\n      }\n      if (/^\\w+:|^data-|^aria-/.test(propertyName) || obj instanceof DOM.SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName) || obj.tagName.toLowerCase() === 'img' && propertyName === 'src' || obj.tagName.toLowerCase() === 'a' && propertyName === 'href') {\n        return dataAttributeAccessor;\n      }\n    }\n    return propertyAccessor;\n  };\n\n  ObserverLocator.prototype.getArrayObserver = function getArrayObserver(array) {\n    return _getArrayObserver(this.taskQueue, array);\n  };\n\n  ObserverLocator.prototype.getMapObserver = function getMapObserver(map) {\n    return _getMapObserver(this.taskQueue, map);\n  };\n\n  ObserverLocator.prototype.getSetObserver = function getSetObserver(set) {\n    return _getSetObserver(this.taskQueue, set);\n  };\n\n  return ObserverLocator;\n}(), _class12.inject = [TaskQueue, EventManager, DirtyChecker, SVGAnalyzer, Parser], _temp);\n\nexport var ObjectObservationAdapter = function () {\n  function ObjectObservationAdapter() {\n    \n  }\n\n  ObjectObservationAdapter.prototype.getObserver = function getObserver(object, propertyName, descriptor) {\n    throw new Error('BindingAdapters must implement getObserver(object, propertyName).');\n  };\n\n  return ObjectObservationAdapter;\n}();\n\nexport var BindingExpression = function () {\n  function BindingExpression(observerLocator, targetProperty, sourceExpression, mode, lookupFunctions, attribute) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.sourceExpression = sourceExpression;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n    this.attribute = attribute;\n    this.discrete = false;\n  }\n\n  BindingExpression.prototype.createBinding = function createBinding(target) {\n    return new Binding(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.mode, this.lookupFunctions);\n  };\n\n  return BindingExpression;\n}();\n\nexport var Binding = (_dec10 = connectable(), _dec10(_class13 = function () {\n  function Binding(observerLocator, sourceExpression, target, targetProperty, mode, lookupFunctions) {\n    \n\n    this.observerLocator = observerLocator;\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.targetProperty = targetProperty;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Binding.prototype.updateTarget = function updateTarget(value) {\n    this.targetObserver.setValue(value, this.target, this.targetProperty);\n  };\n\n  Binding.prototype.updateSource = function updateSource(value) {\n    this.sourceExpression.assign(this.source, value, this.lookupFunctions);\n  };\n\n  Binding.prototype.call = function call(context, newValue, oldValue) {\n    if (!this.isBound) {\n      return;\n    }\n    if (context === sourceContext) {\n      oldValue = this.targetObserver.getValue(this.target, this.targetProperty);\n      newValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n      if (newValue !== oldValue) {\n        this.updateTarget(newValue);\n      }\n      if (this.mode !== bindingMode.oneTime) {\n        this._version++;\n        this.sourceExpression.connect(this, this.source);\n        this.unobserve(false);\n      }\n      return;\n    }\n    if (context === targetContext) {\n      if (newValue !== this.sourceExpression.evaluate(this.source, this.lookupFunctions)) {\n        this.updateSource(newValue);\n      }\n      return;\n    }\n    throw new Error('Unexpected call context ' + context);\n  };\n\n  Binding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n\n    var mode = this.mode;\n    if (!this.targetObserver) {\n      var method = mode === bindingMode.twoWay || mode === bindingMode.fromView ? 'getObserver' : 'getAccessor';\n      this.targetObserver = this.observerLocator[method](this.target, this.targetProperty);\n    }\n\n    if ('bind' in this.targetObserver) {\n      this.targetObserver.bind();\n    }\n    if (this.mode !== bindingMode.fromView) {\n      var value = this.sourceExpression.evaluate(source, this.lookupFunctions);\n      this.updateTarget(value);\n    }\n\n    if (mode === bindingMode.oneTime) {\n      return;\n    } else if (mode === bindingMode.toView) {\n      enqueueBindingConnect(this);\n    } else if (mode === bindingMode.twoWay) {\n      this.sourceExpression.connect(this, source);\n      this.targetObserver.subscribe(targetContext, this);\n    } else if (mode === bindingMode.fromView) {\n      this.targetObserver.subscribe(targetContext, this);\n    }\n  };\n\n  Binding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    if ('unbind' in this.targetObserver) {\n      this.targetObserver.unbind();\n    }\n    if (this.targetObserver.unsubscribe) {\n      this.targetObserver.unsubscribe(targetContext, this);\n    }\n    this.unobserve(true);\n  };\n\n  Binding.prototype.connect = function connect(evaluate) {\n    if (!this.isBound) {\n      return;\n    }\n    if (evaluate) {\n      var value = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n      this.updateTarget(value);\n    }\n    this.sourceExpression.connect(this, this.source);\n  };\n\n  return Binding;\n}()) || _class13);\n\nexport var CallExpression = function () {\n  function CallExpression(observerLocator, targetProperty, sourceExpression, lookupFunctions) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.sourceExpression = sourceExpression;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  CallExpression.prototype.createBinding = function createBinding(target) {\n    return new Call(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.lookupFunctions);\n  };\n\n  return CallExpression;\n}();\n\nexport var Call = function () {\n  function Call(observerLocator, sourceExpression, target, targetProperty, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.targetProperty = observerLocator.getObserver(target, targetProperty);\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Call.prototype.callSource = function callSource($event) {\n    var overrideContext = this.source.overrideContext;\n    Object.assign(overrideContext, $event);\n    overrideContext.$event = $event;\n    var mustEvaluate = true;\n    var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);\n    delete overrideContext.$event;\n    for (var prop in $event) {\n      delete overrideContext[prop];\n    }\n    return result;\n  };\n\n  Call.prototype.bind = function bind(source) {\n    var _this26 = this;\n\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this.targetProperty.setValue(function ($event) {\n      return _this26.callSource($event);\n    });\n  };\n\n  Call.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this.targetProperty.setValue(null);\n  };\n\n  return Call;\n}();\n\nexport var ValueConverterResource = function () {\n  function ValueConverterResource(name) {\n    \n\n    this.name = name;\n  }\n\n  ValueConverterResource.convention = function convention(name) {\n    if (name.endsWith('ValueConverter')) {\n      return new ValueConverterResource(camelCase(name.substring(0, name.length - 14)));\n    }\n  };\n\n  ValueConverterResource.prototype.initialize = function initialize(container, target) {\n    this.instance = container.get(target);\n  };\n\n  ValueConverterResource.prototype.register = function register(registry, name) {\n    registry.registerValueConverter(name || this.name, this.instance);\n  };\n\n  ValueConverterResource.prototype.load = function load(container, target) {};\n\n  return ValueConverterResource;\n}();\n\nexport function valueConverter(nameOrTarget) {\n  if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {\n    return function (target) {\n      metadata.define(metadata.resource, new ValueConverterResource(nameOrTarget), target);\n    };\n  }\n\n  metadata.define(metadata.resource, new ValueConverterResource(), nameOrTarget);\n}\n\nexport var BindingBehaviorResource = function () {\n  function BindingBehaviorResource(name) {\n    \n\n    this.name = name;\n  }\n\n  BindingBehaviorResource.convention = function convention(name) {\n    if (name.endsWith('BindingBehavior')) {\n      return new BindingBehaviorResource(camelCase(name.substring(0, name.length - 15)));\n    }\n  };\n\n  BindingBehaviorResource.prototype.initialize = function initialize(container, target) {\n    this.instance = container.get(target);\n  };\n\n  BindingBehaviorResource.prototype.register = function register(registry, name) {\n    registry.registerBindingBehavior(name || this.name, this.instance);\n  };\n\n  BindingBehaviorResource.prototype.load = function load(container, target) {};\n\n  return BindingBehaviorResource;\n}();\n\nexport function bindingBehavior(nameOrTarget) {\n  if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {\n    return function (target) {\n      metadata.define(metadata.resource, new BindingBehaviorResource(nameOrTarget), target);\n    };\n  }\n\n  metadata.define(metadata.resource, new BindingBehaviorResource(), nameOrTarget);\n}\n\nexport var ListenerExpression = function () {\n  function ListenerExpression(eventManager, targetEvent, sourceExpression, delegationStrategy, preventDefault, lookupFunctions) {\n    \n\n    this.eventManager = eventManager;\n    this.targetEvent = targetEvent;\n    this.sourceExpression = sourceExpression;\n    this.delegationStrategy = delegationStrategy;\n    this.discrete = true;\n    this.preventDefault = preventDefault;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  ListenerExpression.prototype.createBinding = function createBinding(target) {\n    return new Listener(this.eventManager, this.targetEvent, this.delegationStrategy, this.sourceExpression, target, this.preventDefault, this.lookupFunctions);\n  };\n\n  return ListenerExpression;\n}();\n\nexport var Listener = function () {\n  function Listener(eventManager, targetEvent, delegationStrategy, sourceExpression, target, preventDefault, lookupFunctions) {\n    \n\n    this.eventManager = eventManager;\n    this.targetEvent = targetEvent;\n    this.delegationStrategy = delegationStrategy;\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.preventDefault = preventDefault;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  Listener.prototype.callSource = function callSource(event) {\n    var overrideContext = this.source.overrideContext;\n    overrideContext.$event = event;\n    var mustEvaluate = true;\n    var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);\n    delete overrideContext.$event;\n    if (result !== true && this.preventDefault) {\n      event.preventDefault();\n    }\n    return result;\n  };\n\n  Listener.prototype.handleEvent = function handleEvent(event) {\n    this.callSource(event);\n  };\n\n  Listener.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this._handler = this.eventManager.addEventListener(this.target, this.targetEvent, this, this.delegationStrategy, true);\n  };\n\n  Listener.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this._handler.dispose();\n    this._handler = null;\n  };\n\n  return Listener;\n}();\n\nfunction getAU(element) {\n  var au = element.au;\n\n  if (au === undefined) {\n    throw new Error('No Aurelia APIs are defined for the element: \"' + element.tagName + '\".');\n  }\n\n  return au;\n}\n\nexport var NameExpression = function () {\n  function NameExpression(sourceExpression, apiName, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.apiName = apiName;\n    this.lookupFunctions = lookupFunctions;\n    this.discrete = true;\n  }\n\n  NameExpression.prototype.createBinding = function createBinding(target) {\n    return new NameBinder(this.sourceExpression, NameExpression.locateAPI(target, this.apiName), this.lookupFunctions);\n  };\n\n  NameExpression.locateAPI = function locateAPI(element, apiName) {\n    switch (apiName) {\n      case 'element':\n        return element;\n      case 'controller':\n        return getAU(element).controller;\n      case 'view-model':\n        return getAU(element).controller.viewModel;\n      case 'view':\n        return getAU(element).controller.view;\n      default:\n        var target = getAU(element)[apiName];\n\n        if (target === undefined) {\n          throw new Error('Attempted to reference \"' + apiName + '\", but it was not found amongst the target\\'s API.');\n        }\n\n        return target.viewModel;\n    }\n  };\n\n  return NameExpression;\n}();\n\nvar NameBinder = function () {\n  function NameBinder(sourceExpression, target, lookupFunctions) {\n    \n\n    this.sourceExpression = sourceExpression;\n    this.target = target;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  NameBinder.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n    this.sourceExpression.assign(this.source, this.target, this.lookupFunctions);\n  };\n\n  NameBinder.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.evaluate(this.source, this.lookupFunctions) === this.target) {\n      this.sourceExpression.assign(this.source, null, this.lookupFunctions);\n    }\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n  };\n\n  return NameBinder;\n}();\n\nvar LookupFunctions = {\n  bindingBehaviors: function bindingBehaviors(name) {\n    return null;\n  },\n  valueConverters: function valueConverters(name) {\n    return null;\n  }\n};\n\nexport var BindingEngine = (_temp2 = _class14 = function () {\n  function BindingEngine(observerLocator, parser) {\n    \n\n    this.observerLocator = observerLocator;\n    this.parser = parser;\n  }\n\n  BindingEngine.prototype.createBindingExpression = function createBindingExpression(targetProperty, sourceExpression) {\n    var mode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : bindingMode.toView;\n    var lookupFunctions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : LookupFunctions;\n\n    return new BindingExpression(this.observerLocator, targetProperty, this.parser.parse(sourceExpression), mode, lookupFunctions);\n  };\n\n  BindingEngine.prototype.propertyObserver = function propertyObserver(obj, propertyName) {\n    var _this27 = this;\n\n    return {\n      subscribe: function subscribe(callback) {\n        var observer = _this27.observerLocator.getObserver(obj, propertyName);\n        observer.subscribe(callback);\n        return {\n          dispose: function dispose() {\n            return observer.unsubscribe(callback);\n          }\n        };\n      }\n    };\n  };\n\n  BindingEngine.prototype.collectionObserver = function collectionObserver(collection) {\n    var _this28 = this;\n\n    return {\n      subscribe: function subscribe(callback) {\n        var observer = void 0;\n        if (collection instanceof Array) {\n          observer = _this28.observerLocator.getArrayObserver(collection);\n        } else if (collection instanceof Map) {\n          observer = _this28.observerLocator.getMapObserver(collection);\n        } else if (collection instanceof Set) {\n          observer = _this28.observerLocator.getSetObserver(collection);\n        } else {\n          throw new Error('collection must be an instance of Array, Map or Set.');\n        }\n        observer.subscribe(callback);\n        return {\n          dispose: function dispose() {\n            return observer.unsubscribe(callback);\n          }\n        };\n      }\n    };\n  };\n\n  BindingEngine.prototype.expressionObserver = function expressionObserver(bindingContext, expression) {\n    var scope = { bindingContext: bindingContext, overrideContext: createOverrideContext(bindingContext) };\n    return new ExpressionObserver(scope, this.parser.parse(expression), this.observerLocator, LookupFunctions);\n  };\n\n  BindingEngine.prototype.parseExpression = function parseExpression(expression) {\n    return this.parser.parse(expression);\n  };\n\n  BindingEngine.prototype.registerAdapter = function registerAdapter(adapter) {\n    this.observerLocator.addAdapter(adapter);\n  };\n\n  return BindingEngine;\n}(), _class14.inject = [ObserverLocator, Parser], _temp2);\n\nvar setProto = Set.prototype;\n\nfunction _getSetObserver(taskQueue, set) {\n  return ModifySetObserver.for(taskQueue, set);\n}\n\nvar ModifySetObserver = function (_ModifyCollectionObse3) {\n  _inherits(ModifySetObserver, _ModifyCollectionObse3);\n\n  function ModifySetObserver(taskQueue, set) {\n    \n\n    return _possibleConstructorReturn(this, _ModifyCollectionObse3.call(this, taskQueue, set));\n  }\n\n  ModifySetObserver.for = function _for(taskQueue, set) {\n    if (!('__set_observer__' in set)) {\n      Reflect.defineProperty(set, '__set_observer__', {\n        value: ModifySetObserver.create(taskQueue, set),\n        enumerable: false, configurable: false\n      });\n    }\n    return set.__set_observer__;\n  };\n\n  ModifySetObserver.create = function create(taskQueue, set) {\n    var observer = new ModifySetObserver(taskQueue, set);\n\n    var proto = setProto;\n    if (proto.add !== set.add || proto.delete !== set.delete || proto.clear !== set.clear) {\n      proto = {\n        add: set.add,\n        delete: set.delete,\n        clear: set.clear\n      };\n    }\n\n    set.add = function () {\n      var type = 'add';\n      var oldSize = set.size;\n      var methodCallResult = proto.add.apply(set, arguments);\n      var hasValue = set.size === oldSize;\n      if (!hasValue) {\n        observer.addChangeRecord({\n          type: type,\n          object: set,\n          value: Array.from(set).pop()\n        });\n      }\n      return methodCallResult;\n    };\n\n    set.delete = function () {\n      var hasValue = set.has(arguments[0]);\n      var methodCallResult = proto.delete.apply(set, arguments);\n      if (hasValue) {\n        observer.addChangeRecord({\n          type: 'delete',\n          object: set,\n          value: arguments[0]\n        });\n      }\n      return methodCallResult;\n    };\n\n    set.clear = function () {\n      var methodCallResult = proto.clear.apply(set, arguments);\n      observer.addChangeRecord({\n        type: 'clear',\n        object: set\n      });\n      return methodCallResult;\n    };\n\n    return observer;\n  };\n\n  return ModifySetObserver;\n}(ModifyCollectionObserver);\n\nexport function observable(targetOrConfig, key, descriptor) {\n  function deco(target, key, descriptor, config) {\n    var isClassDecorator = key === undefined;\n    if (isClassDecorator) {\n      target = target.prototype;\n      key = typeof config === 'string' ? config : config.name;\n    }\n\n    var innerPropertyName = '_' + key;\n    var innerPropertyDescriptor = {\n      configurable: true,\n      enumerable: false,\n      writable: true\n    };\n\n    var callbackName = config && config.changeHandler || key + 'Changed';\n\n    if (descriptor) {\n      if (typeof descriptor.initializer === 'function') {\n        innerPropertyDescriptor.value = descriptor.initializer();\n      }\n    } else {\n      descriptor = {};\n    }\n\n    if (!('enumerable' in descriptor)) {\n      descriptor.enumerable = true;\n    }\n\n    delete descriptor.value;\n    delete descriptor.writable;\n    delete descriptor.initializer;\n\n    Reflect.defineProperty(target, innerPropertyName, innerPropertyDescriptor);\n\n    descriptor.get = function () {\n      return this[innerPropertyName];\n    };\n    descriptor.set = function (newValue) {\n      var oldValue = this[innerPropertyName];\n      if (newValue === oldValue) {\n        return;\n      }\n\n      this[innerPropertyName] = newValue;\n      Reflect.defineProperty(this, innerPropertyName, { enumerable: false });\n\n      if (this[callbackName]) {\n        this[callbackName](newValue, oldValue, key);\n      }\n    };\n\n    descriptor.get.dependencies = [innerPropertyName];\n\n    if (isClassDecorator) {\n      Reflect.defineProperty(target, key, descriptor);\n    } else {\n      return descriptor;\n    }\n  }\n\n  if (key === undefined) {\n    return function (t, k, d) {\n      return deco(t, k, d, targetOrConfig);\n    };\n  }\n  return deco(targetOrConfig, key, descriptor);\n}\n\nvar signals = {};\n\nexport function connectBindingToSignal(binding, name) {\n  if (!signals.hasOwnProperty(name)) {\n    signals[name] = 0;\n  }\n  binding.observeProperty(signals, name);\n}\n\nexport function signalBindings(name) {\n  if (signals.hasOwnProperty(name)) {\n    signals[name]++;\n  }\n}","//! moment.js\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks () {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback (callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return input != null && Object.prototype.toString.call(input) === '[object Object]';\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return (Object.getOwnPropertyNames(obj).length === 0);\n        } else {\n            var k;\n            for (k in obj) {\n                if (obj.hasOwnProperty(k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n    }\n\n    function isDate(input) {\n        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n    }\n\n    function map(arr, fn) {\n        var res = [], i;\n        for (i = 0; i < arr.length; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty           : false,\n            unusedTokens    : [],\n            unusedInput     : [],\n            overflow        : -2,\n            charsLeftOver   : 0,\n            nullInput       : false,\n            invalidMonth    : null,\n            invalidFormat   : false,\n            userInvalidated : false,\n            iso             : false,\n            parsedDateParts : [],\n            meridiem        : null,\n            rfc2822         : false,\n            weekdayMismatch : false\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this);\n            var len = t.length >>> 0;\n\n            for (var i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m);\n            var parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            var isNowValid = !isNaN(m._d.getTime()) &&\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid = isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            }\n            else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid (flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        }\n        else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = hooks.momentProperties = [];\n\n    function copyConfig(to, from) {\n        var i, prop, val;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentProperties.length > 0) {\n            for (i = 0; i < momentProperties.length; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    var updateInProgress = false;\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment (obj) {\n        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);\n    }\n\n    function absFloor (number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if ((dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    function warn(msg) {\n        if (hooks.suppressDeprecationWarnings === false &&\n                (typeof console !==  'undefined') && console.warn) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [];\n                var arg;\n                for (var i = 0; i < arguments.length; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (var key in arguments[0]) {\n                            arg += key + ': ' + arguments[0][key] + ', ';\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + (new Error()).stack);\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n    function set (config) {\n        var prop, i;\n        for (i in config) {\n            prop = config[i];\n            if (isFunction(prop)) {\n                this[i] = prop;\n            } else {\n                this['_' + i] = prop;\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' + (/\\d{1,2}/).source);\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig), prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (hasOwnProp(parentConfig, prop) &&\n                    !hasOwnProp(childConfig, prop) &&\n                    isObject(parentConfig[prop])) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i, res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay : '[Today at] LT',\n        nextDay : '[Tomorrow at] LT',\n        nextWeek : 'dddd [at] LT',\n        lastDay : '[Yesterday at] LT',\n        lastWeek : '[Last] dddd [at] LT',\n        sameElse : 'L'\n    };\n\n    function calendar (key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    var defaultLongDateFormat = {\n        LTS  : 'h:mm:ss A',\n        LT   : 'h:mm A',\n        L    : 'MM/DD/YYYY',\n        LL   : 'MMMM D, YYYY',\n        LLL  : 'MMMM D, YYYY h:mm A',\n        LLLL : 'dddd, MMMM D, YYYY h:mm A'\n    };\n\n    function longDateFormat (key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n            return val.slice(1);\n        });\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate () {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d';\n    var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal (number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future : 'in %s',\n        past   : '%s ago',\n        s  : 'a few seconds',\n        ss : '%d seconds',\n        m  : 'a minute',\n        mm : '%d minutes',\n        h  : 'an hour',\n        hh : '%d hours',\n        d  : 'a day',\n        dd : '%d days',\n        M  : 'a month',\n        MM : '%d months',\n        y  : 'a year',\n        yy : '%d years'\n    };\n\n    function relativeTime (number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return (isFunction(output)) ?\n            output(number, withoutSuffix, string, isFuture) :\n            output.replace(/%d/i, number);\n    }\n\n    function pastFuture (diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias (unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [];\n        for (var u in unitsObj) {\n            units.push({unit: u, priority: priorities[u]});\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n    }\n\n    var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n\n    var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n\n    var formatFunctions = {};\n\n    var formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken (token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(func.apply(this, arguments), token);\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens), i, length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '', i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var match1         = /\\d/;            //       0 - 9\n    var match2         = /\\d\\d/;          //      00 - 99\n    var match3         = /\\d{3}/;         //     000 - 999\n    var match4         = /\\d{4}/;         //    0000 - 9999\n    var match6         = /[+-]?\\d{6}/;    // -999999 - 999999\n    var match1to2      = /\\d\\d?/;         //       0 - 99\n    var match3to4      = /\\d\\d\\d\\d?/;     //     999 - 9999\n    var match5to6      = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n    var match1to3      = /\\d{1,3}/;       //       0 - 999\n    var match1to4      = /\\d{1,4}/;       //       0 - 9999\n    var match1to6      = /[+-]?\\d{1,6}/;  // -999999 - 999999\n\n    var matchUnsigned  = /\\d+/;           //       0 - inf\n    var matchSigned    = /[+-]?\\d+/;      //    -inf - inf\n\n    var matchOffset    = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n    var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n    var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n\n    // any word (or two) characters or numbers including two/three word month in arabic.\n    // includes scottish gaelic two word and hyphenated months\n    var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n\n    var regexes = {};\n\n    function addRegexToken (token, regex, strictRegex) {\n        regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n            return (isStrict && strictRegex) ? strictRegex : regex;\n        };\n    }\n\n    function getParseRegexForToken (token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n            return p1 || p2 || p3 || p4;\n        }));\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken (token, callback) {\n        var i, func = callback;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        for (i = 0; i < token.length; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken (token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0;\n    var MONTH = 1;\n    var DATE = 2;\n    var HOUR = 3;\n    var MINUTE = 4;\n    var SECOND = 5;\n    var MILLISECOND = 6;\n    var WEEK = 7;\n    var WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? '' + y : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY',   4],       0, 'year');\n    addFormatToken(0, ['YYYYY',  5],       0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y',      matchSigned);\n    addRegexToken('YY',     match1to2, match2);\n    addRegexToken('YYYY',   match1to4, match4);\n    addRegexToken('YYYYY',  match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear () {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet (unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get (mom, unit) {\n        return mom.isValid() ?\n            mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n    }\n\n    function set$1 (mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n            }\n            else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet (units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n\n    function stringSet (units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units);\n            for (var i = 0; i < prioritized.length; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M',    match1to2);\n    addRegexToken('MM',   match1to2, match2);\n    addRegexToken('MMM',  function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n    function localeMonths (m, format) {\n        if (!m) {\n            return isArray(this._months) ? this._months :\n                this._months['standalone'];\n        }\n        return isArray(this._months) ? this._months[m.month()] :\n            this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n    function localeMonthsShort (m, format) {\n        if (!m) {\n            return isArray(this._monthsShort) ? this._monthsShort :\n                this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort) ? this._monthsShort[m.month()] :\n            this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i, ii, mom, llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse (monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth (mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth (value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth () {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    var defaultMonthsShortRegex = matchWord;\n    function monthsShortRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict ?\n                this._monthsShortStrictRegex : this._monthsShortRegex;\n        }\n    }\n\n    var defaultMonthsRegex = matchWord;\n    function monthsRegex (isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict ?\n                this._monthsStrictRegex : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    }\n\n    function createDate (y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate (y) {\n        var date;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            var args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear, resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek, resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w',  match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W',  match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n        week[token.substr(0, 1)] = toInt(input);\n    });\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek (mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow : 0, // Sunday is the first day of the week.\n        doy : 6  // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek () {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear () {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek (input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek (input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d',    match1to2);\n    addRegexToken('e',    match1to2);\n    addRegexToken('E',    match1to2);\n    addRegexToken('dd',   function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd',   function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd',   function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays (ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n    function localeWeekdays (m, format) {\n        var weekdays = isArray(this._weekdays) ? this._weekdays :\n            this._weekdays[(m && m !== true && this._weekdays.isFormat.test(format)) ? 'format' : 'standalone'];\n        return (m === true) ? shiftWeekdays(weekdays, this._week.dow)\n            : (m) ? weekdays[m.day()] : weekdays;\n    }\n\n    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n    function localeWeekdaysShort (m) {\n        return (m === true) ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n    }\n\n    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n    function localeWeekdaysMin (m) {\n        return (m === true) ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i, ii, mom, llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse (weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n                this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n                this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n            }\n            if (!this._weekdaysParse[i]) {\n                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek (input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    var defaultWeekdaysRegex = matchWord;\n    function weekdaysRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict ?\n                this._weekdaysStrictRegex : this._weekdaysRegex;\n        }\n    }\n\n    var defaultWeekdaysShortRegex = matchWord;\n    function weekdaysShortRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict ?\n                this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n        }\n    }\n\n    var defaultWeekdaysMinRegex = matchWord;\n    function weekdaysMinRegex (isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict ?\n                this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n        }\n    }\n\n\n    function computeWeekdaysParse () {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],\n            i, mom, minp, shortp, longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = this.weekdaysMin(mom, '');\n            shortp = this.weekdaysShort(mom, '');\n            longp = this.weekdays(mom, '');\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 7; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n        this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n        this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2);\n    });\n\n    function meridiem (token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem (isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a',  matchMeridiem);\n    addRegexToken('A',  matchMeridiem);\n    addRegexToken('H',  match1to2);\n    addRegexToken('h',  match1to2);\n    addRegexToken('k',  match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4;\n        var pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM (input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return ((input + '').toLowerCase().charAt(0) === 'p');\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n    function localeMeridiem (hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n\n    // MOMENTS\n\n    // Setting the hour should keep the time, because the user explicitly\n    // specified which hour they want. So trying to maintain the same hour (in\n    // a new timezone) makes sense. Adding/subtracting hours does not follow\n    // this rule.\n    var getSetHour = makeGetSet('Hours', true);\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse\n    };\n\n    // internal storage for locale config files\n    var locales = {};\n    var localeFamilies = {};\n    var globalLocale;\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0, j, next, locale, split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (!locales[name] && (typeof module !== 'undefined') &&\n                module && module.exports) {\n            try {\n                oldLocale = globalLocale._abbr;\n                var aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {}\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale (key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            }\n            else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            }\n            else {\n                if ((typeof console !==  'undefined') && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn('Locale ' + key +  ' not found. Did you forget to load it?');\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale (name, config) {\n        if (config !== null) {\n            var locale, parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple('defineLocaleOverride',\n                        'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale, tmpLocale, parentConfig = baseConfig;\n            // MERGE\n            tmpLocale = loadLocale(name);\n            if (tmpLocale != null) {\n                parentConfig = tmpLocale._config;\n            }\n            config = mergeConfigs(parentConfig, config);\n            locale = new Locale(config);\n            locale.parentLocale = locales[name];\n            locales[name] = locale;\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale (key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow (m) {\n        var overflow;\n        var a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :\n                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :\n                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :\n                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :\n                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :\n                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :\n                -1;\n\n            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray (config) {\n        var i, date, input = [], currentDate, expectedWeekday, yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (config._a[HOUR] === 24 &&\n                config._a[MINUTE] === 0 &&\n                config._a[SECOND] === 0 &&\n                config._a[MILLISECOND] === 0) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n        expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            var curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n    var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n\n    var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n\n    var isoDates = [\n        ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n        ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n        ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n        ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n        ['YYYY-DDD', /\\d{4}-\\d{3}/],\n        ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n        ['YYYYYYMMDD', /[+-]\\d{10}/],\n        ['YYYYMMDD', /\\d{8}/],\n        // YYYYMM is NOT allowed by the standard\n        ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n        ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n        ['YYYYDDD', /\\d{7}/]\n    ];\n\n    // iso time formats and regexes\n    var isoTimes = [\n        ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n        ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n        ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n        ['HH:mm', /\\d\\d:\\d\\d/],\n        ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n        ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n        ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n        ['HHmm', /\\d\\d\\d\\d/],\n        ['HH', /\\d\\d/]\n    ];\n\n    var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i;\n\n    // date from iso format\n    function configFromISO(config) {\n        var i, l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime, dateFormat, timeFormat, tzFormat;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n\n            for (i = 0, l = isoDates.length; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimes.length; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n    var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n    function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10)\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    var obsOffsets = {\n        UT: 0,\n        GMT: 0,\n        EDT: -4 * 60,\n        EST: -5 * 60,\n        CDT: -5 * 60,\n        CST: -6 * 60,\n        MDT: -6 * 60,\n        MST: -7 * 60,\n        PDT: -7 * 60,\n        PST: -8 * 60\n    };\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10);\n            var m = hm % 100, h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i));\n        if (match) {\n            var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from iso format or fallback\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        // Final attempt, use Input Fallback\n        hooks.createFromInputFallback(config);\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n        'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n        'discouraged and will be removed in an upcoming major release. Please refer to ' +\n        'http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i, parsedInput, tokens, token, skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0;\n\n        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n        for (i = 0; i < tokens.length; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];\n            // console.log('token', token, 'parsedInput', parsedInput,\n            //         'regex', getParseRegexForToken(token, config));\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                }\n                else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            }\n            else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n\n    function meridiemFixWrap (locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n\n            scoreToBeat,\n            i,\n            currentScore;\n\n        if (config._f.length === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < config._f.length; i++) {\n            currentScore = 0;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (!isValid(tempConfig)) {\n                continue;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (scoreToBeat == null || currentScore < scoreToBeat) {\n                scoreToBeat = currentScore;\n                bestMoment = tempConfig;\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i);\n        config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n            return obj && parseInt(obj, 10);\n        });\n\n        configFromArray(config);\n    }\n\n    function createFromConfig (config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig (config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({nullInput: true});\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        }  else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC (input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if ((isObject(input) && isObjectEmpty(input)) ||\n                (isArray(input) && input.length === 0)) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal (input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n        'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other < this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    var prototypeMax = deprecate(\n        'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n        function () {\n            var other = createLocal.apply(null, arguments);\n            if (this.isValid() && other.isValid()) {\n                return other > this ? this : other;\n            } else {\n                return createInvalid();\n            }\n        }\n    );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max () {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +(new Date());\n    };\n\n    var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n    function isDurationValid(m) {\n        for (var key in m) {\n            if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n                return false;\n            }\n        }\n\n        var unitHasDecimal = false;\n        for (var i = 0; i < ordering.length; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration (duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds = +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days +\n            weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months +\n            quarters * 3 +\n            years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration (obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound (number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // FORMATTING\n\n    function offset (token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset();\n            var sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z',  matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher);\n\n        if (matches === null) {\n            return null;\n        }\n\n        var chunk   = matches[matches.length - 1] || [];\n        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        var minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ?\n          0 :\n          parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset (m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset (input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone (input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC (keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal (keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset () {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            }\n            else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset (input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime () {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted () {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {};\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted = this.isValid() &&\n                compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal () {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset () {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc () {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/;\n\n    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n    // and further modified to allow for strings containing both week and day\n    var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration (input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms : input._milliseconds,\n                d  : input._days,\n                M  : input._months\n            };\n        } else if (isNumber(input)) {\n            duration = {};\n            if (key) {\n                duration[key] = input;\n            } else {\n                duration.milliseconds = input;\n            }\n        } else if (!!(match = aspNetRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y  : 0,\n                d  : toInt(match[DATE])                         * sign,\n                h  : toInt(match[HOUR])                         * sign,\n                m  : toInt(match[MINUTE])                       * sign,\n                s  : toInt(match[SECOND])                       * sign,\n                ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n            };\n        } else if (!!(match = isoRegex.exec(input))) {\n            sign = (match[1] === '-') ? -1 : 1;\n            duration = {\n                y : parseIso(match[2], sign),\n                M : parseIso(match[3], sign),\n                w : parseIso(match[4], sign),\n                d : parseIso(match[5], sign),\n                h : parseIso(match[6], sign),\n                m : parseIso(match[7], sign),\n                s : parseIso(match[8], sign)\n            };\n        } else if (duration == null) {// checks for null or undefined\n            duration = {};\n        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {\n            diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso (inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months = other.month() - base.month() +\n            (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return {milliseconds: 0, months: 0};\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +\n                'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n                tmp = val; val = period; period = tmp;\n            }\n\n            val = typeof val === 'string' ? +val : val;\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract (mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add      = createAdder(1, 'add');\n    var subtract = createAdder(-1, 'subtract');\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6 ? 'sameElse' :\n                diff < -1 ? 'lastWeek' :\n                diff < 0 ? 'lastDay' :\n                diff < 1 ? 'sameDay' :\n                diff < 2 ? 'nextDay' :\n                diff < 7 ? 'nextWeek' : 'sameElse';\n    }\n\n    function calendar$1 (time, formats) {\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse';\n\n        var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n\n        return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n    }\n\n    function clone () {\n        return new Moment(this);\n    }\n\n    function isAfter (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween (from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n    }\n\n    function isSame (input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n        }\n    }\n\n    function isSameOrAfter (input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore (input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff (input, units, asFloat) {\n        var that,\n            zoneDelta,\n            output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year': output = monthDiff(this, that) / 12; break;\n            case 'month': output = monthDiff(this, that); break;\n            case 'quarter': output = monthDiff(this, that) / 3; break;\n            case 'second': output = (this - that) / 1e3; break; // 1000\n            case 'minute': output = (this - that) / 6e4; break; // 1000 * 60\n            case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60\n            case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default: output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff (a, b) {\n        // difference in months\n        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2, adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString () {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true;\n        var m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect () {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment';\n        var zone = '';\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        var prefix = '[' + func + '(\"]';\n        var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';\n        var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        var suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format (inputString) {\n        if (!inputString) {\n            inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow (withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to (time, withoutSuffix) {\n        if (this.isValid() &&\n                ((isMoment(time) && time.isValid()) ||\n                 createLocal(time).isValid())) {\n            return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow (withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale (key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData () {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000;\n    var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n    var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n    var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return (dividend % divisor + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf (units) {\n        var time;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n                break;\n            case 'isoWeek':\n                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf (units) {\n        var time;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n                break;\n            case 'isoWeek':\n                time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf () {\n        return this._d.valueOf() - ((this._offset || 0) * 60000);\n    }\n\n    function unix () {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate () {\n        return new Date(this.valueOf());\n    }\n\n    function toArray () {\n        var m = this;\n        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n    }\n\n    function toObject () {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds()\n        };\n    }\n\n    function toJSON () {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2 () {\n        return isValid(this);\n    }\n\n    function parsingFlags () {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt () {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict\n        };\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken (token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg',     'weekYear');\n    addWeekYearFormatToken('ggggg',    'weekYear');\n    addWeekYearFormatToken('GGGG',  'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n\n    // PARSING\n\n    addRegexToken('G',      matchSigned);\n    addRegexToken('g',      matchSigned);\n    addRegexToken('GG',     match1to2, match2);\n    addRegexToken('gg',     match1to2, match2);\n    addRegexToken('GGGG',   match1to4, match4);\n    addRegexToken('gggg',   match1to4, match4);\n    addRegexToken('GGGGG',  match1to6, match6);\n    addRegexToken('ggggg',  match1to6, match6);\n\n    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n        week[token.substr(0, 2)] = toInt(input);\n    });\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input,\n                this.week(),\n                this.weekday(),\n                this.localeData()._week.dow,\n                this.localeData()._week.doy);\n    }\n\n    function getSetISOWeekYear (input) {\n        return getSetWeekYearHelper.call(this,\n                input, this.isoWeek(), this.isoWeekday(), 1, 4);\n    }\n\n    function getISOWeeksInYear () {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getWeeksInYear () {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter (input) {\n        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D',  match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict ?\n          (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :\n          locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD',  match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear (input) {\n        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m',  match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s',  match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S',    match1to3, match1);\n    addRegexToken('SS',   match1to3, match2);\n    addRegexToken('SSS',  match1to3, match3);\n\n    var token;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n    // MOMENTS\n\n    var getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z',  0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr () {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName () {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add               = add;\n    proto.calendar          = calendar$1;\n    proto.clone             = clone;\n    proto.diff              = diff;\n    proto.endOf             = endOf;\n    proto.format            = format;\n    proto.from              = from;\n    proto.fromNow           = fromNow;\n    proto.to                = to;\n    proto.toNow             = toNow;\n    proto.get               = stringGet;\n    proto.invalidAt         = invalidAt;\n    proto.isAfter           = isAfter;\n    proto.isBefore          = isBefore;\n    proto.isBetween         = isBetween;\n    proto.isSame            = isSame;\n    proto.isSameOrAfter     = isSameOrAfter;\n    proto.isSameOrBefore    = isSameOrBefore;\n    proto.isValid           = isValid$2;\n    proto.lang              = lang;\n    proto.locale            = locale;\n    proto.localeData        = localeData;\n    proto.max               = prototypeMax;\n    proto.min               = prototypeMin;\n    proto.parsingFlags      = parsingFlags;\n    proto.set               = stringSet;\n    proto.startOf           = startOf;\n    proto.subtract          = subtract;\n    proto.toArray           = toArray;\n    proto.toObject          = toObject;\n    proto.toDate            = toDate;\n    proto.toISOString       = toISOString;\n    proto.inspect           = inspect;\n    proto.toJSON            = toJSON;\n    proto.toString          = toString;\n    proto.unix              = unix;\n    proto.valueOf           = valueOf;\n    proto.creationData      = creationData;\n    proto.year       = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear    = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month       = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week           = proto.weeks        = getSetWeek;\n    proto.isoWeek        = proto.isoWeeks     = getSetISOWeek;\n    proto.weeksInYear    = getWeeksInYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.date       = getSetDayOfMonth;\n    proto.day        = proto.days             = getSetDayOfWeek;\n    proto.weekday    = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear  = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset            = getSetOffset;\n    proto.utc                  = setOffsetToUTC;\n    proto.local                = setOffsetToLocal;\n    proto.parseZone            = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST                = isDaylightSavingTime;\n    proto.isLocal              = isLocal;\n    proto.isUtcOffset          = isUtcOffset;\n    proto.isUtc                = isUtc;\n    proto.isUTC                = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n    proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n    proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n    proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n    proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n    function createUnix (input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone () {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat (string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar        = calendar;\n    proto$1.longDateFormat  = longDateFormat;\n    proto$1.invalidDate     = invalidDate;\n    proto$1.ordinal         = ordinal;\n    proto$1.preparse        = preParsePostFormat;\n    proto$1.postformat      = preParsePostFormat;\n    proto$1.relativeTime    = relativeTime;\n    proto$1.pastFuture      = pastFuture;\n    proto$1.set             = set;\n\n    proto$1.months            =        localeMonths;\n    proto$1.monthsShort       =        localeMonthsShort;\n    proto$1.monthsParse       =        localeMonthsParse;\n    proto$1.monthsRegex       = monthsRegex;\n    proto$1.monthsShortRegex  = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays       =        localeWeekdays;\n    proto$1.weekdaysMin    =        localeWeekdaysMin;\n    proto$1.weekdaysShort  =        localeWeekdaysShort;\n    proto$1.weekdaysParse  =        localeWeekdaysParse;\n\n    proto$1.weekdaysRegex       =        weekdaysRegex;\n    proto$1.weekdaysShortRegex  =        weekdaysShortRegex;\n    proto$1.weekdaysMinRegex    =        weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1 (format, index, field, setter) {\n        var locale = getLocale();\n        var utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl (format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl (localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0;\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        var i;\n        var out = [];\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths (format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort (format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin (localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (toInt(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n    hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n\n    var mathAbs = Math.abs;\n\n    function abs () {\n        var data           = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days         = mathAbs(this._days);\n        this._months       = mathAbs(this._months);\n\n        data.milliseconds  = mathAbs(data.milliseconds);\n        data.seconds       = mathAbs(data.seconds);\n        data.minutes       = mathAbs(data.minutes);\n        data.hours         = mathAbs(data.hours);\n        data.months        = mathAbs(data.months);\n        data.years         = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1 (duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days         += direction * other._days;\n        duration._months       += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1 (input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1 (input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil (number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble () {\n        var milliseconds = this._milliseconds;\n        var days         = this._days;\n        var months       = this._months;\n        var data         = this._data;\n        var seconds, minutes, hours, years, monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0))) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds           = absFloor(milliseconds / 1000);\n        data.seconds      = seconds % 60;\n\n        minutes           = absFloor(seconds / 60);\n        data.minutes      = minutes % 60;\n\n        hours             = absFloor(minutes / 60);\n        data.hours        = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days   = days;\n        data.months = months;\n        data.years  = years;\n\n        return this;\n    }\n\n    function daysToMonths (days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return days * 4800 / 146097;\n    }\n\n    function monthsToDays (months) {\n        // the reverse of daysToMonths\n        return months * 146097 / 4800;\n    }\n\n    function as (units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days;\n        var months;\n        var milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':   return months;\n                case 'quarter': return months / 3;\n                case 'year':    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week'   : return days / 7     + milliseconds / 6048e5;\n                case 'day'    : return days         + milliseconds / 864e5;\n                case 'hour'   : return days * 24    + milliseconds / 36e5;\n                case 'minute' : return days * 1440  + milliseconds / 6e4;\n                case 'second' : return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;\n                default: throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1 () {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs (alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms');\n    var asSeconds      = makeAs('s');\n    var asMinutes      = makeAs('m');\n    var asHours        = makeAs('h');\n    var asDays         = makeAs('d');\n    var asWeeks        = makeAs('w');\n    var asMonths       = makeAs('M');\n    var asQuarters     = makeAs('Q');\n    var asYears        = makeAs('y');\n\n    function clone$1 () {\n        return createDuration(this);\n    }\n\n    function get$2 (units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds');\n    var seconds      = makeGetter('seconds');\n    var minutes      = makeGetter('minutes');\n    var hours        = makeGetter('hours');\n    var days         = makeGetter('days');\n    var months       = makeGetter('months');\n    var years        = makeGetter('years');\n\n    function weeks () {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round;\n    var thresholds = {\n        ss: 44,         // a few seconds to seconds\n        s : 45,         // seconds to minute\n        m : 45,         // minutes to hour\n        h : 22,         // hours to day\n        d : 26,         // days to month\n        M : 11          // months to year\n    };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1 (posNegDuration, withoutSuffix, locale) {\n        var duration = createDuration(posNegDuration).abs();\n        var seconds  = round(duration.as('s'));\n        var minutes  = round(duration.as('m'));\n        var hours    = round(duration.as('h'));\n        var days     = round(duration.as('d'));\n        var months   = round(duration.as('M'));\n        var years    = round(duration.as('y'));\n\n        var a = seconds <= thresholds.ss && ['s', seconds]  ||\n                seconds < thresholds.s   && ['ss', seconds] ||\n                minutes <= 1             && ['m']           ||\n                minutes < thresholds.m   && ['mm', minutes] ||\n                hours   <= 1             && ['h']           ||\n                hours   < thresholds.h   && ['hh', hours]   ||\n                days    <= 1             && ['d']           ||\n                days    < thresholds.d   && ['dd', days]    ||\n                months  <= 1             && ['M']           ||\n                months  < thresholds.M   && ['MM', months]  ||\n                years   <= 1             && ['y']           || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding (roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof(roundingFunction) === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold (threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize (withSuffix) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var locale = this.localeData();\n        var output = relativeTime$1(this, !withSuffix, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return ((x > 0) - (x < 0)) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000;\n        var days         = abs$1(this._days);\n        var months       = abs$1(this._months);\n        var minutes, hours, years;\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes           = absFloor(seconds / 60);\n        hours             = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years  = absFloor(months / 12);\n        months %= 12;\n\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        var Y = years;\n        var M = months;\n        var D = days;\n        var h = hours;\n        var m = minutes;\n        var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n        var total = this.asSeconds();\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        var totalSign = total < 0 ? '-' : '';\n        var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return totalSign + 'P' +\n            (Y ? ymSign + Y + 'Y' : '') +\n            (M ? ymSign + M + 'M' : '') +\n            (D ? daysSign + D + 'D' : '') +\n            ((h || m || s) ? 'T' : '') +\n            (h ? hmsSign + h + 'H' : '') +\n            (m ? hmsSign + m + 'M' : '') +\n            (s ? hmsSign + s + 'S' : '');\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid        = isValid$1;\n    proto$2.abs            = abs;\n    proto$2.add            = add$1;\n    proto$2.subtract       = subtract$1;\n    proto$2.as             = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds      = asSeconds;\n    proto$2.asMinutes      = asMinutes;\n    proto$2.asHours        = asHours;\n    proto$2.asDays         = asDays;\n    proto$2.asWeeks        = asWeeks;\n    proto$2.asMonths       = asMonths;\n    proto$2.asQuarters     = asQuarters;\n    proto$2.asYears        = asYears;\n    proto$2.valueOf        = valueOf$1;\n    proto$2._bubble        = bubble;\n    proto$2.clone          = clone$1;\n    proto$2.get            = get$2;\n    proto$2.milliseconds   = milliseconds;\n    proto$2.seconds        = seconds;\n    proto$2.minutes        = minutes;\n    proto$2.hours          = hours;\n    proto$2.days           = days;\n    proto$2.weeks          = weeks;\n    proto$2.months         = months;\n    proto$2.years          = years;\n    proto$2.humanize       = humanize;\n    proto$2.toISOString    = toISOString$1;\n    proto$2.toString       = toISOString$1;\n    proto$2.toJSON         = toISOString$1;\n    proto$2.locale         = locale;\n    proto$2.localeData     = localeData;\n\n    proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n    proto$2.lang = lang;\n\n    // Side effect imports\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input, 10) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    // Side effect imports\n\n\n    hooks.version = '2.24.0';\n\n    setHookCallback(createLocal);\n\n    hooks.fn                    = proto;\n    hooks.min                   = min;\n    hooks.max                   = max;\n    hooks.now                   = now;\n    hooks.utc                   = createUTC;\n    hooks.unix                  = createUnix;\n    hooks.months                = listMonths;\n    hooks.isDate                = isDate;\n    hooks.locale                = getSetGlobalLocale;\n    hooks.invalid               = createInvalid;\n    hooks.duration              = createDuration;\n    hooks.isMoment              = isMoment;\n    hooks.weekdays              = listWeekdays;\n    hooks.parseZone             = createInZone;\n    hooks.localeData            = getLocale;\n    hooks.isDuration            = isDuration;\n    hooks.monthsShort           = listMonthsShort;\n    hooks.weekdaysMin           = listWeekdaysMin;\n    hooks.defineLocale          = defineLocale;\n    hooks.updateLocale          = updateLocale;\n    hooks.locales               = listLocales;\n    hooks.weekdaysShort         = listWeekdaysShort;\n    hooks.normalizeUnits        = normalizeUnits;\n    hooks.relativeTimeRounding  = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat        = getCalendarFormat;\n    hooks.prototype             = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',             // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',  // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',   // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD',                             // <input type=\"date\" />\n        TIME: 'HH:mm',                                  // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss',                       // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS',                        // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW',                             // <input type=\"week\" />\n        MONTH: 'YYYY-MM'                                // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","import { metadata, protocol } from 'aurelia-metadata';\nimport { AggregateError } from 'aurelia-pal';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nfunction __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\n\nfunction autoinject(potentialTarget) {\r\n    var deco = function (target) {\r\n        if (!target.hasOwnProperty('inject')) {\r\n            target.inject = (metadata.getOwn(metadata.paramTypes, target) ||\r\n                _emptyParameters).slice();\r\n            if (target.inject && target.inject.length > 0) {\r\n                if (target.inject[target.inject.length - 1] === Object) {\r\n                    target.inject.splice(-1, 1);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    return potentialTarget ? deco(potentialTarget) : deco;\r\n}\r\nfunction inject() {\r\n    var rest = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        rest[_i] = arguments[_i];\r\n    }\r\n    return function (target, _key, descriptor) {\r\n        if (typeof descriptor === 'number') {\r\n            autoinject(target);\r\n            if (rest.length === 1) {\r\n                target.inject[descriptor] = rest[0];\r\n            }\r\n            return;\r\n        }\r\n        if (descriptor) {\r\n            var fn = descriptor.value;\r\n            fn.inject = rest;\r\n        }\r\n        else {\r\n            target.inject = rest;\r\n        }\r\n    };\r\n}\n\nvar resolver = protocol.create('aurelia:resolver', function (target) {\r\n    if (!(typeof target.get === 'function')) {\r\n        return 'Resolvers must implement: get(container: Container, key: any): any';\r\n    }\r\n    return true;\r\n});\r\nfunction isStrategy(actual, expected, state) {\r\n    return actual === expected;\r\n}\r\nvar StrategyResolver = (function () {\r\n    function StrategyResolver(strategy, state) {\r\n        this.strategy = strategy;\r\n        this.state = state;\r\n    }\r\n    StrategyResolver.prototype.get = function (container, key) {\r\n        if (isStrategy(this.strategy, 0, this.state)) {\r\n            return this.state;\r\n        }\r\n        if (isStrategy(this.strategy, 1, this.state)) {\r\n            var singleton = container.invoke(this.state);\r\n            this.state = singleton;\r\n            this.strategy = 0;\r\n            return singleton;\r\n        }\r\n        if (isStrategy(this.strategy, 2, this.state)) {\r\n            return container.invoke(this.state);\r\n        }\r\n        if (isStrategy(this.strategy, 3, this.state)) {\r\n            return this.state(container, key, this);\r\n        }\r\n        if (isStrategy(this.strategy, 4, this.state)) {\r\n            return this.state[0].get(container, key);\r\n        }\r\n        if (isStrategy(this.strategy, 5, this.state)) {\r\n            return container.get(this.state);\r\n        }\r\n        throw new Error('Invalid strategy: ' + this.strategy);\r\n    };\r\n    StrategyResolver = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Number, Object])\r\n    ], StrategyResolver);\r\n    return StrategyResolver;\r\n}());\r\nvar Lazy = (function () {\r\n    function Lazy(key) {\r\n        this._key = key;\r\n    }\r\n    Lazy_1 = Lazy;\r\n    Lazy.prototype.get = function (container) {\r\n        var _this = this;\r\n        return function () { return container.get(_this._key); };\r\n    };\r\n    Lazy.of = function (key) {\r\n        return new Lazy_1(key);\r\n    };\r\n    var Lazy_1;\r\n    Lazy = Lazy_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object])\r\n    ], Lazy);\r\n    return Lazy;\r\n}());\r\nvar All = (function () {\r\n    function All(key) {\r\n        this._key = key;\r\n    }\r\n    All_1 = All;\r\n    All.prototype.get = function (container) {\r\n        return container.getAll(this._key);\r\n    };\r\n    All.of = function (key) {\r\n        return new All_1(key);\r\n    };\r\n    var All_1;\r\n    All = All_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object])\r\n    ], All);\r\n    return All;\r\n}());\r\nvar Optional = (function () {\r\n    function Optional(key, checkParent) {\r\n        if (checkParent === void 0) { checkParent = true; }\r\n        this._key = key;\r\n        this._checkParent = checkParent;\r\n    }\r\n    Optional_1 = Optional;\r\n    Optional.prototype.get = function (container) {\r\n        if (container.hasResolver(this._key, this._checkParent)) {\r\n            return container.get(this._key);\r\n        }\r\n        return null;\r\n    };\r\n    Optional.of = function (key, checkParent) {\r\n        if (checkParent === void 0) { checkParent = true; }\r\n        return new Optional_1(key, checkParent);\r\n    };\r\n    var Optional_1;\r\n    Optional = Optional_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object, Boolean])\r\n    ], Optional);\r\n    return Optional;\r\n}());\r\nvar Parent = (function () {\r\n    function Parent(key) {\r\n        this._key = key;\r\n    }\r\n    Parent_1 = Parent;\r\n    Parent.prototype.get = function (container) {\r\n        return container.parent ? container.parent.get(this._key) : null;\r\n    };\r\n    Parent.of = function (key) {\r\n        return new Parent_1(key);\r\n    };\r\n    var Parent_1;\r\n    Parent = Parent_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object])\r\n    ], Parent);\r\n    return Parent;\r\n}());\r\nvar Factory = (function () {\r\n    function Factory(key) {\r\n        this._key = key;\r\n    }\r\n    Factory_1 = Factory;\r\n    Factory.prototype.get = function (container) {\r\n        var fn = this._key;\r\n        var resolver = container.getResolver(fn);\r\n        if (resolver && resolver.strategy === 3) {\r\n            fn = resolver.state;\r\n        }\r\n        return function () {\r\n            var rest = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                rest[_i] = arguments[_i];\r\n            }\r\n            return container.invoke(fn, rest);\r\n        };\r\n    };\r\n    Factory.of = function (key) {\r\n        return new Factory_1(key);\r\n    };\r\n    var Factory_1;\r\n    Factory = Factory_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object])\r\n    ], Factory);\r\n    return Factory;\r\n}());\r\nvar NewInstance = (function () {\r\n    function NewInstance(key) {\r\n        var dynamicDependencies = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            dynamicDependencies[_i - 1] = arguments[_i];\r\n        }\r\n        this.key = key;\r\n        this.asKey = key;\r\n        this.dynamicDependencies = dynamicDependencies;\r\n    }\r\n    NewInstance_1 = NewInstance;\r\n    NewInstance.prototype.get = function (container) {\r\n        var dynamicDependencies = this.dynamicDependencies.length > 0\r\n            ? this.dynamicDependencies.map(function (dependency) {\r\n                return dependency['protocol:aurelia:resolver']\r\n                    ? dependency.get(container)\r\n                    : container.get(dependency);\r\n            })\r\n            : undefined;\r\n        var fn = this.key;\r\n        var resolver = container.getResolver(fn);\r\n        if (resolver && resolver.strategy === 3) {\r\n            fn = resolver.state;\r\n        }\r\n        var instance = container.invoke(fn, dynamicDependencies);\r\n        container.registerInstance(this.asKey, instance);\r\n        return instance;\r\n    };\r\n    NewInstance.prototype.as = function (key) {\r\n        this.asKey = key;\r\n        return this;\r\n    };\r\n    NewInstance.of = function (key) {\r\n        var dynamicDependencies = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            dynamicDependencies[_i - 1] = arguments[_i];\r\n        }\r\n        return new (NewInstance_1.bind.apply(NewInstance_1, [void 0, key].concat(dynamicDependencies)))();\r\n    };\r\n    var NewInstance_1;\r\n    NewInstance = NewInstance_1 = __decorate([\r\n        resolver(),\r\n        __metadata(\"design:paramtypes\", [Object, Object])\r\n    ], NewInstance);\r\n    return NewInstance;\r\n}());\r\nfunction getDecoratorDependencies(target) {\r\n    autoinject(target);\r\n    return target.inject;\r\n}\r\nfunction lazy(keyValue) {\r\n    return function (target, _key, index) {\r\n        var inject$$1 = getDecoratorDependencies(target);\r\n        inject$$1[index] = Lazy.of(keyValue);\r\n    };\r\n}\r\nfunction all(keyValue) {\r\n    return function (target, _key, index) {\r\n        var inject$$1 = getDecoratorDependencies(target);\r\n        inject$$1[index] = All.of(keyValue);\r\n    };\r\n}\r\nfunction optional(checkParentOrTarget) {\r\n    if (checkParentOrTarget === void 0) { checkParentOrTarget = true; }\r\n    var deco = function (checkParent) {\r\n        return function (target, _key, index) {\r\n            var inject$$1 = getDecoratorDependencies(target);\r\n            inject$$1[index] = Optional.of(inject$$1[index], checkParent);\r\n        };\r\n    };\r\n    if (typeof checkParentOrTarget === 'boolean') {\r\n        return deco(checkParentOrTarget);\r\n    }\r\n    return deco(true);\r\n}\r\nfunction parent(target, _key, index) {\r\n    var inject$$1 = getDecoratorDependencies(target);\r\n    inject$$1[index] = Parent.of(inject$$1[index]);\r\n}\r\nfunction factory(keyValue) {\r\n    return function (target, _key, index) {\r\n        var inject$$1 = getDecoratorDependencies(target);\r\n        inject$$1[index] = Factory.of(keyValue);\r\n    };\r\n}\r\nfunction newInstance(asKeyOrTarget) {\r\n    var dynamicDependencies = [];\r\n    for (var _i = 1; _i < arguments.length; _i++) {\r\n        dynamicDependencies[_i - 1] = arguments[_i];\r\n    }\r\n    var deco = function (asKey) {\r\n        return function (target, _key, index) {\r\n            var inject$$1 = getDecoratorDependencies(target);\r\n            inject$$1[index] = NewInstance.of.apply(NewInstance, [inject$$1[index]].concat(dynamicDependencies));\r\n            if (!!asKey) {\r\n                inject$$1[index].as(asKey);\r\n            }\r\n        };\r\n    };\r\n    if (arguments.length >= 1) {\r\n        return deco(asKeyOrTarget);\r\n    }\r\n    return deco();\r\n}\n\nfunction validateKey(key) {\r\n    if (key === null || key === undefined) {\r\n        throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\\'t exist with DI?');\r\n    }\r\n}\r\nvar _emptyParameters = Object.freeze([]);\r\nmetadata.registration = 'aurelia:registration';\r\nmetadata.invoker = 'aurelia:invoker';\r\nvar resolverDecorates = resolver.decorates;\r\nvar InvocationHandler = (function () {\r\n    function InvocationHandler(fn, invoker, dependencies) {\r\n        this.fn = fn;\r\n        this.invoker = invoker;\r\n        this.dependencies = dependencies;\r\n    }\r\n    InvocationHandler.prototype.invoke = function (container, dynamicDependencies) {\r\n        return dynamicDependencies !== undefined\r\n            ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies)\r\n            : this.invoker.invoke(container, this.fn, this.dependencies);\r\n    };\r\n    return InvocationHandler;\r\n}());\r\nfunction invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) {\r\n    var i = staticDependencies.length;\r\n    var args = new Array(i);\r\n    var lookup;\r\n    while (i--) {\r\n        lookup = staticDependencies[i];\r\n        if (lookup === null || lookup === undefined) {\r\n            throw new Error('Constructor Parameter with index ' +\r\n                i +\r\n                ' cannot be null or undefined. Are you trying to inject/register something that doesn\\'t exist with DI?');\r\n        }\r\n        else {\r\n            args[i] = container.get(lookup);\r\n        }\r\n    }\r\n    if (dynamicDependencies !== undefined) {\r\n        args = args.concat(dynamicDependencies);\r\n    }\r\n    return Reflect.construct(fn, args);\r\n}\r\nvar classInvoker = {\r\n    invoke: function (container, Type, deps) {\r\n        var instances = deps.map(function (dep) { return container.get(dep); });\r\n        return Reflect.construct(Type, instances);\r\n    },\r\n    invokeWithDynamicDependencies: invokeWithDynamicDependencies\r\n};\r\nfunction getDependencies(f) {\r\n    if (!f.hasOwnProperty('inject')) {\r\n        return [];\r\n    }\r\n    if (typeof f.inject === 'function') {\r\n        return f.inject();\r\n    }\r\n    return f.inject;\r\n}\r\nvar Container = (function () {\r\n    function Container(configuration) {\r\n        if (configuration === undefined) {\r\n            configuration = {};\r\n        }\r\n        this._configuration = configuration;\r\n        this._onHandlerCreated = configuration.onHandlerCreated;\r\n        this._handlers =\r\n            configuration.handlers || (configuration.handlers = new Map());\r\n        this._resolvers = new Map();\r\n        this.root = this;\r\n        this.parent = null;\r\n    }\r\n    Container.prototype.makeGlobal = function () {\r\n        Container.instance = this;\r\n        return this;\r\n    };\r\n    Container.prototype.setHandlerCreatedCallback = function (onHandlerCreated) {\r\n        this._onHandlerCreated = onHandlerCreated;\r\n        this._configuration.onHandlerCreated = onHandlerCreated;\r\n    };\r\n    Container.prototype.registerInstance = function (key, instance) {\r\n        return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance));\r\n    };\r\n    Container.prototype.registerSingleton = function (key, fn) {\r\n        return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn));\r\n    };\r\n    Container.prototype.registerTransient = function (key, fn) {\r\n        return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn));\r\n    };\r\n    Container.prototype.registerHandler = function (key, handler) {\r\n        return this.registerResolver(key, new StrategyResolver(3, handler));\r\n    };\r\n    Container.prototype.registerAlias = function (originalKey, aliasKey) {\r\n        return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey));\r\n    };\r\n    Container.prototype.registerResolver = function (key, resolver$$1) {\r\n        validateKey(key);\r\n        var allResolvers = this._resolvers;\r\n        var result = allResolvers.get(key);\r\n        if (result === undefined) {\r\n            allResolvers.set(key, resolver$$1);\r\n        }\r\n        else if (result.strategy === 4) {\r\n            result.state.push(resolver$$1);\r\n        }\r\n        else {\r\n            allResolvers.set(key, new StrategyResolver(4, [result, resolver$$1]));\r\n        }\r\n        return resolver$$1;\r\n    };\r\n    Container.prototype.autoRegister = function (key, fn) {\r\n        fn = fn === undefined ? key : fn;\r\n        if (typeof fn === 'function') {\r\n            var registration = metadata.get(metadata.registration, fn);\r\n            if (registration === undefined) {\r\n                return this.registerResolver(key, new StrategyResolver(1, fn));\r\n            }\r\n            return registration.registerResolver(this, key, fn);\r\n        }\r\n        return this.registerResolver(key, new StrategyResolver(0, fn));\r\n    };\r\n    Container.prototype.autoRegisterAll = function (fns) {\r\n        var i = fns.length;\r\n        while (i--) {\r\n            this.autoRegister(fns[i]);\r\n        }\r\n    };\r\n    Container.prototype.unregister = function (key) {\r\n        this._resolvers.delete(key);\r\n    };\r\n    Container.prototype.hasResolver = function (key, checkParent) {\r\n        if (checkParent === void 0) { checkParent = false; }\r\n        validateKey(key);\r\n        return (this._resolvers.has(key) ||\r\n            (checkParent &&\r\n                this.parent !== null &&\r\n                this.parent.hasResolver(key, checkParent)));\r\n    };\r\n    Container.prototype.getResolver = function (key) {\r\n        return this._resolvers.get(key);\r\n    };\r\n    Container.prototype.get = function (key) {\r\n        validateKey(key);\r\n        if (key === Container) {\r\n            return this;\r\n        }\r\n        if (resolverDecorates(key)) {\r\n            return key.get(this, key);\r\n        }\r\n        var resolver$$1 = this._resolvers.get(key);\r\n        if (resolver$$1 === undefined) {\r\n            if (this.parent === null) {\r\n                return this.autoRegister(key).get(this, key);\r\n            }\r\n            var registration = metadata.get(metadata.registration, key);\r\n            if (registration === undefined) {\r\n                return this.parent._get(key);\r\n            }\r\n            return registration.registerResolver(this, key, key).get(this, key);\r\n        }\r\n        return resolver$$1.get(this, key);\r\n    };\r\n    Container.prototype._get = function (key) {\r\n        var resolver$$1 = this._resolvers.get(key);\r\n        if (resolver$$1 === undefined) {\r\n            if (this.parent === null) {\r\n                return this.autoRegister(key).get(this, key);\r\n            }\r\n            return this.parent._get(key);\r\n        }\r\n        return resolver$$1.get(this, key);\r\n    };\r\n    Container.prototype.getAll = function (key) {\r\n        validateKey(key);\r\n        var resolver$$1 = this._resolvers.get(key);\r\n        if (resolver$$1 === undefined) {\r\n            if (this.parent === null) {\r\n                return _emptyParameters;\r\n            }\r\n            return this.parent.getAll(key);\r\n        }\r\n        if (resolver$$1.strategy === 4) {\r\n            var state = resolver$$1.state;\r\n            var i = state.length;\r\n            var results = new Array(i);\r\n            while (i--) {\r\n                results[i] = state[i].get(this, key);\r\n            }\r\n            return results;\r\n        }\r\n        return [resolver$$1.get(this, key)];\r\n    };\r\n    Container.prototype.createChild = function () {\r\n        var child = new Container(this._configuration);\r\n        child.root = this.root;\r\n        child.parent = this;\r\n        return child;\r\n    };\r\n    Container.prototype.invoke = function (fn, dynamicDependencies) {\r\n        try {\r\n            var handler = this._handlers.get(fn);\r\n            if (handler === undefined) {\r\n                handler = this._createInvocationHandler(fn);\r\n                this._handlers.set(fn, handler);\r\n            }\r\n            return handler.invoke(this, dynamicDependencies);\r\n        }\r\n        catch (e) {\r\n            throw new AggregateError(\"Error invoking \" + fn.name + \". Check the inner error for details.\", e, true);\r\n        }\r\n    };\r\n    Container.prototype._createInvocationHandler = function (fn) {\r\n        var dependencies;\r\n        if (fn.inject === undefined) {\r\n            dependencies =\r\n                metadata.getOwn(metadata.paramTypes, fn) || _emptyParameters;\r\n        }\r\n        else {\r\n            dependencies = [];\r\n            var ctor = fn;\r\n            while (typeof ctor === 'function') {\r\n                dependencies.push.apply(dependencies, getDependencies(ctor));\r\n                ctor = Object.getPrototypeOf(ctor);\r\n            }\r\n        }\r\n        var invoker = metadata.getOwn(metadata.invoker, fn) || classInvoker;\r\n        var handler = new InvocationHandler(fn, invoker, dependencies);\r\n        return this._onHandlerCreated !== undefined\r\n            ? this._onHandlerCreated(handler)\r\n            : handler;\r\n    };\r\n    return Container;\r\n}());\n\nfunction invoker(value) {\r\n    return function (target) {\r\n        metadata.define(metadata.invoker, value, target);\r\n    };\r\n}\r\nfunction invokeAsFactory(potentialTarget) {\r\n    var deco = function (target) {\r\n        metadata.define(metadata.invoker, FactoryInvoker.instance, target);\r\n    };\r\n    return potentialTarget ? deco(potentialTarget) : deco;\r\n}\r\nvar FactoryInvoker = (function () {\r\n    function FactoryInvoker() {\r\n    }\r\n    FactoryInvoker.prototype.invoke = function (container, fn, dependencies) {\r\n        var i = dependencies.length;\r\n        var args = new Array(i);\r\n        while (i--) {\r\n            args[i] = container.get(dependencies[i]);\r\n        }\r\n        return fn.apply(undefined, args);\r\n    };\r\n    FactoryInvoker.prototype.invokeWithDynamicDependencies = function (container, fn, staticDependencies, dynamicDependencies) {\r\n        var i = staticDependencies.length;\r\n        var args = new Array(i);\r\n        while (i--) {\r\n            args[i] = container.get(staticDependencies[i]);\r\n        }\r\n        if (dynamicDependencies !== undefined) {\r\n            args = args.concat(dynamicDependencies);\r\n        }\r\n        return fn.apply(undefined, args);\r\n    };\r\n    return FactoryInvoker;\r\n}());\r\nFactoryInvoker.instance = new FactoryInvoker();\n\nfunction registration(value) {\r\n    return function (target) {\r\n        metadata.define(metadata.registration, value, target);\r\n    };\r\n}\r\nfunction transient(key) {\r\n    return registration(new TransientRegistration(key));\r\n}\r\nfunction singleton(keyOrRegisterInChild, registerInChild) {\r\n    if (registerInChild === void 0) { registerInChild = false; }\r\n    return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild));\r\n}\r\nvar TransientRegistration = (function () {\r\n    function TransientRegistration(key) {\r\n        this._key = key;\r\n    }\r\n    TransientRegistration.prototype.registerResolver = function (container, key, fn) {\r\n        var existingResolver = container.getResolver(this._key || key);\r\n        return existingResolver === undefined\r\n            ? container.registerTransient((this._key || key), fn)\r\n            : existingResolver;\r\n    };\r\n    return TransientRegistration;\r\n}());\r\nvar SingletonRegistration = (function () {\r\n    function SingletonRegistration(keyOrRegisterInChild, registerInChild) {\r\n        if (registerInChild === void 0) { registerInChild = false; }\r\n        if (typeof keyOrRegisterInChild === 'boolean') {\r\n            this._registerInChild = keyOrRegisterInChild;\r\n        }\r\n        else {\r\n            this._key = keyOrRegisterInChild;\r\n            this._registerInChild = registerInChild;\r\n        }\r\n    }\r\n    SingletonRegistration.prototype.registerResolver = function (container, key, fn) {\r\n        var targetContainer = this._registerInChild ? container : container.root;\r\n        var existingResolver = targetContainer.getResolver(this._key || key);\r\n        return existingResolver === undefined\r\n            ? targetContainer.registerSingleton(this._key || key, fn)\r\n            : existingResolver;\r\n    };\r\n    return SingletonRegistration;\r\n}());\n\nexport { _emptyParameters, InvocationHandler, Container, autoinject, inject, invoker, invokeAsFactory, FactoryInvoker, registration, transient, singleton, TransientRegistration, SingletonRegistration, resolver, StrategyResolver, Lazy, All, Optional, Parent, Factory, NewInstance, getDecoratorDependencies, lazy, all, optional, parent, factory, newInstance };\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı'\n    };\n\n    var az = moment.defineLocale('az', {\n        months : 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n        monthsShort : 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays : 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n        weekdaysShort : 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin : 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[sabah saat] LT',\n            nextWeek : '[gələn həftə] dddd [saat] LT',\n            lastDay : '[dünən] LT',\n            lastWeek : '[keçən həftə] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s əvvəl',\n            s : 'birneçə saniyə',\n            ss : '%d saniyə',\n            m : 'bir dəqiqə',\n            mm : '%d dəqiqə',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir il',\n            yy : '%d il'\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM : function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal : function (number) {\n            if (number === 0) {  // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = number % 100 - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return az;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            'dd': 'дзень_дні_дзён',\n            'MM': 'месяц_месяцы_месяцаў',\n            'yy': 'год_гады_гадоў'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months : {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n        },\n        monthsShort : 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays : {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY г., HH:mm'\n        },\n        calendar : {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'праз %s',\n            past : '%s таму',\n            s : 'некалькі секунд',\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithPlural,\n            hh : relativeTimeWithPlural,\n            d : 'дзень',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM : function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) && (number % 100 !== 12 && number % 100 !== 13) ? number + '-і' : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return be;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var bg = moment.defineLocale('bg', {\n        months : 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Днес в] LT',\n            nextDay : '[Утре в] LT',\n            nextWeek : 'dddd [в] LT',\n            lastDay : '[Вчера в] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[В изминалата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[В изминалия] dddd [в] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'след %s',\n            past : 'преди %s',\n            s : 'няколко секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дни',\n            M : 'месец',\n            MM : '%d месеца',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return bg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var bm = moment.defineLocale('bm', {\n        months : 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n        monthsShort : 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays : 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort : 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin : 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'MMMM [tile] D [san] YYYY',\n            LLL : 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL : 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bi lɛrɛ] LT',\n            nextDay : '[Sini lɛrɛ] LT',\n            nextWeek : 'dddd [don lɛrɛ] LT',\n            lastDay : '[Kunu lɛrɛ] LT',\n            lastWeek : 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s kɔnɔ',\n            past : 'a bɛ %s bɔ',\n            s : 'sanga dama dama',\n            ss : 'sekondi %d',\n            m : 'miniti kelen',\n            mm : 'miniti %d',\n            h : 'lɛrɛ kelen',\n            hh : 'lɛrɛ %d',\n            d : 'tile kelen',\n            dd : 'tile %d',\n            M : 'kalo kelen',\n            MM : 'kalo %d',\n            y : 'san kelen',\n            yy : 'san %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return bm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '১',\n        '2': '২',\n        '3': '৩',\n        '4': '৪',\n        '5': '৫',\n        '6': '৬',\n        '7': '৭',\n        '8': '৮',\n        '9': '৯',\n        '0': '০'\n    },\n    numberMap = {\n        '১': '1',\n        '২': '2',\n        '৩': '3',\n        '৪': '4',\n        '৫': '5',\n        '৬': '6',\n        '৭': '7',\n        '৮': '8',\n        '৯': '9',\n        '০': '0'\n    };\n\n    var bn = moment.defineLocale('bn', {\n        months : 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n        monthsShort : 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n        weekdays : 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n        weekdaysShort : 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin : 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm সময়',\n            LTS : 'A h:mm:ss সময়',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm সময়',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm সময়'\n        },\n        calendar : {\n            sameDay : '[আজ] LT',\n            nextDay : '[আগামীকাল] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[গতকাল] LT',\n            lastWeek : '[গত] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s পরে',\n            past : '%s আগে',\n            s : 'কয়েক সেকেন্ড',\n            ss : '%d সেকেন্ড',\n            m : 'এক মিনিট',\n            mm : '%d মিনিট',\n            h : 'এক ঘন্টা',\n            hh : '%d ঘন্টা',\n            d : 'এক দিন',\n            dd : '%d দিন',\n            M : 'এক মাস',\n            MM : '%d মাস',\n            y : 'এক বছর',\n            yy : '%d বছর'\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'রাত' && hour >= 4) ||\n                    (meridiem === 'দুপুর' && hour < 5) ||\n                    meridiem === 'বিকাল') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return bn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '༡',\n        '2': '༢',\n        '3': '༣',\n        '4': '༤',\n        '5': '༥',\n        '6': '༦',\n        '7': '༧',\n        '8': '༨',\n        '9': '༩',\n        '0': '༠'\n    },\n    numberMap = {\n        '༡': '1',\n        '༢': '2',\n        '༣': '3',\n        '༤': '4',\n        '༥': '5',\n        '༦': '6',\n        '༧': '7',\n        '༨': '8',\n        '༩': '9',\n        '༠': '0'\n    };\n\n    var bo = moment.defineLocale('bo', {\n        months : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        monthsShort : 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n        weekdays : 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n        weekdaysShort : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        weekdaysMin : 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[དི་རིང] LT',\n            nextDay : '[སང་ཉིན] LT',\n            nextWeek : '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay : '[ཁ་སང] LT',\n            lastWeek : '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ལ་',\n            past : '%s སྔན་ལ',\n            s : 'ལམ་སང',\n            ss : '%d སྐར་ཆ།',\n            m : 'སྐར་མ་གཅིག',\n            mm : '%d སྐར་མ',\n            h : 'ཆུ་ཚོད་གཅིག',\n            hh : '%d ཆུ་ཚོད',\n            d : 'ཉིན་གཅིག',\n            dd : '%d ཉིན་',\n            M : 'ཟླ་བ་གཅིག',\n            MM : '%d ཟླ་བ',\n            y : 'ལོ་གཅིག',\n            yy : '%d ལོ'\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'མཚན་མོ' && hour >= 4) ||\n                    (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                    meridiem === 'དགོང་དག') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return bo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            'mm': 'munutenn',\n            'MM': 'miz',\n            'dd': 'devezh'\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            'm': 'v',\n            'b': 'v',\n            'd': 'z'\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var br = moment.defineLocale('br', {\n        months : 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n        monthsShort : 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays : 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort : 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin : 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h[e]mm A',\n            LTS : 'h[e]mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [a viz] MMMM YYYY',\n            LLL : 'D [a viz] MMMM YYYY h[e]mm A',\n            LLLL : 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n        },\n        calendar : {\n            sameDay : '[Hiziv da] LT',\n            nextDay : '[Warc\\'hoazh da] LT',\n            nextWeek : 'dddd [da] LT',\n            lastDay : '[Dec\\'h da] LT',\n            lastWeek : 'dddd [paset da] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'a-benn %s',\n            past : '%s \\'zo',\n            s : 'un nebeud segondennoù',\n            ss : '%d eilenn',\n            m : 'ur vunutenn',\n            mm : relativeTimeWithMutation,\n            h : 'un eur',\n            hh : '%d eur',\n            d : 'un devezh',\n            dd : relativeTimeWithMutation,\n            M : 'ur miz',\n            MM : relativeTimeWithMutation,\n            y : 'ur bloaz',\n            yy : specialMutationForYears\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal : function (number) {\n            var output = (number === 1) ? 'añ' : 'vet';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return br;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months : 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return bs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ca = moment.defineLocale('ca', {\n        months : {\n            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n            format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n            isFormat: /D[oD]?(\\s)+MMMM/\n        },\n        monthsShort : 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n        weekdaysShort : 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin : 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [de] YYYY',\n            ll : 'D MMM YYYY',\n            LLL : 'D MMMM [de] YYYY [a les] H:mm',\n            lll : 'D MMM YYYY, H:mm',\n            LLLL : 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll : 'ddd D MMM YYYY, H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[avui a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextDay : function () {\n                return '[demà a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastDay : function () {\n                return '[ahir a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [passat a ' + ((this.hours() !== 1) ? 'les' : 'la') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'd\\'aquí %s',\n            past : 'fa %s',\n            s : 'uns segons',\n            ss : '%d segons',\n            m : 'un minut',\n            mm : '%d minuts',\n            h : 'una hora',\n            hh : '%d hores',\n            d : 'un dia',\n            dd : '%d dies',\n            M : 'un mes',\n            MM : '%d mesos',\n            y : 'un any',\n            yy : '%d anys'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal : function (number, period) {\n            var output = (number === 1) ? 'r' :\n                (number === 2) ? 'n' :\n                (number === 3) ? 'r' :\n                (number === 4) ? 't' : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ca;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n\n    var monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i];\n    // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n    // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n    var monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return (n > 1) && (n < 5) && (~~(n / 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : (isFuture ? 'minutu' : 'minutou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n                break;\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex : /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex : /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort : 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin : 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm',\n            l : 'D. M. YYYY'\n        },\n        calendar : {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'před %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cs;\n\n})));\n","\n\nexport var logLevel = {\n  none: 0,\n  error: 10,\n  warn: 20,\n  info: 30,\n  debug: 40\n};\n\nvar loggers = {};\nvar appenders = [];\nvar globalDefaultLevel = logLevel.none;\n\nvar standardLevels = ['none', 'error', 'warn', 'info', 'debug'];\nfunction isStandardLevel(level) {\n  return standardLevels.filter(function (l) {\n    return l === level;\n  }).length > 0;\n}\n\nfunction appendArgs() {\n  return [this].concat(Array.prototype.slice.call(arguments));\n}\n\nfunction logFactory(level) {\n  var threshold = logLevel[level];\n  return function () {\n    if (this.level < threshold) {\n      return;\n    }\n\n    var args = appendArgs.apply(this, arguments);\n    var i = appenders.length;\n    while (i--) {\n      var _appenders$i;\n\n      (_appenders$i = appenders[i])[level].apply(_appenders$i, args);\n    }\n  };\n}\n\nfunction logFactoryCustom(level) {\n  var threshold = logLevel[level];\n  return function () {\n    if (this.level < threshold) {\n      return;\n    }\n\n    var args = appendArgs.apply(this, arguments);\n    var i = appenders.length;\n    while (i--) {\n      var appender = appenders[i];\n      if (appender[level] !== undefined) {\n        appender[level].apply(appender, args);\n      }\n    }\n  };\n}\n\nfunction connectLoggers() {\n  var proto = Logger.prototype;\n  for (var _level in logLevel) {\n    if (isStandardLevel(_level)) {\n      if (_level !== 'none') {\n        proto[_level] = logFactory(_level);\n      }\n    } else {\n      proto[_level] = logFactoryCustom(_level);\n    }\n  }\n}\n\nfunction disconnectLoggers() {\n  var proto = Logger.prototype;\n  for (var _level2 in logLevel) {\n    if (_level2 !== 'none') {\n      proto[_level2] = function () {};\n    }\n  }\n}\n\nexport function getLogger(id) {\n  return loggers[id] || new Logger(id);\n}\n\nexport function addAppender(appender) {\n  if (appenders.push(appender) === 1) {\n    connectLoggers();\n  }\n}\n\nexport function removeAppender(appender) {\n  appenders = appenders.filter(function (a) {\n    return a !== appender;\n  });\n}\n\nexport function getAppenders() {\n  return [].concat(appenders);\n}\n\nexport function clearAppenders() {\n  appenders = [];\n  disconnectLoggers();\n}\n\nexport function addCustomLevel(name, value) {\n  if (logLevel[name] !== undefined) {\n    throw Error('Log level \"' + name + '\" already exists.');\n  }\n\n  if (isNaN(value)) {\n    throw Error('Value must be a number.');\n  }\n\n  logLevel[name] = value;\n\n  if (appenders.length > 0) {\n    connectLoggers();\n  } else {\n    Logger.prototype[name] = function () {};\n  }\n}\n\nexport function removeCustomLevel(name) {\n  if (logLevel[name] === undefined) {\n    return;\n  }\n\n  if (isStandardLevel(name)) {\n    throw Error('Built-in log level \"' + name + '\" cannot be removed.');\n  }\n\n  delete logLevel[name];\n  delete Logger.prototype[name];\n}\n\nexport function setLevel(level) {\n  globalDefaultLevel = level;\n  for (var key in loggers) {\n    loggers[key].setLevel(level);\n  }\n}\n\nexport function getLevel() {\n  return globalDefaultLevel;\n}\n\nexport var Logger = function () {\n  function Logger(id) {\n    \n\n    var cached = loggers[id];\n    if (cached) {\n      return cached;\n    }\n\n    loggers[id] = this;\n    this.id = id;\n    this.level = globalDefaultLevel;\n  }\n\n  Logger.prototype.debug = function debug(message) {};\n\n  Logger.prototype.info = function info(message) {};\n\n  Logger.prototype.warn = function warn(message) {};\n\n  Logger.prototype.error = function error(message) {};\n\n  Logger.prototype.setLevel = function setLevel(level) {\n    this.level = level;\n  };\n\n  Logger.prototype.isDebugEnabled = function isDebugEnabled() {\n    return this.level === logLevel.debug;\n  };\n\n  return Logger;\n}();","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var cv = moment.defineLocale('cv', {\n        months : 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n        monthsShort : 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays : 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n        weekdaysShort : 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin : 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL : 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL : 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n        },\n        calendar : {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (output) {\n                var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n                return output + affix;\n            },\n            past : '%s каялла',\n            s : 'пӗр-ик ҫеккунт',\n            ss : '%d ҫеккунт',\n            m : 'пӗр минут',\n            mm : '%d минут',\n            h : 'пӗр сехет',\n            hh : '%d сехет',\n            d : 'пӗр кун',\n            dd : '%d кун',\n            M : 'пӗр уйӑх',\n            MM : '%d уйӑх',\n            y : 'пӗр ҫул',\n            yy : '%d ҫул'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal : '%d-мӗш',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return cv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact : true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n                    'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return cy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var da = moment.defineLocale('da', {\n        months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay : '[i dag kl.] LT',\n            nextDay : '[i morgen kl.] LT',\n            nextWeek : 'på dddd [kl.] LT',\n            lastDay : '[i går kl.] LT',\n            lastWeek : '[i] dddd[s kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'få sekunder',\n            ss : '%d sekunder',\n            m : 'et minut',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dage',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'et år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return da;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return de;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months : 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deAt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eine Minute', 'einer Minute'],\n            'h': ['eine Stunde', 'einer Stunde'],\n            'd': ['ein Tag', 'einem Tag'],\n            'dd': [number + ' Tage', number + ' Tagen'],\n            'M': ['ein Monat', 'einem Monat'],\n            'MM': [number + ' Monate', number + ' Monaten'],\n            'y': ['ein Jahr', 'einem Jahr'],\n            'yy': [number + ' Jahre', number + ' Jahren']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort : 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n        weekdaysShort : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY HH:mm',\n            LLLL : 'dddd, D. MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : 'vor %s',\n            s : 'ein paar Sekunden',\n            ss : '%d Sekunden',\n            m : processRelativeTime,\n            mm : '%d Minuten',\n            h : processRelativeTime,\n            hh : '%d Stunden',\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return deCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'ޖެނުއަރީ',\n        'ފެބްރުއަރީ',\n        'މާރިޗު',\n        'އޭޕްރީލު',\n        'މޭ',\n        'ޖޫން',\n        'ޖުލައި',\n        'އޯގަސްޓު',\n        'ސެޕްޓެމްބަރު',\n        'އޮކްޓޯބަރު',\n        'ނޮވެމްބަރު',\n        'ޑިސެމްބަރު'\n    ], weekdays = [\n        'އާދިއްތަ',\n        'ހޯމަ',\n        'އަންގާރަ',\n        'ބުދަ',\n        'ބުރާސްފަތި',\n        'ހުކުރު',\n        'ހޮނިހިރު'\n    ];\n\n    var dv = moment.defineLocale('dv', {\n        months : months,\n        monthsShort : months,\n        weekdays : weekdays,\n        weekdaysShort : weekdays,\n        weekdaysMin : 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat : {\n\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/M/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM : function (input) {\n            return 'މފ' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar : {\n            sameDay : '[މިއަދު] LT',\n            nextDay : '[މާދަމާ] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[އިއްޔެ] LT',\n            lastWeek : '[ފާއިތުވި] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ތެރޭގައި %s',\n            past : 'ކުރިން %s',\n            s : 'ސިކުންތުކޮޅެއް',\n            ss : 'd% ސިކުންތު',\n            m : 'މިނިޓެއް',\n            mm : 'މިނިޓު %d',\n            h : 'ގަޑިއިރެއް',\n            hh : 'ގަޑިއިރު %d',\n            d : 'ދުވަހެއް',\n            dd : 'ދުވަސް %d',\n            M : 'މަހެއް',\n            MM : 'މަސް %d',\n            y : 'އަހަރެއް',\n            yy : 'އަހަރު %d'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 7,  // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return dv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    function isFunction(input) {\n        return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n    }\n\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl : 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n        monthsGenitiveEl : 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) { // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays : 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n        weekdaysShort : 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin : 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM : function (input) {\n            return ((input + '').toLowerCase()[0] === 'μ');\n        },\n        meridiemParse : /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendarEl : {\n            sameDay : '[Σήμερα {}] LT',\n            nextDay : '[Αύριο {}] LT',\n            nextWeek : 'dddd [{}] LT',\n            lastDay : '[Χθες {}] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        calendar : function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', (hours % 12 === 1 ? 'στη' : 'στις'));\n        },\n        relativeTime : {\n            future : 'σε %s',\n            past : '%s πριν',\n            s : 'λίγα δευτερόλεπτα',\n            ss : '%d δευτερόλεπτα',\n            m : 'ένα λεπτό',\n            mm : '%d λεπτά',\n            h : 'μία ώρα',\n            hh : '%d ώρες',\n            d : 'μία μέρα',\n            dd : '%d μέρες',\n            M : 'ένας μήνας',\n            MM : '%d μήνες',\n            y : 'ένας χρόνος',\n            yy : '%d χρόνια'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4st is the first week of the year.\n        }\n    });\n\n    return el;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enSG = moment.defineLocale('en-SG', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enSG;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enAu = moment.defineLocale('en-au', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enAu;\n\n})));\n","import { Log } from 'definitions';\n\nimport { autoinject, inject, computedFrom, singleton } from 'aurelia-framework';\nimport { Container } from 'aurelia-dependency-injection';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\nimport { Database } from 'services/database';\n\nimport * as Firebase from 'firebase/app';\nimport 'firebase/auth';\n\n//DOC: classe wrapper di firebase per la gestione della autenticazione (Firebase)\n@autoinject\nexport class Authentication {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = (new Logger()).setStyle(Logger.colors.blue, Logger.colors.white).setDefaultPrefix(\"AUTH\");\n\n  //DOC: indica lo stato dell'utente (usato per i gets)\n  private loggedStatusChanged: boolean;\n  //DOC: indica il valore di currentUser (usato per i gets)\n  private currentUserChanged: boolean = false;\n\n  //DOC: oggetto autenticazione di Firebase\n  private auth: Firebase.auth.Auth;\n\n  //DOC: riferimento al Database di Firebase\n  private _db: Database = null;\n  //DOC: inizializza o restituisce il riferimento al Database instanziato\n  private get db(): Database {\n    if (!this._db) this._db = this.container.get(Database);\n    return this._db;\n  };\n\n  constructor(private container: Container) {\n    //DOC: inizializzazione dell'Authentication\n    this.auth = Firebase.auth();\n    this.logger.success(\"Firebase Authentication\", \"inizializzato correttamente\");\n  }\n\n  //NOTE: GETTERs\n  //DOC: indica se l'utente è loggato\n  @computedFrom('loggedStatusChanged')\n  get isLogged(): boolean {\n    return this.auth.currentUser != null;\n  }\n  //DOC: indica se currentUser è cambiato\n  @computedFrom('currentUserChanged')\n  get isCurrentUserChanged(): boolean {\n    return this.currentUserChanged;\n  }\n\n  //DOC: evento al cambiamento di stato dell'autenticazione\n  public onAuthStateChanged(callback: (user: any) => any, context: any) {\n    this.auth.onAuthStateChanged(\n      (user) => {\n        this.loggedStatusChanged = (user == null || !user) ? false : true;\n        //NOTE: aggiorno l'uid dell'utente corrente in Database\n        callback.call(context, (user == null || !user) ? false : user);\n      });\n  }\n\n  //DOC: restituisce l'utente corrente\n  public getCurrentUser(): Firebase.User {\n    /*FIXME: il problema è che se sloggo nella pagina dove sono viene eseguito unbind e passo uid di un utente che non è più loggato\n     così risolvo ma forse devo cambiare anche se logicamente se sono sloggato uid deve essere invalido (null|-1|whatever)*/\n    return this.auth.currentUser || <Firebase.User>{ uid: \"\" };\n  }\n  //DOC: login dato username e password\n  public loginWithUsernameAndPassword(email: string, password: string): Promise<any> {\n    return new Promise<any>((ok, ko) =>\n      this.auth.signInWithEmailAndPassword(email, password)\n        .then(_ => {\n          this.db.appendLog(\n            {\n              dateTime: (new Date()).getTime(),\n              uid: this.getCurrentUser().uid,\n              subject: \"AUTH.login\",\n              operation: \"Signin with email and password\",\n              security: true\n            } as Log);\n          this.logger.success(\"Loggato con successo\");\n        })\n        .then(_ => ok())\n        .catch((error) => {\n          this.errorManager.error(error);\n          ko();\n        }));\n  }\n\n  //DOC: logout\n  public logout(): Promise<any> {\n    var uid = this.getCurrentUser().uid;\n    return new Promise<any>((ok, ko) => this.auth.signOut()\n      .then(_ => {\n        this.db.appendLog(\n          {\n            dateTime: (new Date()).getTime(),\n            uid: uid,\n            subject: \"AUTH.sign_out\",\n            operation: \"Signed out\",\n            security: true\n          } as Log);\n        this.logger.success(\"Sloggato con successo\");\n      })\n      .then(_ => ok())\n      .catch((error) => {\n        this.errorManager.error(error);\n        ko();\n      }));\n  }\n\n  //DOC: registrazione di un nuovo utente nel sistema\n  public registration(email: string, password: string): Promise<any> {\n    return new Promise<any>((ok, ko) => {\n      this.auth.createUserWithEmailAndPassword(email, password)\n        .then(_ => {\n          this.db.appendLog(\n            {\n              dateTime: (new Date()).getTime(),\n              uid: this.getCurrentUser().uid,\n              subject: \"AUTH.registration\",\n              operation: \"Registration with email and password\",\n              security: true\n            } as Log);\n          this.logger.success(\"Utente creato con successo\");\n        })\n        .then(_ => ok())\n        .catch((error) => {\n          this.errorManager.error(error);\n          return ko();\n        });\n    });\n  }\n\n  //DOC: aggiorna displayName e photo URL del profilo (passo un oggetto che contiene i due valori)\n  public updateProfile(profile: { displayName?: string, photoURL?: string }): Promise<any> {\n    let user = this.auth.currentUser;\n    if (user != null) {\n      // se uno dei due parametri manca allora lo inizializzo con l'esistente\n      profile.displayName = profile.displayName || user.displayName;\n      profile.photoURL = profile.photoURL || user.photoURL;\n      return new Promise<any>((ok, ko) => user.updateProfile(profile as { displayName: string, photoURL: string })\n        .then(_ => this.currentUserChanged = !this.currentUserChanged)\n        .then(_ => this.db.appendLog(\n          {\n            dateTime: (new Date()).getTime(),\n            uid: this.getCurrentUser().uid,\n            subject: \"AUTH.update\",\n            operation: \"Updated profile (username or profile image)\",\n            security: true\n          } as Log))\n        .then(_ => ok())\n        .catch((error) => {\n          this.errorManager.error(error);\n          ko();\n        }));\n    }\n    else {\n      this.logger.error(\"Authentication\", \"user dovrebbe essere non null per fare l'update del profilo (da gestire con errorManager)\");\n    }\n  }\n\n\n  //DOC: aggiorna email\n  public updateEmail(password: string, oldEmail: string, newEmail: string): Promise<any> {\n    //NOTE: Per aggiornare la mail l'utente deve essere loggato recentemente \n    //(quindi prima lo riautentico con reAuthenticateUser)\n    return new Promise<any>((ok, ko) =>\n      this.reAuthenticateUser(oldEmail, password)\n        .then(_ => {\n          this.auth.currentUser.updateEmail(newEmail)\n            .then(_ => this.db.appendLog(\n              {\n                dateTime: (new Date()).getTime(),\n                uid: this.getCurrentUser().uid,\n                subject: \"AUTH.update\",\n                operation: \"Updated email\",\n                security: true\n              } as Log))\n            .then(_ => {/*//TODO: inviare mail per notificare cambiamento password */ })\n            .then(_ => ok())\n            .catch((error) => {\n              this.errorManager.error(error);\n              ko();\n            });\n        }))\n  }\n\n  //DOC: imposta una nuova password all'account utente dopo averlo ri-autenticato\n  public updatePassword(email: string, oldPassword: string, newPassword: string): Promise<any> {\n    //NOTE: Per aggiornare la password l'utente deve essere loggato recentemente \n    //(quindi prima lo riautentico con reAuthenticateUser)\n    return new Promise<any>((ok, ko) =>\n      this.reAuthenticateUser(email, oldPassword)\n        .then(_ => {\n          this.auth.currentUser.updatePassword(newPassword)\n            .then(_ => this.db.appendLog(\n              {\n                dateTime: (new Date()).getTime(),\n                uid: this.getCurrentUser().uid,\n                subject: \"AUTH.update\",\n                operation: \"Updated password\",\n                security: true\n              } as Log))\n            .then(_ => {/*//TODO: inviare mail per notificare cambiamento password */ })\n            .then(_ => ok())\n            .catch((error) => {\n              this.errorManager.error(error);\n              ko();\n            });\n        }))\n  }\n\n  //DOC: invia email di reset password\n  public sendPasswordResetEmail(email: string): Promise<any> {\n    return new Promise<any>((ok, ko) =>\n      this.auth.sendPasswordResetEmail(email)\n        .then(_ => {\n          this.logger.info(\"Mail per reset della password inviata correttamente a \" + email);\n          this.db.appendLog(\n            {\n              dateTime: (new Date()).getTime(),\n              uid: this.getCurrentUser().uid,\n              subject: \"AUTH.reset_email\",\n              operation: \"Sent email to reset the password\",\n              security: true\n            } as Log);\n        })\n        .then(_ => ok())\n        .catch((error) => {\n          this.errorManager.error(error);\n          ko();\n        }));\n  }\n\n  //DOC: invia mail di verifica account\n  public sendEmailVerification(): void {\n    this.auth.currentUser.sendEmailVerification()\n      .then(_ => this.db.appendLog(\n        {\n          dateTime: (new Date()).getTime(),\n          uid: this.getCurrentUser().uid,\n          subject: \"AUTH.email_verification\",\n          operation: \"Sent email to confirm the account registration\",\n          security: true\n        } as Log))\n      .catch((error) => {\n        this.errorManager.error(error);\n      });\n  }\n\n  //TODO: cancella utente\n  public deleteUser() {\n    //NOTE: the user must have signed in recently. See Re-authenticate a user.\n  }\n\n  //DOC: riautentica l'utente \n  public reAuthenticateUser(email: string, password: string): Promise<any> {\n    var cred = Firebase.auth.EmailAuthProvider.credential(email, password);\n    return new Promise<any>((ok, ko) =>\n      this.auth.currentUser.reauthenticateAndRetrieveDataWithCredential(cred)\n        .then(_ => this.db.appendLog(\n          {\n            dateTime: (new Date()).getTime(),\n            uid: this.getCurrentUser().uid,\n            subject: \"AUTH.re_authentication\",\n            operation: \"Re authentication to perform a security-sensitive action\",\n            security: true\n          } as Log))\n        .then(_ => ok())\n        .catch((error) => {\n          this.errorManager.error(error);\n          ko();\n        }));\n  }\n\n}\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enCa = moment.defineLocale('en-ca', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'YYYY-MM-DD',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY h:mm A',\n            LLLL : 'dddd, MMMM D, YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enGb = moment.defineLocale('en-gb', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enGb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enIe = moment.defineLocale('en-ie', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enIe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enIl = moment.defineLocale('en-il', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        }\n    });\n\n    return enIl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var enNz = moment.defineLocale('en-nz', {\n        months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Today at] LT',\n            nextDay : '[Tomorrow at] LT',\n            nextWeek : 'dddd [at] LT',\n            lastDay : '[Yesterday at] LT',\n            lastWeek : '[Last] dddd [at] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'in %s',\n            past : '%s ago',\n            s : 'a few seconds',\n            ss : '%d seconds',\n            m : 'a minute',\n            mm : '%d minutes',\n            h : 'an hour',\n            hh : '%d hours',\n            d : 'a day',\n            dd : '%d days',\n            M : 'a month',\n            MM : '%d months',\n            y : 'a year',\n            yy : '%d years'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return enNz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var eo = moment.defineLocale('eo', {\n        months : 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n        weekdays : 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort : 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D[-a de] MMMM, YYYY',\n            LLL : 'D[-a de] MMMM, YYYY HH:mm',\n            LLLL : 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar : {\n            sameDay : '[Hodiaŭ je] LT',\n            nextDay : '[Morgaŭ je] LT',\n            nextWeek : 'dddd [je] LT',\n            lastDay : '[Hieraŭ je] LT',\n            lastWeek : '[pasinta] dddd [je] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'post %s',\n            past : 'antaŭ %s',\n            s : 'sekundoj',\n            ss : '%d sekundoj',\n            m : 'minuto',\n            mm : '%d minutoj',\n            h : 'horo',\n            hh : '%d horoj',\n            d : 'tago',//ne 'diurno', ĉar estas uzita por proksimumo\n            dd : '%d tagoj',\n            M : 'monato',\n            MM : '%d monatoj',\n            y : 'jaro',\n            yy : '%d jaroj'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal : '%da',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return eo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex : monthsRegex,\n        monthsShortRegex : monthsRegex,\n        monthsStrictRegex : /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex : /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return es;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return esDo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n    var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n    var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months : 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays : 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'MM/DD/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastDay : function () {\n                return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            lastWeek : function () {\n                return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'en %s',\n            past : 'hace %s',\n            s : 'unos segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'una hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un año',\n            yy : '%d años'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return esUs;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's' : ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            'ss': [number + 'sekundi', number + 'sekundit'],\n            'm' : ['ühe minuti', 'üks minut'],\n            'mm': [number + ' minuti', number + ' minutit'],\n            'h' : ['ühe tunni', 'tund aega', 'üks tund'],\n            'hh': [number + ' tunni', number + ' tundi'],\n            'd' : ['ühe päeva', 'üks päev'],\n            'M' : ['kuu aja', 'kuu aega', 'üks kuu'],\n            'MM': [number + ' kuu', number + ' kuud'],\n            'y' : ['ühe aasta', 'aasta', 'üks aasta'],\n            'yy': [number + ' aasta', number + ' aastat']\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months        : 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n        monthsShort   : 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays      : 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n        weekdaysShort : 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin   : 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat : {\n            LT   : 'H:mm',\n            LTS : 'H:mm:ss',\n            L    : 'DD.MM.YYYY',\n            LL   : 'D. MMMM YYYY',\n            LLL  : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[Täna,] LT',\n            nextDay  : '[Homme,] LT',\n            nextWeek : '[Järgmine] dddd LT',\n            lastDay  : '[Eile,] LT',\n            lastWeek : '[Eelmine] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s pärast',\n            past   : '%s tagasi',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : '%d päeva',\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return et;\n\n})));\n","//DOC: trasforma un oggetto di oggetti (di uguale struttura) in un array di oggetti\n// inserendo il campo id con il valore key ottenuto. E' utile per gestire i dati restituiti da Firebase\nexport function toArrayOfObjects(obj: any): any[] {\n  var arr = [];\n  for (var k in obj) {\n    var o = obj[k];\n    o[\"id\"] = k;\n    arr.push(o);\n  }\n  return arr;\n}\n\n//DOC: valuta il colore passato e restituisce true se è scuro e false se è chiaro\nexport function getContrastYIQ(hexcolor: string) {\n  const [r, g, b] = [0, 2, 4].map(p => parseInt(hexcolor.substr(p, 2), 16));\n  return ((r * 299) + (g * 587) + (b * 114)) / 1000 >= 128;\n}\n\n//DOC: valuta l'indirizzo email con una regex\nexport function validateEmail(email: string): boolean {\n  var re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n  return re.test(String(email).toLowerCase());\n}\n\n/*DOC: setta i campi null dell'oggetto `base` con i valori dei rispettivi campi di `def`.\n       i campi di `base` non presenti in `def` allora saranno ignorati. \n       se `strictly` è true allora i campi presenti in `def` ma non in `base`\n       saranno creati in `base`.\n       il parametro originale `base` viene modificato. */\nexport function setToDefaultValues(base: {}, def: {}, strictly: boolean = true): void {\n  //console.log(base, def, strictly);\n  Object.keys(def).forEach(c => {\n    if ((base.hasOwnProperty(c) || strictly) && (!base[c] || base[c] === null))\n      base[c] = def[c];\n  })\n  //console.log(base, def, strictly);\n  //OPPURE ma con limitazioni: object3 = {...object1, ...object2 }\n}\n\n\n//DOC: restituisce un clone dell'oggetto `src` passato.\n//FIXME: cambiare implementazione se possibile https://stackoverflow.com/questions/12690107/clone-object-without-reference-javascript\nexport function cloneObject(src: any): any {\n  return JSON.parse(JSON.stringify(src));\n}\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var eu = moment.defineLocale('eu', {\n        months : 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n        monthsShort : 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n        weekdaysShort : 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin : 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY[ko] MMMM[ren] D[a]',\n            LLL : 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL : 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l : 'YYYY-M-D',\n            ll : 'YYYY[ko] MMM D[a]',\n            lll : 'YYYY[ko] MMM D[a] HH:mm',\n            llll : 'ddd, YYYY[ko] MMM D[a] HH:mm'\n        },\n        calendar : {\n            sameDay : '[gaur] LT[etan]',\n            nextDay : '[bihar] LT[etan]',\n            nextWeek : 'dddd LT[etan]',\n            lastDay : '[atzo] LT[etan]',\n            lastWeek : '[aurreko] dddd LT[etan]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s barru',\n            past : 'duela %s',\n            s : 'segundo batzuk',\n            ss : '%d segundo',\n            m : 'minutu bat',\n            mm : '%d minutu',\n            h : 'ordu bat',\n            hh : '%d ordu',\n            d : 'egun bat',\n            dd : '%d egun',\n            M : 'hilabete bat',\n            MM : '%d hilabete',\n            y : 'urte bat',\n            yy : '%d urte'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return eu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '۱',\n        '2': '۲',\n        '3': '۳',\n        '4': '۴',\n        '5': '۵',\n        '6': '۶',\n        '7': '۷',\n        '8': '۸',\n        '9': '۹',\n        '0': '۰'\n    }, numberMap = {\n        '۱': '1',\n        '۲': '2',\n        '۳': '3',\n        '۴': '4',\n        '۵': '5',\n        '۶': '6',\n        '۷': '7',\n        '۸': '8',\n        '۹': '9',\n        '۰': '0'\n    };\n\n    var fa = moment.defineLocale('fa', {\n        months : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        monthsShort : 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n        weekdays : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysShort : 'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar : {\n            sameDay : '[امروز ساعت] LT',\n            nextDay : '[فردا ساعت] LT',\n            nextWeek : 'dddd [ساعت] LT',\n            lastDay : '[دیروز ساعت] LT',\n            lastWeek : 'dddd [پیش] [ساعت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'در %s',\n            past : '%s پیش',\n            s : 'چند ثانیه',\n            ss : 'ثانیه d%',\n            m : 'یک دقیقه',\n            mm : '%d دقیقه',\n            h : 'یک ساعت',\n            hh : '%d ساعت',\n            d : 'یک روز',\n            dd : '%d روز',\n            M : 'یک ماه',\n            MM : '%d ماه',\n            y : 'یک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/[۰-۹]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal : '%dم',\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return fa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n        numbersFuture = [\n            'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',\n            numbersPast[7], numbersPast[8], numbersPast[9]\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                return isFuture ? 'sekunnin' : 'sekuntia';\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n        monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n        weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n        weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'Do MMMM[ta] YYYY',\n            LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l : 'D.M.YYYY',\n            ll : 'Do MMM YYYY',\n            lll : 'Do MMM YYYY, [klo] HH.mm',\n            llll : 'ddd, Do MMM YYYY, [klo] HH.mm'\n        },\n        calendar : {\n            sameDay : '[tänään] [klo] LT',\n            nextDay : '[huomenna] [klo] LT',\n            nextWeek : 'dddd [klo] LT',\n            lastDay : '[eilen] [klo] LT',\n            lastWeek : '[viime] dddd[na] [klo] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s päästä',\n            past : '%s sitten',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var fo = moment.defineLocale('fo', {\n        months : 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n        weekdaysShort : 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin : 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D. MMMM, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Í dag kl.] LT',\n            nextDay : '[Í morgin kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[Í gjár kl.] LT',\n            lastWeek : '[síðstu] dddd [kl] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'um %s',\n            past : '%s síðani',\n            s : 'fá sekund',\n            ss : '%d sekundir',\n            m : 'ein minuttur',\n            mm : '%d minuttir',\n            h : 'ein tími',\n            hh : '%d tímar',\n            d : 'ein dagur',\n            dd : '%d dagar',\n            M : 'ein mánaður',\n            MM : '%d mánaðir',\n            y : 'eitt ár',\n            yy : '%d ár'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var fr = moment.defineLocale('fr', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        }\n    });\n\n    return frCa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n        monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin : 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Aujourd’hui à] LT',\n            nextDay : '[Demain à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[Hier à] LT',\n            lastWeek : 'dddd [dernier à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dans %s',\n            past : 'il y a %s',\n            s : 'quelques secondes',\n            ss : '%d secondes',\n            m : 'une minute',\n            mm : '%d minutes',\n            h : 'une heure',\n            hh : '%d heures',\n            d : 'un jour',\n            dd : '%d jours',\n            M : 'un mois',\n            MM : '%d mois',\n            y : 'un an',\n            yy : '%d ans'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return frCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months : 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact : true,\n        weekdays : 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n        weekdaysShort : 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin : 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'oer %s',\n            past : '%s lyn',\n            s : 'in pear sekonden',\n            ss : '%d sekonden',\n            m : 'ien minút',\n            mm : '%d minuten',\n            h : 'ien oere',\n            hh : '%d oeren',\n            d : 'ien dei',\n            dd : '%d dagen',\n            M : 'ien moanne',\n            MM : '%d moannen',\n            y : 'ien jier',\n            yy : '%d jierren'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return fy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n\n    var months = [\n        'Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig'\n    ];\n\n    var monthsShort = ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll'];\n\n    var weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn'];\n\n    var weekdaysShort = ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat'];\n\n    var weekdaysMin = ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné aig] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d mí',\n            y: 'bliain',\n            yy: '%d bliain'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ga;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'\n    ];\n\n    var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n\n    var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n\n    var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n\n    var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months : months,\n        monthsShort : monthsShort,\n        monthsParseExact : true,\n        weekdays : weekdays,\n        weekdaysShort : weekdaysShort,\n        weekdaysMin : weekdaysMin,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[An-diugh aig] LT',\n            nextDay : '[A-màireach aig] LT',\n            nextWeek : 'dddd [aig] LT',\n            lastDay : '[An-dè aig] LT',\n            lastWeek : 'dddd [seo chaidh] [aig] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ann an %s',\n            past : 'bho chionn %s',\n            s : 'beagan diogan',\n            ss : '%d diogan',\n            m : 'mionaid',\n            mm : '%d mionaidean',\n            h : 'uair',\n            hh : '%d uairean',\n            d : 'latha',\n            dd : '%d latha',\n            M : 'mìos',\n            MM : '%d mìosan',\n            y : 'bliadhna',\n            yy : '%d bliadhna'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(d|na|mh)/,\n        ordinal : function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gd;\n\n})));\n","import { RouteConfig } from 'aurelia-router';\n\n\nexport interface Curriculum {\n  id: string;\n  uid?: string;\n  title?: string;\n  lastUpdate?: number;\n  archived?: boolean;\n  lang?: string;\n  style?: CurriculumStyle;\n  links?: string;\n  details?: string;\n  description?: string;\n  coverLetter?: string;\n  accounts?: string;\n  private?: boolean;\n  categories?: Category[];\n};\nexport interface Category {\n  id: string;\n  idCurriculum?: string;\n  title?: string;\n  position?: number;\n  icon?: string;\n  elements?: Element[];\n};\nexport interface Element {\n  id: string;\n  idCategory?: string;\n  position?: number;\n  subPosition?: number;\n  title?: string;\n  description?: string;\n  period?: string;\n  tags?: string;\n  idConfirm?: string;\n  status?: ConfirmState | \"\"; //last status of the confirm history item\n};\nexport interface User {\n  id: string; //NOTE: uid in Firebase Authentication, key in Database\n  name?: string;\n  lastname?: string;\n  address?: string;\n  emails?: string[]; //NOTE: addional emails over the main one kept in the authentication record\n  gender?: string;\n  dob?: number; //NOTE: date of born\n  dor?: number; //NOTE: date of registration\n  lastLogin?: number;\n  enabled?: boolean; //NOTE: verificated status in Authentication\n};\nexport interface Log {\n  dateTime: number; //NOTE: milliseconds\n  uid: string;\n  subject: string;\n  operation: string;\n  security: boolean;\n};\n\nexport interface Route extends RouteConfig {\n  //DOC: posizione della route sulla navbar\n  navPosition?: 'left' | 'right',\n  //DOC: visibilità della route in base allo stato del login dell'utente\n  visibility: 'logged' | 'notlogged' | 'always' | 'never',\n  //DOC: visualizzazione della route senza navbar\n  hideNavbar: boolean,\n  //DOC: se il link della route può/deve andare in overflow sulla navbar (es: dropdown)\n  overflow: boolean,\n  //DOC: callback al termine del caricamento di tutta la route\n  onLoadingCompleted: () => void\n}\n\n\n//TODO: interfaccia dichiarata ma non utilizzata ancora\nexport interface CurriculumDetails {\n  idCurriculum: string;\n  nowords: number; //total number of words\n  nocategories: number; //total number of categories\n  noelements: number; //total number of elements\n  changes: Date[]; //array of changes //NOTE: in futuro può essere un array di coppie (Data, idModifica)\n}\n\nexport interface CurriculumStyle {\n  textFamily?: string;\n  textColorPrimary?: string;\n  textColorSecondary?: string;\n  textColorMore?: string;\n  textSizeRatio?: number;\n  // TODO: stile punti delle liste di primo e secondo livello\n  iconsEnabled?: boolean;\n  iconsPack?: string;\n\n  layoutProportions?: string;\n  layourBorder?: boolean;\n\n  tagsStyle?: { category: string, color: string }[];\n  tagsShape?: string;\n  tagsSize?: number;\n}\n\nexport interface Secret {\n  id: string;\n  message: string;\n}\n/*\n  - scrivo del testo tra i tag {private}{/private}\n  - quando salvo\n  - quando salvo l'inputEditable lo sostituisce con l'html ***** (lo fa il markdown riconoscendo il tag)\n  - c'è una classe che prende il segreto e crea un recordo Secret nel db (FUNCTIONS??)\n    - nel valore dell'input il segreto è stato sostituito con un id univoco\n  - quando visualizzo il cv, per ogni segreto cerco il valore corrispondente nel db\n*/\n\nexport type ConfirmState = \"requested\" | \"incomplete\" | \"approved\" | \"rejected\";\n//see docs/confirm_flow.pdf\nexport interface ConfirmHistoryItem {\n  date: number;\n  text: string;\n  state: ConfirmState;\n}\nexport interface Confirm {\n  id: string;\n  idCurriculum: string //id of the curriculum referred to\n  idReviewer: string; //id of the reviewer\n  idExperience: string; //id of the experience under reviewing\n  history: ConfirmHistoryItem[]; /*each item is an action performed \n  by the user or the reviewer. it cannot be empty. last item status is the status of the entire confirm.\n  the first item date is the request date of the confirm. */\n}\n\n\nexport namespace Functions {\n  //DOC: restituisce la più grande posizione delle categorie\n  export function maxPosition(obj: { position?: number }[]) {\n    return Math.max(...obj.map(o => o.position), 0);\n  }\n  //DOC: restituisce la più piccola posizione delle categorie\n  export function minPosition(obj: { position?: number }[]) {\n    return Math.min(...obj.map(o => o.position));\n  }\n\n  //DOC: restituisce la posizione successiva a quella passata (ovvero la più piccola delle maggiori di p)\n  export function nextPosition(obj: { position?: number }[], p: number) {\n    return Math.min(...obj.filter(v => v.position > p).map(o => o.position));\n  }\n  //DOC: restituisce la posizione precedente a quella passata (ovvero la più grande delle minori di p)\n  export function previousPosition(obj: { position?: number }[], p: number) {\n    return Math.max(...obj.filter(v => v.position < p).map(o => o.position));\n  }\n\n  //DOC: elimina il campo id, gli array e tutti i campi null per il salvataggio nel Database\n  export function toDatabase(obj: { id: string }): any {\n    let o: any = {};\n    for (let p in obj)\n      if (obj.hasOwnProperty(p) && obj[p] != null && !Array.isArray(p))\n        o[p] = obj[p];\n    delete o.id;\n    return o;\n  }\n\n  //DOC: restituisce una stringa che rappresenta il log\n  export function toString(log: Log): string {\n    var isSecurity = log.security ? \"[Security] \" : \"\";\n    return \"[\" + log.dateTime.toLocaleString() + \"] \" + log.subject + \" => \" + isSecurity + log.operation;\n  }\n\n  //TODO:\n  export function getTagCategories(element: Element): string[] {\n    //[HTML5]{.tag .cat} [CSS3]{.tag .cat} [Bootstrap]{.tag .cat} [JavaScript]{.tag .cat}\n    //[jQuery]{.tag .cat} [PHP]{.tag .cat} [SQL]{.tag .cat}\n    var cats: string[] = [];\n    if (element.tags == \"\")\n      return [\"\"];\n    element.tags.split(\"[\").forEach(v => {\n      let e = v.trim().replace(\"}\", \"\").substring(v.lastIndexOf(\".\"));\n      //console.log(e); //aggiungo solo se valido e non già presente\n      if (e != \"\" && !cats.includes(e))\n        cats.push(e);\n    })\n    return cats;\n  }\n}\n\n\n//DOC: oggetti di default\nexport const defaultElement: Element = {\n  id: \"\",\n  idCategory: \"\",\n  period: \"###### periodo\",\n  title: \"### titolo\",\n  description: \"#### descrizione\"\n}\nexport const defaultCategory: Category = {\n  id: \"\",\n  idCurriculum: \"\",\n  title: \"### titolo\"\n}\nexport const defaultCurriculum: Curriculum = {\n  id: \"\",\n  uid: \"\",\n  title: \"titolo\",\n  description: \"descrizione\"\n}\nexport const defaultCurriculumStyle: CurriculumStyle = {\n  textFamily: \"'Raleway', sans-serif;\",\n  textColorPrimary: \"#285d37\".toUpperCase(),\n  textColorSecondary: \"#285d37\".toUpperCase(),\n  textColorMore: \"#285d37\".toUpperCase(),\n  textSizeRatio: 1,\n  iconsEnabled: true,\n  iconsPack: \"pack1\",\n  layoutProportions: \"\",\n  layourBorder: false,\n  tagsStyle: [],\n  tagsShape: \"\",\n  tagsSize: 1\n}\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var gl = moment.defineLocale('gl', {\n        months : 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n        monthsShort : 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort : 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin : 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY H:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'\n        },\n        calendar : {\n            sameDay : function () {\n                return '[hoxe ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextDay : function () {\n                return '[mañá ' + ((this.hours() !== 1) ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek : function () {\n                return 'dddd [' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            lastDay : function () {\n                return '[onte ' + ((this.hours() !== 1) ? 'á' : 'a') + '] LT';\n            },\n            lastWeek : function () {\n                return '[o] dddd [pasado ' + ((this.hours() !== 1) ? 'ás' : 'a') + '] LT';\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past : 'hai %s',\n            s : 'uns segundos',\n            ss : '%d segundos',\n            m : 'un minuto',\n            mm : '%d minutos',\n            h : 'unha hora',\n            hh : '%d horas',\n            d : 'un día',\n            dd : '%d días',\n            M : 'un mes',\n            MM : '%d meses',\n            y : 'un ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return gl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['thodde secondanim', 'thodde second'],\n            'ss': [number + ' secondanim', number + ' second'],\n            'm': ['eka mintan', 'ek minute'],\n            'mm': [number + ' mintanim', number + ' mintam'],\n            'h': ['eka voran', 'ek vor'],\n            'hh': [number + ' voranim', number + ' voram'],\n            'd': ['eka disan', 'ek dis'],\n            'dd': [number + ' disanim', number + ' dis'],\n            'M': ['eka mhoinean', 'ek mhoino'],\n            'MM': [number + ' mhoineanim', number + ' mhoine'],\n            'y': ['eka vorsan', 'ek voros'],\n            'yy': [number + ' vorsanim', number + ' vorsam']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months : 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n        monthsShort : 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n        weekdaysShort : 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin : 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'A h:mm [vazta]',\n            LTS : 'A h:mm:ss [vazta]',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY A h:mm [vazta]',\n            LLLL : 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n        },\n        calendar : {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Ieta to] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fatlo] dddd[,] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s',\n            past : '%s adim',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(er)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /rati|sokalli|donparam|sanje/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokalli') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokalli';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        }\n    });\n\n    return gomLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n            '1': '૧',\n            '2': '૨',\n            '3': '૩',\n            '4': '૪',\n            '5': '૫',\n            '6': '૬',\n            '7': '૭',\n            '8': '૮',\n            '9': '૯',\n            '0': '૦'\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0'\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પેહલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ'\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6 // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return gu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var he = moment.defineLocale('he', {\n        months : 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n        monthsShort : 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays : 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort : 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin : 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [ב]MMMM YYYY',\n            LLL : 'D [ב]MMMM YYYY HH:mm',\n            LLLL : 'dddd, D [ב]MMMM YYYY HH:mm',\n            l : 'D/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[היום ב־]LT',\n            nextDay : '[מחר ב־]LT',\n            nextWeek : 'dddd [בשעה] LT',\n            lastDay : '[אתמול ב־]LT',\n            lastWeek : '[ביום] dddd [האחרון בשעה] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'בעוד %s',\n            past : 'לפני %s',\n            s : 'מספר שניות',\n            ss : '%d שניות',\n            m : 'דקה',\n            mm : '%d דקות',\n            h : 'שעה',\n            hh : function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d : 'יום',\n            dd : function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M : 'חודש',\n            MM : function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y : 'שנה',\n            yy : function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            }\n        },\n        meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM : function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        }\n    });\n\n    return he;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var hi = moment.defineLocale('hi', {\n        months : 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n        monthsShort : 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm बजे',\n            LTS : 'A h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm बजे'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[कल] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[कल] LT',\n            lastWeek : '[पिछले] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s में',\n            past : '%s पहले',\n            s : 'कुछ ही क्षण',\n            ss : '%d सेकंड',\n            m : 'एक मिनट',\n            mm : '%d मिनट',\n            h : 'एक घंटा',\n            hh : '%d घंटे',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महीने',\n            MM : '%d महीने',\n            y : 'एक वर्ष',\n            yy : '%d वर्ष'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return hi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months : {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n        },\n        monthsShort : 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort : 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin : 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danas u] LT',\n            nextDay  : '[sutra u] LT',\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[jučer u] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'par sekundi',\n            ss     : translate,\n            m      : translate,\n            mm     : translate,\n            h      : translate,\n            hh     : translate,\n            d      : 'dan',\n            dd     : translate,\n            M      : 'mjesec',\n            MM     : translate,\n            y      : 'godinu',\n            yy     : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return hr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return (isFuture || withoutSuffix) ? 'néhány másodperc' : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months : 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n        monthsShort : 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n        weekdays : 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort : 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin : 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY. MMMM D.',\n            LLL : 'YYYY. MMMM D. H:mm',\n            LLLL : 'YYYY. MMMM D., dddd H:mm'\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar : {\n            sameDay : '[ma] LT[-kor]',\n            nextDay : '[holnap] LT[-kor]',\n            nextWeek : function () {\n                return week.call(this, true);\n            },\n            lastDay : '[tegnap] LT[-kor]',\n            lastWeek : function () {\n                return week.call(this, false);\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s múlva',\n            past : '%s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return hu;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months : {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n        },\n        monthsShort : 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays : 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n        weekdaysShort : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin : 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY թ.',\n            LLL : 'D MMMM YYYY թ., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY թ., HH:mm'\n        },\n        calendar : {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s հետո',\n            past : '%s առաջ',\n            s : 'մի քանի վայրկյան',\n            ss : '%d վայրկյան',\n            m : 'րոպե',\n            mm : '%d րոպե',\n            h : 'ժամ',\n            hh : '%d ժամ',\n            d : 'օր',\n            dd : '%d օր',\n            M : 'ամիս',\n            MM : '%d ամիս',\n            y : 'տարի',\n            yy : '%d տարի'\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem : function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return hyAm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var id = moment.defineLocale('id', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Besok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kemarin pukul] LT',\n            lastWeek : 'dddd [lalu pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lalu',\n            s : 'beberapa detik',\n            ss : '%d detik',\n            m : 'semenit',\n            mm : '%d menit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return id;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months : 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays : 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n        weekdaysShort : 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin : 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd, D. MMMM YYYY [kl.] H:mm'\n        },\n        calendar : {\n            sameDay : '[í dag kl.] LT',\n            nextDay : '[á morgun kl.] LT',\n            nextWeek : 'dddd [kl.] LT',\n            lastDay : '[í gær kl.] LT',\n            lastWeek : '[síðasta] dddd [kl.] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'eftir %s',\n            past : 'fyrir %s síðan',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : 'klukkustund',\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return is;\n\n})));\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction trimDots(ary) {\n  for (var i = 0; i < ary.length; ++i) {\n    var part = ary[i];\n    if (part === '.') {\n      ary.splice(i, 1);\n      i -= 1;\n    } else if (part === '..') {\n      if (i === 0 || i === 1 && ary[2] === '..' || ary[i - 1] === '..') {\n        continue;\n      } else if (i > 0) {\n        ary.splice(i - 1, 2);\n        i -= 2;\n      }\n    }\n  }\n}\n\nexport function relativeToFile(name, file) {\n  var fileParts = file && file.split('/');\n  var nameParts = name.trim().split('/');\n\n  if (nameParts[0].charAt(0) === '.' && fileParts) {\n    var normalizedBaseParts = fileParts.slice(0, fileParts.length - 1);\n    nameParts.unshift.apply(nameParts, normalizedBaseParts);\n  }\n\n  trimDots(nameParts);\n\n  return nameParts.join('/');\n}\n\nexport function join(path1, path2) {\n  if (!path1) {\n    return path2;\n  }\n\n  if (!path2) {\n    return path1;\n  }\n\n  var schemeMatch = path1.match(/^([^/]*?:)\\//);\n  var scheme = schemeMatch && schemeMatch.length > 0 ? schemeMatch[1] : '';\n  path1 = path1.substr(scheme.length);\n\n  var urlPrefix = void 0;\n  if (path1.indexOf('///') === 0 && scheme === 'file:') {\n    urlPrefix = '///';\n  } else if (path1.indexOf('//') === 0) {\n    urlPrefix = '//';\n  } else if (path1.indexOf('/') === 0) {\n    urlPrefix = '/';\n  } else {\n    urlPrefix = '';\n  }\n\n  var trailingSlash = path2.slice(-1) === '/' ? '/' : '';\n\n  var url1 = path1.split('/');\n  var url2 = path2.split('/');\n  var url3 = [];\n\n  for (var i = 0, ii = url1.length; i < ii; ++i) {\n    if (url1[i] === '..') {\n      url3.pop();\n    } else if (url1[i] === '.' || url1[i] === '') {\n      continue;\n    } else {\n      url3.push(url1[i]);\n    }\n  }\n\n  for (var _i = 0, _ii = url2.length; _i < _ii; ++_i) {\n    if (url2[_i] === '..') {\n      url3.pop();\n    } else if (url2[_i] === '.' || url2[_i] === '') {\n      continue;\n    } else {\n      url3.push(url2[_i]);\n    }\n  }\n\n  return scheme + urlPrefix + url3.join('/') + trailingSlash;\n}\n\nvar encode = encodeURIComponent;\nvar encodeKey = function encodeKey(k) {\n  return encode(k).replace('%24', '$');\n};\n\nfunction buildParam(key, value, traditional) {\n  var result = [];\n  if (value === null || value === undefined) {\n    return result;\n  }\n  if (Array.isArray(value)) {\n    for (var i = 0, l = value.length; i < l; i++) {\n      if (traditional) {\n        result.push(encodeKey(key) + '=' + encode(value[i]));\n      } else {\n        var arrayKey = key + '[' + (_typeof(value[i]) === 'object' && value[i] !== null ? i : '') + ']';\n        result = result.concat(buildParam(arrayKey, value[i]));\n      }\n    }\n  } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && !traditional) {\n    for (var propertyName in value) {\n      result = result.concat(buildParam(key + '[' + propertyName + ']', value[propertyName]));\n    }\n  } else {\n    result.push(encodeKey(key) + '=' + encode(value));\n  }\n  return result;\n}\n\nexport function buildQueryString(params, traditional) {\n  var pairs = [];\n  var keys = Object.keys(params || {}).sort();\n  for (var i = 0, len = keys.length; i < len; i++) {\n    var key = keys[i];\n    pairs = pairs.concat(buildParam(key, params[key], traditional));\n  }\n\n  if (pairs.length === 0) {\n    return '';\n  }\n\n  return pairs.join('&');\n}\n\nfunction processScalarParam(existedParam, value) {\n  if (Array.isArray(existedParam)) {\n    existedParam.push(value);\n    return existedParam;\n  }\n  if (existedParam !== undefined) {\n    return [existedParam, value];\n  }\n\n  return value;\n}\n\nfunction parseComplexParam(queryParams, keys, value) {\n  var currentParams = queryParams;\n  var keysLastIndex = keys.length - 1;\n  for (var j = 0; j <= keysLastIndex; j++) {\n    var key = keys[j] === '' ? currentParams.length : keys[j];\n    if (j < keysLastIndex) {\n      var prevValue = !currentParams[key] || _typeof(currentParams[key]) === 'object' ? currentParams[key] : [currentParams[key]];\n      currentParams = currentParams[key] = prevValue || (isNaN(keys[j + 1]) ? {} : []);\n    } else {\n      currentParams = currentParams[key] = value;\n    }\n  }\n}\n\nexport function parseQueryString(queryString) {\n  var queryParams = {};\n  if (!queryString || typeof queryString !== 'string') {\n    return queryParams;\n  }\n\n  var query = queryString;\n  if (query.charAt(0) === '?') {\n    query = query.substr(1);\n  }\n\n  var pairs = query.replace(/\\+/g, ' ').split('&');\n  for (var i = 0; i < pairs.length; i++) {\n    var pair = pairs[i].split('=');\n    var key = decodeURIComponent(pair[0]);\n    if (!key) {\n      continue;\n    }\n\n    var keys = key.split('][');\n    var keysLastIndex = keys.length - 1;\n\n    if (/\\[/.test(keys[0]) && /\\]$/.test(keys[keysLastIndex])) {\n      keys[keysLastIndex] = keys[keysLastIndex].replace(/\\]$/, '');\n      keys = keys.shift().split('[').concat(keys);\n      keysLastIndex = keys.length - 1;\n    } else {\n      keysLastIndex = 0;\n    }\n\n    if (pair.length >= 2) {\n      var value = pair[1] ? decodeURIComponent(pair[1]) : '';\n      if (keysLastIndex) {\n        parseComplexParam(queryParams, keys, value);\n      } else {\n        queryParams[key] = processScalarParam(queryParams[key], value);\n      }\n    } else {\n      queryParams[key] = true;\n    }\n  }\n  return queryParams;\n}","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var it = moment.defineLocale('it', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return it;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var itCh = moment.defineLocale('it-ch', {\n        months : 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n        monthsShort : 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays : 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n        weekdaysShort : 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin : 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return ((/^[0-9].+$/).test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past : '%s fa',\n            s : 'alcuni secondi',\n            ss : '%d secondi',\n            m : 'un minuto',\n            mm : '%d minuti',\n            h : 'un\\'ora',\n            hh : '%d ore',\n            d : 'un giorno',\n            dd : '%d giorni',\n            M : 'un mese',\n            MM : '%d mesi',\n            y : 'un anno',\n            yy : '%d anni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return itCh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ja = moment.defineLocale('ja', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort : '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin : '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日 dddd HH:mm',\n            l : 'YYYY/MM/DD',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日(ddd) HH:mm'\n        },\n        meridiemParse: /午前|午後/i,\n        isPM : function (input) {\n            return input === '午後';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar : {\n            sameDay : '[今日] LT',\n            nextDay : '[明日] LT',\n            nextWeek : function (now) {\n                if (now.week() < this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay : '[昨日] LT',\n            lastWeek : function (now) {\n                if (this.week() < now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}日/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s後',\n            past : '%s前',\n            s : '数秒',\n            ss : '%d秒',\n            m : '1分',\n            mm : '%d分',\n            h : '1時間',\n            hh : '%d時間',\n            d : '1日',\n            dd : '%d日',\n            M : '1ヶ月',\n            MM : '%dヶ月',\n            y : '1年',\n            yy : '%d年'\n        }\n    });\n\n    return ja;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var jv = moment.defineLocale('jv', {\n        months : 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays : 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort : 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin : 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar : {\n            sameDay : '[Dinten puniko pukul] LT',\n            nextDay : '[Mbenjang pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kala wingi pukul] LT',\n            lastWeek : 'dddd [kepengker pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'wonten ing %s',\n            past : '%s ingkang kepengker',\n            s : 'sawetawis detik',\n            ss : '%d detik',\n            m : 'setunggal menit',\n            mm : '%d menit',\n            h : 'setunggal jam',\n            hh : '%d jam',\n            d : 'sedinten',\n            dd : '%d dinten',\n            M : 'sewulan',\n            MM : '%d wulan',\n            y : 'setaun',\n            yy : '%d taun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return jv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ka = moment.defineLocale('ka', {\n        months : {\n            standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n            format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n        },\n        monthsShort : 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays : {\n            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n            isFormat: /(წინა|შემდეგ)/\n        },\n        weekdaysShort : 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin : 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[დღეს] LT[-ზე]',\n            nextDay : '[ხვალ] LT[-ზე]',\n            lastDay : '[გუშინ] LT[-ზე]',\n            nextWeek : '[შემდეგ] dddd LT[-ზე]',\n            lastWeek : '[წინა] dddd LT-ზე',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : function (s) {\n                return (/(წამი|წუთი|საათი|წელი)/).test(s) ?\n                    s.replace(/ი$/, 'ში') :\n                    s + 'ში';\n            },\n            past : function (s) {\n                if ((/(წამი|წუთი|საათი|დღე|თვე)/).test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if ((/წელი/).test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n            },\n            s : 'რამდენიმე წამი',\n            ss : '%d წამი',\n            m : 'წუთი',\n            mm : '%d წუთი',\n            h : 'საათი',\n            hh : '%d საათი',\n            d : 'დღე',\n            dd : '%d დღე',\n            M : 'თვე',\n            MM : '%d თვე',\n            y : 'წელი',\n            yy : '%d წელი'\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal : function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if ((number < 20) || (number <= 100 && (number % 20 === 0)) || (number % 100 === 0)) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week : {\n            dow : 1,\n            doy : 7\n        }\n    });\n\n    return ka;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші'\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months : 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n        monthsShort : 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays : 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n        weekdaysShort : 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin : 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгін сағат] LT',\n            nextDay : '[Ертең сағат] LT',\n            nextWeek : 'dddd [сағат] LT',\n            lastDay : '[Кеше сағат] LT',\n            lastWeek : '[Өткен аптаның] dddd [сағат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ішінде',\n            past : '%s бұрын',\n            s : 'бірнеше секунд',\n            ss : '%d секунд',\n            m : 'бір минут',\n            mm : '%d минут',\n            h : 'бір сағат',\n            hh : '%d сағат',\n            d : 'бір күн',\n            dd : '%d күн',\n            M : 'бір ай',\n            MM : '%d ай',\n            y : 'бір жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return kk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '១',\n        '2': '២',\n        '3': '៣',\n        '4': '៤',\n        '5': '៥',\n        '6': '៦',\n        '7': '៧',\n        '8': '៨',\n        '9': '៩',\n        '0': '០'\n    }, numberMap = {\n        '១': '1',\n        '២': '2',\n        '៣': '3',\n        '៤': '4',\n        '៥': '5',\n        '៦': '6',\n        '៧': '7',\n        '៨': '8',\n        '៩': '9',\n        '០': '0'\n    };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ'\n        },\n        dayOfMonthOrdinalParse : /ទី\\d{1,2}/,\n        ordinal : 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return km;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '೧',\n        '2': '೨',\n        '3': '೩',\n        '4': '೪',\n        '5': '೫',\n        '6': '೬',\n        '7': '೭',\n        '8': '೮',\n        '9': '೯',\n        '0': '೦'\n    },\n    numberMap = {\n        '೧': '1',\n        '೨': '2',\n        '೩': '3',\n        '೪': '4',\n        '೫': '5',\n        '೬': '6',\n        '೭': '7',\n        '೮': '8',\n        '೯': '9',\n        '೦': '0'\n    };\n\n    var kn = moment.defineLocale('kn', {\n        months : 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n        monthsShort : 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n        weekdaysShort : 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin : 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[ಇಂದು] LT',\n            nextDay : '[ನಾಳೆ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ನಿನ್ನೆ] LT',\n            lastWeek : '[ಕೊನೆಯ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ನಂತರ',\n            past : '%s ಹಿಂದೆ',\n            s : 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss : '%d ಸೆಕೆಂಡುಗಳು',\n            m : 'ಒಂದು ನಿಮಿಷ',\n            mm : '%d ನಿಮಿಷ',\n            h : 'ಒಂದು ಗಂಟೆ',\n            hh : '%d ಗಂಟೆ',\n            d : 'ಒಂದು ದಿನ',\n            dd : '%d ದಿನ',\n            M : 'ಒಂದು ತಿಂಗಳು',\n            MM : '%d ತಿಂಗಳು',\n            y : 'ಒಂದು ವರ್ಷ',\n            yy : '%d ವರ್ಷ'\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal : function (number) {\n            return number + 'ನೇ';\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return kn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ko = moment.defineLocale('ko', {\n        months : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort : '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        weekdays : '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort : '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin : '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'YYYY.MM.DD.',\n            LL : 'YYYY년 MMMM D일',\n            LLL : 'YYYY년 MMMM D일 A h:mm',\n            LLLL : 'YYYY년 MMMM D일 dddd A h:mm',\n            l : 'YYYY.MM.DD.',\n            ll : 'YYYY년 MMMM D일',\n            lll : 'YYYY년 MMMM D일 A h:mm',\n            llll : 'YYYY년 MMMM D일 dddd A h:mm'\n        },\n        calendar : {\n            sameDay : '오늘 LT',\n            nextDay : '내일 LT',\n            nextWeek : 'dddd LT',\n            lastDay : '어제 LT',\n            lastWeek : '지난주 dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s 후',\n            past : '%s 전',\n            s : '몇 초',\n            ss : '%d초',\n            m : '1분',\n            mm : '%d분',\n            h : '한 시간',\n            hh : '%d시간',\n            d : '하루',\n            dd : '%d일',\n            M : '한 달',\n            MM : '%d달',\n            y : '일 년',\n            yy : '%d년'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}(일|월|주)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse : /오전|오후/,\n        isPM : function (token) {\n            return token === '오후';\n        },\n        meridiem : function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        }\n    });\n\n    return ko;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    },\n    months = [\n        'کانونی دووەم',\n        'شوبات',\n        'ئازار',\n        'نیسان',\n        'ئایار',\n        'حوزەیران',\n        'تەمموز',\n        'ئاب',\n        'ئەیلوول',\n        'تشرینی یەكەم',\n        'تشرینی دووەم',\n        'كانونی یەکەم'\n    ];\n\n\n    var ku = moment.defineLocale('ku', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysShort : 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin : 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar : {\n            sameDay : '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay : '[به‌یانی كاتژمێر] LT',\n            nextWeek : 'dddd [كاتژمێر] LT',\n            lastDay : '[دوێنێ كاتژمێر] LT',\n            lastWeek : 'dddd [كاتژمێر] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'له‌ %s',\n            past : '%s',\n            s : 'چه‌ند چركه‌یه‌ك',\n            ss : 'چركه‌ %d',\n            m : 'یه‌ك خوله‌ك',\n            mm : '%d خوله‌ك',\n            h : 'یه‌ك كاتژمێر',\n            hh : '%d كاتژمێر',\n            d : 'یه‌ك ڕۆژ',\n            dd : '%d ڕۆژ',\n            M : 'یه‌ك مانگ',\n            MM : '%d مانگ',\n            y : 'یه‌ك ساڵ',\n            yy : '%d ساڵ'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12 // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return ku;\n\n})));\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү'\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months : 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n        monthsShort : 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n        weekdaysShort : 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin : 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бүгүн саат] LT',\n            nextDay : '[Эртең саат] LT',\n            nextWeek : 'dddd [саат] LT',\n            lastDay : '[Кечээ саат] LT',\n            lastWeek : '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ичинде',\n            past : '%s мурун',\n            s : 'бирнече секунд',\n            ss : '%d секунд',\n            m : 'бир мүнөт',\n            mm : '%d мүнөт',\n            h : 'бир саат',\n            hh : '%d саат',\n            d : 'бир күн',\n            dd : '%d күн',\n            M : 'бир ай',\n            MM : '%d ай',\n            y : 'бир жыл',\n            yy : '%d жыл'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal : function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ky;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            'm': ['eng Minutt', 'enger Minutt'],\n            'h': ['eng Stonn', 'enger Stonn'],\n            'd': ['een Dag', 'engem Dag'],\n            'M': ['ee Mount', 'engem Mount'],\n            'y': ['ee Joer', 'engem Joer']\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10, firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            }\n        },\n        relativeTime : {\n            future : processFutureTime,\n            past : processPastTime,\n            s : 'e puer Sekonnen',\n            ss : '%d Sekonnen',\n            m : processRelativeTime,\n            mm : '%d Minutten',\n            h : processRelativeTime,\n            hh : '%d Stonnen',\n            d : processRelativeTime,\n            dd : '%d Deeg',\n            M : processRelativeTime,\n            MM : '%d Méint',\n            y : processRelativeTime,\n            yy : '%d Joer'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var lo = moment.defineLocale('lo', {\n        months : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        monthsShort : 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n        weekdays : 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort : 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin : 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'ວັນdddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar : {\n            sameDay : '[ມື້ນີ້ເວລາ] LT',\n            nextDay : '[ມື້ອື່ນເວລາ] LT',\n            nextWeek : '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay : '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek : '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ອີກ %s',\n            past : '%sຜ່ານມາ',\n            s : 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss : '%d ວິນາທີ' ,\n            m : '1 ນາທີ',\n            mm : '%d ນາທີ',\n            h : '1 ຊົ່ວໂມງ',\n            hh : '%d ຊົ່ວໂມງ',\n            d : '1 ມື້',\n            dd : '%d ມື້',\n            M : '1 ເດືອນ',\n            MM : '%d ເດືອນ',\n            y : '1 ປີ',\n            yy : '%d ປີ'\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal : function (number) {\n            return 'ທີ່' + number;\n        }\n    });\n\n    return lo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss' : 'sekundė_sekundžių_sekundes',\n        'm' : 'minutė_minutės_minutę',\n        'mm': 'minutės_minučių_minutes',\n        'h' : 'valanda_valandos_valandą',\n        'hh': 'valandos_valandų_valandas',\n        'd' : 'diena_dienos_dieną',\n        'dd': 'dienos_dienų_dienas',\n        'M' : 'mėnuo_mėnesio_mėnesį',\n        'MM': 'mėnesiai_mėnesių_mėnesius',\n        'y' : 'metai_metų_metus',\n        'yy': 'metai_metų_metus'\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix ? forms(key)[0] : (isFuture ? forms(key)[1] : forms(key)[2]);\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months : {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n        },\n        monthsShort : 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays : {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n            isFormat: /dddd HH:mm/\n        },\n        weekdaysShort : 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin : 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY [m.] MMMM D [d.]',\n            LLL : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL : 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l : 'YYYY-MM-DD',\n            ll : 'YYYY [m.] MMMM D [d.]',\n            lll : 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll : 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n        },\n        calendar : {\n            sameDay : '[Šiandien] LT',\n            nextDay : '[Rytoj] LT',\n            nextWeek : 'dddd LT',\n            lastDay : '[Vakar] LT',\n            lastWeek : '[Praėjusį] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'po %s',\n            past : 'prieš %s',\n            s : translateSeconds,\n            ss : translate,\n            m : translateSingular,\n            mm : translate,\n            h : translateSingular,\n            hh : translate,\n            d : translateSingular,\n            dd : translate,\n            M : translateSingular,\n            MM : translate,\n            y : translateSingular,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal : function (number) {\n            return number + '-oji';\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var units = {\n        'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        'h': 'stundas_stundām_stunda_stundas'.split('_'),\n        'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n        'd': 'dienas_dienām_diena_dienas'.split('_'),\n        'dd': 'dienas_dienām_diena_dienas'.split('_'),\n        'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        'y': 'gada_gadiem_gads_gadi'.split('_'),\n        'yy': 'gada_gadiem_gads_gadi'.split('_')\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months : 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n        weekdaysShort : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin : 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY.',\n            LL : 'YYYY. [gada] D. MMMM',\n            LLL : 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL : 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n        },\n        calendar : {\n            sameDay : '[Šodien pulksten] LT',\n            nextDay : '[Rīt pulksten] LT',\n            nextWeek : 'dddd [pulksten] LT',\n            lastDay : '[Vakar pulksten] LT',\n            lastWeek : '[Pagājušā] dddd [pulksten] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'pēc %s',\n            past : 'pirms %s',\n            s : relativeSeconds,\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithSingular,\n            mm : relativeTimeWithPlural,\n            h : relativeTimeWithSingular,\n            hh : relativeTimeWithPlural,\n            d : relativeTimeWithSingular,\n            dd : relativeTimeWithPlural,\n            M : relativeTimeWithSingular,\n            MM : relativeTimeWithPlural,\n            y : relativeTimeWithSingular,\n            yy : relativeTimeWithPlural\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return lv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact : true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'prije %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mjesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return me;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mk = moment.defineLocale('mk', {\n        months : 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n        monthsShort : 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays : 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n        weekdaysShort : 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin : 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'D.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay : '[Денес во] LT',\n            nextDay : '[Утре во] LT',\n            nextWeek : '[Во] dddd [во] LT',\n            lastDay : '[Вчера во] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'после %s',\n            past : 'пред %s',\n            s : 'неколку секунди',\n            ss : '%d секунди',\n            m : 'минута',\n            mm : '%d минути',\n            h : 'час',\n            hh : '%d часа',\n            d : 'ден',\n            dd : '%d дена',\n            M : 'месец',\n            MM : '%d месеци',\n            y : 'година',\n            yy : '%d години'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal : function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return mk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ml = moment.defineLocale('ml', {\n        months : 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n        monthsShort : 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n        weekdaysShort : 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin : 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm -നു',\n            LTS : 'A h:mm:ss -നു',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm -നു',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm -നു'\n        },\n        calendar : {\n            sameDay : '[ഇന്ന്] LT',\n            nextDay : '[നാളെ] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[ഇന്നലെ] LT',\n            lastWeek : '[കഴിഞ്ഞ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s കഴിഞ്ഞ്',\n            past : '%s മുൻപ്',\n            s : 'അൽപ നിമിഷങ്ങൾ',\n            ss : '%d സെക്കൻഡ്',\n            m : 'ഒരു മിനിറ്റ്',\n            mm : '%d മിനിറ്റ്',\n            h : 'ഒരു മണിക്കൂർ',\n            hh : '%d മണിക്കൂർ',\n            d : 'ഒരു ദിവസം',\n            dd : '%d ദിവസം',\n            M : 'ഒരു മാസം',\n            MM : '%d മാസം',\n            y : 'ഒരു വർഷം',\n            yy : '%d വർഷം'\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if ((meridiem === 'രാത്രി' && hour >= 4) ||\n                    meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                    meridiem === 'വൈകുന്നേരം') {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        }\n    });\n\n    return ml;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months : 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n        monthsShort : '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort : 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin : 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'YYYY оны MMMMын D',\n            LLL : 'YYYY оны MMMMын D HH:mm',\n            LLLL : 'dddd, YYYY оны MMMMын D HH:mm'\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM : function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar : {\n            sameDay : '[Өнөөдөр] LT',\n            nextDay : '[Маргааш] LT',\n            nextWeek : '[Ирэх] dddd LT',\n            lastDay : '[Өчигдөр] LT',\n            lastWeek : '[Өнгөрсөн] dddd LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s дараа',\n            past : '%s өмнө',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        }\n    });\n\n    return mn;\n\n})));\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports = typeof window == 'object' && window && window.Math == Math ? window\n  : typeof self == 'object' && self && self.Math == Math ? self\n  // eslint-disable-next-line no-new-func\n  : Function('return this')();\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture)\n    {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's': output = 'काही सेकंद'; break;\n                case 'ss': output = '%d सेकंद'; break;\n                case 'm': output = 'एक मिनिट'; break;\n                case 'mm': output = '%d मिनिटे'; break;\n                case 'h': output = 'एक तास'; break;\n                case 'hh': output = '%d तास'; break;\n                case 'd': output = 'एक दिवस'; break;\n                case 'dd': output = '%d दिवस'; break;\n                case 'M': output = 'एक महिना'; break;\n                case 'MM': output = '%d महिने'; break;\n                case 'y': output = 'एक वर्ष'; break;\n                case 'yy': output = '%d वर्षे'; break;\n            }\n        }\n        else {\n            switch (string) {\n                case 's': output = 'काही सेकंदां'; break;\n                case 'ss': output = '%d सेकंदां'; break;\n                case 'm': output = 'एका मिनिटा'; break;\n                case 'mm': output = '%d मिनिटां'; break;\n                case 'h': output = 'एका तासा'; break;\n                case 'hh': output = '%d तासां'; break;\n                case 'd': output = 'एका दिवसा'; break;\n                case 'dd': output = '%d दिवसां'; break;\n                case 'M': output = 'एका महिन्या'; break;\n                case 'MM': output = '%d महिन्यां'; break;\n                case 'y': output = 'एका वर्षा'; break;\n                case 'yy': output = '%d वर्षां'; break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months : 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort : 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin : 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm वाजता',\n            LTS : 'A h:mm:ss वाजता',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm वाजता',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm वाजता'\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[उद्या] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात्री') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळी') {\n                return hour;\n            } else if (meridiem === 'दुपारी') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'सायंकाळी') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात्री';\n            } else if (hour < 10) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return mr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ms = moment.defineLocale('ms', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ms;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var msMy = moment.defineLocale('ms-my', {\n        months : 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays : 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort : 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin : 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [pukul] HH.mm',\n            LLLL : 'dddd, D MMMM YYYY [pukul] HH.mm'\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar : {\n            sameDay : '[Hari ini pukul] LT',\n            nextDay : '[Esok pukul] LT',\n            nextWeek : 'dddd [pukul] LT',\n            lastDay : '[Kelmarin pukul] LT',\n            lastWeek : 'dddd [lepas pukul] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'dalam %s',\n            past : '%s yang lepas',\n            s : 'beberapa saat',\n            ss : '%d saat',\n            m : 'seminit',\n            mm : '%d minit',\n            h : 'sejam',\n            hh : '%d jam',\n            d : 'sehari',\n            dd : '%d hari',\n            M : 'sebulan',\n            MM : '%d bulan',\n            y : 'setahun',\n            yy : '%d tahun'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return msMy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var mt = moment.defineLocale('mt', {\n        months : 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n        monthsShort : 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays : 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n        weekdaysShort : 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin : 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Illum fil-]LT',\n            nextDay : '[Għada fil-]LT',\n            nextWeek : 'dddd [fil-]LT',\n            lastDay : '[Il-bieraħ fil-]LT',\n            lastWeek : 'dddd [li għadda] [fil-]LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'f’ %s',\n            past : '%s ilu',\n            s : 'ftit sekondi',\n            ss : '%d sekondi',\n            m : 'minuta',\n            mm : '%d minuti',\n            h : 'siegħa',\n            hh : '%d siegħat',\n            d : 'ġurnata',\n            dd : '%d ġranet',\n            M : 'xahar',\n            MM : '%d xhur',\n            y : 'sena',\n            yy : '%d sni'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}º/,\n        ordinal: '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return mt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '၁',\n        '2': '၂',\n        '3': '၃',\n        '4': '၄',\n        '5': '၅',\n        '6': '၆',\n        '7': '၇',\n        '8': '၈',\n        '9': '၉',\n        '0': '၀'\n    }, numberMap = {\n        '၁': '1',\n        '၂': '2',\n        '၃': '3',\n        '၄': '4',\n        '၅': '5',\n        '၆': '6',\n        '၇': '7',\n        '၈': '8',\n        '၉': '9',\n        '၀': '0'\n    };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss : '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်'\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return my;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var nb = moment.defineLocale('nb', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort : 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s siden',\n            s : 'noen sekunder',\n            ss : '%d sekunder',\n            m : 'ett minutt',\n            mm : '%d minutter',\n            h : 'en time',\n            hh : '%d timer',\n            d : 'en dag',\n            dd : '%d dager',\n            M : 'en måned',\n            MM : '%d måneder',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nb;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '१',\n        '2': '२',\n        '3': '३',\n        '4': '४',\n        '5': '५',\n        '6': '६',\n        '7': '७',\n        '8': '८',\n        '9': '९',\n        '0': '०'\n    },\n    numberMap = {\n        '१': '1',\n        '२': '2',\n        '३': '3',\n        '४': '4',\n        '५': '5',\n        '६': '6',\n        '७': '7',\n        '८': '8',\n        '९': '9',\n        '०': '0'\n    };\n\n    var ne = moment.defineLocale('ne', {\n        months : 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n        monthsShort : 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n        weekdaysShort : 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin : 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'Aको h:mm बजे',\n            LTS : 'Aको h:mm:ss बजे',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL : 'dddd, D MMMM YYYY, Aको h:mm बजे'\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar : {\n            sameDay : '[आज] LT',\n            nextDay : '[भोलि] LT',\n            nextWeek : '[आउँदो] dddd[,] LT',\n            lastDay : '[हिजो] LT',\n            lastWeek : '[गएको] dddd[,] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sमा',\n            past : '%s अगाडि',\n            s : 'केही क्षण',\n            ss : '%d सेकेण्ड',\n            m : 'एक मिनेट',\n            mm : '%d मिनेट',\n            h : 'एक घण्टा',\n            hh : '%d घण्टा',\n            d : 'एक दिन',\n            dd : '%d दिन',\n            M : 'एक महिना',\n            MM : '%d महिना',\n            y : 'एक बर्ष',\n            yy : '%d बर्ष'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return ne;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD-MM-YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n\n    var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n    var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n        monthsShort : function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin : 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'over %s',\n            past : '%s geleden',\n            s : 'een paar seconden',\n            ss : '%d seconden',\n            m : 'één minuut',\n            mm : '%d minuten',\n            h : 'één uur',\n            hh : '%d uur',\n            d : 'één dag',\n            dd : '%d dagen',\n            M : 'één maand',\n            MM : '%d maanden',\n            y : 'één jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nlBe;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var nn = moment.defineLocale('nn', {\n        months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays : 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort : 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n        weekdaysMin : 'su_må_ty_on_to_fr_lø'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY [kl.] H:mm',\n            LLLL : 'dddd D. MMMM YYYY [kl.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : '%s sidan',\n            s : 'nokre sekund',\n            ss : '%d sekund',\n            m : 'eit minutt',\n            mm : '%d minutt',\n            h : 'ein time',\n            hh : '%d timar',\n            d : 'ein dag',\n            dd : '%d dagar',\n            M : 'ein månad',\n            MM : '%d månader',\n            y : 'eit år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return nn;\n\n})));\n","var path = require('../internals/path');\nvar has = require('../internals/has');\nvar wrappedWellKnownSymbolModule = require('../internals/wrapped-well-known-symbol');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n  var Symbol = path.Symbol || (path.Symbol = {});\n  if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {\n    value: wrappedWellKnownSymbolModule.f(NAME)\n  });\n};\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '੧',\n        '2': '੨',\n        '3': '੩',\n        '4': '੪',\n        '5': '੫',\n        '6': '੬',\n        '7': '੭',\n        '8': '੮',\n        '9': '੯',\n        '0': '੦'\n    },\n    numberMap = {\n        '੧': '1',\n        '੨': '2',\n        '੩': '3',\n        '੪': '4',\n        '੫': '5',\n        '੬': '6',\n        '੭': '7',\n        '੮': '8',\n        '੯': '9',\n        '੦': '0'\n    };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        monthsShort : 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n        weekdays : 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n        weekdaysShort : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin : 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm ਵਜੇ',\n            LTS : 'A h:mm:ss ਵਜੇ',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n        },\n        calendar : {\n            sameDay : '[ਅਜ] LT',\n            nextDay : '[ਕਲ] LT',\n            nextWeek : '[ਅਗਲਾ] dddd, LT',\n            lastDay : '[ਕਲ] LT',\n            lastWeek : '[ਪਿਛਲੇ] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s ਵਿੱਚ',\n            past : '%s ਪਿਛਲੇ',\n            s : 'ਕੁਝ ਸਕਿੰਟ',\n            ss : '%d ਸਕਿੰਟ',\n            m : 'ਇਕ ਮਿੰਟ',\n            mm : '%d ਮਿੰਟ',\n            h : 'ਇੱਕ ਘੰਟਾ',\n            hh : '%d ਘੰਟੇ',\n            d : 'ਇੱਕ ਦਿਨ',\n            dd : '%d ਦਿਨ',\n            M : 'ਇੱਕ ਮਹੀਨਾ',\n            MM : '%d ਮਹੀਨੇ',\n            y : 'ਇੱਕ ਸਾਲ',\n            yy : '%d ਸਾਲ'\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return paIn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n    function plural(n) {\n        return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix  ? 'godzina'  : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months : function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (format === '') {\n                // Hack: if format empty we know this is used to generate\n                // RegExp by moment. Give then back both valid forms of months\n                // in RegExp ready format.\n                return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort : 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin : 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : '%s temu',\n            s : 'kilka sekund',\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : '1 dzień',\n            dd : '%d dni',\n            M : 'miesiąc',\n            MM : translate,\n            y : 'rok',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var pt = moment.defineLocale('pt', {\n        months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return pt;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin : 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D [de] MMMM [de] YYYY',\n            LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return (this.day() === 0 || this.day() === 6) ?\n                    '[Último] dddd [às] LT' : // Saturday + Sunday\n                    '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'em %s',\n            past : 'há %s',\n            s : 'poucos segundos',\n            ss : '%d segundos',\n            m : 'um minuto',\n            mm : '%d minutos',\n            h : 'uma hora',\n            hh : '%d horas',\n            d : 'um dia',\n            dd : '%d dias',\n            M : 'um mês',\n            MM : '%d meses',\n            y : 'um ano',\n            yy : '%d anos'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal : '%dº'\n    });\n\n    return ptBr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                'ss': 'secunde',\n                'mm': 'minute',\n                'hh': 'ore',\n                'dd': 'zile',\n                'MM': 'luni',\n                'yy': 'ani'\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n        monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY H:mm',\n            LLLL : 'dddd, D MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'peste %s',\n            past : '%s în urmă',\n            s : 'câteva secunde',\n            ss : relativeTimeWithPlural,\n            m : 'un minut',\n            mm : relativeTimeWithPlural,\n            h : 'o oră',\n            hh : relativeTimeWithPlural,\n            d : 'o zi',\n            dd : relativeTimeWithPlural,\n            M : 'o lună',\n            MM : relativeTimeWithPlural,\n            y : 'un an',\n            yy : relativeTimeWithPlural\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return ro;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            'hh': 'час_часа_часов',\n            'dd': 'день_дня_дней',\n            'MM': 'месяц_месяца_месяцев',\n            'yy': 'год_года_лет'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months : {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n        },\n        monthsShort : {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n        },\n        weekdays : {\n            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n        },\n        weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse : monthsParse,\n        longMonthsParse : monthsParse,\n        shortMonthsParse : monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соотвествует только сокращённым формам\n        monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY г.',\n            LLL : 'D MMMM YYYY г., H:mm',\n            LLLL : 'dddd, D MMMM YYYY г., H:mm'\n        },\n        calendar : {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'через %s',\n            past : '%s назад',\n            s : 'несколько секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'час',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'месяц',\n            MM : relativeTimeWithPlural,\n            y : 'год',\n            yy : relativeTimeWithPlural\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM : function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ru;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوري',\n        'فيبروري',\n        'مارچ',\n        'اپريل',\n        'مئي',\n        'جون',\n        'جولاءِ',\n        'آگسٽ',\n        'سيپٽمبر',\n        'آڪٽوبر',\n        'نومبر',\n        'ڊسمبر'\n    ];\n    var days = [\n        'آچر',\n        'سومر',\n        'اڱارو',\n        'اربع',\n        'خميس',\n        'جمع',\n        'ڇنڇر'\n    ];\n\n    var sd = moment.defineLocale('sd', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[اڄ] LT',\n            nextDay : '[سڀاڻي] LT',\n            nextWeek : 'dddd [اڳين هفتي تي] LT',\n            lastDay : '[ڪالهه] LT',\n            lastWeek : '[گزريل هفتي] dddd [تي] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s پوء',\n            past : '%s اڳ',\n            s : 'چند سيڪنڊ',\n            ss : '%d سيڪنڊ',\n            m : 'هڪ منٽ',\n            mm : '%d منٽ',\n            h : 'هڪ ڪلاڪ',\n            hh : '%d ڪلاڪ',\n            d : 'هڪ ڏينهن',\n            dd : '%d ڏينهن',\n            M : 'هڪ مهينو',\n            MM : '%d مهينا',\n            y : 'هڪ سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sd;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var se = moment.defineLocale('se', {\n        months : 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n        monthsShort : 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays : 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n        weekdaysShort : 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin : 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'MMMM D. [b.] YYYY',\n            LLL : 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL : 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n        },\n        calendar : {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s geažes',\n            past : 'maŋit %s',\n            s : 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m : 'okta minuhta',\n            mm : '%d minuhtat',\n            h : 'okta diimmu',\n            hh : '%d diimmut',\n            d : 'okta beaivi',\n            dd : '%d beaivvit',\n            M : 'okta mánnu',\n            MM : '%d mánut',\n            y : 'okta jahki',\n            yy : '%d jagit'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return se;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months : 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n        monthsShort : 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n        weekdays : 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n        weekdaysShort : 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin : 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'a h:mm',\n            LTS : 'a h:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY MMMM D',\n            LLL : 'YYYY MMMM D, a h:mm',\n            LLLL : 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n        },\n        calendar : {\n            sameDay : '[අද] LT[ට]',\n            nextDay : '[හෙට] LT[ට]',\n            nextWeek : 'dddd LT[ට]',\n            lastDay : '[ඊයේ] LT[ට]',\n            lastWeek : '[පසුගිය] dddd LT[ට]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%sකින්',\n            past : '%sකට පෙර',\n            s : 'තත්පර කිහිපය',\n            ss : 'තත්පර %d',\n            m : 'මිනිත්තුව',\n            mm : 'මිනිත්තු %d',\n            h : 'පැය',\n            hh : 'පැය %d',\n            d : 'දිනය',\n            dd : 'දින %d',\n            M : 'මාසය',\n            MM : 'මාස %d',\n            y : 'වසර',\n            yy : 'වසර %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal : function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse : /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM : function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        }\n    });\n\n    return si;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return (n > 1) && (n < 5);\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':  // a few seconds / in a few seconds / a few seconds ago\n                return (withoutSuffix || isFuture) ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n                break;\n            case 'm':  // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : (isFuture ? 'minútu' : 'minútou');\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n                break;\n            case 'h':  // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : (isFuture ? 'hodinu' : 'hodinou');\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n                break;\n            case 'd':  // a day / in a day / a day ago\n                return (withoutSuffix || isFuture) ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n                break;\n            case 'M':  // a month / in a month / a month ago\n                return (withoutSuffix || isFuture) ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n                break;\n            case 'y':  // a year / in a year / a year ago\n                return (withoutSuffix || isFuture) ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n                break;\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months : months,\n        monthsShort : monthsShort,\n        weekdays : 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort : 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin : 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat : {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past : 'pred %s',\n            s : translate,\n            ss : translate,\n            m : translate,\n            mm : translate,\n            h : translate,\n            hh : translate,\n            d : translate,\n            dd : translate,\n            M : translate,\n            MM : translate,\n            y : translate,\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sk;\n\n})));\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nimport { DOM, FEATURE } from 'aurelia-pal';\n\nvar stackSeparator = '\\nEnqueued in TaskQueue by:\\n';\nvar microStackSeparator = '\\nEnqueued in MicroTaskQueue by:\\n';\n\nfunction makeRequestFlushFromMutationObserver(flush) {\n  var observer = DOM.createMutationObserver(flush);\n  var val = 'a';\n  var node = DOM.createTextNode('a');\n  var values = Object.create(null);\n  values.a = 'b';\n  values.b = 'a';\n  observer.observe(node, { characterData: true });\n  return function requestFlush() {\n    node.data = val = values[val];\n  };\n}\n\nfunction makeRequestFlushFromTimer(flush) {\n  return function requestFlush() {\n    var timeoutHandle = setTimeout(handleFlushTimer, 0);\n\n    var intervalHandle = setInterval(handleFlushTimer, 50);\n    function handleFlushTimer() {\n      clearTimeout(timeoutHandle);\n      clearInterval(intervalHandle);\n      flush();\n    }\n  };\n}\n\nfunction onError(error, task, longStacks) {\n  if (longStacks && task.stack && (typeof error === 'undefined' ? 'undefined' : _typeof(error)) === 'object' && error !== null) {\n    error.stack = filterFlushStack(error.stack) + task.stack;\n  }\n\n  if ('onError' in task) {\n    task.onError(error);\n  } else {\n    setTimeout(function () {\n      throw error;\n    }, 0);\n  }\n}\n\nexport var TaskQueue = function () {\n  function TaskQueue() {\n    var _this = this;\n\n    \n\n    this.flushing = false;\n    this.longStacks = false;\n\n    this.microTaskQueue = [];\n    this.microTaskQueueCapacity = 1024;\n    this.taskQueue = [];\n\n    if (FEATURE.mutationObserver) {\n      this.requestFlushMicroTaskQueue = makeRequestFlushFromMutationObserver(function () {\n        return _this.flushMicroTaskQueue();\n      });\n    } else {\n      this.requestFlushMicroTaskQueue = makeRequestFlushFromTimer(function () {\n        return _this.flushMicroTaskQueue();\n      });\n    }\n\n    this.requestFlushTaskQueue = makeRequestFlushFromTimer(function () {\n      return _this.flushTaskQueue();\n    });\n  }\n\n  TaskQueue.prototype._flushQueue = function _flushQueue(queue, capacity) {\n    var index = 0;\n    var task = void 0;\n\n    try {\n      this.flushing = true;\n      while (index < queue.length) {\n        task = queue[index];\n        if (this.longStacks) {\n          this.stack = typeof task.stack === 'string' ? task.stack : undefined;\n        }\n        task.call();\n        index++;\n\n        if (index > capacity) {\n          for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n            queue[scan] = queue[scan + index];\n          }\n\n          queue.length -= index;\n          index = 0;\n        }\n      }\n    } catch (error) {\n      onError(error, task, this.longStacks);\n    } finally {\n      this.flushing = false;\n    }\n  };\n\n  TaskQueue.prototype.queueMicroTask = function queueMicroTask(task) {\n    if (this.microTaskQueue.length < 1) {\n      this.requestFlushMicroTaskQueue();\n    }\n\n    if (this.longStacks) {\n      task.stack = this.prepareQueueStack(microStackSeparator);\n    }\n\n    this.microTaskQueue.push(task);\n  };\n\n  TaskQueue.prototype.queueTask = function queueTask(task) {\n    if (this.taskQueue.length < 1) {\n      this.requestFlushTaskQueue();\n    }\n\n    if (this.longStacks) {\n      task.stack = this.prepareQueueStack(stackSeparator);\n    }\n\n    this.taskQueue.push(task);\n  };\n\n  TaskQueue.prototype.flushTaskQueue = function flushTaskQueue() {\n    var queue = this.taskQueue;\n    this.taskQueue = [];\n    this._flushQueue(queue, Number.MAX_VALUE);\n  };\n\n  TaskQueue.prototype.flushMicroTaskQueue = function flushMicroTaskQueue() {\n    var queue = this.microTaskQueue;\n    this._flushQueue(queue, this.microTaskQueueCapacity);\n    queue.length = 0;\n  };\n\n  TaskQueue.prototype.prepareQueueStack = function prepareQueueStack(separator) {\n    var stack = separator + filterQueueStack(captureStack());\n\n    if (typeof this.stack === 'string') {\n      stack = filterFlushStack(stack) + this.stack;\n    }\n\n    return stack;\n  };\n\n  return TaskQueue;\n}();\n\nfunction captureStack() {\n  var error = new Error();\n\n  if (error.stack) {\n    return error.stack;\n  }\n\n  try {\n    throw error;\n  } catch (e) {\n    return e.stack;\n  }\n}\n\nfunction filterQueueStack(stack) {\n  return stack.replace(/^[\\s\\S]*?\\bqueue(Micro)?Task\\b[^\\n]*\\n/, '');\n}\n\nfunction filterFlushStack(stack) {\n  var index = stack.lastIndexOf('flushMicroTaskQueue');\n\n  if (index < 0) {\n    index = stack.lastIndexOf('flushTaskQueue');\n    if (index < 0) {\n      return stack;\n    }\n  }\n\n  index = stack.lastIndexOf('\\n', index);\n\n  return index < 0 ? stack : stack.substr(0, index);\n}","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months : 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort : 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin : 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM YYYY',\n            LLL : 'D. MMMM YYYY H:mm',\n            LLLL : 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar : {\n            sameDay  : '[danes ob] LT',\n            nextDay  : '[jutri ob] LT',\n\n            nextWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay  : '[včeraj ob] LT',\n            lastWeek : function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'čez %s',\n            past   : 'pred %s',\n            s      : processRelativeTime,\n            ss     : processRelativeTime,\n            m      : processRelativeTime,\n            mm     : processRelativeTime,\n            h      : processRelativeTime,\n            hh     : processRelativeTime,\n            d      : processRelativeTime,\n            dd     : processRelativeTime,\n            M      : processRelativeTime,\n            MM     : processRelativeTime,\n            y      : processRelativeTime,\n            yy     : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sq = moment.defineLocale('sq', {\n        months : 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n        monthsShort : 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays : 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n        weekdaysShort : 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin : 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem : function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Sot në] LT',\n            nextDay : '[Nesër në] LT',\n            nextWeek : 'dddd [në] LT',\n            lastDay : '[Dje në] LT',\n            lastWeek : 'dddd [e kaluar në] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'në %s',\n            past : '%s më parë',\n            s : 'disa sekonda',\n            ss : '%d sekonda',\n            m : 'një minutë',\n            mm : '%d minuta',\n            h : 'një orë',\n            hh : '%d orë',\n            d : 'një ditë',\n            dd : '%d ditë',\n            M : 'një muaj',\n            MM : '%d muaj',\n            y : 'një vit',\n            yy : '%d vite'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sq;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jedne minute'],\n            mm: ['minut', 'minute', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            yy: ['godina', 'godine', 'godina']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay  : '[juče u] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'za %s',\n            past   : 'pre %s',\n            s      : 'nekoliko sekundi',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'dan',\n            dd     : translator.translate,\n            M      : 'mesec',\n            MM     : translator.translate,\n            y      : 'godinu',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var translator = {\n        words: { //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једне минуте'],\n            mm: ['минут', 'минуте', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            dd: ['дан', 'дана', 'дана'],\n            MM: ['месец', 'месеца', 'месеци'],\n            yy: ['година', 'године', 'година']\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n            }\n        }\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS : 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm'\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay  : '[јуче у] LT',\n            lastWeek : function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT'\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past   : 'пре %s',\n            s      : 'неколико секунди',\n            ss     : translator.translate,\n            m      : translator.translate,\n            mm     : translator.translate,\n            h      : translator.translate,\n            hh     : translator.translate,\n            d      : 'дан',\n            dd     : translator.translate,\n            M      : 'месец',\n            MM     : translator.translate,\n            y      : 'годину',\n            yy     : translator.translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return srCyrl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ss = moment.defineLocale('ss', {\n        months : \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n        monthsShort : 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays : 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n        weekdaysShort : 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin : 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Namuhla nga] LT',\n            nextDay : '[Kusasa nga] LT',\n            nextWeek : 'dddd [nga] LT',\n            lastDay : '[Itolo nga] LT',\n            lastWeek : 'dddd [leliphelile] [nga] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'nga %s',\n            past : 'wenteka nga %s',\n            s : 'emizuzwana lomcane',\n            ss : '%d mzuzwana',\n            m : 'umzuzu',\n            mm : '%d emizuzu',\n            h : 'lihora',\n            hh : '%d emahora',\n            d : 'lilanga',\n            dd : '%d emalanga',\n            M : 'inyanga',\n            MM : '%d tinyanga',\n            y : 'umnyaka',\n            yy : '%d iminyaka'\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : '%d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ss;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sv = moment.defineLocale('sv', {\n        months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n        monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY-MM-DD',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY [kl.] HH:mm',\n            LLLL : 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'om %s',\n            past : 'för %s sedan',\n            s : 'några sekunder',\n            ss : '%d sekunder',\n            m : 'en minut',\n            mm : '%d minuter',\n            h : 'en timme',\n            hh : '%d timmar',\n            d : 'en dag',\n            dd : '%d dagar',\n            M : 'en månad',\n            MM : '%d månader',\n            y : 'ett år',\n            yy : '%d år'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'e' :\n                (b === 1) ? 'a' :\n                (b === 2) ? 'a' :\n                (b === 3) ? 'e' : 'e';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return sv;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var sw = moment.defineLocale('sw', {\n        months : 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n        monthsShort : 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n        weekdaysShort : 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin : 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[leo saa] LT',\n            nextDay : '[kesho saa] LT',\n            nextWeek : '[wiki ijayo] dddd [saat] LT',\n            lastDay : '[jana] LT',\n            lastWeek : '[wiki iliyopita] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s baadaye',\n            past : 'tokea %s',\n            s : 'hivi punde',\n            ss : 'sekunde %d',\n            m : 'dakika moja',\n            mm : 'dakika %d',\n            h : 'saa limoja',\n            hh : 'masaa %d',\n            d : 'siku moja',\n            dd : 'masiku %d',\n            M : 'mwezi mmoja',\n            MM : 'miezi %d',\n            y : 'mwaka mmoja',\n            yy : 'miaka %d'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return sw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '௧',\n        '2': '௨',\n        '3': '௩',\n        '4': '௪',\n        '5': '௫',\n        '6': '௬',\n        '7': '௭',\n        '8': '௮',\n        '9': '௯',\n        '0': '௦'\n    }, numberMap = {\n        '௧': '1',\n        '௨': '2',\n        '௩': '3',\n        '௪': '4',\n        '௫': '5',\n        '௬': '6',\n        '௭': '7',\n        '௮': '8',\n        '௯': '9',\n        '௦': '0'\n    };\n\n    var ta = moment.defineLocale('ta', {\n        months : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        monthsShort : 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n        weekdays : 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n        weekdaysShort : 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n        weekdaysMin : 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, HH:mm',\n            LLLL : 'dddd, D MMMM YYYY, HH:mm'\n        },\n        calendar : {\n            sameDay : '[இன்று] LT',\n            nextDay : '[நாளை] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[நேற்று] LT',\n            lastWeek : '[கடந்த வாரம்] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s இல்',\n            past : '%s முன்',\n            s : 'ஒரு சில விநாடிகள்',\n            ss : '%d விநாடிகள்',\n            m : 'ஒரு நிமிடம்',\n            mm : '%d நிமிடங்கள்',\n            h : 'ஒரு மணி நேரம்',\n            hh : '%d மணி நேரம்',\n            d : 'ஒரு நாள்',\n            dd : '%d நாட்கள்',\n            M : 'ஒரு மாதம்',\n            MM : '%d மாதங்கள்',\n            y : 'ஒரு வருடம்',\n            yy : '%d ஆண்டுகள்'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal : function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை';  // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return ta;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var te = moment.defineLocale('te', {\n        months : 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n        monthsShort : 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n        weekdaysShort : 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin : 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat : {\n            LT : 'A h:mm',\n            LTS : 'A h:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY, A h:mm',\n            LLLL : 'dddd, D MMMM YYYY, A h:mm'\n        },\n        calendar : {\n            sameDay : '[నేడు] LT',\n            nextDay : '[రేపు] LT',\n            nextWeek : 'dddd, LT',\n            lastDay : '[నిన్న] LT',\n            lastWeek : '[గత] dddd, LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s లో',\n            past : '%s క్రితం',\n            s : 'కొన్ని క్షణాలు',\n            ss : '%d సెకన్లు',\n            m : 'ఒక నిమిషం',\n            mm : '%d నిమిషాలు',\n            h : 'ఒక గంట',\n            hh : '%d గంటలు',\n            d : 'ఒక రోజు',\n            dd : '%d రోజులు',\n            M : 'ఒక నెల',\n            MM : '%d నెలలు',\n            y : 'ఒక సంవత్సరం',\n            yy : '%d సంవత్సరాలు'\n        },\n        dayOfMonthOrdinalParse : /\\d{1,2}వ/,\n        ordinal : '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return te;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tet = moment.defineLocale('tet', {\n        months : 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays : 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort : 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin : 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'iha %s',\n            past : '%s liuba',\n            s : 'minutu balun',\n            ss : 'minutu %d',\n            m : 'minutu ida',\n            mm : 'minutu %d',\n            h : 'oras ida',\n            hh : 'oras %d',\n            d : 'loron ida',\n            dd : 'loron %d',\n            M : 'fulan ida',\n            MM : 'fulan %d',\n            y : 'tinan ida',\n            yy : 'tinan %d'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tet;\n\n})));\n","\nexport function AggregateError(message, innerError, skipIfAlreadyAggregate) {\n  if (innerError) {\n    if (innerError.innerError && skipIfAlreadyAggregate) {\n      return innerError;\n    }\n\n    var separator = '\\n------------------------------------------------\\n';\n\n    message += separator + 'Inner Error:\\n';\n\n    if (typeof innerError === 'string') {\n      message += 'Message: ' + innerError;\n    } else {\n      if (innerError.message) {\n        message += 'Message: ' + innerError.message;\n      } else {\n        message += 'Unknown Inner Error Type. Displaying Inner Error as JSON:\\n ' + JSON.stringify(innerError, null, '  ');\n      }\n\n      if (innerError.stack) {\n        message += '\\nInner Error Stack:\\n' + innerError.stack;\n        message += '\\nEnd Inner Error Stack';\n      }\n    }\n\n    message += separator;\n  }\n\n  var e = new Error(message);\n  if (innerError) {\n    e.innerError = innerError;\n  }\n\n  return e;\n}\n\nexport var FEATURE = {};\n\nexport var PLATFORM = {\n  noop: function noop() {},\n  eachModule: function eachModule() {},\n  moduleName: function (_moduleName) {\n    function moduleName(_x) {\n      return _moduleName.apply(this, arguments);\n    }\n\n    moduleName.toString = function () {\n      return _moduleName.toString();\n    };\n\n    return moduleName;\n  }(function (moduleName) {\n    return moduleName;\n  })\n};\n\nPLATFORM.global = function () {\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n\n  return new Function('return this')();\n}();\n\nexport var DOM = {};\nexport var isInitialized = false;\n\nexport function initializePAL(callback) {\n  if (isInitialized) {\n    return;\n  }\n  isInitialized = true;\n  if (typeof Object.getPropertyDescriptor !== 'function') {\n    Object.getPropertyDescriptor = function (subject, name) {\n      var pd = Object.getOwnPropertyDescriptor(subject, name);\n      var proto = Object.getPrototypeOf(subject);\n      while (typeof pd === 'undefined' && proto !== null) {\n        pd = Object.getOwnPropertyDescriptor(proto, name);\n        proto = Object.getPrototypeOf(proto);\n      }\n      return pd;\n    };\n  }\n\n  callback(PLATFORM, FEATURE, DOM);\n}\nexport function reset() {\n  isInitialized = false;\n}","var store = require('../internals/shared')('wks');\nvar uid = require('../internals/uid');\nvar Symbol = require('../internals/global').Symbol;\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = function (name) {\n  return store[name] || (store[name] = NATIVE_SYMBOL && Symbol[name]\n    || (NATIVE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум'\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n        weekdaysShort : 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin : 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Имрӯз соати] LT',\n            nextDay : '[Пагоҳ соати] LT',\n            lastDay : '[Дирӯз соати] LT',\n            nextWeek : 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek : 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'баъди %s',\n            past : '%s пеш',\n            s : 'якчанд сония',\n            m : 'як дақиқа',\n            mm : '%d дақиқа',\n            h : 'як соат',\n            hh : '%d соат',\n            d : 'як рӯз',\n            dd : '%d рӯз',\n            M : 'як моҳ',\n            MM : '%d моҳ',\n            y : 'як сол',\n            yy : '%d сол'\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 1th is the first week of the year.\n        }\n    });\n\n    return tg;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var th = moment.defineLocale('th', {\n        months : 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n        monthsShort : 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n        monthsParseExact: true,\n        weekdays : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort : 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin : 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'H:mm',\n            LTS : 'H:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY เวลา H:mm',\n            LLLL : 'วันddddที่ D MMMM YYYY เวลา H:mm'\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar : {\n            sameDay : '[วันนี้ เวลา] LT',\n            nextDay : '[พรุ่งนี้ เวลา] LT',\n            nextWeek : 'dddd[หน้า เวลา] LT',\n            lastDay : '[เมื่อวานนี้ เวลา] LT',\n            lastWeek : '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'อีก %s',\n            past : '%sที่แล้ว',\n            s : 'ไม่กี่วินาที',\n            ss : '%d วินาที',\n            m : '1 นาที',\n            mm : '%d นาที',\n            h : '1 ชั่วโมง',\n            hh : '%d ชั่วโมง',\n            d : '1 วัน',\n            dd : '%d วัน',\n            M : '1 เดือน',\n            MM : '%d เดือน',\n            y : '1 ปี',\n            yy : '%d ปี'\n        }\n    });\n\n    return th;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months : 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n        monthsShort : 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays : 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n        weekdaysShort : 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin : 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'MM/D/YYYY',\n            LL : 'MMMM D, YYYY',\n            LLL : 'MMMM D, YYYY HH:mm',\n            LLLL : 'dddd, MMMM DD, YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'sa loob ng %s',\n            past : '%s ang nakalipas',\n            s : 'ilang segundo',\n            ss : '%d segundo',\n            m : 'isang minuto',\n            mm : '%d minuto',\n            h : 'isang oras',\n            hh : '%d oras',\n            d : 'isang araw',\n            dd : '%d araw',\n            M : 'isang buwan',\n            MM : '%d buwan',\n            y : 'isang taon',\n            yy : '%d taon'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlPh;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'leS' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'waQ' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'nem' :\n        time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time = (output.indexOf('jaj') !== -1) ?\n        time.slice(0, -3) + 'Hu’' :\n        (output.indexOf('jar') !== -1) ?\n        time.slice(0, -3) + 'wen' :\n        (output.indexOf('DIS') !== -1) ?\n        time.slice(0, -3) + 'ben' :\n        time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n        ten = Math.floor((number % 100) / 10),\n        one = number % 10,\n        word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += ((word !== '') ? ' ' : '') + numbersNouns[one];\n        }\n        return (word === '') ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months : 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n        monthsShort : 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysShort : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin : 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : translateFuture,\n            past : translatePast,\n            s : 'puS lup',\n            ss : translate,\n            m : 'wa’ tup',\n            mm : translate,\n            h : 'wa’ rep',\n            hh : translate,\n            d : 'wa’ jaj',\n            dd : translate,\n            M : 'wa’ jar',\n            MM : translate,\n            y : 'wa’ DIS',\n            yy : translate\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return tlh;\n\n})));\n","\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    var suffixes = {\n        1: '\\'inci',\n        5: '\\'inci',\n        8: '\\'inci',\n        70: '\\'inci',\n        80: '\\'inci',\n        2: '\\'nci',\n        7: '\\'nci',\n        20: '\\'nci',\n        50: '\\'nci',\n        3: '\\'üncü',\n        4: '\\'üncü',\n        100: '\\'üncü',\n        6: '\\'ncı',\n        9: '\\'uncu',\n        10: '\\'uncu',\n        30: '\\'uncu',\n        60: '\\'ıncı',\n        90: '\\'ıncı'\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months : 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n        monthsShort : 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays : 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n        weekdaysShort : 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n        weekdaysMin : 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[bugün saat] LT',\n            nextDay : '[yarın saat] LT',\n            nextWeek : '[gelecek] dddd [saat] LT',\n            lastDay : '[dün] LT',\n            lastWeek : '[geçen] dddd [saat] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s sonra',\n            past : '%s önce',\n            s : 'birkaç saniye',\n            ss : '%d saniye',\n            m : 'bir dakika',\n            mm : '%d dakika',\n            h : 'bir saat',\n            hh : '%d saat',\n            d : 'bir gün',\n            dd : '%d gün',\n            M : 'bir ay',\n            MM : '%d ay',\n            y : 'bir yıl',\n            yy : '%d yıl'\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {  // special case for zero\n                        return number + '\\'ıncı';\n                    }\n                    var a = number % 10,\n                        b = number % 100 - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return tr;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months : 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n        monthsShort : 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays : 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort : 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin : 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat : {\n            LT : 'HH.mm',\n            LTS : 'HH.mm.ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D. MMMM [dallas] YYYY',\n            LLL : 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL : 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM : function (input) {\n            return 'd\\'o' === input.toLowerCase();\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'd\\'o' : 'D\\'O';\n            } else {\n                return isLower ? 'd\\'a' : 'D\\'A';\n            }\n        },\n        calendar : {\n            sameDay : '[oxhi à] LT',\n            nextDay : '[demà à] LT',\n            nextWeek : 'dddd [à] LT',\n            lastDay : '[ieiri à] LT',\n            lastWeek : '[sür el] dddd [lasteu à] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'osprei %s',\n            past : 'ja%s',\n            s : processRelativeTime,\n            ss : processRelativeTime,\n            m : processRelativeTime,\n            mm : processRelativeTime,\n            h : processRelativeTime,\n            hh : processRelativeTime,\n            d : processRelativeTime,\n            dd : processRelativeTime,\n            M : processRelativeTime,\n            MM : processRelativeTime,\n            y : processRelativeTime,\n            yy : processRelativeTime\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal : '%d.',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            's': ['viensas secunds', '\\'iensas secunds'],\n            'ss': [number + ' secunds', '' + number + ' secunds'],\n            'm': ['\\'n míut', '\\'iens míut'],\n            'mm': [number + ' míuts', '' + number + ' míuts'],\n            'h': ['\\'n þora', '\\'iensa þora'],\n            'hh': [number + ' þoras', '' + number + ' þoras'],\n            'd': ['\\'n ziua', '\\'iensa ziua'],\n            'dd': [number + ' ziuas', '' + number + ' ziuas'],\n            'M': ['\\'n mes', '\\'iens mes'],\n            'MM': [number + ' mesen', '' + number + ' mesen'],\n            'y': ['\\'n ar', '\\'iens ar'],\n            'yy': [number + ' ars', '' + number + ' ars']\n        };\n        return isFuture ? format[key][0] : (withoutSuffix ? format[key][0] : format[key][1]);\n    }\n\n    return tzl;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tzm = moment.defineLocale('tzm', {\n        months : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        monthsShort : 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n        weekdays : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin : 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past : 'ⵢⴰⵏ %s',\n            s : 'ⵉⵎⵉⴽ',\n            ss : '%d ⵉⵎⵉⴽ',\n            m : 'ⵎⵉⵏⵓⴺ',\n            mm : '%d ⵎⵉⵏⵓⴺ',\n            h : 'ⵙⴰⵄⴰ',\n            hh : '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d : 'ⴰⵙⵙ',\n            dd : '%d oⵙⵙⴰⵏ',\n            M : 'ⴰⵢoⵓⵔ',\n            MM : '%d ⵉⵢⵢⵉⵔⵏ',\n            y : 'ⴰⵙⴳⴰⵙ',\n            yy : '%d ⵉⵙⴳⴰⵙⵏ'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return tzm;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        monthsShort : 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n        weekdays : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin : 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'dadkh s yan %s',\n            past : 'yan %s',\n            s : 'imik',\n            ss : '%d imik',\n            m : 'minuḍ',\n            mm : '%d minuḍ',\n            h : 'saɛa',\n            hh : '%d tassaɛin',\n            d : 'ass',\n            dd : '%d ossan',\n            M : 'ayowr',\n            MM : '%d iyyirn',\n            y : 'asgas',\n            yy : '%d isgasn'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return tzmLatn;\n\n})));\n","//! moment.js language configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل'\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7 // The week that contains Jan 1st is the first week of the year.\n        }\n    });\n\n    return ugCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            'dd': 'день_дні_днів',\n            'MM': 'місяць_місяці_місяців',\n            'yy': 'рік_роки_років'\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        }\n        else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        }\n        else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n            'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n            'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n            'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n        };\n\n        if (m === true) {\n            return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        var nounCase = (/(\\[[ВвУу]\\]) ?dddd/).test(format) ?\n            'accusative' :\n            ((/\\[?(?:минулої|наступної)? ?\\] ?dddd/).test(format) ?\n                'genitive' :\n                'nominative');\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months : {\n            'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n            'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n        },\n        monthsShort : 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n        weekdays : weekdaysCaseReplace,\n        weekdaysShort : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin : 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD.MM.YYYY',\n            LL : 'D MMMM YYYY р.',\n            LLL : 'D MMMM YYYY р., HH:mm',\n            LLLL : 'dddd, D MMMM YYYY р., HH:mm'\n        },\n        calendar : {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'за %s',\n            past : '%s тому',\n            s : 'декілька секунд',\n            ss : relativeTimeWithPlural,\n            m : relativeTimeWithPlural,\n            mm : relativeTimeWithPlural,\n            h : 'годину',\n            hh : relativeTimeWithPlural,\n            d : 'день',\n            dd : relativeTimeWithPlural,\n            M : 'місяць',\n            MM : relativeTimeWithPlural,\n            y : 'рік',\n            yy : relativeTimeWithPlural\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return uk;\n\n})));\n","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n\n\nimport { relativeToFile } from 'aurelia-path';\nimport { Origin } from 'aurelia-metadata';\n\nexport var TemplateDependency = function TemplateDependency(src, name) {\n  \n\n  this.src = src;\n  this.name = name;\n};\n\nexport var TemplateRegistryEntry = function () {\n  function TemplateRegistryEntry(address) {\n    \n\n    this.templateIsLoaded = false;\n    this.factoryIsReady = false;\n    this.resources = null;\n    this.dependencies = null;\n\n    this.address = address;\n    this.onReady = null;\n    this._template = null;\n    this._factory = null;\n  }\n\n  TemplateRegistryEntry.prototype.addDependency = function addDependency(src, name) {\n    var finalSrc = typeof src === 'string' ? relativeToFile(src, this.address) : Origin.get(src).moduleId;\n\n    this.dependencies.push(new TemplateDependency(finalSrc, name));\n  };\n\n  _createClass(TemplateRegistryEntry, [{\n    key: 'template',\n    get: function get() {\n      return this._template;\n    },\n    set: function set(value) {\n      var address = this.address;\n      var requires = void 0;\n      var current = void 0;\n      var src = void 0;\n      var dependencies = void 0;\n\n      this._template = value;\n      this.templateIsLoaded = true;\n\n      requires = value.content.querySelectorAll('require');\n      dependencies = this.dependencies = new Array(requires.length);\n\n      for (var i = 0, ii = requires.length; i < ii; ++i) {\n        current = requires[i];\n        src = current.getAttribute('from');\n\n        if (!src) {\n          throw new Error('<require> element in ' + address + ' has no \"from\" attribute.');\n        }\n\n        dependencies[i] = new TemplateDependency(relativeToFile(src, address), current.getAttribute('as'));\n\n        if (current.parentNode) {\n          current.parentNode.removeChild(current);\n        }\n      }\n    }\n  }, {\n    key: 'factory',\n    get: function get() {\n      return this._factory;\n    },\n    set: function set(value) {\n      this._factory = value;\n      this.factoryIsReady = true;\n    }\n  }]);\n\n  return TemplateRegistryEntry;\n}();\n\nexport var Loader = function () {\n  function Loader() {\n    \n\n    this.templateRegistry = {};\n  }\n\n  Loader.prototype.map = function map(id, source) {\n    throw new Error('Loaders must implement map(id, source).');\n  };\n\n  Loader.prototype.normalizeSync = function normalizeSync(moduleId, relativeTo) {\n    throw new Error('Loaders must implement normalizeSync(moduleId, relativeTo).');\n  };\n\n  Loader.prototype.normalize = function normalize(moduleId, relativeTo) {\n    throw new Error('Loaders must implement normalize(moduleId: string, relativeTo: string): Promise<string>.');\n  };\n\n  Loader.prototype.loadModule = function loadModule(id) {\n    throw new Error('Loaders must implement loadModule(id).');\n  };\n\n  Loader.prototype.loadAllModules = function loadAllModules(ids) {\n    throw new Error('Loader must implement loadAllModules(ids).');\n  };\n\n  Loader.prototype.loadTemplate = function loadTemplate(url) {\n    throw new Error('Loader must implement loadTemplate(url).');\n  };\n\n  Loader.prototype.loadText = function loadText(url) {\n    throw new Error('Loader must implement loadText(url).');\n  };\n\n  Loader.prototype.applyPluginToUrl = function applyPluginToUrl(url, pluginName) {\n    throw new Error('Loader must implement applyPluginToUrl(url, pluginName).');\n  };\n\n  Loader.prototype.addPlugin = function addPlugin(pluginName, implementation) {\n    throw new Error('Loader must implement addPlugin(pluginName, implementation).');\n  };\n\n  Loader.prototype.getOrCreateTemplateRegistryEntry = function getOrCreateTemplateRegistryEntry(address) {\n    return this.templateRegistry[address] || (this.templateRegistry[address] = new TemplateRegistryEntry(address));\n  };\n\n  return Loader;\n}();","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var months = [\n        'جنوری',\n        'فروری',\n        'مارچ',\n        'اپریل',\n        'مئی',\n        'جون',\n        'جولائی',\n        'اگست',\n        'ستمبر',\n        'اکتوبر',\n        'نومبر',\n        'دسمبر'\n    ];\n    var days = [\n        'اتوار',\n        'پیر',\n        'منگل',\n        'بدھ',\n        'جمعرات',\n        'جمعہ',\n        'ہفتہ'\n    ];\n\n    var ur = moment.defineLocale('ur', {\n        months : months,\n        monthsShort : months,\n        weekdays : days,\n        weekdaysShort : days,\n        weekdaysMin : days,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd، D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /صبح|شام/,\n        isPM : function (input) {\n            return 'شام' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar : {\n            sameDay : '[آج بوقت] LT',\n            nextDay : '[کل بوقت] LT',\n            nextWeek : 'dddd [بوقت] LT',\n            lastDay : '[گذشتہ روز بوقت] LT',\n            lastWeek : '[گذشتہ] dddd [بوقت] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : '%s بعد',\n            past : '%s قبل',\n            s : 'چند سیکنڈ',\n            ss : '%d سیکنڈ',\n            m : 'ایک منٹ',\n            mm : '%d منٹ',\n            h : 'ایک گھنٹہ',\n            hh : '%d گھنٹے',\n            d : 'ایک دن',\n            dd : '%d دن',\n            M : 'ایک ماہ',\n            MM : '%d ماہ',\n            y : 'ایک سال',\n            yy : '%d سال'\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return ur;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var uz = moment.defineLocale('uz', {\n        months : 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n        monthsShort : 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays : 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort : 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin : 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Бугун соат] LT [да]',\n            nextDay : '[Эртага] LT [да]',\n            nextWeek : 'dddd [куни соат] LT [да]',\n            lastDay : '[Кеча соат] LT [да]',\n            lastWeek : '[Утган] dddd [куни соат] LT [да]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Якин %s ичида',\n            past : 'Бир неча %s олдин',\n            s : 'фурсат',\n            ss : '%d фурсат',\n            m : 'бир дакика',\n            mm : '%d дакика',\n            h : 'бир соат',\n            hh : '%d соат',\n            d : 'бир кун',\n            dd : '%d кун',\n            M : 'бир ой',\n            MM : '%d ой',\n            y : 'бир йил',\n            yy : '%d йил'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return uz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months : 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n        monthsShort : 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays : 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n        weekdaysShort : 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin : 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'D MMMM YYYY, dddd HH:mm'\n        },\n        calendar : {\n            sameDay : '[Bugun soat] LT [da]',\n            nextDay : '[Ertaga] LT [da]',\n            nextWeek : 'dddd [kuni soat] LT [da]',\n            lastDay : '[Kecha soat] LT [da]',\n            lastWeek : '[O\\'tgan] dddd [kuni soat] LT [da]',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'Yaqin %s ichida',\n            past : 'Bir necha %s oldin',\n            s : 'soniya',\n            ss : '%d soniya',\n            m : 'bir daqiqa',\n            mm : '%d daqiqa',\n            h : 'bir soat',\n            hh : '%d soat',\n            d : 'bir kun',\n            dd : '%d kun',\n            M : 'bir oy',\n            MM : '%d oy',\n            y : 'bir yil',\n            yy : '%d yil'\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 7  // The week that contains Jan 7th is the first week of the year.\n        }\n    });\n\n    return uzLatn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var vi = moment.defineLocale('vi', {\n        months : 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n        monthsShort : 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n        weekdaysShort : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin : 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact : true,\n        meridiemParse: /sa|ch/i,\n        isPM : function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM [năm] YYYY',\n            LLL : 'D MMMM [năm] YYYY HH:mm',\n            LLLL : 'dddd, D MMMM [năm] YYYY HH:mm',\n            l : 'DD/M/YYYY',\n            ll : 'D MMM YYYY',\n            lll : 'D MMM YYYY HH:mm',\n            llll : 'ddd, D MMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần rồi lúc] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : '%s tới',\n            past : '%s trước',\n            s : 'vài giây',\n            ss : '%d giây' ,\n            m : 'một phút',\n            mm : '%d phút',\n            h : 'một giờ',\n            hh : '%d giờ',\n            d : 'một ngày',\n            dd : '%d ngày',\n            M : 'một tháng',\n            MM : '%d tháng',\n            y : 'một năm',\n            yy : '%d năm'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal : function (number) {\n            return number;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return vi;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months : 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n        monthsShort : 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n        monthsParseExact : true,\n        weekdays : 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n        weekdaysShort : 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin : 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[T~ódá~ý át] LT',\n            nextDay : '[T~ómó~rró~w át] LT',\n            nextWeek : 'dddd [át] LT',\n            lastDay : '[Ý~ést~érdá~ý át] LT',\n            lastWeek : '[L~ást] dddd [át] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'í~ñ %s',\n            past : '%s á~gó',\n            s : 'á ~féw ~sécó~ñds',\n            ss : '%d s~écóñ~ds',\n            m : 'á ~míñ~úté',\n            mm : '%d m~íñú~tés',\n            h : 'á~ñ hó~úr',\n            hh : '%d h~óúrs',\n            d : 'á ~dáý',\n            dd : '%d d~áýs',\n            M : 'á ~móñ~th',\n            MM : '%d m~óñt~hs',\n            y : 'á ~ýéár',\n            yy : '%d ý~éárs'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal : function (number) {\n            var b = number % 10,\n                output = (~~(number % 100 / 10) === 1) ? 'th' :\n                (b === 1) ? 'st' :\n                (b === 2) ? 'nd' :\n                (b === 3) ? 'rd' : 'th';\n            return number + output;\n        },\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return xPseudo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var yo = moment.defineLocale('yo', {\n        months : 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n        monthsShort : 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays : 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort : 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin : 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat : {\n            LT : 'h:mm A',\n            LTS : 'h:mm:ss A',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY h:mm A',\n            LLLL : 'dddd, D MMMM YYYY h:mm A'\n        },\n        calendar : {\n            sameDay : '[Ònì ni] LT',\n            nextDay : '[Ọ̀la ni] LT',\n            nextWeek : 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n            lastDay : '[Àna ni] LT',\n            lastWeek : 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'ní %s',\n            past : '%s kọjá',\n            s : 'ìsẹjú aayá die',\n            ss :'aayá %d',\n            m : 'ìsẹjú kan',\n            mm : 'ìsẹjú %d',\n            h : 'wákati kan',\n            hh : 'wákati %d',\n            d : 'ọjọ́ kan',\n            dd : 'ọjọ́ %d',\n            M : 'osù kan',\n            MM : 'osù %d',\n            y : 'ọdún kan',\n            yy : 'ọdún %d'\n        },\n        dayOfMonthOrdinalParse : /ọjọ́\\s\\d{1,2}/,\n        ordinal : 'ọjọ́ %d',\n        week : {\n            dow : 1, // Monday is the first day of the week.\n            doy : 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return yo;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日Ah点mm分',\n            LLLL : 'YYYY年M月D日ddddAh点mm分',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' ||\n                    meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s内',\n            past : '%s前',\n            s : '几秒',\n            ss : '%d 秒',\n            m : '1 分钟',\n            mm : '%d 分钟',\n            h : '1 小时',\n            hh : '%d 小时',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 个月',\n            MM : '%d 个月',\n            y : '1 年',\n            yy : '%d 年'\n        },\n        week : {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow : 1, // Monday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return zhCn;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天]LT',\n            nextDay : '[明天]LT',\n            nextWeek : '[下]ddddLT',\n            lastDay : '[昨天]LT',\n            lastWeek : '[上]ddddLT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhHk;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort : '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'YYYY/MM/DD',\n            LL : 'YYYY年M月D日',\n            LLL : 'YYYY年M月D日 HH:mm',\n            LLLL : 'YYYY年M月D日dddd HH:mm',\n            l : 'YYYY/M/D',\n            ll : 'YYYY年M月D日',\n            lll : 'YYYY年M月D日 HH:mm',\n            llll : 'YYYY年M月D日dddd HH:mm'\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour : function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem : function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar : {\n            sameDay : '[今天] LT',\n            nextDay : '[明天] LT',\n            nextWeek : '[下]dddd LT',\n            lastDay : '[昨天] LT',\n            lastWeek : '[上]dddd LT',\n            sameElse : 'L'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal : function (number, period) {\n            switch (period) {\n                case 'd' :\n                case 'D' :\n                case 'DDD' :\n                    return number + '日';\n                case 'M' :\n                    return number + '月';\n                case 'w' :\n                case 'W' :\n                    return number + '週';\n                default :\n                    return number;\n            }\n        },\n        relativeTime : {\n            future : '%s內',\n            past : '%s前',\n            s : '幾秒',\n            ss : '%d 秒',\n            m : '1 分鐘',\n            mm : '%d 分鐘',\n            h : '1 小時',\n            hh : '%d 小時',\n            d : '1 天',\n            dd : '%d 天',\n            M : '1 個月',\n            MM : '%d 個月',\n            y : '1 年',\n            yy : '%d 年'\n        }\n    });\n\n    return zhTw;\n\n})));\n","// Generated by CoffeeScript 1.10.0\nvar adjacency_graphs;\n\nadjacency_graphs = {\n  qwerty: {\n    \"!\": [\"`~\", null, null, \"2@\", \"qQ\", null],\n    \"\\\"\": [\";:\", \"[{\", \"]}\", null, null, \"/?\"],\n    \"#\": [\"2@\", null, null, \"4$\", \"eE\", \"wW\"],\n    \"$\": [\"3#\", null, null, \"5%\", \"rR\", \"eE\"],\n    \"%\": [\"4$\", null, null, \"6^\", \"tT\", \"rR\"],\n    \"&\": [\"6^\", null, null, \"8*\", \"uU\", \"yY\"],\n    \"'\": [\";:\", \"[{\", \"]}\", null, null, \"/?\"],\n    \"(\": [\"8*\", null, null, \"0)\", \"oO\", \"iI\"],\n    \")\": [\"9(\", null, null, \"-_\", \"pP\", \"oO\"],\n    \"*\": [\"7&\", null, null, \"9(\", \"iI\", \"uU\"],\n    \"+\": [\"-_\", null, null, null, \"]}\", \"[{\"],\n    \",\": [\"mM\", \"kK\", \"lL\", \".>\", null, null],\n    \"-\": [\"0)\", null, null, \"=+\", \"[{\", \"pP\"],\n    \".\": [\",<\", \"lL\", \";:\", \"/?\", null, null],\n    \"/\": [\".>\", \";:\", \"'\\\"\", null, null, null],\n    \"0\": [\"9(\", null, null, \"-_\", \"pP\", \"oO\"],\n    \"1\": [\"`~\", null, null, \"2@\", \"qQ\", null],\n    \"2\": [\"1!\", null, null, \"3#\", \"wW\", \"qQ\"],\n    \"3\": [\"2@\", null, null, \"4$\", \"eE\", \"wW\"],\n    \"4\": [\"3#\", null, null, \"5%\", \"rR\", \"eE\"],\n    \"5\": [\"4$\", null, null, \"6^\", \"tT\", \"rR\"],\n    \"6\": [\"5%\", null, null, \"7&\", \"yY\", \"tT\"],\n    \"7\": [\"6^\", null, null, \"8*\", \"uU\", \"yY\"],\n    \"8\": [\"7&\", null, null, \"9(\", \"iI\", \"uU\"],\n    \"9\": [\"8*\", null, null, \"0)\", \"oO\", \"iI\"],\n    \":\": [\"lL\", \"pP\", \"[{\", \"'\\\"\", \"/?\", \".>\"],\n    \";\": [\"lL\", \"pP\", \"[{\", \"'\\\"\", \"/?\", \".>\"],\n    \"<\": [\"mM\", \"kK\", \"lL\", \".>\", null, null],\n    \"=\": [\"-_\", null, null, null, \"]}\", \"[{\"],\n    \">\": [\",<\", \"lL\", \";:\", \"/?\", null, null],\n    \"?\": [\".>\", \";:\", \"'\\\"\", null, null, null],\n    \"@\": [\"1!\", null, null, \"3#\", \"wW\", \"qQ\"],\n    \"A\": [null, \"qQ\", \"wW\", \"sS\", \"zZ\", null],\n    \"B\": [\"vV\", \"gG\", \"hH\", \"nN\", null, null],\n    \"C\": [\"xX\", \"dD\", \"fF\", \"vV\", null, null],\n    \"D\": [\"sS\", \"eE\", \"rR\", \"fF\", \"cC\", \"xX\"],\n    \"E\": [\"wW\", \"3#\", \"4$\", \"rR\", \"dD\", \"sS\"],\n    \"F\": [\"dD\", \"rR\", \"tT\", \"gG\", \"vV\", \"cC\"],\n    \"G\": [\"fF\", \"tT\", \"yY\", \"hH\", \"bB\", \"vV\"],\n    \"H\": [\"gG\", \"yY\", \"uU\", \"jJ\", \"nN\", \"bB\"],\n    \"I\": [\"uU\", \"8*\", \"9(\", \"oO\", \"kK\", \"jJ\"],\n    \"J\": [\"hH\", \"uU\", \"iI\", \"kK\", \"mM\", \"nN\"],\n    \"K\": [\"jJ\", \"iI\", \"oO\", \"lL\", \",<\", \"mM\"],\n    \"L\": [\"kK\", \"oO\", \"pP\", \";:\", \".>\", \",<\"],\n    \"M\": [\"nN\", \"jJ\", \"kK\", \",<\", null, null],\n    \"N\": [\"bB\", \"hH\", \"jJ\", \"mM\", null, null],\n    \"O\": [\"iI\", \"9(\", \"0)\", \"pP\", \"lL\", \"kK\"],\n    \"P\": [\"oO\", \"0)\", \"-_\", \"[{\", \";:\", \"lL\"],\n    \"Q\": [null, \"1!\", \"2@\", \"wW\", \"aA\", null],\n    \"R\": [\"eE\", \"4$\", \"5%\", \"tT\", \"fF\", \"dD\"],\n    \"S\": [\"aA\", \"wW\", \"eE\", \"dD\", \"xX\", \"zZ\"],\n    \"T\": [\"rR\", \"5%\", \"6^\", \"yY\", \"gG\", \"fF\"],\n    \"U\": [\"yY\", \"7&\", \"8*\", \"iI\", \"jJ\", \"hH\"],\n    \"V\": [\"cC\", \"fF\", \"gG\", \"bB\", null, null],\n    \"W\": [\"qQ\", \"2@\", \"3#\", \"eE\", \"sS\", \"aA\"],\n    \"X\": [\"zZ\", \"sS\", \"dD\", \"cC\", null, null],\n    \"Y\": [\"tT\", \"6^\", \"7&\", \"uU\", \"hH\", \"gG\"],\n    \"Z\": [null, \"aA\", \"sS\", \"xX\", null, null],\n    \"[\": [\"pP\", \"-_\", \"=+\", \"]}\", \"'\\\"\", \";:\"],\n    \"\\\\\": [\"]}\", null, null, null, null, null],\n    \"]\": [\"[{\", \"=+\", null, \"\\\\|\", null, \"'\\\"\"],\n    \"^\": [\"5%\", null, null, \"7&\", \"yY\", \"tT\"],\n    \"_\": [\"0)\", null, null, \"=+\", \"[{\", \"pP\"],\n    \"`\": [null, null, null, \"1!\", null, null],\n    \"a\": [null, \"qQ\", \"wW\", \"sS\", \"zZ\", null],\n    \"b\": [\"vV\", \"gG\", \"hH\", \"nN\", null, null],\n    \"c\": [\"xX\", \"dD\", \"fF\", \"vV\", null, null],\n    \"d\": [\"sS\", \"eE\", \"rR\", \"fF\", \"cC\", \"xX\"],\n    \"e\": [\"wW\", \"3#\", \"4$\", \"rR\", \"dD\", \"sS\"],\n    \"f\": [\"dD\", \"rR\", \"tT\", \"gG\", \"vV\", \"cC\"],\n    \"g\": [\"fF\", \"tT\", \"yY\", \"hH\", \"bB\", \"vV\"],\n    \"h\": [\"gG\", \"yY\", \"uU\", \"jJ\", \"nN\", \"bB\"],\n    \"i\": [\"uU\", \"8*\", \"9(\", \"oO\", \"kK\", \"jJ\"],\n    \"j\": [\"hH\", \"uU\", \"iI\", \"kK\", \"mM\", \"nN\"],\n    \"k\": [\"jJ\", \"iI\", \"oO\", \"lL\", \",<\", \"mM\"],\n    \"l\": [\"kK\", \"oO\", \"pP\", \";:\", \".>\", \",<\"],\n    \"m\": [\"nN\", \"jJ\", \"kK\", \",<\", null, null],\n    \"n\": [\"bB\", \"hH\", \"jJ\", \"mM\", null, null],\n    \"o\": [\"iI\", \"9(\", \"0)\", \"pP\", \"lL\", \"kK\"],\n    \"p\": [\"oO\", \"0)\", \"-_\", \"[{\", \";:\", \"lL\"],\n    \"q\": [null, \"1!\", \"2@\", \"wW\", \"aA\", null],\n    \"r\": [\"eE\", \"4$\", \"5%\", \"tT\", \"fF\", \"dD\"],\n    \"s\": [\"aA\", \"wW\", \"eE\", \"dD\", \"xX\", \"zZ\"],\n    \"t\": [\"rR\", \"5%\", \"6^\", \"yY\", \"gG\", \"fF\"],\n    \"u\": [\"yY\", \"7&\", \"8*\", \"iI\", \"jJ\", \"hH\"],\n    \"v\": [\"cC\", \"fF\", \"gG\", \"bB\", null, null],\n    \"w\": [\"qQ\", \"2@\", \"3#\", \"eE\", \"sS\", \"aA\"],\n    \"x\": [\"zZ\", \"sS\", \"dD\", \"cC\", null, null],\n    \"y\": [\"tT\", \"6^\", \"7&\", \"uU\", \"hH\", \"gG\"],\n    \"z\": [null, \"aA\", \"sS\", \"xX\", null, null],\n    \"{\": [\"pP\", \"-_\", \"=+\", \"]}\", \"'\\\"\", \";:\"],\n    \"|\": [\"]}\", null, null, null, null, null],\n    \"}\": [\"[{\", \"=+\", null, \"\\\\|\", null, \"'\\\"\"],\n    \"~\": [null, null, null, \"1!\", null, null]\n  },\n  dvorak: {\n    \"!\": [\"`~\", null, null, \"2@\", \"'\\\"\", null],\n    \"\\\"\": [null, \"1!\", \"2@\", \",<\", \"aA\", null],\n    \"#\": [\"2@\", null, null, \"4$\", \".>\", \",<\"],\n    \"$\": [\"3#\", null, null, \"5%\", \"pP\", \".>\"],\n    \"%\": [\"4$\", null, null, \"6^\", \"yY\", \"pP\"],\n    \"&\": [\"6^\", null, null, \"8*\", \"gG\", \"fF\"],\n    \"'\": [null, \"1!\", \"2@\", \",<\", \"aA\", null],\n    \"(\": [\"8*\", null, null, \"0)\", \"rR\", \"cC\"],\n    \")\": [\"9(\", null, null, \"[{\", \"lL\", \"rR\"],\n    \"*\": [\"7&\", null, null, \"9(\", \"cC\", \"gG\"],\n    \"+\": [\"/?\", \"]}\", null, \"\\\\|\", null, \"-_\"],\n    \",\": [\"'\\\"\", \"2@\", \"3#\", \".>\", \"oO\", \"aA\"],\n    \"-\": [\"sS\", \"/?\", \"=+\", null, null, \"zZ\"],\n    \".\": [\",<\", \"3#\", \"4$\", \"pP\", \"eE\", \"oO\"],\n    \"/\": [\"lL\", \"[{\", \"]}\", \"=+\", \"-_\", \"sS\"],\n    \"0\": [\"9(\", null, null, \"[{\", \"lL\", \"rR\"],\n    \"1\": [\"`~\", null, null, \"2@\", \"'\\\"\", null],\n    \"2\": [\"1!\", null, null, \"3#\", \",<\", \"'\\\"\"],\n    \"3\": [\"2@\", null, null, \"4$\", \".>\", \",<\"],\n    \"4\": [\"3#\", null, null, \"5%\", \"pP\", \".>\"],\n    \"5\": [\"4$\", null, null, \"6^\", \"yY\", \"pP\"],\n    \"6\": [\"5%\", null, null, \"7&\", \"fF\", \"yY\"],\n    \"7\": [\"6^\", null, null, \"8*\", \"gG\", \"fF\"],\n    \"8\": [\"7&\", null, null, \"9(\", \"cC\", \"gG\"],\n    \"9\": [\"8*\", null, null, \"0)\", \"rR\", \"cC\"],\n    \":\": [null, \"aA\", \"oO\", \"qQ\", null, null],\n    \";\": [null, \"aA\", \"oO\", \"qQ\", null, null],\n    \"<\": [\"'\\\"\", \"2@\", \"3#\", \".>\", \"oO\", \"aA\"],\n    \"=\": [\"/?\", \"]}\", null, \"\\\\|\", null, \"-_\"],\n    \">\": [\",<\", \"3#\", \"4$\", \"pP\", \"eE\", \"oO\"],\n    \"?\": [\"lL\", \"[{\", \"]}\", \"=+\", \"-_\", \"sS\"],\n    \"@\": [\"1!\", null, null, \"3#\", \",<\", \"'\\\"\"],\n    \"A\": [null, \"'\\\"\", \",<\", \"oO\", \";:\", null],\n    \"B\": [\"xX\", \"dD\", \"hH\", \"mM\", null, null],\n    \"C\": [\"gG\", \"8*\", \"9(\", \"rR\", \"tT\", \"hH\"],\n    \"D\": [\"iI\", \"fF\", \"gG\", \"hH\", \"bB\", \"xX\"],\n    \"E\": [\"oO\", \".>\", \"pP\", \"uU\", \"jJ\", \"qQ\"],\n    \"F\": [\"yY\", \"6^\", \"7&\", \"gG\", \"dD\", \"iI\"],\n    \"G\": [\"fF\", \"7&\", \"8*\", \"cC\", \"hH\", \"dD\"],\n    \"H\": [\"dD\", \"gG\", \"cC\", \"tT\", \"mM\", \"bB\"],\n    \"I\": [\"uU\", \"yY\", \"fF\", \"dD\", \"xX\", \"kK\"],\n    \"J\": [\"qQ\", \"eE\", \"uU\", \"kK\", null, null],\n    \"K\": [\"jJ\", \"uU\", \"iI\", \"xX\", null, null],\n    \"L\": [\"rR\", \"0)\", \"[{\", \"/?\", \"sS\", \"nN\"],\n    \"M\": [\"bB\", \"hH\", \"tT\", \"wW\", null, null],\n    \"N\": [\"tT\", \"rR\", \"lL\", \"sS\", \"vV\", \"wW\"],\n    \"O\": [\"aA\", \",<\", \".>\", \"eE\", \"qQ\", \";:\"],\n    \"P\": [\".>\", \"4$\", \"5%\", \"yY\", \"uU\", \"eE\"],\n    \"Q\": [\";:\", \"oO\", \"eE\", \"jJ\", null, null],\n    \"R\": [\"cC\", \"9(\", \"0)\", \"lL\", \"nN\", \"tT\"],\n    \"S\": [\"nN\", \"lL\", \"/?\", \"-_\", \"zZ\", \"vV\"],\n    \"T\": [\"hH\", \"cC\", \"rR\", \"nN\", \"wW\", \"mM\"],\n    \"U\": [\"eE\", \"pP\", \"yY\", \"iI\", \"kK\", \"jJ\"],\n    \"V\": [\"wW\", \"nN\", \"sS\", \"zZ\", null, null],\n    \"W\": [\"mM\", \"tT\", \"nN\", \"vV\", null, null],\n    \"X\": [\"kK\", \"iI\", \"dD\", \"bB\", null, null],\n    \"Y\": [\"pP\", \"5%\", \"6^\", \"fF\", \"iI\", \"uU\"],\n    \"Z\": [\"vV\", \"sS\", \"-_\", null, null, null],\n    \"[\": [\"0)\", null, null, \"]}\", \"/?\", \"lL\"],\n    \"\\\\\": [\"=+\", null, null, null, null, null],\n    \"]\": [\"[{\", null, null, null, \"=+\", \"/?\"],\n    \"^\": [\"5%\", null, null, \"7&\", \"fF\", \"yY\"],\n    \"_\": [\"sS\", \"/?\", \"=+\", null, null, \"zZ\"],\n    \"`\": [null, null, null, \"1!\", null, null],\n    \"a\": [null, \"'\\\"\", \",<\", \"oO\", \";:\", null],\n    \"b\": [\"xX\", \"dD\", \"hH\", \"mM\", null, null],\n    \"c\": [\"gG\", \"8*\", \"9(\", \"rR\", \"tT\", \"hH\"],\n    \"d\": [\"iI\", \"fF\", \"gG\", \"hH\", \"bB\", \"xX\"],\n    \"e\": [\"oO\", \".>\", \"pP\", \"uU\", \"jJ\", \"qQ\"],\n    \"f\": [\"yY\", \"6^\", \"7&\", \"gG\", \"dD\", \"iI\"],\n    \"g\": [\"fF\", \"7&\", \"8*\", \"cC\", \"hH\", \"dD\"],\n    \"h\": [\"dD\", \"gG\", \"cC\", \"tT\", \"mM\", \"bB\"],\n    \"i\": [\"uU\", \"yY\", \"fF\", \"dD\", \"xX\", \"kK\"],\n    \"j\": [\"qQ\", \"eE\", \"uU\", \"kK\", null, null],\n    \"k\": [\"jJ\", \"uU\", \"iI\", \"xX\", null, null],\n    \"l\": [\"rR\", \"0)\", \"[{\", \"/?\", \"sS\", \"nN\"],\n    \"m\": [\"bB\", \"hH\", \"tT\", \"wW\", null, null],\n    \"n\": [\"tT\", \"rR\", \"lL\", \"sS\", \"vV\", \"wW\"],\n    \"o\": [\"aA\", \",<\", \".>\", \"eE\", \"qQ\", \";:\"],\n    \"p\": [\".>\", \"4$\", \"5%\", \"yY\", \"uU\", \"eE\"],\n    \"q\": [\";:\", \"oO\", \"eE\", \"jJ\", null, null],\n    \"r\": [\"cC\", \"9(\", \"0)\", \"lL\", \"nN\", \"tT\"],\n    \"s\": [\"nN\", \"lL\", \"/?\", \"-_\", \"zZ\", \"vV\"],\n    \"t\": [\"hH\", \"cC\", \"rR\", \"nN\", \"wW\", \"mM\"],\n    \"u\": [\"eE\", \"pP\", \"yY\", \"iI\", \"kK\", \"jJ\"],\n    \"v\": [\"wW\", \"nN\", \"sS\", \"zZ\", null, null],\n    \"w\": [\"mM\", \"tT\", \"nN\", \"vV\", null, null],\n    \"x\": [\"kK\", \"iI\", \"dD\", \"bB\", null, null],\n    \"y\": [\"pP\", \"5%\", \"6^\", \"fF\", \"iI\", \"uU\"],\n    \"z\": [\"vV\", \"sS\", \"-_\", null, null, null],\n    \"{\": [\"0)\", null, null, \"]}\", \"/?\", \"lL\"],\n    \"|\": [\"=+\", null, null, null, null, null],\n    \"}\": [\"[{\", null, null, null, \"=+\", \"/?\"],\n    \"~\": [null, null, null, \"1!\", null, null]\n  },\n  keypad: {\n    \"*\": [\"/\", null, null, null, \"-\", \"+\", \"9\", \"8\"],\n    \"+\": [\"9\", \"*\", \"-\", null, null, null, null, \"6\"],\n    \"-\": [\"*\", null, null, null, null, null, \"+\", \"9\"],\n    \".\": [\"0\", \"2\", \"3\", null, null, null, null, null],\n    \"/\": [null, null, null, null, \"*\", \"9\", \"8\", \"7\"],\n    \"0\": [null, \"1\", \"2\", \"3\", \".\", null, null, null],\n    \"1\": [null, null, \"4\", \"5\", \"2\", \"0\", null, null],\n    \"2\": [\"1\", \"4\", \"5\", \"6\", \"3\", \".\", \"0\", null],\n    \"3\": [\"2\", \"5\", \"6\", null, null, null, \".\", \"0\"],\n    \"4\": [null, null, \"7\", \"8\", \"5\", \"2\", \"1\", null],\n    \"5\": [\"4\", \"7\", \"8\", \"9\", \"6\", \"3\", \"2\", \"1\"],\n    \"6\": [\"5\", \"8\", \"9\", \"+\", null, null, \"3\", \"2\"],\n    \"7\": [null, null, null, \"/\", \"8\", \"5\", \"4\", null],\n    \"8\": [\"7\", null, \"/\", \"*\", \"9\", \"6\", \"5\", \"4\"],\n    \"9\": [\"8\", \"/\", \"*\", \"-\", \"+\", null, \"6\", \"5\"]\n  },\n  mac_keypad: {\n    \"*\": [\"/\", null, null, null, null, null, \"-\", \"9\"],\n    \"+\": [\"6\", \"9\", \"-\", null, null, null, null, \"3\"],\n    \"-\": [\"9\", \"/\", \"*\", null, null, null, \"+\", \"6\"],\n    \".\": [\"0\", \"2\", \"3\", null, null, null, null, null],\n    \"/\": [\"=\", null, null, null, \"*\", \"-\", \"9\", \"8\"],\n    \"0\": [null, \"1\", \"2\", \"3\", \".\", null, null, null],\n    \"1\": [null, null, \"4\", \"5\", \"2\", \"0\", null, null],\n    \"2\": [\"1\", \"4\", \"5\", \"6\", \"3\", \".\", \"0\", null],\n    \"3\": [\"2\", \"5\", \"6\", \"+\", null, null, \".\", \"0\"],\n    \"4\": [null, null, \"7\", \"8\", \"5\", \"2\", \"1\", null],\n    \"5\": [\"4\", \"7\", \"8\", \"9\", \"6\", \"3\", \"2\", \"1\"],\n    \"6\": [\"5\", \"8\", \"9\", \"-\", \"+\", null, \"3\", \"2\"],\n    \"7\": [null, null, null, \"=\", \"8\", \"5\", \"4\", null],\n    \"8\": [\"7\", null, \"=\", \"/\", \"9\", \"6\", \"5\", \"4\"],\n    \"9\": [\"8\", \"=\", \"/\", \"*\", \"-\", \"+\", \"6\", \"5\"],\n    \"=\": [null, null, null, null, \"/\", \"9\", \"8\", \"7\"]\n  }\n};\n\nmodule.exports = adjacency_graphs;\n\n//# sourceMappingURL=adjacency_graphs.js.map\n","import firebase from '@firebase/app';\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Constants used in the Firebase Storage library.\r\n */\r\n/**\r\n * Domain name for firebase storage.\r\n */\r\nvar DEFAULT_HOST = 'firebasestorage.googleapis.com';\r\n/**\r\n * The key in Firebase config json for the storage bucket.\r\n */\r\nvar CONFIG_STORAGE_BUCKET_KEY = 'storageBucket';\r\n/**\r\n * 2 minutes\r\n *\r\n * The timeout for all operations except upload.\r\n */\r\nvar DEFAULT_MAX_OPERATION_RETRY_TIME = 2 * 60 * 1000;\r\n/**\r\n * 10 minutes\r\n *\r\n * The timeout for upload.\r\n */\r\nvar DEFAULT_MAX_UPLOAD_RETRY_TIME = 10 * 60 * 100;\r\n/**\r\n * This is the value of Number.MIN_SAFE_INTEGER, which is not well supported\r\n * enough for us to use it directly.\r\n */\r\nvar MIN_SAFE_INTEGER = -9007199254740991;\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar FirebaseStorageError = /** @class */ (function () {\r\n    function FirebaseStorageError(code, message) {\r\n        this.code_ = prependCode(code);\r\n        this.message_ = 'Firebase Storage: ' + message;\r\n        this.serverResponse_ = null;\r\n        this.name_ = 'FirebaseError';\r\n    }\r\n    FirebaseStorageError.prototype.codeProp = function () {\r\n        return this.code;\r\n    };\r\n    FirebaseStorageError.prototype.codeEquals = function (code) {\r\n        return prependCode(code) === this.codeProp();\r\n    };\r\n    FirebaseStorageError.prototype.serverResponseProp = function () {\r\n        return this.serverResponse_;\r\n    };\r\n    FirebaseStorageError.prototype.setServerResponseProp = function (serverResponse) {\r\n        this.serverResponse_ = serverResponse;\r\n    };\r\n    Object.defineProperty(FirebaseStorageError.prototype, \"name\", {\r\n        get: function () {\r\n            return this.name_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(FirebaseStorageError.prototype, \"code\", {\r\n        get: function () {\r\n            return this.code_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(FirebaseStorageError.prototype, \"message\", {\r\n        get: function () {\r\n            return this.message_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(FirebaseStorageError.prototype, \"serverResponse\", {\r\n        get: function () {\r\n            return this.serverResponse_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return FirebaseStorageError;\r\n}());\r\nvar Code = {\r\n    // Shared between all platforms\r\n    UNKNOWN: 'unknown',\r\n    OBJECT_NOT_FOUND: 'object-not-found',\r\n    BUCKET_NOT_FOUND: 'bucket-not-found',\r\n    PROJECT_NOT_FOUND: 'project-not-found',\r\n    QUOTA_EXCEEDED: 'quota-exceeded',\r\n    UNAUTHENTICATED: 'unauthenticated',\r\n    UNAUTHORIZED: 'unauthorized',\r\n    RETRY_LIMIT_EXCEEDED: 'retry-limit-exceeded',\r\n    INVALID_CHECKSUM: 'invalid-checksum',\r\n    CANCELED: 'canceled',\r\n    // JS specific\r\n    INVALID_EVENT_NAME: 'invalid-event-name',\r\n    INVALID_URL: 'invalid-url',\r\n    INVALID_DEFAULT_BUCKET: 'invalid-default-bucket',\r\n    NO_DEFAULT_BUCKET: 'no-default-bucket',\r\n    CANNOT_SLICE_BLOB: 'cannot-slice-blob',\r\n    SERVER_FILE_WRONG_SIZE: 'server-file-wrong-size',\r\n    NO_DOWNLOAD_URL: 'no-download-url',\r\n    INVALID_ARGUMENT: 'invalid-argument',\r\n    INVALID_ARGUMENT_COUNT: 'invalid-argument-count',\r\n    APP_DELETED: 'app-deleted',\r\n    INVALID_ROOT_OPERATION: 'invalid-root-operation',\r\n    INVALID_FORMAT: 'invalid-format',\r\n    INTERNAL_ERROR: 'internal-error'\r\n};\r\nfunction prependCode(code) {\r\n    return 'storage/' + code;\r\n}\r\nfunction unknown() {\r\n    var message = 'An unknown error occurred, please check the error payload for ' +\r\n        'server response.';\r\n    return new FirebaseStorageError(Code.UNKNOWN, message);\r\n}\r\nfunction objectNotFound(path) {\r\n    return new FirebaseStorageError(Code.OBJECT_NOT_FOUND, \"Object '\" + path + \"' does not exist.\");\r\n}\r\nfunction quotaExceeded(bucket) {\r\n    return new FirebaseStorageError(Code.QUOTA_EXCEEDED, \"Quota for bucket '\" +\r\n        bucket +\r\n        \"' exceeded, please view quota on \" +\r\n        'https://firebase.google.com/pricing/.');\r\n}\r\nfunction unauthenticated() {\r\n    var message = 'User is not authenticated, please authenticate using Firebase ' +\r\n        'Authentication and try again.';\r\n    return new FirebaseStorageError(Code.UNAUTHENTICATED, message);\r\n}\r\nfunction unauthorized(path) {\r\n    return new FirebaseStorageError(Code.UNAUTHORIZED, \"User does not have permission to access '\" + path + \"'.\");\r\n}\r\nfunction retryLimitExceeded() {\r\n    return new FirebaseStorageError(Code.RETRY_LIMIT_EXCEEDED, 'Max retry time for operation exceeded, please try again.');\r\n}\r\nfunction canceled() {\r\n    return new FirebaseStorageError(Code.CANCELED, 'User canceled the upload/download.');\r\n}\r\nfunction invalidUrl(url) {\r\n    return new FirebaseStorageError(Code.INVALID_URL, \"Invalid URL '\" + url + \"'.\");\r\n}\r\nfunction invalidDefaultBucket(bucket) {\r\n    return new FirebaseStorageError(Code.INVALID_DEFAULT_BUCKET, \"Invalid default bucket '\" + bucket + \"'.\");\r\n}\r\nfunction cannotSliceBlob() {\r\n    return new FirebaseStorageError(Code.CANNOT_SLICE_BLOB, 'Cannot slice blob for upload. Please retry the upload.');\r\n}\r\nfunction serverFileWrongSize() {\r\n    return new FirebaseStorageError(Code.SERVER_FILE_WRONG_SIZE, 'Server recorded incorrect upload file size, please retry the upload.');\r\n}\r\nfunction noDownloadURL() {\r\n    return new FirebaseStorageError(Code.NO_DOWNLOAD_URL, 'The given file does not have any download URLs.');\r\n}\r\nfunction invalidArgument(index, fnName, message) {\r\n    return new FirebaseStorageError(Code.INVALID_ARGUMENT, 'Invalid argument in `' + fnName + '` at index ' + index + ': ' + message);\r\n}\r\nfunction invalidArgumentCount(argMin, argMax, fnName, real) {\r\n    var countPart;\r\n    var plural;\r\n    if (argMin === argMax) {\r\n        countPart = argMin;\r\n        plural = argMin === 1 ? 'argument' : 'arguments';\r\n    }\r\n    else {\r\n        countPart = 'between ' + argMin + ' and ' + argMax;\r\n        plural = 'arguments';\r\n    }\r\n    return new FirebaseStorageError(Code.INVALID_ARGUMENT_COUNT, 'Invalid argument count in `' +\r\n        fnName +\r\n        '`: Expected ' +\r\n        countPart +\r\n        ' ' +\r\n        plural +\r\n        ', received ' +\r\n        real +\r\n        '.');\r\n}\r\nfunction appDeleted() {\r\n    return new FirebaseStorageError(Code.APP_DELETED, 'The Firebase app was deleted.');\r\n}\r\n/**\r\n * @param name The name of the operation that was invalid.\r\n */\r\nfunction invalidRootOperation(name) {\r\n    return new FirebaseStorageError(Code.INVALID_ROOT_OPERATION, \"The operation '\" +\r\n        name +\r\n        \"' cannot be performed on a root reference, create a non-root \" +\r\n        \"reference using child, such as .child('file.png').\");\r\n}\r\n/**\r\n * @param format The format that was not valid.\r\n * @param message A message describing the format violation.\r\n */\r\nfunction invalidFormat(format, message) {\r\n    return new FirebaseStorageError(Code.INVALID_FORMAT, \"String does not match format '\" + format + \"': \" + message);\r\n}\r\n/**\r\n * @param message A message describing the internal error.\r\n */\r\nfunction internalError(message) {\r\n    throw new FirebaseStorageError(Code.INTERNAL_ERROR, 'Internal error: ' + message);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar StringFormat = {\r\n    RAW: 'raw',\r\n    BASE64: 'base64',\r\n    BASE64URL: 'base64url',\r\n    DATA_URL: 'data_url'\r\n};\r\nfunction formatValidator(stringFormat) {\r\n    switch (stringFormat) {\r\n        case StringFormat.RAW:\r\n        case StringFormat.BASE64:\r\n        case StringFormat.BASE64URL:\r\n        case StringFormat.DATA_URL:\r\n            return;\r\n        default:\r\n            throw 'Expected one of the event types: [' +\r\n                StringFormat.RAW +\r\n                ', ' +\r\n                StringFormat.BASE64 +\r\n                ', ' +\r\n                StringFormat.BASE64URL +\r\n                ', ' +\r\n                StringFormat.DATA_URL +\r\n                '].';\r\n    }\r\n}\r\n/**\r\n * @struct\r\n */\r\nvar StringData = /** @class */ (function () {\r\n    function StringData(data, opt_contentType) {\r\n        this.data = data;\r\n        this.contentType = opt_contentType || null;\r\n    }\r\n    return StringData;\r\n}());\r\nfunction dataFromString(format, string) {\r\n    switch (format) {\r\n        case StringFormat.RAW:\r\n            return new StringData(utf8Bytes_(string));\r\n        case StringFormat.BASE64:\r\n        case StringFormat.BASE64URL:\r\n            return new StringData(base64Bytes_(format, string));\r\n        case StringFormat.DATA_URL:\r\n            return new StringData(dataURLBytes_(string), dataURLContentType_(string));\r\n    }\r\n    // assert(false);\r\n    throw unknown();\r\n}\r\nfunction utf8Bytes_(string) {\r\n    var b = [];\r\n    for (var i = 0; i < string.length; i++) {\r\n        var c = string.charCodeAt(i);\r\n        if (c <= 127) {\r\n            b.push(c);\r\n        }\r\n        else {\r\n            if (c <= 2047) {\r\n                b.push(192 | (c >> 6), 128 | (c & 63));\r\n            }\r\n            else {\r\n                if ((c & 64512) == 55296) {\r\n                    // The start of a surrogate pair.\r\n                    var valid = i < string.length - 1 &&\r\n                        (string.charCodeAt(i + 1) & 64512) == 56320;\r\n                    if (!valid) {\r\n                        // The second surrogate wasn't there.\r\n                        b.push(239, 191, 189);\r\n                    }\r\n                    else {\r\n                        var hi = c;\r\n                        var lo = string.charCodeAt(++i);\r\n                        c = 65536 | ((hi & 1023) << 10) | (lo & 1023);\r\n                        b.push(240 | (c >> 18), 128 | ((c >> 12) & 63), 128 | ((c >> 6) & 63), 128 | (c & 63));\r\n                    }\r\n                }\r\n                else {\r\n                    if ((c & 64512) == 56320) {\r\n                        // Invalid low surrogate.\r\n                        b.push(239, 191, 189);\r\n                    }\r\n                    else {\r\n                        b.push(224 | (c >> 12), 128 | ((c >> 6) & 63), 128 | (c & 63));\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return new Uint8Array(b);\r\n}\r\nfunction percentEncodedBytes_(string) {\r\n    var decoded;\r\n    try {\r\n        decoded = decodeURIComponent(string);\r\n    }\r\n    catch (e) {\r\n        throw invalidFormat(StringFormat.DATA_URL, 'Malformed data URL.');\r\n    }\r\n    return utf8Bytes_(decoded);\r\n}\r\nfunction base64Bytes_(format, string) {\r\n    switch (format) {\r\n        case StringFormat.BASE64: {\r\n            var hasMinus = string.indexOf('-') !== -1;\r\n            var hasUnder = string.indexOf('_') !== -1;\r\n            if (hasMinus || hasUnder) {\r\n                var invalidChar = hasMinus ? '-' : '_';\r\n                throw invalidFormat(format, \"Invalid character '\" +\r\n                    invalidChar +\r\n                    \"' found: is it base64url encoded?\");\r\n            }\r\n            break;\r\n        }\r\n        case StringFormat.BASE64URL: {\r\n            var hasPlus = string.indexOf('+') !== -1;\r\n            var hasSlash = string.indexOf('/') !== -1;\r\n            if (hasPlus || hasSlash) {\r\n                var invalidChar = hasPlus ? '+' : '/';\r\n                throw invalidFormat(format, \"Invalid character '\" + invalidChar + \"' found: is it base64 encoded?\");\r\n            }\r\n            string = string.replace(/-/g, '+').replace(/_/g, '/');\r\n            break;\r\n        }\r\n    }\r\n    var bytes;\r\n    try {\r\n        bytes = atob(string);\r\n    }\r\n    catch (e) {\r\n        throw invalidFormat(format, 'Invalid character found');\r\n    }\r\n    var array = new Uint8Array(bytes.length);\r\n    for (var i = 0; i < bytes.length; i++) {\r\n        array[i] = bytes.charCodeAt(i);\r\n    }\r\n    return array;\r\n}\r\n/**\r\n * @struct\r\n */\r\nvar DataURLParts = /** @class */ (function () {\r\n    function DataURLParts(dataURL) {\r\n        this.base64 = false;\r\n        this.contentType = null;\r\n        var matches = dataURL.match(/^data:([^,]+)?,/);\r\n        if (matches === null) {\r\n            throw invalidFormat(StringFormat.DATA_URL, \"Must be formatted 'data:[<mediatype>][;base64],<data>\");\r\n        }\r\n        var middle = matches[1] || null;\r\n        if (middle != null) {\r\n            this.base64 = endsWith(middle, ';base64');\r\n            this.contentType = this.base64\r\n                ? middle.substring(0, middle.length - ';base64'.length)\r\n                : middle;\r\n        }\r\n        this.rest = dataURL.substring(dataURL.indexOf(',') + 1);\r\n    }\r\n    return DataURLParts;\r\n}());\r\nfunction dataURLBytes_(string) {\r\n    var parts = new DataURLParts(string);\r\n    if (parts.base64) {\r\n        return base64Bytes_(StringFormat.BASE64, parts.rest);\r\n    }\r\n    else {\r\n        return percentEncodedBytes_(parts.rest);\r\n    }\r\n}\r\nfunction dataURLContentType_(string) {\r\n    var parts = new DataURLParts(string);\r\n    return parts.contentType;\r\n}\r\nfunction endsWith(s, end) {\r\n    var longEnough = s.length >= end.length;\r\n    if (!longEnough) {\r\n        return false;\r\n    }\r\n    return s.substring(s.length - end.length) === end;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar TaskEvent = {\r\n    /** Triggered whenever the task changes or progress is updated. */\r\n    STATE_CHANGED: 'state_changed'\r\n};\r\nvar InternalTaskState = {\r\n    RUNNING: 'running',\r\n    PAUSING: 'pausing',\r\n    PAUSED: 'paused',\r\n    SUCCESS: 'success',\r\n    CANCELING: 'canceling',\r\n    CANCELED: 'canceled',\r\n    ERROR: 'error'\r\n};\r\nvar TaskState = {\r\n    /** The task is currently transferring data. */\r\n    RUNNING: 'running',\r\n    /** The task was paused by the user. */\r\n    PAUSED: 'paused',\r\n    /** The task completed successfully. */\r\n    SUCCESS: 'success',\r\n    /** The task was canceled. */\r\n    CANCELED: 'canceled',\r\n    /** The task failed with an error. */\r\n    ERROR: 'error'\r\n};\r\nfunction taskStateFromInternalTaskState(state) {\r\n    switch (state) {\r\n        case InternalTaskState.RUNNING:\r\n        case InternalTaskState.PAUSING:\r\n        case InternalTaskState.CANCELING:\r\n            return TaskState.RUNNING;\r\n        case InternalTaskState.PAUSED:\r\n            return TaskState.PAUSED;\r\n        case InternalTaskState.SUCCESS:\r\n            return TaskState.SUCCESS;\r\n        case InternalTaskState.CANCELED:\r\n            return TaskState.CANCELED;\r\n        case InternalTaskState.ERROR:\r\n            return TaskState.ERROR;\r\n        default:\r\n            // TODO(andysoto): assert(false);\r\n            return TaskState.ERROR;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Contains methods for working with objects.\r\n */\r\nfunction contains(obj, prop) {\r\n    return Object.prototype.hasOwnProperty.call(obj, prop);\r\n}\r\nfunction forEach(obj, f) {\r\n    for (var key in obj) {\r\n        if (contains(obj, key)) {\r\n            f(key, obj[key]);\r\n        }\r\n    }\r\n}\r\nfunction clone(obj) {\r\n    if (obj == null) {\r\n        return {};\r\n    }\r\n    var c = {};\r\n    forEach(obj, function (key, val) {\r\n        c[key] = val;\r\n    });\r\n    return c;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Implements the promise abstraction interface for external\r\n * (public SDK) packaging, which just passes through to the firebase-app impl.\r\n */\r\n/**\r\n * @template T\r\n * @param {function((function(T): void),\r\n *                  (function(!Error): void))} resolver\r\n */\r\nfunction make(resolver) {\r\n    return new Promise(resolver);\r\n}\r\n/**\r\n * @template T\r\n */\r\nfunction resolve(value) {\r\n    return Promise.resolve(value);\r\n}\r\nfunction reject(error) {\r\n    return Promise.reject(error);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @return False if the object is undefined or null, true otherwise.\r\n */\r\nfunction isDef(p) {\r\n    return p != null;\r\n}\r\nfunction isJustDef(p) {\r\n    return p !== void 0;\r\n}\r\nfunction isFunction(p) {\r\n    return typeof p === 'function';\r\n}\r\nfunction isObject(p) {\r\n    return typeof p === 'object';\r\n}\r\nfunction isNonNullObject(p) {\r\n    return isObject(p) && p !== null;\r\n}\r\nfunction isNonArrayObject(p) {\r\n    return isObject(p) && !Array.isArray(p);\r\n}\r\nfunction isString(p) {\r\n    return typeof p === 'string' || p instanceof String;\r\n}\r\nfunction isNumber(p) {\r\n    return typeof p === 'number' || p instanceof Number;\r\n}\r\nfunction isNativeBlob(p) {\r\n    return isNativeBlobDefined() && p instanceof Blob;\r\n}\r\nfunction isNativeBlobDefined() {\r\n    return typeof Blob !== 'undefined';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @enum{number}\r\n */\r\nvar ErrorCode;\r\n(function (ErrorCode) {\r\n    ErrorCode[ErrorCode[\"NO_ERROR\"] = 0] = \"NO_ERROR\";\r\n    ErrorCode[ErrorCode[\"NETWORK_ERROR\"] = 1] = \"NETWORK_ERROR\";\r\n    ErrorCode[ErrorCode[\"ABORT\"] = 2] = \"ABORT\";\r\n})(ErrorCode || (ErrorCode = {}));\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * We use this instead of goog.net.XhrIo because goog.net.XhrIo is hyuuuuge and\r\n * doesn't work in React Native on Android.\r\n */\r\nvar NetworkXhrIo = /** @class */ (function () {\r\n    function NetworkXhrIo() {\r\n        var _this = this;\r\n        this.sent_ = false;\r\n        this.xhr_ = new XMLHttpRequest();\r\n        this.errorCode_ = ErrorCode.NO_ERROR;\r\n        this.sendPromise_ = make(function (resolve, reject) {\r\n            _this.xhr_.addEventListener('abort', function (event) {\r\n                _this.errorCode_ = ErrorCode.ABORT;\r\n                resolve(_this);\r\n            });\r\n            _this.xhr_.addEventListener('error', function (event) {\r\n                _this.errorCode_ = ErrorCode.NETWORK_ERROR;\r\n                resolve(_this);\r\n            });\r\n            _this.xhr_.addEventListener('load', function (event) {\r\n                resolve(_this);\r\n            });\r\n        });\r\n    }\r\n    /**\r\n     * @override\r\n     */\r\n    NetworkXhrIo.prototype.send = function (url, method, opt_body, opt_headers) {\r\n        var _this = this;\r\n        if (this.sent_) {\r\n            throw internalError('cannot .send() more than once');\r\n        }\r\n        this.sent_ = true;\r\n        this.xhr_.open(method, url, true);\r\n        if (isDef(opt_headers)) {\r\n            var headers = opt_headers;\r\n            forEach(headers, function (key, val) {\r\n                _this.xhr_.setRequestHeader(key, val.toString());\r\n            });\r\n        }\r\n        if (isDef(opt_body)) {\r\n            this.xhr_.send(opt_body);\r\n        }\r\n        else {\r\n            this.xhr_.send();\r\n        }\r\n        return this.sendPromise_;\r\n    };\r\n    /**\r\n     * @override\r\n     */\r\n    NetworkXhrIo.prototype.getErrorCode = function () {\r\n        if (!this.sent_) {\r\n            throw internalError('cannot .getErrorCode() before sending');\r\n        }\r\n        return this.errorCode_;\r\n    };\r\n    /**\r\n     * @override\r\n     */\r\n    NetworkXhrIo.prototype.getStatus = function () {\r\n        if (!this.sent_) {\r\n            throw internalError('cannot .getStatus() before sending');\r\n        }\r\n        try {\r\n            return this.xhr_.status;\r\n        }\r\n        catch (e) {\r\n            return -1;\r\n        }\r\n    };\r\n    /**\r\n     * @override\r\n     */\r\n    NetworkXhrIo.prototype.getResponseText = function () {\r\n        if (!this.sent_) {\r\n            throw internalError('cannot .getResponseText() before sending');\r\n        }\r\n        return this.xhr_.responseText;\r\n    };\r\n    /**\r\n     * Aborts the request.\r\n     * @override\r\n     */\r\n    NetworkXhrIo.prototype.abort = function () {\r\n        this.xhr_.abort();\r\n    };\r\n    /**\r\n     * @override\r\n     */\r\n    NetworkXhrIo.prototype.getResponseHeader = function (header) {\r\n        return this.xhr_.getResponseHeader(header);\r\n    };\r\n    /**\r\n     * @override\r\n     */\r\n    NetworkXhrIo.prototype.addUploadProgressListener = function (listener) {\r\n        if (isDef(this.xhr_.upload)) {\r\n            this.xhr_.upload.addEventListener('progress', listener);\r\n        }\r\n    };\r\n    /**\r\n     * @override\r\n     */\r\n    NetworkXhrIo.prototype.removeUploadProgressListener = function (listener) {\r\n        if (isDef(this.xhr_.upload)) {\r\n            this.xhr_.upload.removeEventListener('progress', listener);\r\n        }\r\n    };\r\n    return NetworkXhrIo;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Factory-like class for creating XhrIo instances.\r\n */\r\nvar XhrIoPool = /** @class */ (function () {\r\n    function XhrIoPool() {\r\n    }\r\n    XhrIoPool.prototype.createXhrIo = function () {\r\n        return new NetworkXhrIo();\r\n    };\r\n    return XhrIoPool;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns the Object resulting from parsing the given JSON, or null if the\r\n * given string does not represent a JSON object.\r\n */\r\nfunction jsonObjectOrNull(s) {\r\n    var obj;\r\n    try {\r\n        obj = JSON.parse(s);\r\n    }\r\n    catch (e) {\r\n        return null;\r\n    }\r\n    if (isNonArrayObject(obj)) {\r\n        return obj;\r\n    }\r\n    else {\r\n        return null;\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @struct\r\n */\r\nvar Location = /** @class */ (function () {\r\n    function Location(bucket, path) {\r\n        this.bucket = bucket;\r\n        this.path_ = path;\r\n    }\r\n    Object.defineProperty(Location.prototype, \"path\", {\r\n        get: function () {\r\n            return this.path_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Location.prototype.fullServerUrl = function () {\r\n        var encode = encodeURIComponent;\r\n        return '/b/' + encode(this.bucket) + '/o/' + encode(this.path);\r\n    };\r\n    Location.prototype.bucketOnlyServerUrl = function () {\r\n        var encode = encodeURIComponent;\r\n        return '/b/' + encode(this.bucket) + '/o';\r\n    };\r\n    Location.makeFromBucketSpec = function (bucketString) {\r\n        var bucketLocation;\r\n        try {\r\n            bucketLocation = Location.makeFromUrl(bucketString);\r\n        }\r\n        catch (e) {\r\n            // Not valid URL, use as-is. This lets you put bare bucket names in\r\n            // config.\r\n            return new Location(bucketString, '');\r\n        }\r\n        if (bucketLocation.path === '') {\r\n            return bucketLocation;\r\n        }\r\n        else {\r\n            throw invalidDefaultBucket(bucketString);\r\n        }\r\n    };\r\n    Location.makeFromUrl = function (url) {\r\n        var location = null;\r\n        var bucketDomain = '([A-Za-z0-9.\\\\-_]+)';\r\n        function gsModify(loc) {\r\n            if (loc.path.charAt(loc.path.length - 1) === '/') {\r\n                loc.path_ = loc.path_.slice(0, -1);\r\n            }\r\n        }\r\n        var gsPath = '(/(.*))?$';\r\n        var path = '(/([^?#]*).*)?$';\r\n        var gsRegex = new RegExp('^gs://' + bucketDomain + gsPath, 'i');\r\n        var gsIndices = { bucket: 1, path: 3 };\r\n        function httpModify(loc) {\r\n            loc.path_ = decodeURIComponent(loc.path);\r\n        }\r\n        var version = 'v[A-Za-z0-9_]+';\r\n        var hostRegex = DEFAULT_HOST.replace(/[.]/g, '\\\\.');\r\n        var httpRegex = new RegExp(\"^https?://\" + hostRegex + \"/\" + version + \"/b/\" + bucketDomain + \"/o\" + path, 'i');\r\n        var httpIndices = { bucket: 1, path: 3 };\r\n        var groups = [\r\n            { regex: gsRegex, indices: gsIndices, postModify: gsModify },\r\n            { regex: httpRegex, indices: httpIndices, postModify: httpModify }\r\n        ];\r\n        for (var i = 0; i < groups.length; i++) {\r\n            var group = groups[i];\r\n            var captures = group.regex.exec(url);\r\n            if (captures) {\r\n                var bucketValue = captures[group.indices.bucket];\r\n                var pathValue = captures[group.indices.path];\r\n                if (!pathValue) {\r\n                    pathValue = '';\r\n                }\r\n                location = new Location(bucketValue, pathValue);\r\n                group.postModify(location);\r\n                break;\r\n            }\r\n        }\r\n        if (location == null) {\r\n            throw invalidUrl(url);\r\n        }\r\n        return location;\r\n    };\r\n    return Location;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Contains helper methods for manipulating paths.\r\n */\r\n/**\r\n * @return Null if the path is already at the root.\r\n */\r\nfunction parent(path) {\r\n    if (path.length == 0) {\r\n        return null;\r\n    }\r\n    var index = path.lastIndexOf('/');\r\n    if (index === -1) {\r\n        return '';\r\n    }\r\n    var newPath = path.slice(0, index);\r\n    return newPath;\r\n}\r\nfunction child(path, childPath) {\r\n    var canonicalChildPath = childPath\r\n        .split('/')\r\n        .filter(function (component) {\r\n        return component.length > 0;\r\n    })\r\n        .join('/');\r\n    if (path.length === 0) {\r\n        return canonicalChildPath;\r\n    }\r\n    else {\r\n        return path + '/' + canonicalChildPath;\r\n    }\r\n}\r\n/**\r\n * Returns the last component of a path.\r\n * '/foo/bar' -> 'bar'\r\n * '/foo/bar/baz/' -> 'baz/'\r\n * '/a' -> 'a'\r\n */\r\nfunction lastComponent(path) {\r\n    var index = path.lastIndexOf('/', path.length - 2);\r\n    if (index === -1) {\r\n        return path;\r\n    }\r\n    else {\r\n        return path.slice(index + 1);\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction makeUrl(urlPart) {\r\n    return \"https://\" + DEFAULT_HOST + \"/v0\" + urlPart;\r\n}\r\nfunction makeQueryString(params) {\r\n    var encode = encodeURIComponent;\r\n    var queryPart = '?';\r\n    forEach(params, function (key, val) {\r\n        var nextPart = encode(key) + '=' + encode(val);\r\n        queryPart = queryPart + nextPart + '&';\r\n    });\r\n    // Chop off the extra '&' or '?' on the end\r\n    queryPart = queryPart.slice(0, -1);\r\n    return queryPart;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction noXform_(metadata, value) {\r\n    return value;\r\n}\r\n/**\r\n * @struct\r\n */\r\nvar Mapping = /** @class */ (function () {\r\n    function Mapping(server, opt_local, opt_writable, opt_xform) {\r\n        this.server = server;\r\n        this.local = opt_local || server;\r\n        this.writable = !!opt_writable;\r\n        this.xform = opt_xform || noXform_;\r\n    }\r\n    return Mapping;\r\n}());\r\nvar mappings_ = null;\r\nfunction xformPath(fullPath) {\r\n    var valid = isString(fullPath);\r\n    if (!valid || fullPath.length < 2) {\r\n        return fullPath;\r\n    }\r\n    else {\r\n        fullPath = fullPath;\r\n        return lastComponent(fullPath);\r\n    }\r\n}\r\nfunction getMappings() {\r\n    if (mappings_) {\r\n        return mappings_;\r\n    }\r\n    var mappings = [];\r\n    mappings.push(new Mapping('bucket'));\r\n    mappings.push(new Mapping('generation'));\r\n    mappings.push(new Mapping('metageneration'));\r\n    mappings.push(new Mapping('name', 'fullPath', true));\r\n    function mappingsXformPath(metadata, fullPath) {\r\n        return xformPath(fullPath);\r\n    }\r\n    var nameMapping = new Mapping('name');\r\n    nameMapping.xform = mappingsXformPath;\r\n    mappings.push(nameMapping);\r\n    /**\r\n     * Coerces the second param to a number, if it is defined.\r\n     */\r\n    function xformSize(metadata, size) {\r\n        if (isDef(size)) {\r\n            return +size;\r\n        }\r\n        else {\r\n            return size;\r\n        }\r\n    }\r\n    var sizeMapping = new Mapping('size');\r\n    sizeMapping.xform = xformSize;\r\n    mappings.push(sizeMapping);\r\n    mappings.push(new Mapping('timeCreated'));\r\n    mappings.push(new Mapping('updated'));\r\n    mappings.push(new Mapping('md5Hash', null, true));\r\n    mappings.push(new Mapping('cacheControl', null, true));\r\n    mappings.push(new Mapping('contentDisposition', null, true));\r\n    mappings.push(new Mapping('contentEncoding', null, true));\r\n    mappings.push(new Mapping('contentLanguage', null, true));\r\n    mappings.push(new Mapping('contentType', null, true));\r\n    mappings.push(new Mapping('metadata', 'customMetadata', true));\r\n    mappings_ = mappings;\r\n    return mappings_;\r\n}\r\nfunction addRef(metadata, authWrapper) {\r\n    function generateRef() {\r\n        var bucket = metadata['bucket'];\r\n        var path = metadata['fullPath'];\r\n        var loc = new Location(bucket, path);\r\n        return authWrapper.makeStorageReference(loc);\r\n    }\r\n    Object.defineProperty(metadata, 'ref', { get: generateRef });\r\n}\r\nfunction fromResource(authWrapper, resource, mappings) {\r\n    var metadata = {};\r\n    metadata['type'] = 'file';\r\n    var len = mappings.length;\r\n    for (var i = 0; i < len; i++) {\r\n        var mapping = mappings[i];\r\n        metadata[mapping.local] = mapping.xform(metadata, resource[mapping.server]);\r\n    }\r\n    addRef(metadata, authWrapper);\r\n    return metadata;\r\n}\r\nfunction fromResourceString(authWrapper, resourceString, mappings) {\r\n    var obj = jsonObjectOrNull(resourceString);\r\n    if (obj === null) {\r\n        return null;\r\n    }\r\n    var resource = obj;\r\n    return fromResource(authWrapper, resource, mappings);\r\n}\r\nfunction downloadUrlFromResourceString(metadata, resourceString) {\r\n    var obj = jsonObjectOrNull(resourceString);\r\n    if (obj === null) {\r\n        return null;\r\n    }\r\n    if (!isString(obj['downloadTokens'])) {\r\n        // This can happen if objects are uploaded through GCS and retrieved\r\n        // through list, so we don't want to throw an Error.\r\n        return null;\r\n    }\r\n    var tokens = obj['downloadTokens'];\r\n    if (tokens.length === 0) {\r\n        return null;\r\n    }\r\n    var encode = encodeURIComponent;\r\n    var tokensList = tokens.split(',');\r\n    var urls = tokensList.map(function (token) {\r\n        var bucket = metadata['bucket'];\r\n        var path = metadata['fullPath'];\r\n        var urlPart = '/b/' + encode(bucket) + '/o/' + encode(path);\r\n        var base = makeUrl(urlPart);\r\n        var queryString = makeQueryString({\r\n            alt: 'media',\r\n            token: token\r\n        });\r\n        return base + queryString;\r\n    });\r\n    return urls[0];\r\n}\r\nfunction toResourceString(metadata, mappings) {\r\n    var resource = {};\r\n    var len = mappings.length;\r\n    for (var i = 0; i < len; i++) {\r\n        var mapping = mappings[i];\r\n        if (mapping.writable) {\r\n            resource[mapping.server] = metadata[mapping.local];\r\n        }\r\n    }\r\n    return JSON.stringify(resource);\r\n}\r\nfunction metadataValidator(p) {\r\n    var validType = p && isObject(p);\r\n    if (!validType) {\r\n        throw 'Expected Metadata object.';\r\n    }\r\n    for (var key in p) {\r\n        var val = p[key];\r\n        if (key === 'customMetadata') {\r\n            if (!isObject(val)) {\r\n                throw 'Expected object for \\'customMetadata\\' mapping.';\r\n            }\r\n        }\r\n        else {\r\n            if (isNonNullObject(val)) {\r\n                throw \"Mapping for '\" + key + \"' cannot be an object.\";\r\n            }\r\n        }\r\n    }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param name Name of the function.\r\n * @param specs Argument specs.\r\n * @param passed The actual arguments passed to the function.\r\n * @throws {fbs.Error} If the arguments are invalid.\r\n */\r\nfunction validate(name, specs, passed) {\r\n    var minArgs = specs.length;\r\n    var maxArgs = specs.length;\r\n    for (var i = 0; i < specs.length; i++) {\r\n        if (specs[i].optional) {\r\n            minArgs = i;\r\n            break;\r\n        }\r\n    }\r\n    var validLength = minArgs <= passed.length && passed.length <= maxArgs;\r\n    if (!validLength) {\r\n        throw invalidArgumentCount(minArgs, maxArgs, name, passed.length);\r\n    }\r\n    for (var i = 0; i < passed.length; i++) {\r\n        try {\r\n            specs[i].validator(passed[i]);\r\n        }\r\n        catch (e) {\r\n            if (e instanceof Error) {\r\n                throw invalidArgument(i, name, e.message);\r\n            }\r\n            else {\r\n                throw invalidArgument(i, name, e);\r\n            }\r\n        }\r\n    }\r\n}\r\n/**\r\n * @struct\r\n */\r\nvar ArgSpec = /** @class */ (function () {\r\n    function ArgSpec(validator, opt_optional) {\r\n        var self = this;\r\n        this.validator = function (p) {\r\n            if (self.optional && !isJustDef(p)) {\r\n                return;\r\n            }\r\n            validator(p);\r\n        };\r\n        this.optional = !!opt_optional;\r\n    }\r\n    return ArgSpec;\r\n}());\r\nfunction and_(v1, v2) {\r\n    return function (p) {\r\n        v1(p);\r\n        v2(p);\r\n    };\r\n}\r\nfunction stringSpec(opt_validator, opt_optional) {\r\n    function stringValidator(p) {\r\n        if (!isString(p)) {\r\n            throw 'Expected string.';\r\n        }\r\n    }\r\n    var validator;\r\n    if (opt_validator) {\r\n        validator = and_(stringValidator, opt_validator);\r\n    }\r\n    else {\r\n        validator = stringValidator;\r\n    }\r\n    return new ArgSpec(validator, opt_optional);\r\n}\r\nfunction uploadDataSpec() {\r\n    function validator(p) {\r\n        var valid = p instanceof Uint8Array ||\r\n            p instanceof ArrayBuffer ||\r\n            (isNativeBlobDefined() && p instanceof Blob);\r\n        if (!valid) {\r\n            throw 'Expected Blob or File.';\r\n        }\r\n    }\r\n    return new ArgSpec(validator);\r\n}\r\nfunction metadataSpec(opt_optional) {\r\n    return new ArgSpec(metadataValidator, opt_optional);\r\n}\r\nfunction nonNegativeNumberSpec() {\r\n    function validator(p) {\r\n        var valid = isNumber(p) && p >= 0;\r\n        if (!valid) {\r\n            throw 'Expected a number 0 or greater.';\r\n        }\r\n    }\r\n    return new ArgSpec(validator);\r\n}\r\nfunction looseObjectSpec(opt_validator, opt_optional) {\r\n    function validator(p) {\r\n        var isLooseObject = p === null || (isDef(p) && p instanceof Object);\r\n        if (!isLooseObject) {\r\n            throw 'Expected an Object.';\r\n        }\r\n        if (opt_validator !== undefined && opt_validator !== null) {\r\n            opt_validator(p);\r\n        }\r\n    }\r\n    return new ArgSpec(validator, opt_optional);\r\n}\r\nfunction nullFunctionSpec(opt_optional) {\r\n    function validator(p) {\r\n        var valid = p === null || isFunction(p);\r\n        if (!valid) {\r\n            throw 'Expected a Function.';\r\n        }\r\n    }\r\n    return new ArgSpec(validator, opt_optional);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getBlobBuilder() {\r\n    if (typeof BlobBuilder !== 'undefined') {\r\n        return BlobBuilder;\r\n    }\r\n    else if (typeof WebKitBlobBuilder !== 'undefined') {\r\n        return WebKitBlobBuilder;\r\n    }\r\n    else {\r\n        return undefined;\r\n    }\r\n}\r\n/**\r\n * Concatenates one or more values together and converts them to a Blob.\r\n *\r\n * @param var_args The values that will make up the resulting blob.\r\n * @return The blob.\r\n */\r\nfunction getBlob() {\r\n    var var_args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        var_args[_i] = arguments[_i];\r\n    }\r\n    var BlobBuilder = getBlobBuilder();\r\n    if (BlobBuilder !== undefined) {\r\n        var bb = new BlobBuilder();\r\n        for (var i = 0; i < var_args.length; i++) {\r\n            bb.append(var_args[i]);\r\n        }\r\n        return bb.getBlob();\r\n    }\r\n    else {\r\n        if (isNativeBlobDefined()) {\r\n            return new Blob(var_args);\r\n        }\r\n        else {\r\n            throw Error(\"This browser doesn't seem to support creating Blobs\");\r\n        }\r\n    }\r\n}\r\n/**\r\n * Slices the blob. The returned blob contains data from the start byte\r\n * (inclusive) till the end byte (exclusive). Negative indices cannot be used.\r\n *\r\n * @param blob The blob to be sliced.\r\n * @param start Index of the starting byte.\r\n * @param end Index of the ending byte.\r\n * @return The blob slice or null if not supported.\r\n */\r\nfunction sliceBlob(blob, start, end) {\r\n    if (blob.webkitSlice) {\r\n        return blob.webkitSlice(start, end);\r\n    }\r\n    else if (blob.mozSlice) {\r\n        return blob.mozSlice(start, end);\r\n    }\r\n    else if (blob.slice) {\r\n        return blob.slice(start, end);\r\n    }\r\n    return null;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param opt_elideCopy If true, doesn't copy mutable input data\r\n *     (e.g. Uint8Arrays). Pass true only if you know the objects will not be\r\n *     modified after this blob's construction.\r\n */\r\nvar FbsBlob = /** @class */ (function () {\r\n    function FbsBlob(data, opt_elideCopy) {\r\n        var size = 0;\r\n        var blobType = '';\r\n        if (isNativeBlob(data)) {\r\n            this.data_ = data;\r\n            size = data.size;\r\n            blobType = data.type;\r\n        }\r\n        else if (data instanceof ArrayBuffer) {\r\n            if (opt_elideCopy) {\r\n                this.data_ = new Uint8Array(data);\r\n            }\r\n            else {\r\n                this.data_ = new Uint8Array(data.byteLength);\r\n                this.data_.set(new Uint8Array(data));\r\n            }\r\n            size = this.data_.length;\r\n        }\r\n        else if (data instanceof Uint8Array) {\r\n            if (opt_elideCopy) {\r\n                this.data_ = data;\r\n            }\r\n            else {\r\n                this.data_ = new Uint8Array(data.length);\r\n                this.data_.set(data);\r\n            }\r\n            size = data.length;\r\n        }\r\n        this.size_ = size;\r\n        this.type_ = blobType;\r\n    }\r\n    FbsBlob.prototype.size = function () {\r\n        return this.size_;\r\n    };\r\n    FbsBlob.prototype.type = function () {\r\n        return this.type_;\r\n    };\r\n    FbsBlob.prototype.slice = function (startByte, endByte) {\r\n        if (isNativeBlob(this.data_)) {\r\n            var realBlob = this.data_;\r\n            var sliced = sliceBlob(realBlob, startByte, endByte);\r\n            if (sliced === null) {\r\n                return null;\r\n            }\r\n            return new FbsBlob(sliced);\r\n        }\r\n        else {\r\n            var slice = new Uint8Array(this.data_.buffer, startByte, endByte - startByte);\r\n            return new FbsBlob(slice, true);\r\n        }\r\n    };\r\n    FbsBlob.getBlob = function () {\r\n        var var_args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            var_args[_i] = arguments[_i];\r\n        }\r\n        if (isNativeBlobDefined()) {\r\n            var blobby = var_args.map(function (val) {\r\n                if (val instanceof FbsBlob) {\r\n                    return val.data_;\r\n                }\r\n                else {\r\n                    return val;\r\n                }\r\n            });\r\n            return new FbsBlob(getBlob.apply(null, blobby));\r\n        }\r\n        else {\r\n            var uint8Arrays = var_args.map(function (val) {\r\n                if (isString(val)) {\r\n                    return dataFromString(StringFormat.RAW, val).data;\r\n                }\r\n                else {\r\n                    // Blobs don't exist, so this has to be a Uint8Array.\r\n                    return val.data_;\r\n                }\r\n            });\r\n            var finalLength_1 = 0;\r\n            uint8Arrays.forEach(function (array) {\r\n                finalLength_1 += array.byteLength;\r\n            });\r\n            var merged_1 = new Uint8Array(finalLength_1);\r\n            var index_1 = 0;\r\n            uint8Arrays.forEach(function (array) {\r\n                for (var i = 0; i < array.length; i++) {\r\n                    merged_1[index_1++] = array[i];\r\n                }\r\n            });\r\n            return new FbsBlob(merged_1, true);\r\n        }\r\n    };\r\n    FbsBlob.prototype.uploadData = function () {\r\n        return this.data_;\r\n    };\r\n    return FbsBlob;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns true if the object is contained in the array (compared with ===).\r\n * @template T\r\n */\r\nfunction contains$1(array, elem) {\r\n    return array.indexOf(elem) !== -1;\r\n}\r\n/**\r\n * Returns a shallow copy of the array or array-like object (e.g. arguments).\r\n * @template T\r\n */\r\nfunction clone$1(arraylike) {\r\n    return Array.prototype.slice.call(arraylike);\r\n}\r\n/**\r\n * Removes the given element from the given array, if it is contained.\r\n * Directly modifies the passed-in array.\r\n * @template T\r\n */\r\nfunction remove(array, elem) {\r\n    var i = array.indexOf(elem);\r\n    if (i !== -1) {\r\n        array.splice(i, 1);\r\n    }\r\n}\n\nvar RequestInfo = /** @class */ (function () {\r\n    function RequestInfo(url, method, \r\n    /**\r\n     * Returns the value with which to resolve the request's promise. Only called\r\n     * if the request is successful. Throw from this function to reject the\r\n     * returned Request's promise with the thrown error.\r\n     * Note: The XhrIo passed to this function may be reused after this callback\r\n     * returns. Do not keep a reference to it in any way.\r\n     */\r\n    handler, timeout) {\r\n        this.url = url;\r\n        this.method = method;\r\n        this.handler = handler;\r\n        this.timeout = timeout;\r\n        this.urlParams = {};\r\n        this.headers = {};\r\n        this.body = null;\r\n        this.errorHandler = null;\r\n        /**\r\n         * Called with the current number of bytes uploaded and total size (-1 if not\r\n         * computable) of the request body (i.e. used to report upload progress).\r\n         */\r\n        this.progressCallback = null;\r\n        this.successCodes = [200];\r\n        this.additionalRetryCodes = [];\r\n    }\r\n    return RequestInfo;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws the UNKNOWN FirebaseStorageError if cndn is false.\r\n */\r\nfunction handlerCheck(cndn) {\r\n    if (!cndn) {\r\n        throw unknown();\r\n    }\r\n}\r\nfunction metadataHandler(authWrapper, mappings) {\r\n    function handler(xhr, text) {\r\n        var metadata = fromResourceString(authWrapper, text, mappings);\r\n        handlerCheck(metadata !== null);\r\n        return metadata;\r\n    }\r\n    return handler;\r\n}\r\nfunction downloadUrlHandler(authWrapper, mappings) {\r\n    function handler(xhr, text) {\r\n        var metadata = fromResourceString(authWrapper, text, mappings);\r\n        handlerCheck(metadata !== null);\r\n        return downloadUrlFromResourceString(metadata, text);\r\n    }\r\n    return handler;\r\n}\r\nfunction sharedErrorHandler(location) {\r\n    function errorHandler(xhr, err) {\r\n        var newErr;\r\n        if (xhr.getStatus() === 401) {\r\n            newErr = unauthenticated();\r\n        }\r\n        else {\r\n            if (xhr.getStatus() === 402) {\r\n                newErr = quotaExceeded(location.bucket);\r\n            }\r\n            else {\r\n                if (xhr.getStatus() === 403) {\r\n                    newErr = unauthorized(location.path);\r\n                }\r\n                else {\r\n                    newErr = err;\r\n                }\r\n            }\r\n        }\r\n        newErr.setServerResponseProp(err.serverResponseProp());\r\n        return newErr;\r\n    }\r\n    return errorHandler;\r\n}\r\nfunction objectErrorHandler(location) {\r\n    var shared = sharedErrorHandler(location);\r\n    function errorHandler(xhr, err) {\r\n        var newErr = shared(xhr, err);\r\n        if (xhr.getStatus() === 404) {\r\n            newErr = objectNotFound(location.path);\r\n        }\r\n        newErr.setServerResponseProp(err.serverResponseProp());\r\n        return newErr;\r\n    }\r\n    return errorHandler;\r\n}\r\nfunction getMetadata(authWrapper, location, mappings) {\r\n    var urlPart = location.fullServerUrl();\r\n    var url = makeUrl(urlPart);\r\n    var method = 'GET';\r\n    var timeout = authWrapper.maxOperationRetryTime();\r\n    var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\r\n    requestInfo.errorHandler = objectErrorHandler(location);\r\n    return requestInfo;\r\n}\r\nfunction getDownloadUrl(authWrapper, location, mappings) {\r\n    var urlPart = location.fullServerUrl();\r\n    var url = makeUrl(urlPart);\r\n    var method = 'GET';\r\n    var timeout = authWrapper.maxOperationRetryTime();\r\n    var requestInfo = new RequestInfo(url, method, downloadUrlHandler(authWrapper, mappings), timeout);\r\n    requestInfo.errorHandler = objectErrorHandler(location);\r\n    return requestInfo;\r\n}\r\nfunction updateMetadata(authWrapper, location, metadata, mappings) {\r\n    var urlPart = location.fullServerUrl();\r\n    var url = makeUrl(urlPart);\r\n    var method = 'PATCH';\r\n    var body = toResourceString(metadata, mappings);\r\n    var headers = { 'Content-Type': 'application/json; charset=utf-8' };\r\n    var timeout = authWrapper.maxOperationRetryTime();\r\n    var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\r\n    requestInfo.headers = headers;\r\n    requestInfo.body = body;\r\n    requestInfo.errorHandler = objectErrorHandler(location);\r\n    return requestInfo;\r\n}\r\nfunction deleteObject(authWrapper, location) {\r\n    var urlPart = location.fullServerUrl();\r\n    var url = makeUrl(urlPart);\r\n    var method = 'DELETE';\r\n    var timeout = authWrapper.maxOperationRetryTime();\r\n    function handler(xhr, text) { }\r\n    var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n    requestInfo.successCodes = [200, 204];\r\n    requestInfo.errorHandler = objectErrorHandler(location);\r\n    return requestInfo;\r\n}\r\nfunction determineContentType_(metadata, blob) {\r\n    return ((metadata && metadata['contentType']) ||\r\n        (blob && blob.type()) ||\r\n        'application/octet-stream');\r\n}\r\nfunction metadataForUpload_(location, blob, opt_metadata) {\r\n    var metadata = clone(opt_metadata);\r\n    metadata['fullPath'] = location.path;\r\n    metadata['size'] = blob.size();\r\n    if (!metadata['contentType']) {\r\n        metadata['contentType'] = determineContentType_(null, blob);\r\n    }\r\n    return metadata;\r\n}\r\nfunction multipartUpload(authWrapper, location, mappings, blob, opt_metadata) {\r\n    var urlPart = location.bucketOnlyServerUrl();\r\n    var headers = {\r\n        'X-Goog-Upload-Protocol': 'multipart'\r\n    };\r\n    function genBoundary() {\r\n        var str = '';\r\n        for (var i = 0; i < 2; i++) {\r\n            str =\r\n                str +\r\n                    Math.random()\r\n                        .toString()\r\n                        .slice(2);\r\n        }\r\n        return str;\r\n    }\r\n    var boundary = genBoundary();\r\n    headers['Content-Type'] = 'multipart/related; boundary=' + boundary;\r\n    var metadata = metadataForUpload_(location, blob, opt_metadata);\r\n    var metadataString = toResourceString(metadata, mappings);\r\n    var preBlobPart = '--' +\r\n        boundary +\r\n        '\\r\\n' +\r\n        'Content-Type: application/json; charset=utf-8\\r\\n\\r\\n' +\r\n        metadataString +\r\n        '\\r\\n--' +\r\n        boundary +\r\n        '\\r\\n' +\r\n        'Content-Type: ' +\r\n        metadata['contentType'] +\r\n        '\\r\\n\\r\\n';\r\n    var postBlobPart = '\\r\\n--' + boundary + '--';\r\n    var body = FbsBlob.getBlob(preBlobPart, blob, postBlobPart);\r\n    if (body === null) {\r\n        throw cannotSliceBlob();\r\n    }\r\n    var urlParams = { name: metadata['fullPath'] };\r\n    var url = makeUrl(urlPart);\r\n    var method = 'POST';\r\n    var timeout = authWrapper.maxUploadRetryTime();\r\n    var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\r\n    requestInfo.urlParams = urlParams;\r\n    requestInfo.headers = headers;\r\n    requestInfo.body = body.uploadData();\r\n    requestInfo.errorHandler = sharedErrorHandler(location);\r\n    return requestInfo;\r\n}\r\n/**\r\n * @param current The number of bytes that have been uploaded so far.\r\n * @param total The total number of bytes in the upload.\r\n * @param opt_finalized True if the server has finished the upload.\r\n * @param opt_metadata The upload metadata, should\r\n *     only be passed if opt_finalized is true.\r\n * @struct\r\n */\r\nvar ResumableUploadStatus = /** @class */ (function () {\r\n    function ResumableUploadStatus(current, total, finalized, metadata) {\r\n        this.current = current;\r\n        this.total = total;\r\n        this.finalized = !!finalized;\r\n        this.metadata = metadata || null;\r\n    }\r\n    return ResumableUploadStatus;\r\n}());\r\nfunction checkResumeHeader_(xhr, opt_allowed) {\r\n    var status;\r\n    try {\r\n        status = xhr.getResponseHeader('X-Goog-Upload-Status');\r\n    }\r\n    catch (e) {\r\n        handlerCheck(false);\r\n    }\r\n    var allowed = opt_allowed || ['active'];\r\n    handlerCheck(contains$1(allowed, status));\r\n    return status;\r\n}\r\nfunction createResumableUpload(authWrapper, location, mappings, blob, opt_metadata) {\r\n    var urlPart = location.bucketOnlyServerUrl();\r\n    var metadata = metadataForUpload_(location, blob, opt_metadata);\r\n    var urlParams = { name: metadata['fullPath'] };\r\n    var url = makeUrl(urlPart);\r\n    var method = 'POST';\r\n    var headers = {\r\n        'X-Goog-Upload-Protocol': 'resumable',\r\n        'X-Goog-Upload-Command': 'start',\r\n        'X-Goog-Upload-Header-Content-Length': blob.size(),\r\n        'X-Goog-Upload-Header-Content-Type': metadata['contentType'],\r\n        'Content-Type': 'application/json; charset=utf-8'\r\n    };\r\n    var body = toResourceString(metadata, mappings);\r\n    var timeout = authWrapper.maxUploadRetryTime();\r\n    function handler(xhr, text) {\r\n        checkResumeHeader_(xhr);\r\n        var url;\r\n        try {\r\n            url = xhr.getResponseHeader('X-Goog-Upload-URL');\r\n        }\r\n        catch (e) {\r\n            handlerCheck(false);\r\n        }\r\n        handlerCheck(isString(url));\r\n        return url;\r\n    }\r\n    var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n    requestInfo.urlParams = urlParams;\r\n    requestInfo.headers = headers;\r\n    requestInfo.body = body;\r\n    requestInfo.errorHandler = sharedErrorHandler(location);\r\n    return requestInfo;\r\n}\r\n/**\r\n * @param url From a call to fbs.requests.createResumableUpload.\r\n */\r\nfunction getResumableUploadStatus(authWrapper, location, url, blob) {\r\n    var headers = { 'X-Goog-Upload-Command': 'query' };\r\n    function handler(xhr, text) {\r\n        var status = checkResumeHeader_(xhr, ['active', 'final']);\r\n        var sizeString;\r\n        try {\r\n            sizeString = xhr.getResponseHeader('X-Goog-Upload-Size-Received');\r\n        }\r\n        catch (e) {\r\n            handlerCheck(false);\r\n        }\r\n        var size = parseInt(sizeString, 10);\r\n        handlerCheck(!isNaN(size));\r\n        return new ResumableUploadStatus(size, blob.size(), status === 'final');\r\n    }\r\n    var method = 'POST';\r\n    var timeout = authWrapper.maxUploadRetryTime();\r\n    var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n    requestInfo.headers = headers;\r\n    requestInfo.errorHandler = sharedErrorHandler(location);\r\n    return requestInfo;\r\n}\r\n/**\r\n * Any uploads via the resumable upload API must transfer a number of bytes\r\n * that is a multiple of this number.\r\n */\r\nvar resumableUploadChunkSize = 256 * 1024;\r\n/**\r\n * @param url From a call to fbs.requests.createResumableUpload.\r\n * @param chunkSize Number of bytes to upload.\r\n * @param opt_status The previous status.\r\n *     If not passed or null, we start from the beginning.\r\n * @throws fbs.Error If the upload is already complete, the passed in status\r\n *     has a final size inconsistent with the blob, or the blob cannot be sliced\r\n *     for upload.\r\n */\r\nfunction continueResumableUpload(location, authWrapper, url, blob, chunkSize, mappings, opt_status, opt_progressCallback) {\r\n    // TODO(andysoto): standardize on internal asserts\r\n    // assert(!(opt_status && opt_status.finalized));\r\n    var status = new ResumableUploadStatus(0, 0);\r\n    if (opt_status) {\r\n        status.current = opt_status.current;\r\n        status.total = opt_status.total;\r\n    }\r\n    else {\r\n        status.current = 0;\r\n        status.total = blob.size();\r\n    }\r\n    if (blob.size() !== status.total) {\r\n        throw serverFileWrongSize();\r\n    }\r\n    var bytesLeft = status.total - status.current;\r\n    var bytesToUpload = bytesLeft;\r\n    if (chunkSize > 0) {\r\n        bytesToUpload = Math.min(bytesToUpload, chunkSize);\r\n    }\r\n    var startByte = status.current;\r\n    var endByte = startByte + bytesToUpload;\r\n    var uploadCommand = bytesToUpload === bytesLeft ? 'upload, finalize' : 'upload';\r\n    var headers = {\r\n        'X-Goog-Upload-Command': uploadCommand,\r\n        'X-Goog-Upload-Offset': status.current\r\n    };\r\n    var body = blob.slice(startByte, endByte);\r\n    if (body === null) {\r\n        throw cannotSliceBlob();\r\n    }\r\n    function handler(xhr, text) {\r\n        // TODO(andysoto): Verify the MD5 of each uploaded range:\r\n        // the 'x-range-md5' header comes back with status code 308 responses.\r\n        // We'll only be able to bail out though, because you can't re-upload a\r\n        // range that you previously uploaded.\r\n        var uploadStatus = checkResumeHeader_(xhr, ['active', 'final']);\r\n        var newCurrent = status.current + bytesToUpload;\r\n        var size = blob.size();\r\n        var metadata;\r\n        if (uploadStatus === 'final') {\r\n            metadata = metadataHandler(authWrapper, mappings)(xhr, text);\r\n        }\r\n        else {\r\n            metadata = null;\r\n        }\r\n        return new ResumableUploadStatus(newCurrent, size, uploadStatus === 'final', metadata);\r\n    }\r\n    var method = 'POST';\r\n    var timeout = authWrapper.maxUploadRetryTime();\r\n    var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n    requestInfo.headers = headers;\r\n    requestInfo.body = body.uploadData();\r\n    requestInfo.progressCallback = opt_progressCallback || null;\r\n    requestInfo.errorHandler = sharedErrorHandler(location);\r\n    return requestInfo;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @struct\r\n */\r\nvar Observer = /** @class */ (function () {\r\n    function Observer(nextOrObserver, opt_error, opt_complete) {\r\n        var asFunctions = isFunction(nextOrObserver) ||\r\n            isDef(opt_error) ||\r\n            isDef(opt_complete);\r\n        if (asFunctions) {\r\n            this.next = nextOrObserver;\r\n            this.error = opt_error || null;\r\n            this.complete = opt_complete || null;\r\n        }\r\n        else {\r\n            var observer = nextOrObserver;\r\n            this.next = observer.next || null;\r\n            this.error = observer.error || null;\r\n            this.complete = observer.complete || null;\r\n        }\r\n    }\r\n    return Observer;\r\n}());\n\nvar UploadTaskSnapshot = /** @class */ (function () {\r\n    function UploadTaskSnapshot(bytesTransferred, totalBytes, state, metadata, task, ref) {\r\n        this.bytesTransferred = bytesTransferred;\r\n        this.totalBytes = totalBytes;\r\n        this.state = state;\r\n        this.metadata = metadata;\r\n        this.task = task;\r\n        this.ref = ref;\r\n    }\r\n    return UploadTaskSnapshot;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a function that invokes f with its arguments asynchronously as a\r\n * microtask, i.e. as soon as possible after the current script returns back\r\n * into browser code.\r\n */\r\nfunction async(f) {\r\n    return function () {\r\n        var argsToForward = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            argsToForward[_i] = arguments[_i];\r\n        }\r\n        resolve(true).then(function () {\r\n            f.apply(null, argsToForward);\r\n        });\r\n    };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Represents a blob being uploaded. Can be used to pause/resume/cancel the\r\n * upload and manage callbacks for various events.\r\n */\r\nvar UploadTask = /** @class */ (function () {\r\n    /**\r\n     * @param ref The firebaseStorage.Reference object this task came\r\n     *     from, untyped to avoid cyclic dependencies.\r\n     * @param blob The blob to upload.\r\n     */\r\n    function UploadTask(ref, authWrapper, location, mappings, blob, metadata) {\r\n        var _this = this;\r\n        if (metadata === void 0) { metadata = null; }\r\n        this.transferred_ = 0;\r\n        this.needToFetchStatus_ = false;\r\n        this.needToFetchMetadata_ = false;\r\n        this.observers_ = [];\r\n        this.error_ = null;\r\n        this.uploadUrl_ = null;\r\n        this.request_ = null;\r\n        this.chunkMultiplier_ = 1;\r\n        this.resolve_ = null;\r\n        this.reject_ = null;\r\n        this.ref_ = ref;\r\n        this.authWrapper_ = authWrapper;\r\n        this.location_ = location;\r\n        this.blob_ = blob;\r\n        this.metadata_ = metadata;\r\n        this.mappings_ = mappings;\r\n        this.resumable_ = this.shouldDoResumable_(this.blob_);\r\n        this.state_ = InternalTaskState.RUNNING;\r\n        this.errorHandler_ = function (error) {\r\n            _this.request_ = null;\r\n            _this.chunkMultiplier_ = 1;\r\n            if (error.codeEquals(Code.CANCELED)) {\r\n                _this.needToFetchStatus_ = true;\r\n                _this.completeTransitions_();\r\n            }\r\n            else {\r\n                _this.error_ = error;\r\n                _this.transition_(InternalTaskState.ERROR);\r\n            }\r\n        };\r\n        this.metadataErrorHandler_ = function (error) {\r\n            _this.request_ = null;\r\n            if (error.codeEquals(Code.CANCELED)) {\r\n                _this.completeTransitions_();\r\n            }\r\n            else {\r\n                _this.error_ = error;\r\n                _this.transition_(InternalTaskState.ERROR);\r\n            }\r\n        };\r\n        this.promise_ = make(function (resolve, reject) {\r\n            _this.resolve_ = resolve;\r\n            _this.reject_ = reject;\r\n            _this.start_();\r\n        });\r\n        // Prevent uncaught rejections on the internal promise from bubbling out\r\n        // to the top level with a dummy handler.\r\n        this.promise_.then(null, function () { });\r\n    }\r\n    UploadTask.prototype.makeProgressCallback_ = function () {\r\n        var _this = this;\r\n        var sizeBefore = this.transferred_;\r\n        return function (loaded, total) {\r\n            _this.updateProgress_(sizeBefore + loaded);\r\n        };\r\n    };\r\n    UploadTask.prototype.shouldDoResumable_ = function (blob) {\r\n        return blob.size() > 256 * 1024;\r\n    };\r\n    UploadTask.prototype.start_ = function () {\r\n        if (this.state_ !== InternalTaskState.RUNNING) {\r\n            // This can happen if someone pauses us in a resume callback, for example.\r\n            return;\r\n        }\r\n        if (this.request_ !== null) {\r\n            return;\r\n        }\r\n        if (this.resumable_) {\r\n            if (this.uploadUrl_ === null) {\r\n                this.createResumable_();\r\n            }\r\n            else {\r\n                if (this.needToFetchStatus_) {\r\n                    this.fetchStatus_();\r\n                }\r\n                else {\r\n                    if (this.needToFetchMetadata_) {\r\n                        // Happens if we miss the metadata on upload completion.\r\n                        this.fetchMetadata_();\r\n                    }\r\n                    else {\r\n                        this.continueUpload_();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            this.oneShotUpload_();\r\n        }\r\n    };\r\n    UploadTask.prototype.resolveToken_ = function (callback) {\r\n        var _this = this;\r\n        this.authWrapper_.getAuthToken().then(function (authToken) {\r\n            switch (_this.state_) {\r\n                case InternalTaskState.RUNNING:\r\n                    callback(authToken);\r\n                    break;\r\n                case InternalTaskState.CANCELING:\r\n                    _this.transition_(InternalTaskState.CANCELED);\r\n                    break;\r\n                case InternalTaskState.PAUSING:\r\n                    _this.transition_(InternalTaskState.PAUSED);\r\n                    break;\r\n                default:\r\n            }\r\n        });\r\n    };\r\n    // TODO(andysoto): assert false\r\n    UploadTask.prototype.createResumable_ = function () {\r\n        var _this = this;\r\n        this.resolveToken_(function (authToken) {\r\n            var requestInfo = createResumableUpload(_this.authWrapper_, _this.location_, _this.mappings_, _this.blob_, _this.metadata_);\r\n            var createRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n            _this.request_ = createRequest;\r\n            createRequest.getPromise().then(function (url) {\r\n                _this.request_ = null;\r\n                _this.uploadUrl_ = url;\r\n                _this.needToFetchStatus_ = false;\r\n                _this.completeTransitions_();\r\n            }, _this.errorHandler_);\r\n        });\r\n    };\r\n    UploadTask.prototype.fetchStatus_ = function () {\r\n        var _this = this;\r\n        // TODO(andysoto): assert(this.uploadUrl_ !== null);\r\n        var url = this.uploadUrl_;\r\n        this.resolveToken_(function (authToken) {\r\n            var requestInfo = getResumableUploadStatus(_this.authWrapper_, _this.location_, url, _this.blob_);\r\n            var statusRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n            _this.request_ = statusRequest;\r\n            statusRequest.getPromise().then(function (status) {\r\n                status = status;\r\n                _this.request_ = null;\r\n                _this.updateProgress_(status.current);\r\n                _this.needToFetchStatus_ = false;\r\n                if (status.finalized) {\r\n                    _this.needToFetchMetadata_ = true;\r\n                }\r\n                _this.completeTransitions_();\r\n            }, _this.errorHandler_);\r\n        });\r\n    };\r\n    UploadTask.prototype.continueUpload_ = function () {\r\n        var _this = this;\r\n        var chunkSize = resumableUploadChunkSize * this.chunkMultiplier_;\r\n        var status = new ResumableUploadStatus(this.transferred_, this.blob_.size());\r\n        // TODO(andysoto): assert(this.uploadUrl_ !== null);\r\n        var url = this.uploadUrl_;\r\n        this.resolveToken_(function (authToken) {\r\n            var requestInfo;\r\n            try {\r\n                requestInfo = continueResumableUpload(_this.location_, _this.authWrapper_, url, _this.blob_, chunkSize, _this.mappings_, status, _this.makeProgressCallback_());\r\n            }\r\n            catch (e) {\r\n                _this.error_ = e;\r\n                _this.transition_(InternalTaskState.ERROR);\r\n                return;\r\n            }\r\n            var uploadRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n            _this.request_ = uploadRequest;\r\n            uploadRequest\r\n                .getPromise()\r\n                .then(function (newStatus) {\r\n                _this.increaseMultiplier_();\r\n                _this.request_ = null;\r\n                _this.updateProgress_(newStatus.current);\r\n                if (newStatus.finalized) {\r\n                    _this.metadata_ = newStatus.metadata;\r\n                    _this.transition_(InternalTaskState.SUCCESS);\r\n                }\r\n                else {\r\n                    _this.completeTransitions_();\r\n                }\r\n            }, _this.errorHandler_);\r\n        });\r\n    };\r\n    UploadTask.prototype.increaseMultiplier_ = function () {\r\n        var currentSize = resumableUploadChunkSize * this.chunkMultiplier_;\r\n        // Max chunk size is 32M.\r\n        if (currentSize < 32 * 1024 * 1024) {\r\n            this.chunkMultiplier_ *= 2;\r\n        }\r\n    };\r\n    UploadTask.prototype.fetchMetadata_ = function () {\r\n        var _this = this;\r\n        this.resolveToken_(function (authToken) {\r\n            var requestInfo = getMetadata(_this.authWrapper_, _this.location_, _this.mappings_);\r\n            var metadataRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n            _this.request_ = metadataRequest;\r\n            metadataRequest.getPromise().then(function (metadata) {\r\n                _this.request_ = null;\r\n                _this.metadata_ = metadata;\r\n                _this.transition_(InternalTaskState.SUCCESS);\r\n            }, _this.metadataErrorHandler_);\r\n        });\r\n    };\r\n    UploadTask.prototype.oneShotUpload_ = function () {\r\n        var _this = this;\r\n        this.resolveToken_(function (authToken) {\r\n            var requestInfo = multipartUpload(_this.authWrapper_, _this.location_, _this.mappings_, _this.blob_, _this.metadata_);\r\n            var multipartRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n            _this.request_ = multipartRequest;\r\n            multipartRequest.getPromise().then(function (metadata) {\r\n                _this.request_ = null;\r\n                _this.metadata_ = metadata;\r\n                _this.updateProgress_(_this.blob_.size());\r\n                _this.transition_(InternalTaskState.SUCCESS);\r\n            }, _this.errorHandler_);\r\n        });\r\n    };\r\n    UploadTask.prototype.updateProgress_ = function (transferred) {\r\n        var old = this.transferred_;\r\n        this.transferred_ = transferred;\r\n        // A progress update can make the \"transferred\" value smaller (e.g. a\r\n        // partial upload not completed by server, after which the \"transferred\"\r\n        // value may reset to the value at the beginning of the request).\r\n        if (this.transferred_ !== old) {\r\n            this.notifyObservers_();\r\n        }\r\n    };\r\n    UploadTask.prototype.transition_ = function (state) {\r\n        if (this.state_ === state) {\r\n            return;\r\n        }\r\n        switch (state) {\r\n            case InternalTaskState.CANCELING:\r\n                // TODO(andysoto):\r\n                // assert(this.state_ === InternalTaskState.RUNNING ||\r\n                //        this.state_ === InternalTaskState.PAUSING);\r\n                this.state_ = state;\r\n                if (this.request_ !== null) {\r\n                    this.request_.cancel();\r\n                }\r\n                break;\r\n            case InternalTaskState.PAUSING:\r\n                // TODO(andysoto):\r\n                // assert(this.state_ === InternalTaskState.RUNNING);\r\n                this.state_ = state;\r\n                if (this.request_ !== null) {\r\n                    this.request_.cancel();\r\n                }\r\n                break;\r\n            case InternalTaskState.RUNNING:\r\n                // TODO(andysoto):\r\n                // assert(this.state_ === InternalTaskState.PAUSED ||\r\n                //        this.state_ === InternalTaskState.PAUSING);\r\n                var wasPaused = this.state_ === InternalTaskState.PAUSED;\r\n                this.state_ = state;\r\n                if (wasPaused) {\r\n                    this.notifyObservers_();\r\n                    this.start_();\r\n                }\r\n                break;\r\n            case InternalTaskState.PAUSED:\r\n                // TODO(andysoto):\r\n                // assert(this.state_ === InternalTaskState.PAUSING);\r\n                this.state_ = state;\r\n                this.notifyObservers_();\r\n                break;\r\n            case InternalTaskState.CANCELED:\r\n                // TODO(andysoto):\r\n                // assert(this.state_ === InternalTaskState.PAUSED ||\r\n                //        this.state_ === InternalTaskState.CANCELING);\r\n                this.error_ = canceled();\r\n                this.state_ = state;\r\n                this.notifyObservers_();\r\n                break;\r\n            case InternalTaskState.ERROR:\r\n                // TODO(andysoto):\r\n                // assert(this.state_ === InternalTaskState.RUNNING ||\r\n                //        this.state_ === InternalTaskState.PAUSING ||\r\n                //        this.state_ === InternalTaskState.CANCELING);\r\n                this.state_ = state;\r\n                this.notifyObservers_();\r\n                break;\r\n            case InternalTaskState.SUCCESS:\r\n                // TODO(andysoto):\r\n                // assert(this.state_ === InternalTaskState.RUNNING ||\r\n                //        this.state_ === InternalTaskState.PAUSING ||\r\n                //        this.state_ === InternalTaskState.CANCELING);\r\n                this.state_ = state;\r\n                this.notifyObservers_();\r\n                break;\r\n        }\r\n    };\r\n    UploadTask.prototype.completeTransitions_ = function () {\r\n        switch (this.state_) {\r\n            case InternalTaskState.PAUSING:\r\n                this.transition_(InternalTaskState.PAUSED);\r\n                break;\r\n            case InternalTaskState.CANCELING:\r\n                this.transition_(InternalTaskState.CANCELED);\r\n                break;\r\n            case InternalTaskState.RUNNING:\r\n                this.start_();\r\n                break;\r\n            default:\r\n                // TODO(andysoto): assert(false);\r\n                break;\r\n        }\r\n    };\r\n    Object.defineProperty(UploadTask.prototype, \"snapshot\", {\r\n        get: function () {\r\n            var externalState = taskStateFromInternalTaskState(this.state_);\r\n            return new UploadTaskSnapshot(this.transferred_, this.blob_.size(), externalState, this.metadata_, this, this.ref_);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Adds a callback for an event.\r\n     * @param type The type of event to listen for.\r\n     */\r\n    UploadTask.prototype.on = function (type, nextOrObserver, error, completed) {\r\n        if (nextOrObserver === void 0) { nextOrObserver = undefined; }\r\n        if (error === void 0) { error = undefined; }\r\n        if (completed === void 0) { completed = undefined; }\r\n        function typeValidator(_p) {\r\n            if (type !== TaskEvent.STATE_CHANGED) {\r\n                throw \"Expected one of the event types: [\" + TaskEvent.STATE_CHANGED + \"].\";\r\n            }\r\n        }\r\n        var nextOrObserverMessage = 'Expected a function or an Object with one of ' +\r\n            '`next`, `error`, `complete` properties.';\r\n        var nextValidator = nullFunctionSpec(true).validator;\r\n        var observerValidator = looseObjectSpec(null, true).validator;\r\n        function nextOrObserverValidator(p) {\r\n            try {\r\n                nextValidator(p);\r\n                return;\r\n            }\r\n            catch (e) { }\r\n            try {\r\n                observerValidator(p);\r\n                var anyDefined = isJustDef(p['next']) ||\r\n                    isJustDef(p['error']) ||\r\n                    isJustDef(p['complete']);\r\n                if (!anyDefined) {\r\n                    throw '';\r\n                }\r\n                return;\r\n            }\r\n            catch (e) {\r\n                throw nextOrObserverMessage;\r\n            }\r\n        }\r\n        var specs = [\r\n            stringSpec(typeValidator),\r\n            looseObjectSpec(nextOrObserverValidator, true),\r\n            nullFunctionSpec(true),\r\n            nullFunctionSpec(true)\r\n        ];\r\n        validate('on', specs, arguments);\r\n        var self = this;\r\n        function makeBinder(specs) {\r\n            function binder(nextOrObserver, error, opt_complete) {\r\n                if (specs !== null) {\r\n                    validate('on', specs, arguments);\r\n                }\r\n                var observer = new Observer(nextOrObserver, error, completed);\r\n                self.addObserver_(observer);\r\n                return function () {\r\n                    self.removeObserver_(observer);\r\n                };\r\n            }\r\n            return binder;\r\n        }\r\n        function binderNextOrObserverValidator(p) {\r\n            if (p === null) {\r\n                throw nextOrObserverMessage;\r\n            }\r\n            nextOrObserverValidator(p);\r\n        }\r\n        var binderSpecs = [\r\n            looseObjectSpec(binderNextOrObserverValidator),\r\n            nullFunctionSpec(true),\r\n            nullFunctionSpec(true)\r\n        ];\r\n        var typeOnly = !(isJustDef(nextOrObserver) ||\r\n            isJustDef(error) ||\r\n            isJustDef(completed));\r\n        if (typeOnly) {\r\n            return makeBinder(binderSpecs);\r\n        }\r\n        else {\r\n            return makeBinder(null)(nextOrObserver, error, completed);\r\n        }\r\n    };\r\n    /**\r\n     * This object behaves like a Promise, and resolves with its snapshot data\r\n     * when the upload completes.\r\n     * @param onFulfilled The fulfillment callback. Promise chaining works as normal.\r\n     * @param onRejected The rejection callback.\r\n     */\r\n    UploadTask.prototype.then = function (onFulfilled, onRejected) {\r\n        // These casts are needed so that TypeScript can infer the types of the\r\n        // resulting Promise.\r\n        return this.promise_.then(onFulfilled, onRejected);\r\n    };\r\n    /**\r\n     * Equivalent to calling `then(null, onRejected)`.\r\n     */\r\n    UploadTask.prototype.catch = function (onRejected) {\r\n        return this.then(null, onRejected);\r\n    };\r\n    /**\r\n     * Adds the given observer.\r\n     */\r\n    UploadTask.prototype.addObserver_ = function (observer) {\r\n        this.observers_.push(observer);\r\n        this.notifyObserver_(observer);\r\n    };\r\n    /**\r\n     * Removes the given observer.\r\n     */\r\n    UploadTask.prototype.removeObserver_ = function (observer) {\r\n        remove(this.observers_, observer);\r\n    };\r\n    UploadTask.prototype.notifyObservers_ = function () {\r\n        var _this = this;\r\n        this.finishPromise_();\r\n        var observers = clone$1(this.observers_);\r\n        observers.forEach(function (observer) {\r\n            _this.notifyObserver_(observer);\r\n        });\r\n    };\r\n    UploadTask.prototype.finishPromise_ = function () {\r\n        if (this.resolve_ !== null) {\r\n            var triggered = true;\r\n            switch (taskStateFromInternalTaskState(this.state_)) {\r\n                case TaskState.SUCCESS:\r\n                    async(this.resolve_.bind(null, this.snapshot))();\r\n                    break;\r\n                case TaskState.CANCELED:\r\n                case TaskState.ERROR:\r\n                    var toCall = this.reject_;\r\n                    async(toCall.bind(null, this.error_))();\r\n                    break;\r\n                default:\r\n                    triggered = false;\r\n                    break;\r\n            }\r\n            if (triggered) {\r\n                this.resolve_ = null;\r\n                this.reject_ = null;\r\n            }\r\n        }\r\n    };\r\n    UploadTask.prototype.notifyObserver_ = function (observer) {\r\n        var externalState = taskStateFromInternalTaskState(this.state_);\r\n        switch (externalState) {\r\n            case TaskState.RUNNING:\r\n            case TaskState.PAUSED:\r\n                if (observer.next !== null) {\r\n                    async(observer.next.bind(observer, this.snapshot))();\r\n                }\r\n                break;\r\n            case TaskState.SUCCESS:\r\n                if (observer.complete !== null) {\r\n                    async(observer.complete.bind(observer))();\r\n                }\r\n                break;\r\n            case TaskState.CANCELED:\r\n            case TaskState.ERROR:\r\n                if (observer.error !== null) {\r\n                    async(observer.error.bind(observer, this.error_))();\r\n                }\r\n                break;\r\n            default:\r\n                // TODO(andysoto): assert(false);\r\n                if (observer.error !== null) {\r\n                    async(observer.error.bind(observer, this.error_))();\r\n                }\r\n        }\r\n    };\r\n    /**\r\n     * Resumes a paused task. Has no effect on a currently running or failed task.\r\n     * @return True if the operation took effect, false if ignored.\r\n     */\r\n    UploadTask.prototype.resume = function () {\r\n        validate('resume', [], arguments);\r\n        var valid = this.state_ === InternalTaskState.PAUSED ||\r\n            this.state_ === InternalTaskState.PAUSING;\r\n        if (valid) {\r\n            this.transition_(InternalTaskState.RUNNING);\r\n        }\r\n        return valid;\r\n    };\r\n    /**\r\n     * Pauses a currently running task. Has no effect on a paused or failed task.\r\n     * @return True if the operation took effect, false if ignored.\r\n     */\r\n    UploadTask.prototype.pause = function () {\r\n        validate('pause', [], arguments);\r\n        var valid = this.state_ === InternalTaskState.RUNNING;\r\n        if (valid) {\r\n            this.transition_(InternalTaskState.PAUSING);\r\n        }\r\n        return valid;\r\n    };\r\n    /**\r\n     * Cancels a currently running or paused task. Has no effect on a complete or\r\n     * failed task.\r\n     * @return True if the operation took effect, false if ignored.\r\n     */\r\n    UploadTask.prototype.cancel = function () {\r\n        validate('cancel', [], arguments);\r\n        var valid = this.state_ === InternalTaskState.RUNNING ||\r\n            this.state_ === InternalTaskState.PAUSING;\r\n        if (valid) {\r\n            this.transition_(InternalTaskState.CANCELING);\r\n        }\r\n        return valid;\r\n    };\r\n    return UploadTask;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provides methods to interact with a bucket in the Firebase Storage service.\r\n * @param location An fbs.location, or the URL at\r\n *     which to base this object, in one of the following forms:\r\n *         gs://<bucket>/<object-path>\r\n *         http[s]://firebasestorage.googleapis.com/\r\n *                     <api-version>/b/<bucket>/o/<object-path>\r\n *     Any query or fragment strings will be ignored in the http[s]\r\n *     format. If no value is passed, the storage object will use a URL based on\r\n *     the project ID of the base firebase.App instance.\r\n */\r\nvar Reference = /** @class */ (function () {\r\n    function Reference(authWrapper, location) {\r\n        this.authWrapper = authWrapper;\r\n        if (location instanceof Location) {\r\n            this.location = location;\r\n        }\r\n        else {\r\n            this.location = Location.makeFromUrl(location);\r\n        }\r\n    }\r\n    /**\r\n     * @return The URL for the bucket and path this object references,\r\n     *     in the form gs://<bucket>/<object-path>\r\n     * @override\r\n     */\r\n    Reference.prototype.toString = function () {\r\n        validate('toString', [], arguments);\r\n        return 'gs://' + this.location.bucket + '/' + this.location.path;\r\n    };\r\n    Reference.prototype.newRef = function (authWrapper, location) {\r\n        return new Reference(authWrapper, location);\r\n    };\r\n    Reference.prototype.mappings = function () {\r\n        return getMappings();\r\n    };\r\n    /**\r\n     * @return A reference to the object obtained by\r\n     *     appending childPath, removing any duplicate, beginning, or trailing\r\n     *     slashes.\r\n     */\r\n    Reference.prototype.child = function (childPath) {\r\n        validate('child', [stringSpec()], arguments);\r\n        var newPath = child(this.location.path, childPath);\r\n        var location = new Location(this.location.bucket, newPath);\r\n        return this.newRef(this.authWrapper, location);\r\n    };\r\n    Object.defineProperty(Reference.prototype, \"parent\", {\r\n        /**\r\n         * @return A reference to the parent of the\r\n         *     current object, or null if the current object is the root.\r\n         */\r\n        get: function () {\r\n            var newPath = parent(this.location.path);\r\n            if (newPath === null) {\r\n                return null;\r\n            }\r\n            var location = new Location(this.location.bucket, newPath);\r\n            return this.newRef(this.authWrapper, location);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Reference.prototype, \"root\", {\r\n        /**\r\n         * @return An reference to the root of this\r\n         *     object's bucket.\r\n         */\r\n        get: function () {\r\n            var location = new Location(this.location.bucket, '');\r\n            return this.newRef(this.authWrapper, location);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Reference.prototype, \"bucket\", {\r\n        get: function () {\r\n            return this.location.bucket;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Reference.prototype, \"fullPath\", {\r\n        get: function () {\r\n            return this.location.path;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Reference.prototype, \"name\", {\r\n        get: function () {\r\n            return lastComponent(this.location.path);\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Reference.prototype, \"storage\", {\r\n        get: function () {\r\n            return this.authWrapper.service();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Uploads a blob to this object's location.\r\n     * @param data The blob to upload.\r\n     * @return An UploadTask that lets you control and\r\n     *     observe the upload.\r\n     */\r\n    Reference.prototype.put = function (data, metadata) {\r\n        if (metadata === void 0) { metadata = null; }\r\n        validate('put', [uploadDataSpec(), metadataSpec(true)], arguments);\r\n        this.throwIfRoot_('put');\r\n        return new UploadTask(this, this.authWrapper, this.location, this.mappings(), new FbsBlob(data), metadata);\r\n    };\r\n    /**\r\n     * Uploads a string to this object's location.\r\n     * @param string The string to upload.\r\n     * @param opt_format The format of the string to upload.\r\n     * @return An UploadTask that lets you control and\r\n     *     observe the upload.\r\n     */\r\n    Reference.prototype.putString = function (string, format, opt_metadata) {\r\n        if (format === void 0) { format = StringFormat.RAW; }\r\n        validate('putString', [\r\n            stringSpec(),\r\n            stringSpec(formatValidator, true),\r\n            metadataSpec(true)\r\n        ], arguments);\r\n        this.throwIfRoot_('putString');\r\n        var data = dataFromString(format, string);\r\n        var metadata = clone(opt_metadata);\r\n        if (!isDef(metadata['contentType']) && isDef(data.contentType)) {\r\n            metadata['contentType'] = data.contentType;\r\n        }\r\n        return new UploadTask(this, this.authWrapper, this.location, this.mappings(), new FbsBlob(data.data, true), metadata);\r\n    };\r\n    /**\r\n     * Deletes the object at this location.\r\n     * @return A promise that resolves if the deletion succeeds.\r\n     */\r\n    Reference.prototype.delete = function () {\r\n        validate('delete', [], arguments);\r\n        this.throwIfRoot_('delete');\r\n        var self = this;\r\n        return this.authWrapper.getAuthToken().then(function (authToken) {\r\n            var requestInfo = deleteObject(self.authWrapper, self.location);\r\n            return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n        });\r\n    };\r\n    /**\r\n     *     A promise that resolves with the metadata for this object. If this\r\n     *     object doesn't exist or metadata cannot be retreived, the promise is\r\n     *     rejected.\r\n     */\r\n    Reference.prototype.getMetadata = function () {\r\n        validate('getMetadata', [], arguments);\r\n        this.throwIfRoot_('getMetadata');\r\n        var self = this;\r\n        return this.authWrapper.getAuthToken().then(function (authToken) {\r\n            var requestInfo = getMetadata(self.authWrapper, self.location, self.mappings());\r\n            return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n        });\r\n    };\r\n    /**\r\n     * Updates the metadata for this object.\r\n     * @param metadata The new metadata for the object.\r\n     *     Only values that have been explicitly set will be changed. Explicitly\r\n     *     setting a value to null will remove the metadata.\r\n     * @return A promise that resolves\r\n     *     with the new metadata for this object.\r\n     *     @see firebaseStorage.Reference.prototype.getMetadata\r\n     */\r\n    Reference.prototype.updateMetadata = function (metadata) {\r\n        validate('updateMetadata', [metadataSpec()], arguments);\r\n        this.throwIfRoot_('updateMetadata');\r\n        var self = this;\r\n        return this.authWrapper.getAuthToken().then(function (authToken) {\r\n            var requestInfo = updateMetadata(self.authWrapper, self.location, metadata, self.mappings());\r\n            return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n        });\r\n    };\r\n    /**\r\n     * @return A promise that resolves with the download\r\n     *     URL for this object.\r\n     */\r\n    Reference.prototype.getDownloadURL = function () {\r\n        validate('getDownloadURL', [], arguments);\r\n        this.throwIfRoot_('getDownloadURL');\r\n        var self = this;\r\n        return this.authWrapper.getAuthToken().then(function (authToken) {\r\n            var requestInfo = getDownloadUrl(self.authWrapper, self.location, self.mappings());\r\n            return self.authWrapper\r\n                .makeRequest(requestInfo, authToken)\r\n                .getPromise()\r\n                .then(function (url) {\r\n                if (url === null) {\r\n                    throw noDownloadURL();\r\n                }\r\n                return url;\r\n            });\r\n        });\r\n    };\r\n    Reference.prototype.throwIfRoot_ = function (name) {\r\n        if (this.location.path === '') {\r\n            throw invalidRootOperation(name);\r\n        }\r\n    };\r\n    return Reference;\r\n}());\n\n/**\r\n * A request whose promise always fails.\r\n * @struct\r\n * @template T\r\n */\r\nvar FailRequest = /** @class */ (function () {\r\n    function FailRequest(error) {\r\n        this.promise_ = reject(error);\r\n    }\r\n    /** @inheritDoc */\r\n    FailRequest.prototype.getPromise = function () {\r\n        return this.promise_;\r\n    };\r\n    /** @inheritDoc */\r\n    FailRequest.prototype.cancel = function (appDelete) {\r\n        if (appDelete === void 0) { appDelete = false; }\r\n    };\r\n    return FailRequest;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @struct\r\n */\r\nvar RequestMap = /** @class */ (function () {\r\n    function RequestMap() {\r\n        this.map_ = {};\r\n        this.id_ = MIN_SAFE_INTEGER;\r\n    }\r\n    /**\r\n     * Registers the given request with this map.\r\n     * The request is unregistered when it completes.\r\n     * @param r The request to register.\r\n     */\r\n    RequestMap.prototype.addRequest = function (r) {\r\n        var id = this.id_;\r\n        this.id_++;\r\n        this.map_[id] = r;\r\n        var self = this;\r\n        function unmap() {\r\n            delete self.map_[id];\r\n        }\r\n        r.getPromise().then(unmap, unmap);\r\n    };\r\n    /**\r\n     * Cancels all registered requests.\r\n     */\r\n    RequestMap.prototype.clear = function () {\r\n        forEach(this.map_, function (key, val) {\r\n            if (val) {\r\n                val.cancel(true);\r\n            }\r\n        });\r\n        this.map_ = {};\r\n    };\r\n    return RequestMap;\r\n}());\n\n/**\r\n * @param app If null, getAuthToken always resolves with null.\r\n * @param service The storage service associated with this auth wrapper.\r\n *     Untyped to avoid circular type dependencies.\r\n * @struct\r\n */\r\nvar AuthWrapper = /** @class */ (function () {\r\n    function AuthWrapper(app, maker, requestMaker, service, pool) {\r\n        this.bucket_ = null;\r\n        this.deleted_ = false;\r\n        this.app_ = app;\r\n        if (this.app_ !== null) {\r\n            var options = this.app_.options;\r\n            if (isDef(options)) {\r\n                this.bucket_ = AuthWrapper.extractBucket_(options);\r\n            }\r\n        }\r\n        this.storageRefMaker_ = maker;\r\n        this.requestMaker_ = requestMaker;\r\n        this.pool_ = pool;\r\n        this.service_ = service;\r\n        this.maxOperationRetryTime_ = DEFAULT_MAX_OPERATION_RETRY_TIME;\r\n        this.maxUploadRetryTime_ = DEFAULT_MAX_UPLOAD_RETRY_TIME;\r\n        this.requestMap_ = new RequestMap();\r\n    }\r\n    AuthWrapper.extractBucket_ = function (config) {\r\n        var bucketString = config[CONFIG_STORAGE_BUCKET_KEY] || null;\r\n        if (bucketString == null) {\r\n            return null;\r\n        }\r\n        var loc = Location.makeFromBucketSpec(bucketString);\r\n        return loc.bucket;\r\n    };\r\n    AuthWrapper.prototype.getAuthToken = function () {\r\n        // TODO(andysoto): remove ifDef checks after firebase-app implements stubs\r\n        // (b/28673818).\r\n        if (this.app_ !== null &&\r\n            isDef(this.app_.INTERNAL) &&\r\n            isDef(this.app_.INTERNAL.getToken)) {\r\n            return this.app_.INTERNAL.getToken().then(function (response) {\r\n                if (response !== null) {\r\n                    return response.accessToken;\r\n                }\r\n                else {\r\n                    return null;\r\n                }\r\n            }, function (_error) {\r\n                return null;\r\n            });\r\n        }\r\n        else {\r\n            return resolve(null);\r\n        }\r\n    };\r\n    AuthWrapper.prototype.bucket = function () {\r\n        if (this.deleted_) {\r\n            throw appDeleted();\r\n        }\r\n        else {\r\n            return this.bucket_;\r\n        }\r\n    };\r\n    /**\r\n     * The service associated with this auth wrapper. Untyped to avoid circular\r\n     * type dependencies.\r\n     */\r\n    AuthWrapper.prototype.service = function () {\r\n        return this.service_;\r\n    };\r\n    /**\r\n     * Returns a new firebaseStorage.Reference object referencing this AuthWrapper\r\n     * at the given Location.\r\n     * @param loc The Location.\r\n     * @return Actually a firebaseStorage.Reference, typing not allowed\r\n     *     because of circular dependency problems.\r\n     */\r\n    AuthWrapper.prototype.makeStorageReference = function (loc) {\r\n        return this.storageRefMaker_(this, loc);\r\n    };\r\n    AuthWrapper.prototype.makeRequest = function (requestInfo, authToken) {\r\n        if (!this.deleted_) {\r\n            var request = this.requestMaker_(requestInfo, authToken, this.pool_);\r\n            this.requestMap_.addRequest(request);\r\n            return request;\r\n        }\r\n        else {\r\n            return new FailRequest(appDeleted());\r\n        }\r\n    };\r\n    /**\r\n     * Stop running requests and prevent more from being created.\r\n     */\r\n    AuthWrapper.prototype.deleteApp = function () {\r\n        this.deleted_ = true;\r\n        this.app_ = null;\r\n        this.requestMap_.clear();\r\n    };\r\n    AuthWrapper.prototype.maxUploadRetryTime = function () {\r\n        return this.maxUploadRetryTime_;\r\n    };\r\n    AuthWrapper.prototype.setMaxUploadRetryTime = function (time) {\r\n        this.maxUploadRetryTime_ = time;\r\n    };\r\n    AuthWrapper.prototype.maxOperationRetryTime = function () {\r\n        return this.maxOperationRetryTime_;\r\n    };\r\n    AuthWrapper.prototype.setMaxOperationRetryTime = function (time) {\r\n        this.maxOperationRetryTime_ = time;\r\n    };\r\n    return AuthWrapper;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param f May be invoked\r\n *     before the function returns.\r\n * @param callback Get all the arguments passed to the function\r\n *     passed to f, including the initial boolean.\r\n */\r\nfunction start(f, callback, timeout) {\r\n    // TODO(andysoto): make this code cleaner (probably refactor into an actual\r\n    // type instead of a bunch of functions with state shared in the closure)\r\n    var waitSeconds = 1;\r\n    // Would type this as \"number\" but that doesn't work for Node so ¯\\_(ツ)_/¯\r\n    var timeoutId = null;\r\n    var hitTimeout = false;\r\n    var cancelState = 0;\r\n    function canceled() {\r\n        return cancelState === 2;\r\n    }\r\n    var triggeredCallback = false;\r\n    function triggerCallback() {\r\n        if (!triggeredCallback) {\r\n            triggeredCallback = true;\r\n            callback.apply(null, arguments);\r\n        }\r\n    }\r\n    function callWithDelay(millis) {\r\n        timeoutId = setTimeout(function () {\r\n            timeoutId = null;\r\n            f(handler, canceled());\r\n        }, millis);\r\n    }\r\n    function handler(success) {\r\n        var var_args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            var_args[_i - 1] = arguments[_i];\r\n        }\r\n        if (triggeredCallback) {\r\n            return;\r\n        }\r\n        if (success) {\r\n            triggerCallback.apply(null, arguments);\r\n            return;\r\n        }\r\n        var mustStop = canceled() || hitTimeout;\r\n        if (mustStop) {\r\n            triggerCallback.apply(null, arguments);\r\n            return;\r\n        }\r\n        if (waitSeconds < 64) {\r\n            /* TODO(andysoto): don't back off so quickly if we know we're offline. */\r\n            waitSeconds *= 2;\r\n        }\r\n        var waitMillis;\r\n        if (cancelState === 1) {\r\n            cancelState = 2;\r\n            waitMillis = 0;\r\n        }\r\n        else {\r\n            waitMillis = (waitSeconds + Math.random()) * 1000;\r\n        }\r\n        callWithDelay(waitMillis);\r\n    }\r\n    var stopped = false;\r\n    function stop(wasTimeout) {\r\n        if (stopped) {\r\n            return;\r\n        }\r\n        stopped = true;\r\n        if (triggeredCallback) {\r\n            return;\r\n        }\r\n        if (timeoutId !== null) {\r\n            if (!wasTimeout) {\r\n                cancelState = 2;\r\n            }\r\n            clearTimeout(timeoutId);\r\n            callWithDelay(0);\r\n        }\r\n        else {\r\n            if (!wasTimeout) {\r\n                cancelState = 1;\r\n            }\r\n        }\r\n    }\r\n    callWithDelay(0);\r\n    setTimeout(function () {\r\n        hitTimeout = true;\r\n        stop(true);\r\n    }, timeout);\r\n    return stop;\r\n}\r\n/**\r\n * Stops the retry loop from repeating.\r\n * If the function is currently \"in between\" retries, it is invoked immediately\r\n * with the second parameter as \"true\". Otherwise, it will be invoked once more\r\n * after the current invocation finishes iff the current invocation would have\r\n * triggered another retry.\r\n */\r\nfunction stop(id) {\r\n    id(false);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @struct\r\n * @template T\r\n */\r\nvar NetworkRequest = /** @class */ (function () {\r\n    function NetworkRequest(url, method, headers, body, successCodes, additionalRetryCodes, callback, errorCallback, timeout, progressCallback, pool) {\r\n        this.pendingXhr_ = null;\r\n        this.backoffId_ = null;\r\n        this.resolve_ = null;\r\n        this.reject_ = null;\r\n        this.canceled_ = false;\r\n        this.appDelete_ = false;\r\n        this.url_ = url;\r\n        this.method_ = method;\r\n        this.headers_ = headers;\r\n        this.body_ = body;\r\n        this.successCodes_ = successCodes.slice();\r\n        this.additionalRetryCodes_ = additionalRetryCodes.slice();\r\n        this.callback_ = callback;\r\n        this.errorCallback_ = errorCallback;\r\n        this.progressCallback_ = progressCallback;\r\n        this.timeout_ = timeout;\r\n        this.pool_ = pool;\r\n        var self = this;\r\n        this.promise_ = make(function (resolve, reject) {\r\n            self.resolve_ = resolve;\r\n            self.reject_ = reject;\r\n            self.start_();\r\n        });\r\n    }\r\n    /**\r\n     * Actually starts the retry loop.\r\n     */\r\n    NetworkRequest.prototype.start_ = function () {\r\n        var self = this;\r\n        function doTheRequest(backoffCallback, canceled) {\r\n            if (canceled) {\r\n                backoffCallback(false, new RequestEndStatus(false, null, true));\r\n                return;\r\n            }\r\n            var xhr = self.pool_.createXhrIo();\r\n            self.pendingXhr_ = xhr;\r\n            function progressListener(progressEvent) {\r\n                var loaded = progressEvent.loaded;\r\n                var total = progressEvent.lengthComputable ? progressEvent.total : -1;\r\n                if (self.progressCallback_ !== null) {\r\n                    self.progressCallback_(loaded, total);\r\n                }\r\n            }\r\n            if (self.progressCallback_ !== null) {\r\n                xhr.addUploadProgressListener(progressListener);\r\n            }\r\n            xhr\r\n                .send(self.url_, self.method_, self.body_, self.headers_)\r\n                .then(function (xhr) {\r\n                if (self.progressCallback_ !== null) {\r\n                    xhr.removeUploadProgressListener(progressListener);\r\n                }\r\n                self.pendingXhr_ = null;\r\n                xhr = xhr;\r\n                var hitServer = xhr.getErrorCode() === ErrorCode.NO_ERROR;\r\n                var status = xhr.getStatus();\r\n                if (!hitServer || self.isRetryStatusCode_(status)) {\r\n                    var wasCanceled = xhr.getErrorCode() === ErrorCode.ABORT;\r\n                    backoffCallback(false, new RequestEndStatus(false, null, wasCanceled));\r\n                    return;\r\n                }\r\n                var successCode = contains$1(self.successCodes_, status);\r\n                backoffCallback(true, new RequestEndStatus(successCode, xhr));\r\n            });\r\n        }\r\n        /**\r\n         * @param requestWentThrough True if the request eventually went\r\n         *     through, false if it hit the retry limit or was canceled.\r\n         */\r\n        function backoffDone(requestWentThrough, status) {\r\n            var resolve = self.resolve_;\r\n            var reject = self.reject_;\r\n            var xhr = status.xhr;\r\n            if (status.wasSuccessCode) {\r\n                try {\r\n                    var result = self.callback_(xhr, xhr.getResponseText());\r\n                    if (isJustDef(result)) {\r\n                        resolve(result);\r\n                    }\r\n                    else {\r\n                        resolve();\r\n                    }\r\n                }\r\n                catch (e) {\r\n                    reject(e);\r\n                }\r\n            }\r\n            else {\r\n                if (xhr !== null) {\r\n                    var err = unknown();\r\n                    err.setServerResponseProp(xhr.getResponseText());\r\n                    if (self.errorCallback_) {\r\n                        reject(self.errorCallback_(xhr, err));\r\n                    }\r\n                    else {\r\n                        reject(err);\r\n                    }\r\n                }\r\n                else {\r\n                    if (status.canceled) {\r\n                        var err = self.appDelete_\r\n                            ? appDeleted()\r\n                            : canceled();\r\n                        reject(err);\r\n                    }\r\n                    else {\r\n                        var err = retryLimitExceeded();\r\n                        reject(err);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (this.canceled_) {\r\n            backoffDone(false, new RequestEndStatus(false, null, true));\r\n        }\r\n        else {\r\n            this.backoffId_ = start(doTheRequest, backoffDone, this.timeout_);\r\n        }\r\n    };\r\n    /** @inheritDoc */\r\n    NetworkRequest.prototype.getPromise = function () {\r\n        return this.promise_;\r\n    };\r\n    /** @inheritDoc */\r\n    NetworkRequest.prototype.cancel = function (appDelete) {\r\n        this.canceled_ = true;\r\n        this.appDelete_ = appDelete || false;\r\n        if (this.backoffId_ !== null) {\r\n            stop(this.backoffId_);\r\n        }\r\n        if (this.pendingXhr_ !== null) {\r\n            this.pendingXhr_.abort();\r\n        }\r\n    };\r\n    NetworkRequest.prototype.isRetryStatusCode_ = function (status) {\r\n        // The codes for which to retry came from this page:\r\n        // https://cloud.google.com/storage/docs/exponential-backoff\r\n        var isFiveHundredCode = status >= 500 && status < 600;\r\n        var extraRetryCodes = [\r\n            // Request Timeout: web server didn't receive full request in time.\r\n            408,\r\n            // Too Many Requests: you're getting rate-limited, basically.\r\n            429\r\n        ];\r\n        var isExtraRetryCode = contains$1(extraRetryCodes, status);\r\n        var isRequestSpecificRetryCode = contains$1(this.additionalRetryCodes_, status);\r\n        return isFiveHundredCode || isExtraRetryCode || isRequestSpecificRetryCode;\r\n    };\r\n    return NetworkRequest;\r\n}());\r\n/**\r\n * A collection of information about the result of a network request.\r\n * @param opt_canceled Defaults to false.\r\n * @struct\r\n */\r\nvar RequestEndStatus = /** @class */ (function () {\r\n    function RequestEndStatus(wasSuccessCode, xhr, opt_canceled) {\r\n        this.wasSuccessCode = wasSuccessCode;\r\n        this.xhr = xhr;\r\n        this.canceled = !!opt_canceled;\r\n    }\r\n    return RequestEndStatus;\r\n}());\r\nfunction addAuthHeader_(headers, authToken) {\r\n    if (authToken !== null && authToken.length > 0) {\r\n        headers['Authorization'] = 'Firebase ' + authToken;\r\n    }\r\n}\r\nfunction addVersionHeader_(headers) {\r\n    var number = typeof firebase !== 'undefined' ? firebase.SDK_VERSION : 'AppManager';\r\n    headers['X-Firebase-Storage-Version'] = 'webjs/' + number;\r\n}\r\n/**\r\n * @template T\r\n */\r\nfunction makeRequest(requestInfo, authToken, pool) {\r\n    var queryPart = makeQueryString(requestInfo.urlParams);\r\n    var url = requestInfo.url + queryPart;\r\n    var headers = clone(requestInfo.headers);\r\n    addAuthHeader_(headers, authToken);\r\n    addVersionHeader_(headers);\r\n    return new NetworkRequest(url, requestInfo.method, headers, requestInfo.body, requestInfo.successCodes, requestInfo.additionalRetryCodes, requestInfo.handler, requestInfo.errorHandler, requestInfo.timeout, requestInfo.progressCallback, pool);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A service that provides firebaseStorage.Reference instances.\r\n * @param opt_url gs:// url to a custom Storage Bucket\r\n *\r\n * @struct\r\n */\r\nvar Service = /** @class */ (function () {\r\n    function Service(app, pool, url) {\r\n        this.bucket_ = null;\r\n        function maker(authWrapper, loc) {\r\n            return new Reference(authWrapper, loc);\r\n        }\r\n        this.authWrapper_ = new AuthWrapper(app, maker, makeRequest, this, pool);\r\n        this.app_ = app;\r\n        if (url != null) {\r\n            this.bucket_ = Location.makeFromBucketSpec(url);\r\n        }\r\n        else {\r\n            var authWrapperBucket = this.authWrapper_.bucket();\r\n            if (authWrapperBucket != null) {\r\n                this.bucket_ = new Location(authWrapperBucket, '');\r\n            }\r\n        }\r\n        this.internals_ = new ServiceInternals(this);\r\n    }\r\n    /**\r\n     * Returns a firebaseStorage.Reference for the given path in the default\r\n     * bucket.\r\n     */\r\n    Service.prototype.ref = function (path) {\r\n        function validator(path) {\r\n            if (/^[A-Za-z]+:\\/\\//.test(path)) {\r\n                throw 'Expected child path but got a URL, use refFromURL instead.';\r\n            }\r\n        }\r\n        validate('ref', [stringSpec(validator, true)], arguments);\r\n        if (this.bucket_ == null) {\r\n            throw new Error('No Storage Bucket defined in Firebase Options.');\r\n        }\r\n        var ref = new Reference(this.authWrapper_, this.bucket_);\r\n        if (path != null) {\r\n            return ref.child(path);\r\n        }\r\n        else {\r\n            return ref;\r\n        }\r\n    };\r\n    /**\r\n     * Returns a firebaseStorage.Reference object for the given absolute URL,\r\n     * which must be a gs:// or http[s]:// URL.\r\n     */\r\n    Service.prototype.refFromURL = function (url) {\r\n        function validator(p) {\r\n            if (!/^[A-Za-z]+:\\/\\//.test(p)) {\r\n                throw 'Expected full URL but got a child path, use ref instead.';\r\n            }\r\n            try {\r\n                Location.makeFromUrl(p);\r\n            }\r\n            catch (e) {\r\n                throw 'Expected valid full URL but got an invalid one.';\r\n            }\r\n        }\r\n        validate('refFromURL', [stringSpec(validator, false)], arguments);\r\n        return new Reference(this.authWrapper_, url);\r\n    };\r\n    Object.defineProperty(Service.prototype, \"maxUploadRetryTime\", {\r\n        get: function () {\r\n            return this.authWrapper_.maxUploadRetryTime();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Service.prototype.setMaxUploadRetryTime = function (time) {\r\n        validate('setMaxUploadRetryTime', [nonNegativeNumberSpec()], arguments);\r\n        this.authWrapper_.setMaxUploadRetryTime(time);\r\n    };\r\n    Service.prototype.setMaxOperationRetryTime = function (time) {\r\n        validate('setMaxOperationRetryTime', [nonNegativeNumberSpec()], arguments);\r\n        this.authWrapper_.setMaxOperationRetryTime(time);\r\n    };\r\n    Object.defineProperty(Service.prototype, \"app\", {\r\n        get: function () {\r\n            return this.app_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Service.prototype, \"INTERNAL\", {\r\n        get: function () {\r\n            return this.internals_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return Service;\r\n}());\r\n/**\r\n * @struct\r\n */\r\nvar ServiceInternals = /** @class */ (function () {\r\n    function ServiceInternals(service) {\r\n        this.service_ = service;\r\n    }\r\n    /**\r\n     * Called when the associated app is deleted.\r\n     * @see {!fbs.AuthWrapper.prototype.deleteApp}\r\n     */\r\n    ServiceInternals.prototype.delete = function () {\r\n        this.service_.authWrapper_.deleteApp();\r\n        return resolve(undefined);\r\n    };\r\n    return ServiceInternals;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Type constant for Firebase Storage.\r\n */\r\nvar STORAGE_TYPE = 'storage';\r\nfunction factory(app, unused, opt_url) {\r\n    return new Service(app, new XhrIoPool(), opt_url);\r\n}\r\nfunction registerStorage(instance) {\r\n    var namespaceExports = {\r\n        // no-inline\r\n        TaskState: TaskState,\r\n        TaskEvent: TaskEvent,\r\n        StringFormat: StringFormat,\r\n        Storage: Service,\r\n        Reference: Reference\r\n    };\r\n    instance.INTERNAL.registerService(STORAGE_TYPE, factory, namespaceExports, undefined, \r\n    // Allow multiple storage instances per app.\r\n    true);\r\n}\r\nregisterStorage(firebase);\n\nexport { registerStorage };\n//# sourceMappingURL=index.esm.js.map\n","import { autoinject, inject, computedFrom } from 'aurelia-framework';\nimport { Container } from 'aurelia-dependency-injection';\n\nimport { Authentication } from 'services/authentication';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport * as Firebase from 'firebase/app';\nimport 'firebase/storage';\n\n//NOTE: ogni utente ha una cartella che è l'uid dell'utente e dentro ci sono tutte le risorse dell'utente (immagini curriculum, etc)\n//NOTE: le immagini dei profili sono dentro profilepictures/<uid>.<ext>\n\n//DOC: mappa risorse locali\nexport interface iconPack {\n  name: string;\n  icons: string[];\n}\nexport class LocalResources {\n  static profile: any = {\n    default: \"/default/profile_black.png\"\n  };\n  static noIcon: string = \"/images/icons/no.png\";\n  static icons: iconPack[] = [\n    {\n      name: \"pack1\",\n      icons: [\"/images/icons/pack1/1.png\", \"/images/icons/pack1/2.png\", \"/images/icons/pack1/3.png\",\n        \"/images/icons/pack1/4.png\", \"/images/icons/pack1/5.png\", \"/images/icons/pack1/6.png\"]\n    }, {\n      name: \"pack2\",\n      icons: [\"/images/icons/pack1/1.png\", \"/images/icons/pack1/2.png\", \"/images/icons/pack1/3.png\",\n        \"/images/icons/pack1/4.png\", \"/images/icons/pack1/5.png\", \"/images/icons/pack1/6.png\"]\n    }, {\n      name: \"pack3\",\n      icons: [\"/images/icons/pack1/1.png\", \"/images/icons/pack1/2.png\", \"/images/icons/pack1/3.png\",\n        \"/images/icons/pack1/4.png\", \"/images/icons/pack1/5.png\", \"/images/icons/pack1/6.png\"]\n    }\n  ];\n}\n//DOC: mappa risorse esterne (Storage)\nexport class ExternalResources {\n  //DOC: prefisso di tutte le risorse\n  static prefix: string = \"alpha/\";\n  static profile: string = ExternalResources.prefix + \"profile/\";\n}\n\n\n//DOC: classe wrapper di firebase per la gestione dello storage (Firebase)\n@autoinject\nexport class Storage_ {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = (new Logger()).setStyle(Logger.colors.orange, Logger.colors.white).setDefaultPrefix(\"STORAGE\");\n\n  //DOC: oggetto storage di Firebase\n  private storage: Firebase.storage.Storage;\n\n\n  //DOC: percorso delle risorse nello storage\n  //NOTE: path risorse dell'utente\n  //public static pathCurriculumImages: string = Storage_.storagePrefix + \"curriculumimages/\";\n\n  //DOC: riferimento all'Authentication di Firebase\n  private _auth: Authentication = null;\n  //DOC: inizializza o restituisce il riferimento all'Authentication instanziato\n  private get auth(): Authentication {\n    if (!this._auth) this._auth = this.container.get(Authentication);\n    return this._auth;\n  };\n\n  constructor(private container: Container) {\n    this.storage = Firebase.storage();\n    this.logger.success(\"Firebase Storage\", \"inizializzato correttamente\");\n  }\n\n  public uploadProfilePicture(uid: string, file: any, callbackOnProgress: (data: any) => any, callbackOnCompleted: (data: any) => any, context: any) {\n    let n = Math.floor(Math.random() * 1000 + 1); //NOTE: nome = uid_<random number[1-10]>.<ext>\n    let path = LocalResources.profile + uid + /*\"_\" + n + */'.' + file.name.split('.').pop();\n    var uploadTask = this.storage.ref().child(path).put(file);\n    uploadTask.on('state_changed',\n      (snapshot) => callbackOnProgress.call(context, snapshot),\n      (e) => {\n        // Errors list: https://firebase.google.com/docs/storage/web/handle-errors\n        var error = e as Firebase.FirebaseError; //NOTE: //if error gives a warning check here https://github.com/firebase/firebase-js-sdk/issues/1515\n        switch (error.code) {\n          case 'storage/unauthorized':\n            // User doesn't have permission to access the object\n            break;\n          case 'storage/canceled':\n            // User canceled the upload\n            break;\n          case 'storage/unknown':\n            // Unknown error occurred, inspect error.serverResponse\n            break;\n        }\n      },\n      () => uploadTask.snapshot.ref.getDownloadURL().then(downloadURL => callbackOnCompleted.call(context, downloadURL))\n    );\n  }\n\n}\n","/*! markdown-it 8.4.2 https://github.com//markdown-it/markdown-it @license MIT */(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.markdownit = f()}})(function(){var define,module,exports;return (function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}return e})()({1:[function(require,module,exports){\n// HTML5 entities map: { name -> utf16string }\n//\n'use strict';\n\n/*eslint quotes:0*/\nmodule.exports = require('entities/maps/entities.json');\n\n},{\"entities/maps/entities.json\":52}],2:[function(require,module,exports){\n// List of valid html blocks names, accorting to commonmark spec\n// http://jgm.github.io/CommonMark/spec.html#html-blocks\n\n'use strict';\n\n\nmodule.exports = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'meta',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'section',\n  'source',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n];\n\n},{}],3:[function(require,module,exports){\n// Regexps to match html elements\n\n'use strict';\n\nvar attr_name     = '[a-zA-Z_:][a-zA-Z0-9:._-]*';\n\nvar unquoted      = '[^\"\\'=<>`\\\\x00-\\\\x20]+';\nvar single_quoted = \"'[^']*'\";\nvar double_quoted = '\"[^\"]*\"';\n\nvar attr_value  = '(?:' + unquoted + '|' + single_quoted + '|' + double_quoted + ')';\n\nvar attribute   = '(?:\\\\s+' + attr_name + '(?:\\\\s*=\\\\s*' + attr_value + ')?)';\n\nvar open_tag    = '<[A-Za-z][A-Za-z0-9\\\\-]*' + attribute + '*\\\\s*\\\\/?>';\n\nvar close_tag   = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>';\nvar comment     = '<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->';\nvar processing  = '<[?].*?[?]>';\nvar declaration = '<![A-Z]+\\\\s+[^>]*>';\nvar cdata       = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>';\n\nvar HTML_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + '|' + comment +\n                        '|' + processing + '|' + declaration + '|' + cdata + ')');\nvar HTML_OPEN_CLOSE_TAG_RE = new RegExp('^(?:' + open_tag + '|' + close_tag + ')');\n\nmodule.exports.HTML_TAG_RE = HTML_TAG_RE;\nmodule.exports.HTML_OPEN_CLOSE_TAG_RE = HTML_OPEN_CLOSE_TAG_RE;\n\n},{}],4:[function(require,module,exports){\n// Utilities\n//\n'use strict';\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction isString(obj) { return _class(obj) === '[object String]'; }\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction has(object, key) {\n  return _hasOwnProperty.call(object, key);\n}\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be object');\n    }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\n// Remove element from array and put another array at those position.\n// Useful for some operations with tokens\nfunction arrayReplaceAt(src, pos, newElements) {\n  return [].concat(src.slice(0, pos), newElements, src.slice(pos + 1));\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isValidEntityCode(c) {\n  /*eslint no-bitwise:0*/\n  // broken sequence\n  if (c >= 0xD800 && c <= 0xDFFF) { return false; }\n  // never used\n  if (c >= 0xFDD0 && c <= 0xFDEF) { return false; }\n  if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false; }\n  // control codes\n  if (c >= 0x00 && c <= 0x08) { return false; }\n  if (c === 0x0B) { return false; }\n  if (c >= 0x0E && c <= 0x1F) { return false; }\n  if (c >= 0x7F && c <= 0x9F) { return false; }\n  // out of range\n  if (c > 0x10FFFF) { return false; }\n  return true;\n}\n\nfunction fromCodePoint(c) {\n  /*eslint no-bitwise:0*/\n  if (c > 0xffff) {\n    c -= 0x10000;\n    var surrogate1 = 0xd800 + (c >> 10),\n        surrogate2 = 0xdc00 + (c & 0x3ff);\n\n    return String.fromCharCode(surrogate1, surrogate2);\n  }\n  return String.fromCharCode(c);\n}\n\n\nvar UNESCAPE_MD_RE  = /\\\\([!\"#$%&'()*+,\\-.\\/:;<=>?@[\\\\\\]^_`{|}~])/g;\nvar ENTITY_RE       = /&([a-z#][a-z0-9]{1,31});/gi;\nvar UNESCAPE_ALL_RE = new RegExp(UNESCAPE_MD_RE.source + '|' + ENTITY_RE.source, 'gi');\n\nvar DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;\n\nvar entities = require('./entities');\n\nfunction replaceEntityPattern(match, name) {\n  var code = 0;\n\n  if (has(entities, name)) {\n    return entities[name];\n  }\n\n  if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    code = name[1].toLowerCase() === 'x' ?\n      parseInt(name.slice(2), 16)\n    :\n      parseInt(name.slice(1), 10);\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code);\n    }\n  }\n\n  return match;\n}\n\n/*function replaceEntities(str) {\n  if (str.indexOf('&') < 0) { return str; }\n\n  return str.replace(ENTITY_RE, replaceEntityPattern);\n}*/\n\nfunction unescapeMd(str) {\n  if (str.indexOf('\\\\') < 0) { return str; }\n  return str.replace(UNESCAPE_MD_RE, '$1');\n}\n\nfunction unescapeAll(str) {\n  if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str; }\n\n  return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n    if (escaped) { return escaped; }\n    return replaceEntityPattern(match, entity);\n  });\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nvar HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nvar HTML_REPLACEMENTS = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n  return HTML_REPLACEMENTS[ch];\n}\n\nfunction escapeHtml(str) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n  }\n  return str;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g;\n\nfunction escapeRE(str) {\n  return str.replace(REGEXP_ESCAPE_RE, '\\\\$&');\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction isSpace(code) {\n  switch (code) {\n    case 0x09:\n    case 0x20:\n      return true;\n  }\n  return false;\n}\n\n// Zs (unicode class) || [\\t\\f\\v\\r\\n]\nfunction isWhiteSpace(code) {\n  if (code >= 0x2000 && code <= 0x200A) { return true; }\n  switch (code) {\n    case 0x09: // \\t\n    case 0x0A: // \\n\n    case 0x0B: // \\v\n    case 0x0C: // \\f\n    case 0x0D: // \\r\n    case 0x20:\n    case 0xA0:\n    case 0x1680:\n    case 0x202F:\n    case 0x205F:\n    case 0x3000:\n      return true;\n  }\n  return false;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n/*eslint-disable max-len*/\nvar UNICODE_PUNCT_RE = require('uc.micro/categories/P/regex');\n\n// Currently without astral characters support.\nfunction isPunctChar(ch) {\n  return UNICODE_PUNCT_RE.test(ch);\n}\n\n\n// Markdown ASCII punctuation characters.\n//\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\n//\n// Don't confuse with unicode punctuation !!! It lacks some chars in ascii range.\n//\nfunction isMdAsciiPunct(ch) {\n  switch (ch) {\n    case 0x21/* ! */:\n    case 0x22/* \" */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x27/* ' */:\n    case 0x28/* ( */:\n    case 0x29/* ) */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2C/* , */:\n    case 0x2D/* - */:\n    case 0x2E/* . */:\n    case 0x2F/* / */:\n    case 0x3A/* : */:\n    case 0x3B/* ; */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x3F/* ? */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7C/* | */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true;\n    default:\n      return false;\n  }\n}\n\n// Hepler to unify [reference labels].\n//\nfunction normalizeReference(str) {\n  // use .toUpperCase() instead of .toLowerCase()\n  // here to avoid a conflict with Object.prototype\n  // members (most notably, `__proto__`)\n  return str.trim().replace(/\\s+/g, ' ').toUpperCase();\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n// Re-export libraries commonly used in both markdown-it and its plugins,\n// so plugins won't have to depend on them explicitly, which reduces their\n// bundled size (e.g. a browser build).\n//\nexports.lib                 = {};\nexports.lib.mdurl           = require('mdurl');\nexports.lib.ucmicro         = require('uc.micro');\n\nexports.assign              = assign;\nexports.isString            = isString;\nexports.has                 = has;\nexports.unescapeMd          = unescapeMd;\nexports.unescapeAll         = unescapeAll;\nexports.isValidEntityCode   = isValidEntityCode;\nexports.fromCodePoint       = fromCodePoint;\n// exports.replaceEntities     = replaceEntities;\nexports.escapeHtml          = escapeHtml;\nexports.arrayReplaceAt      = arrayReplaceAt;\nexports.isSpace             = isSpace;\nexports.isWhiteSpace        = isWhiteSpace;\nexports.isMdAsciiPunct      = isMdAsciiPunct;\nexports.isPunctChar         = isPunctChar;\nexports.escapeRE            = escapeRE;\nexports.normalizeReference  = normalizeReference;\n\n},{\"./entities\":1,\"mdurl\":58,\"uc.micro\":65,\"uc.micro/categories/P/regex\":63}],5:[function(require,module,exports){\n// Just a shortcut for bulk export\n'use strict';\n\n\nexports.parseLinkLabel       = require('./parse_link_label');\nexports.parseLinkDestination = require('./parse_link_destination');\nexports.parseLinkTitle       = require('./parse_link_title');\n\n},{\"./parse_link_destination\":6,\"./parse_link_label\":7,\"./parse_link_title\":8}],6:[function(require,module,exports){\n// Parse link destination\n//\n'use strict';\n\n\nvar isSpace     = require('../common/utils').isSpace;\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkDestination(str, pos, max) {\n  var code, level,\n      lines = 0,\n      start = pos,\n      result = {\n        ok: false,\n        pos: 0,\n        lines: 0,\n        str: ''\n      };\n\n  if (str.charCodeAt(pos) === 0x3C /* < */) {\n    pos++;\n    while (pos < max) {\n      code = str.charCodeAt(pos);\n      if (code === 0x0A /* \\n */ || isSpace(code)) { return result; }\n      if (code === 0x3E /* > */) {\n        result.pos = pos + 1;\n        result.str = unescapeAll(str.slice(start + 1, pos));\n        result.ok = true;\n        return result;\n      }\n      if (code === 0x5C /* \\ */ && pos + 1 < max) {\n        pos += 2;\n        continue;\n      }\n\n      pos++;\n    }\n\n    // no closing '>'\n    return result;\n  }\n\n  // this should be ... } else { ... branch\n\n  level = 0;\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n\n    if (code === 0x20) { break; }\n\n    // ascii control characters\n    if (code < 0x20 || code === 0x7F) { break; }\n\n    if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos += 2;\n      continue;\n    }\n\n    if (code === 0x28 /* ( */) {\n      level++;\n    }\n\n    if (code === 0x29 /* ) */) {\n      if (level === 0) { break; }\n      level--;\n    }\n\n    pos++;\n  }\n\n  if (start === pos) { return result; }\n  if (level !== 0) { return result; }\n\n  result.str = unescapeAll(str.slice(start, pos));\n  result.lines = lines;\n  result.pos = pos;\n  result.ok = true;\n  return result;\n};\n\n},{\"../common/utils\":4}],7:[function(require,module,exports){\n// Parse link label\n//\n// this function assumes that first character (\"[\") already matches;\n// returns the end of the label\n//\n'use strict';\n\nmodule.exports = function parseLinkLabel(state, start, disableNested) {\n  var level, found, marker, prevPos,\n      labelEnd = -1,\n      max = state.posMax,\n      oldPos = state.pos;\n\n  state.pos = start + 1;\n  level = 1;\n\n  while (state.pos < max) {\n    marker = state.src.charCodeAt(state.pos);\n    if (marker === 0x5D /* ] */) {\n      level--;\n      if (level === 0) {\n        found = true;\n        break;\n      }\n    }\n\n    prevPos = state.pos;\n    state.md.inline.skipToken(state);\n    if (marker === 0x5B /* [ */) {\n      if (prevPos === state.pos - 1) {\n        // increase level if we find text `[`, which is not a part of any token\n        level++;\n      } else if (disableNested) {\n        state.pos = oldPos;\n        return -1;\n      }\n    }\n  }\n\n  if (found) {\n    labelEnd = state.pos;\n  }\n\n  // restore old state\n  state.pos = oldPos;\n\n  return labelEnd;\n};\n\n},{}],8:[function(require,module,exports){\n// Parse link title\n//\n'use strict';\n\n\nvar unescapeAll = require('../common/utils').unescapeAll;\n\n\nmodule.exports = function parseLinkTitle(str, pos, max) {\n  var code,\n      marker,\n      lines = 0,\n      start = pos,\n      result = {\n        ok: false,\n        pos: 0,\n        lines: 0,\n        str: ''\n      };\n\n  if (pos >= max) { return result; }\n\n  marker = str.charCodeAt(pos);\n\n  if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; }\n\n  pos++;\n\n  // if opening marker is \"(\", switch it to closing marker \")\"\n  if (marker === 0x28) { marker = 0x29; }\n\n  while (pos < max) {\n    code = str.charCodeAt(pos);\n    if (code === marker) {\n      result.pos = pos + 1;\n      result.lines = lines;\n      result.str = unescapeAll(str.slice(start + 1, pos));\n      result.ok = true;\n      return result;\n    } else if (code === 0x0A) {\n      lines++;\n    } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos++;\n      if (str.charCodeAt(pos) === 0x0A) {\n        lines++;\n      }\n    }\n\n    pos++;\n  }\n\n  return result;\n};\n\n},{\"../common/utils\":4}],9:[function(require,module,exports){\n// Main parser class\n\n'use strict';\n\n\nvar utils        = require('./common/utils');\nvar helpers      = require('./helpers');\nvar Renderer     = require('./renderer');\nvar ParserCore   = require('./parser_core');\nvar ParserBlock  = require('./parser_block');\nvar ParserInline = require('./parser_inline');\nvar LinkifyIt    = require('linkify-it');\nvar mdurl        = require('mdurl');\nvar punycode     = require('punycode');\n\n\nvar config = {\n  'default': require('./presets/default'),\n  zero: require('./presets/zero'),\n  commonmark: require('./presets/commonmark')\n};\n\n////////////////////////////////////////////////////////////////////////////////\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nvar BAD_PROTO_RE = /^(vbscript|javascript|file|data):/;\nvar GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/;\n\nfunction validateLink(url) {\n  // url should be normalized at this point, and existing entities are decoded\n  var str = url.trim().toLowerCase();\n\n  return BAD_PROTO_RE.test(str) ? (GOOD_DATA_RE.test(str) ? true : false) : true;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar RECODE_HOSTNAME_FOR = [ 'http:', 'https:', 'mailto:' ];\n\nfunction normalizeLink(url) {\n  var parsed = mdurl.parse(url, true);\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toASCII(parsed.hostname);\n      } catch (er) { /**/ }\n    }\n  }\n\n  return mdurl.encode(mdurl.format(parsed));\n}\n\nfunction normalizeLinkText(url) {\n  var parsed = mdurl.parse(url, true);\n\n  if (parsed.hostname) {\n    // Encode hostnames in urls like:\n    // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n    //\n    // We don't encode unknown schemas, because it's likely that we encode\n    // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n    //\n    if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n      try {\n        parsed.hostname = punycode.toUnicode(parsed.hostname);\n      } catch (er) { /**/ }\n    }\n  }\n\n  return mdurl.decode(mdurl.format(parsed));\n}\n\n\n/**\n * class MarkdownIt\n *\n * Main parser/renderer class.\n *\n * ##### Usage\n *\n * ```javascript\n * // node.js, \"classic\" way:\n * var MarkdownIt = require('markdown-it'),\n *     md = new MarkdownIt();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // node.js, the same, but with sugar:\n * var md = require('markdown-it')();\n * var result = md.render('# markdown-it rulezz!');\n *\n * // browser without AMD, added to \"window\" on script load\n * // Note, there are no dash.\n * var md = window.markdownit();\n * var result = md.render('# markdown-it rulezz!');\n * ```\n *\n * Single line rendering, without paragraph wrap:\n *\n * ```javascript\n * var md = require('markdown-it')();\n * var result = md.renderInline('__markdown-it__ rulezz!');\n * ```\n **/\n\n/**\n * new MarkdownIt([presetName, options])\n * - presetName (String): optional, `commonmark` / `zero`\n * - options (Object)\n *\n * Creates parser instanse with given config. Can be called without `new`.\n *\n * ##### presetName\n *\n * MarkdownIt provides named presets as a convenience to quickly\n * enable/disable active syntax rules and options for common use cases.\n *\n * - [\"commonmark\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/commonmark.js) -\n *   configures parser to strict [CommonMark](http://commonmark.org/) mode.\n * - [default](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/default.js) -\n *   similar to GFM, used when no preset name given. Enables all available rules,\n *   but still without html, typographer & autolinker.\n * - [\"zero\"](https://github.com/markdown-it/markdown-it/blob/master/lib/presets/zero.js) -\n *   all rules disabled. Useful to quickly setup your config via `.enable()`.\n *   For example, when you need only `bold` and `italic` markup and nothing else.\n *\n * ##### options:\n *\n * - __html__ - `false`. Set `true` to enable HTML tags in source. Be careful!\n *   That's not safe! You may need external sanitizer to protect output from XSS.\n *   It's better to extend features via plugins, instead of enabling HTML.\n * - __xhtmlOut__ - `false`. Set `true` to add '/' when closing single tags\n *   (`<br />`). This is needed only for full CommonMark compatibility. In real\n *   world you will need HTML output.\n * - __breaks__ - `false`. Set `true` to convert `\\n` in paragraphs into `<br>`.\n * - __langPrefix__ - `language-`. CSS language class prefix for fenced blocks.\n *   Can be useful for external highlighters.\n * - __linkify__ - `false`. Set `true` to autoconvert URL-like text to links.\n * - __typographer__  - `false`. Set `true` to enable [some language-neutral\n *   replacement](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/replacements.js) +\n *   quotes beautification (smartquotes).\n * - __quotes__ - `“”‘’`, String or Array. Double + single quotes replacement\n *   pairs, when typographer enabled and smartquotes on. For example, you can\n *   use `'«»„“'` for Russian, `'„“‚‘'` for German, and\n *   `['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›']` for French (including nbsp).\n * - __highlight__ - `null`. Highlighter function for fenced code blocks.\n *   Highlighter `function (str, lang)` should return escaped HTML. It can also\n *   return empty string if the source was not changed and should be escaped\n *   externaly. If result starts with <pre... internal wrapper is skipped.\n *\n * ##### Example\n *\n * ```javascript\n * // commonmark mode\n * var md = require('markdown-it')('commonmark');\n *\n * // default mode\n * var md = require('markdown-it')();\n *\n * // enable everything\n * var md = require('markdown-it')({\n *   html: true,\n *   linkify: true,\n *   typographer: true\n * });\n * ```\n *\n * ##### Syntax highlighting\n *\n * ```js\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return hljs.highlight(lang, str, true).value;\n *       } catch (__) {}\n *     }\n *\n *     return ''; // use external default escaping\n *   }\n * });\n * ```\n *\n * Or with full wrapper override (if you need assign class to `<pre>`):\n *\n * ```javascript\n * var hljs = require('highlight.js') // https://highlightjs.org/\n *\n * // Actual default values\n * var md = require('markdown-it')({\n *   highlight: function (str, lang) {\n *     if (lang && hljs.getLanguage(lang)) {\n *       try {\n *         return '<pre class=\"hljs\"><code>' +\n *                hljs.highlight(lang, str, true).value +\n *                '</code></pre>';\n *       } catch (__) {}\n *     }\n *\n *     return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n *   }\n * });\n * ```\n *\n **/\nfunction MarkdownIt(presetName, options) {\n  if (!(this instanceof MarkdownIt)) {\n    return new MarkdownIt(presetName, options);\n  }\n\n  if (!options) {\n    if (!utils.isString(presetName)) {\n      options = presetName || {};\n      presetName = 'default';\n    }\n  }\n\n  /**\n   * MarkdownIt#inline -> ParserInline\n   *\n   * Instance of [[ParserInline]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.inline = new ParserInline();\n\n  /**\n   * MarkdownIt#block -> ParserBlock\n   *\n   * Instance of [[ParserBlock]]. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.block = new ParserBlock();\n\n  /**\n   * MarkdownIt#core -> Core\n   *\n   * Instance of [[Core]] chain executor. You may need it to add new rules when\n   * writing plugins. For simple rules control use [[MarkdownIt.disable]] and\n   * [[MarkdownIt.enable]].\n   **/\n  this.core = new ParserCore();\n\n  /**\n   * MarkdownIt#renderer -> Renderer\n   *\n   * Instance of [[Renderer]]. Use it to modify output look. Or to add rendering\n   * rules for new token types, generated by plugins.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * function myToken(tokens, idx, options, env, self) {\n   *   //...\n   *   return result;\n   * };\n   *\n   * md.renderer.rules['my_token'] = myToken\n   * ```\n   *\n   * See [[Renderer]] docs and [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js).\n   **/\n  this.renderer = new Renderer();\n\n  /**\n   * MarkdownIt#linkify -> LinkifyIt\n   *\n   * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n   * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/lib/rules_core/linkify.js)\n   * rule.\n   **/\n  this.linkify = new LinkifyIt();\n\n  /**\n   * MarkdownIt#validateLink(url) -> Boolean\n   *\n   * Link validation function. CommonMark allows too much in links. By default\n   * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n   * except some embedded image types.\n   *\n   * You can change this behaviour:\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   * // enable everything\n   * md.validateLink = function () { return true; }\n   * ```\n   **/\n  this.validateLink = validateLink;\n\n  /**\n   * MarkdownIt#normalizeLink(url) -> String\n   *\n   * Function used to encode link url to a machine-readable format,\n   * which includes url-encoding, punycode, etc.\n   **/\n  this.normalizeLink = normalizeLink;\n\n  /**\n   * MarkdownIt#normalizeLinkText(url) -> String\n   *\n   * Function used to decode link url to a human-readable format`\n   **/\n  this.normalizeLinkText = normalizeLinkText;\n\n\n  // Expose utils & helpers for easy acces from plugins\n\n  /**\n   * MarkdownIt#utils -> utils\n   *\n   * Assorted utility functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js).\n   **/\n  this.utils = utils;\n\n  /**\n   * MarkdownIt#helpers -> helpers\n   *\n   * Link components parser functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/lib/helpers).\n   **/\n  this.helpers = utils.assign({}, helpers);\n\n\n  this.options = {};\n  this.configure(presetName);\n\n  if (options) { this.set(options); }\n}\n\n\n/** chainable\n * MarkdownIt.set(options)\n *\n * Set parser options (in the same format as in constructor). Probably, you\n * will never need it, but you can change options after constructor call.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .set({ html: true, breaks: true })\n *             .set({ typographer, true });\n * ```\n *\n * __Note:__ To achieve the best possible performance, don't modify a\n * `markdown-it` instance options on the fly. If you need multiple configurations\n * it's best to create multiple instances and initialize each with separate\n * config.\n **/\nMarkdownIt.prototype.set = function (options) {\n  utils.assign(this.options, options);\n  return this;\n};\n\n\n/** chainable, internal\n * MarkdownIt.configure(presets)\n *\n * Batch load of all options and compenent settings. This is internal method,\n * and you probably will not need it. But if you with - see available presets\n * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/lib/presets)\n *\n * We strongly recommend to use presets instead of direct config loads. That\n * will give better compatibility with next versions.\n **/\nMarkdownIt.prototype.configure = function (presets) {\n  var self = this, presetName;\n\n  if (utils.isString(presets)) {\n    presetName = presets;\n    presets = config[presetName];\n    if (!presets) { throw new Error('Wrong `markdown-it` preset \"' + presetName + '\", check name'); }\n  }\n\n  if (!presets) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty'); }\n\n  if (presets.options) { self.set(presets.options); }\n\n  if (presets.components) {\n    Object.keys(presets.components).forEach(function (name) {\n      if (presets.components[name].rules) {\n        self[name].ruler.enableOnly(presets.components[name].rules);\n      }\n      if (presets.components[name].rules2) {\n        self[name].ruler2.enableOnly(presets.components[name].rules2);\n      }\n    });\n  }\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.enable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to enable\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable list or rules. It will automatically find appropriate components,\n * containing rules with given names. If rule not found, and `ignoreInvalid`\n * not set - throws exception.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')()\n *             .enable(['sub', 'sup'])\n *             .disable('smartquotes');\n * ```\n **/\nMarkdownIt.prototype.enable = function (list, ignoreInvalid) {\n  var result = [];\n\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  [ 'core', 'block', 'inline' ].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.enable(list, true));\n  }, this);\n\n  result = result.concat(this.inline.ruler2.enable(list, true));\n\n  var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to enable unknown rule(s): ' + missed);\n  }\n\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.disable(list, ignoreInvalid)\n * - list (String|Array): rule name or list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * The same as [[MarkdownIt.enable]], but turn specified rules off.\n **/\nMarkdownIt.prototype.disable = function (list, ignoreInvalid) {\n  var result = [];\n\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  [ 'core', 'block', 'inline' ].forEach(function (chain) {\n    result = result.concat(this[chain].ruler.disable(list, true));\n  }, this);\n\n  result = result.concat(this.inline.ruler2.disable(list, true));\n\n  var missed = list.filter(function (name) { return result.indexOf(name) < 0; });\n\n  if (missed.length && !ignoreInvalid) {\n    throw new Error('MarkdownIt. Failed to disable unknown rule(s): ' + missed);\n  }\n  return this;\n};\n\n\n/** chainable\n * MarkdownIt.use(plugin, params)\n *\n * Load specified plugin with given params into current parser instance.\n * It's just a sugar to call `plugin(md, params)` with curring.\n *\n * ##### Example\n *\n * ```javascript\n * var iterator = require('markdown-it-for-inline');\n * var md = require('markdown-it')()\n *             .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n *               tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');\n *             });\n * ```\n **/\nMarkdownIt.prototype.use = function (plugin /*, params, ... */) {\n  var args = [ this ].concat(Array.prototype.slice.call(arguments, 1));\n  plugin.apply(plugin, args);\n  return this;\n};\n\n\n/** internal\n * MarkdownIt.parse(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Parse input string and returns list of block tokens (special token type\n * \"inline\" will contain list of inline tokens). You should not call this\n * method directly, until you write custom renderer (for example, to produce\n * AST).\n *\n * `env` is used to pass data between \"distributed\" rules and return additional\n * metadata like reference info, needed for the renderer. It also can be used to\n * inject data in specific cases. Usually, you will be ok to pass `{}`,\n * and then pass updated object to renderer.\n **/\nMarkdownIt.prototype.parse = function (src, env) {\n  if (typeof src !== 'string') {\n    throw new Error('Input data should be a String');\n  }\n\n  var state = new this.core.State(src, this, env);\n\n  this.core.process(state);\n\n  return state.tokens;\n};\n\n\n/**\n * MarkdownIt.render(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Render markdown string into html. It does all magic for you :).\n *\n * `env` can be used to inject additional metadata (`{}` by default).\n * But you will not need it with high probability. See also comment\n * in [[MarkdownIt.parse]].\n **/\nMarkdownIt.prototype.render = function (src, env) {\n  env = env || {};\n\n  return this.renderer.render(this.parse(src, env), this.options, env);\n};\n\n\n/** internal\n * MarkdownIt.parseInline(src, env) -> Array\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * The same as [[MarkdownIt.parse]] but skip all block rules. It returns the\n * block tokens list with the single `inline` element, containing parsed inline\n * tokens in `children` property. Also updates `env` object.\n **/\nMarkdownIt.prototype.parseInline = function (src, env) {\n  var state = new this.core.State(src, this, env);\n\n  state.inlineMode = true;\n  this.core.process(state);\n\n  return state.tokens;\n};\n\n\n/**\n * MarkdownIt.renderInline(src [, env]) -> String\n * - src (String): source string\n * - env (Object): environment sandbox\n *\n * Similar to [[MarkdownIt.render]] but for single paragraph content. Result\n * will NOT be wrapped into `<p>` tags.\n **/\nMarkdownIt.prototype.renderInline = function (src, env) {\n  env = env || {};\n\n  return this.renderer.render(this.parseInline(src, env), this.options, env);\n};\n\n\nmodule.exports = MarkdownIt;\n\n},{\"./common/utils\":4,\"./helpers\":5,\"./parser_block\":10,\"./parser_core\":11,\"./parser_inline\":12,\"./presets/commonmark\":13,\"./presets/default\":14,\"./presets/zero\":15,\"./renderer\":16,\"linkify-it\":53,\"mdurl\":58,\"punycode\":60}],10:[function(require,module,exports){\n/** internal\n * class ParserBlock\n *\n * Block-level tokenizer.\n **/\n'use strict';\n\n\nvar Ruler           = require('./ruler');\n\n\nvar _rules = [\n  // First 2 params - rule name & source. Secondary array - list of rules,\n  // which can be terminated by this one.\n  [ 'table',      require('./rules_block/table'),      [ 'paragraph', 'reference' ] ],\n  [ 'code',       require('./rules_block/code') ],\n  [ 'fence',      require('./rules_block/fence'),      [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'blockquote', require('./rules_block/blockquote'), [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'hr',         require('./rules_block/hr'),         [ 'paragraph', 'reference', 'blockquote', 'list' ] ],\n  [ 'list',       require('./rules_block/list'),       [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'reference',  require('./rules_block/reference') ],\n  [ 'heading',    require('./rules_block/heading'),    [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'lheading',   require('./rules_block/lheading') ],\n  [ 'html_block', require('./rules_block/html_block'), [ 'paragraph', 'reference', 'blockquote' ] ],\n  [ 'paragraph',  require('./rules_block/paragraph') ]\n];\n\n\n/**\n * new ParserBlock()\n **/\nfunction ParserBlock() {\n  /**\n   * ParserBlock#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of block rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() });\n  }\n}\n\n\n// Generate tokens for input range\n//\nParserBlock.prototype.tokenize = function (state, startLine, endLine) {\n  var ok, i,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      line = startLine,\n      hasEmptyLines = false,\n      maxNesting = state.md.options.maxNesting;\n\n  while (line < endLine) {\n    state.line = line = state.skipEmptyLines(line);\n    if (line >= endLine) { break; }\n\n    // Termination condition for nested calls.\n    // Nested calls currently used for blockquotes & lists\n    if (state.sCount[line] < state.blkIndent) { break; }\n\n    // If nesting level exceeded - skip tail to the end. That's not ordinary\n    // situation and we should not care about content.\n    if (state.level >= maxNesting) {\n      state.line = endLine;\n      break;\n    }\n\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.line`\n    // - update `state.tokens`\n    // - return true\n\n    for (i = 0; i < len; i++) {\n      ok = rules[i](state, line, endLine, false);\n      if (ok) { break; }\n    }\n\n    // set state.tight if we had an empty line before current tag\n    // i.e. latest empty line should not count\n    state.tight = !hasEmptyLines;\n\n    // paragraph might \"eat\" one newline after it in nested lists\n    if (state.isEmpty(state.line - 1)) {\n      hasEmptyLines = true;\n    }\n\n    line = state.line;\n\n    if (line < endLine && state.isEmpty(line)) {\n      hasEmptyLines = true;\n      line++;\n      state.line = line;\n    }\n  }\n};\n\n\n/**\n * ParserBlock.parse(str, md, env, outTokens)\n *\n * Process input string and push block tokens into `outTokens`\n **/\nParserBlock.prototype.parse = function (src, md, env, outTokens) {\n  var state;\n\n  if (!src) { return; }\n\n  state = new this.State(src, md, env, outTokens);\n\n  this.tokenize(state, state.line, state.lineMax);\n};\n\n\nParserBlock.prototype.State = require('./rules_block/state_block');\n\n\nmodule.exports = ParserBlock;\n\n},{\"./ruler\":17,\"./rules_block/blockquote\":18,\"./rules_block/code\":19,\"./rules_block/fence\":20,\"./rules_block/heading\":21,\"./rules_block/hr\":22,\"./rules_block/html_block\":23,\"./rules_block/lheading\":24,\"./rules_block/list\":25,\"./rules_block/paragraph\":26,\"./rules_block/reference\":27,\"./rules_block/state_block\":28,\"./rules_block/table\":29}],11:[function(require,module,exports){\n/** internal\n * class Core\n *\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n **/\n'use strict';\n\n\nvar Ruler  = require('./ruler');\n\n\nvar _rules = [\n  [ 'normalize',      require('./rules_core/normalize')      ],\n  [ 'block',          require('./rules_core/block')          ],\n  [ 'inline',         require('./rules_core/inline')         ],\n  [ 'linkify',        require('./rules_core/linkify')        ],\n  [ 'replacements',   require('./rules_core/replacements')   ],\n  [ 'smartquotes',    require('./rules_core/smartquotes')    ]\n];\n\n\n/**\n * new Core()\n **/\nfunction Core() {\n  /**\n   * Core#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of core rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (var i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n}\n\n\n/**\n * Core.process(state)\n *\n * Executes core chain rules.\n **/\nCore.prototype.process = function (state) {\n  var i, l, rules;\n\n  rules = this.ruler.getRules('');\n\n  for (i = 0, l = rules.length; i < l; i++) {\n    rules[i](state);\n  }\n};\n\nCore.prototype.State = require('./rules_core/state_core');\n\n\nmodule.exports = Core;\n\n},{\"./ruler\":17,\"./rules_core/block\":30,\"./rules_core/inline\":31,\"./rules_core/linkify\":32,\"./rules_core/normalize\":33,\"./rules_core/replacements\":34,\"./rules_core/smartquotes\":35,\"./rules_core/state_core\":36}],12:[function(require,module,exports){\n/** internal\n * class ParserInline\n *\n * Tokenizes paragraph content.\n **/\n'use strict';\n\n\nvar Ruler           = require('./ruler');\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Parser rules\n\nvar _rules = [\n  [ 'text',            require('./rules_inline/text') ],\n  [ 'newline',         require('./rules_inline/newline') ],\n  [ 'escape',          require('./rules_inline/escape') ],\n  [ 'backticks',       require('./rules_inline/backticks') ],\n  [ 'strikethrough',   require('./rules_inline/strikethrough').tokenize ],\n  [ 'emphasis',        require('./rules_inline/emphasis').tokenize ],\n  [ 'link',            require('./rules_inline/link') ],\n  [ 'image',           require('./rules_inline/image') ],\n  [ 'autolink',        require('./rules_inline/autolink') ],\n  [ 'html_inline',     require('./rules_inline/html_inline') ],\n  [ 'entity',          require('./rules_inline/entity') ]\n];\n\nvar _rules2 = [\n  [ 'balance_pairs',   require('./rules_inline/balance_pairs') ],\n  [ 'strikethrough',   require('./rules_inline/strikethrough').postProcess ],\n  [ 'emphasis',        require('./rules_inline/emphasis').postProcess ],\n  [ 'text_collapse',   require('./rules_inline/text_collapse') ]\n];\n\n\n/**\n * new ParserInline()\n **/\nfunction ParserInline() {\n  var i;\n\n  /**\n   * ParserInline#ruler -> Ruler\n   *\n   * [[Ruler]] instance. Keep configuration of inline rules.\n   **/\n  this.ruler = new Ruler();\n\n  for (i = 0; i < _rules.length; i++) {\n    this.ruler.push(_rules[i][0], _rules[i][1]);\n  }\n\n  /**\n   * ParserInline#ruler2 -> Ruler\n   *\n   * [[Ruler]] instance. Second ruler used for post-processing\n   * (e.g. in emphasis-like rules).\n   **/\n  this.ruler2 = new Ruler();\n\n  for (i = 0; i < _rules2.length; i++) {\n    this.ruler2.push(_rules2[i][0], _rules2[i][1]);\n  }\n}\n\n\n// Skip single token by running all rules in validation mode;\n// returns `true` if any rule reported success\n//\nParserInline.prototype.skipToken = function (state) {\n  var ok, i, pos = state.pos,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      maxNesting = state.md.options.maxNesting,\n      cache = state.cache;\n\n\n  if (typeof cache[pos] !== 'undefined') {\n    state.pos = cache[pos];\n    return;\n  }\n\n  if (state.level < maxNesting) {\n    for (i = 0; i < len; i++) {\n      // Increment state.level and decrement it later to limit recursion.\n      // It's harmless to do here, because no tokens are created. But ideally,\n      // we'd need a separate private state variable for this purpose.\n      //\n      state.level++;\n      ok = rules[i](state, true);\n      state.level--;\n\n      if (ok) { break; }\n    }\n  } else {\n    // Too much nesting, just skip until the end of the paragraph.\n    //\n    // NOTE: this will cause links to behave incorrectly in the following case,\n    //       when an amount of `[` is exactly equal to `maxNesting + 1`:\n    //\n    //       [[[[[[[[[[[[[[[[[[[[[foo]()\n    //\n    // TODO: remove this workaround when CM standard will allow nested links\n    //       (we can replace it by preventing links from being parsed in\n    //       validation mode)\n    //\n    state.pos = state.posMax;\n  }\n\n  if (!ok) { state.pos++; }\n  cache[pos] = state.pos;\n};\n\n\n// Generate tokens for input range\n//\nParserInline.prototype.tokenize = function (state) {\n  var ok, i,\n      rules = this.ruler.getRules(''),\n      len = rules.length,\n      end = state.posMax,\n      maxNesting = state.md.options.maxNesting;\n\n  while (state.pos < end) {\n    // Try all possible rules.\n    // On success, rule should:\n    //\n    // - update `state.pos`\n    // - update `state.tokens`\n    // - return true\n\n    if (state.level < maxNesting) {\n      for (i = 0; i < len; i++) {\n        ok = rules[i](state, false);\n        if (ok) { break; }\n      }\n    }\n\n    if (ok) {\n      if (state.pos >= end) { break; }\n      continue;\n    }\n\n    state.pending += state.src[state.pos++];\n  }\n\n  if (state.pending) {\n    state.pushPending();\n  }\n};\n\n\n/**\n * ParserInline.parse(str, md, env, outTokens)\n *\n * Process input string and push inline tokens into `outTokens`\n **/\nParserInline.prototype.parse = function (str, md, env, outTokens) {\n  var i, rules, len;\n  var state = new this.State(str, md, env, outTokens);\n\n  this.tokenize(state);\n\n  rules = this.ruler2.getRules('');\n  len = rules.length;\n\n  for (i = 0; i < len; i++) {\n    rules[i](state);\n  }\n};\n\n\nParserInline.prototype.State = require('./rules_inline/state_inline');\n\n\nmodule.exports = ParserInline;\n\n},{\"./ruler\":17,\"./rules_inline/autolink\":37,\"./rules_inline/backticks\":38,\"./rules_inline/balance_pairs\":39,\"./rules_inline/emphasis\":40,\"./rules_inline/entity\":41,\"./rules_inline/escape\":42,\"./rules_inline/html_inline\":43,\"./rules_inline/image\":44,\"./rules_inline/link\":45,\"./rules_inline/newline\":46,\"./rules_inline/state_inline\":47,\"./rules_inline/strikethrough\":48,\"./rules_inline/text\":49,\"./rules_inline/text_collapse\":50}],13:[function(require,module,exports){\n// Commonmark default options\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         true,         // Enable HTML tags in source\n    xhtmlOut:     true,         // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   20            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline'\n      ]\n    },\n\n    block: {\n      rules: [\n        'blockquote',\n        'code',\n        'fence',\n        'heading',\n        'hr',\n        'html_block',\n        'lheading',\n        'list',\n        'reference',\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'autolink',\n        'backticks',\n        'emphasis',\n        'entity',\n        'escape',\n        'html_inline',\n        'image',\n        'link',\n        'newline',\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'emphasis',\n        'text_collapse'\n      ]\n    }\n  }\n};\n\n},{}],14:[function(require,module,exports){\n// markdown-it default options\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         false,        // Enable HTML tags in source\n    xhtmlOut:     false,        // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   100            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {},\n    block: {},\n    inline: {}\n  }\n};\n\n},{}],15:[function(require,module,exports){\n// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\n'use strict';\n\n\nmodule.exports = {\n  options: {\n    html:         false,        // Enable HTML tags in source\n    xhtmlOut:     false,        // Use '/' to close single tags (<br />)\n    breaks:       false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix:   'language-',  // CSS language prefix for fenced blocks\n    linkify:      false,        // autoconvert URL-like texts to links\n\n    // Enable some language-neutral replacements + quotes beautification\n    typographer:  false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externaly.\n    // If result starts with <pre... internal wrapper is skipped.\n    //\n    // function (/*str, lang*/) { return ''; }\n    //\n    highlight: null,\n\n    maxNesting:   20            // Internal protection, recursion limit\n  },\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'inline'\n      ]\n    },\n\n    block: {\n      rules: [\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'text_collapse'\n      ]\n    }\n  }\n};\n\n},{}],16:[function(require,module,exports){\n/**\n * class Renderer\n *\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n **/\n'use strict';\n\n\nvar assign          = require('./common/utils').assign;\nvar unescapeAll     = require('./common/utils').unescapeAll;\nvar escapeHtml      = require('./common/utils').escapeHtml;\n\n\n////////////////////////////////////////////////////////////////////////////////\n\nvar default_rules = {};\n\n\ndefault_rules.code_inline = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  return  '<code' + slf.renderAttrs(token) + '>' +\n          escapeHtml(tokens[idx].content) +\n          '</code>';\n};\n\n\ndefault_rules.code_block = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  return  '<pre' + slf.renderAttrs(token) + '><code>' +\n          escapeHtml(tokens[idx].content) +\n          '</code></pre>\\n';\n};\n\n\ndefault_rules.fence = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx],\n      info = token.info ? unescapeAll(token.info).trim() : '',\n      langName = '',\n      highlighted, i, tmpAttrs, tmpToken;\n\n  if (info) {\n    langName = info.split(/\\s+/g)[0];\n  }\n\n  if (options.highlight) {\n    highlighted = options.highlight(token.content, langName) || escapeHtml(token.content);\n  } else {\n    highlighted = escapeHtml(token.content);\n  }\n\n  if (highlighted.indexOf('<pre') === 0) {\n    return highlighted + '\\n';\n  }\n\n  // If language exists, inject class gently, without modifying original token.\n  // May be, one day we will add .clone() for token and simplify this part, but\n  // now we prefer to keep things local.\n  if (info) {\n    i        = token.attrIndex('class');\n    tmpAttrs = token.attrs ? token.attrs.slice() : [];\n\n    if (i < 0) {\n      tmpAttrs.push([ 'class', options.langPrefix + langName ]);\n    } else {\n      tmpAttrs[i][1] += ' ' + options.langPrefix + langName;\n    }\n\n    // Fake token just to render attributes\n    tmpToken = {\n      attrs: tmpAttrs\n    };\n\n    return  '<pre><code' + slf.renderAttrs(tmpToken) + '>'\n          + highlighted\n          + '</code></pre>\\n';\n  }\n\n\n  return  '<pre><code' + slf.renderAttrs(token) + '>'\n        + highlighted\n        + '</code></pre>\\n';\n};\n\n\ndefault_rules.image = function (tokens, idx, options, env, slf) {\n  var token = tokens[idx];\n\n  // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n  // should be placed on proper position for tests.\n  //\n  // Replace content with actual value\n\n  token.attrs[token.attrIndex('alt')][1] =\n    slf.renderInlineAsText(token.children, options, env);\n\n  return slf.renderToken(tokens, idx, options);\n};\n\n\ndefault_rules.hardbreak = function (tokens, idx, options /*, env */) {\n  return options.xhtmlOut ? '<br />\\n' : '<br>\\n';\n};\ndefault_rules.softbreak = function (tokens, idx, options /*, env */) {\n  return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n';\n};\n\n\ndefault_rules.text = function (tokens, idx /*, options, env */) {\n  return escapeHtml(tokens[idx].content);\n};\n\n\ndefault_rules.html_block = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\ndefault_rules.html_inline = function (tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\n\n\n/**\n * new Renderer()\n *\n * Creates new [[Renderer]] instance and fill [[Renderer#rules]] with defaults.\n **/\nfunction Renderer() {\n\n  /**\n   * Renderer#rules -> Object\n   *\n   * Contains render rules for tokens. Can be updated and extended.\n   *\n   * ##### Example\n   *\n   * ```javascript\n   * var md = require('markdown-it')();\n   *\n   * md.renderer.rules.strong_open  = function () { return '<b>'; };\n   * md.renderer.rules.strong_close = function () { return '</b>'; };\n   *\n   * var result = md.renderInline(...);\n   * ```\n   *\n   * Each rule is called as independent static function with fixed signature:\n   *\n   * ```javascript\n   * function my_token_render(tokens, idx, options, env, renderer) {\n   *   // ...\n   *   return renderedHTML;\n   * }\n   * ```\n   *\n   * See [source code](https://github.com/markdown-it/markdown-it/blob/master/lib/renderer.js)\n   * for more details and examples.\n   **/\n  this.rules = assign({}, default_rules);\n}\n\n\n/**\n * Renderer.renderAttrs(token) -> String\n *\n * Render token attributes to string.\n **/\nRenderer.prototype.renderAttrs = function renderAttrs(token) {\n  var i, l, result;\n\n  if (!token.attrs) { return ''; }\n\n  result = '';\n\n  for (i = 0, l = token.attrs.length; i < l; i++) {\n    result += ' ' + escapeHtml(token.attrs[i][0]) + '=\"' + escapeHtml(token.attrs[i][1]) + '\"';\n  }\n\n  return result;\n};\n\n\n/**\n * Renderer.renderToken(tokens, idx, options) -> String\n * - tokens (Array): list of tokens\n * - idx (Numbed): token index to render\n * - options (Object): params of parser instance\n *\n * Default token renderer. Can be overriden by custom function\n * in [[Renderer#rules]].\n **/\nRenderer.prototype.renderToken = function renderToken(tokens, idx, options) {\n  var nextToken,\n      result = '',\n      needLf = false,\n      token = tokens[idx];\n\n  // Tight list paragraphs\n  if (token.hidden) {\n    return '';\n  }\n\n  // Insert a newline between hidden paragraph and subsequent opening\n  // block-level tag.\n  //\n  // For example, here we should insert a newline before blockquote:\n  //  - a\n  //    >\n  //\n  if (token.block && token.nesting !== -1 && idx && tokens[idx - 1].hidden) {\n    result += '\\n';\n  }\n\n  // Add token name, e.g. `<img`\n  result += (token.nesting === -1 ? '</' : '<') + token.tag;\n\n  // Encode attributes, e.g. `<img src=\"foo\"`\n  result += this.renderAttrs(token);\n\n  // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n  if (token.nesting === 0 && options.xhtmlOut) {\n    result += ' /';\n  }\n\n  // Check if we need to add a newline after this tag\n  if (token.block) {\n    needLf = true;\n\n    if (token.nesting === 1) {\n      if (idx + 1 < tokens.length) {\n        nextToken = tokens[idx + 1];\n\n        if (nextToken.type === 'inline' || nextToken.hidden) {\n          // Block-level tag containing an inline tag.\n          //\n          needLf = false;\n\n        } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n          // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n          //\n          needLf = false;\n        }\n      }\n    }\n  }\n\n  result += needLf ? '>\\n' : '>';\n\n  return result;\n};\n\n\n/**\n * Renderer.renderInline(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to renter\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * The same as [[Renderer.render]], but for single token of `inline` type.\n **/\nRenderer.prototype.renderInline = function (tokens, options, env) {\n  var type,\n      result = '',\n      rules = this.rules;\n\n  for (var i = 0, len = tokens.length; i < len; i++) {\n    type = tokens[i].type;\n\n    if (typeof rules[type] !== 'undefined') {\n      result += rules[type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options);\n    }\n  }\n\n  return result;\n};\n\n\n/** internal\n * Renderer.renderInlineAsText(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to renter\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Special kludge for image `alt` attributes to conform CommonMark spec.\n * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n * instead of simple escaping.\n **/\nRenderer.prototype.renderInlineAsText = function (tokens, options, env) {\n  var result = '';\n\n  for (var i = 0, len = tokens.length; i < len; i++) {\n    if (tokens[i].type === 'text') {\n      result += tokens[i].content;\n    } else if (tokens[i].type === 'image') {\n      result += this.renderInlineAsText(tokens[i].children, options, env);\n    }\n  }\n\n  return result;\n};\n\n\n/**\n * Renderer.render(tokens, options, env) -> String\n * - tokens (Array): list on block tokens to renter\n * - options (Object): params of parser instance\n * - env (Object): additional data from parsed input (references, for example)\n *\n * Takes token stream and generates HTML. Probably, you will never need to call\n * this method directly.\n **/\nRenderer.prototype.render = function (tokens, options, env) {\n  var i, len, type,\n      result = '',\n      rules = this.rules;\n\n  for (i = 0, len = tokens.length; i < len; i++) {\n    type = tokens[i].type;\n\n    if (type === 'inline') {\n      result += this.renderInline(tokens[i].children, options, env);\n    } else if (typeof rules[type] !== 'undefined') {\n      result += rules[tokens[i].type](tokens, i, options, env, this);\n    } else {\n      result += this.renderToken(tokens, i, options, env);\n    }\n  }\n\n  return result;\n};\n\nmodule.exports = Renderer;\n\n},{\"./common/utils\":4}],17:[function(require,module,exports){\n/**\n * class Ruler\n *\n * Helper class, used by [[MarkdownIt#core]], [[MarkdownIt#block]] and\n * [[MarkdownIt#inline]] to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use [[MarkdownIt.disable]], [[MarkdownIt.enable]] and\n * [[MarkdownIt.use]].\n **/\n'use strict';\n\n\n/**\n * new Ruler()\n **/\nfunction Ruler() {\n  // List of added rules. Each element is:\n  //\n  // {\n  //   name: XXX,\n  //   enabled: Boolean,\n  //   fn: Function(),\n  //   alt: [ name2, name3 ]\n  // }\n  //\n  this.__rules__ = [];\n\n  // Cached rule chains.\n  //\n  // First level - chain name, '' for default.\n  // Second level - diginal anchor for fast filtering by charcodes.\n  //\n  this.__cache__ = null;\n}\n\n////////////////////////////////////////////////////////////////////////////////\n// Helper methods, should not be used directly\n\n\n// Find rule index by name\n//\nRuler.prototype.__find__ = function (name) {\n  for (var i = 0; i < this.__rules__.length; i++) {\n    if (this.__rules__[i].name === name) {\n      return i;\n    }\n  }\n  return -1;\n};\n\n\n// Build rules lookup cache\n//\nRuler.prototype.__compile__ = function () {\n  var self = this;\n  var chains = [ '' ];\n\n  // collect unique names\n  self.__rules__.forEach(function (rule) {\n    if (!rule.enabled) { return; }\n\n    rule.alt.forEach(function (altName) {\n      if (chains.indexOf(altName) < 0) {\n        chains.push(altName);\n      }\n    });\n  });\n\n  self.__cache__ = {};\n\n  chains.forEach(function (chain) {\n    self.__cache__[chain] = [];\n    self.__rules__.forEach(function (rule) {\n      if (!rule.enabled) { return; }\n\n      if (chain && rule.alt.indexOf(chain) < 0) { return; }\n\n      self.__cache__[chain].push(rule.fn);\n    });\n  });\n};\n\n\n/**\n * Ruler.at(name, fn [, options])\n * - name (String): rule name to replace.\n * - fn (Function): new rule function.\n * - options (Object): new rule options (not mandatory).\n *\n * Replace rule by name with new function & options. Throws error if name not\n * found.\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * Replace existing typographer replacement rule with new one:\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.at('replacements', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.at = function (name, fn, options) {\n  var index = this.__find__(name);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + name); }\n\n  this.__rules__[index].fn = fn;\n  this.__rules__[index].alt = opt.alt || [];\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.before(beforeName, ruleName, fn [, options])\n * - beforeName (String): new rule will be added before this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain before one with given name. See also\n * [[Ruler.after]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.before = function (beforeName, ruleName, fn, options) {\n  var index = this.__find__(beforeName);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + beforeName); }\n\n  this.__rules__.splice(index, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.after(afterName, ruleName, fn [, options])\n * - afterName (String): new rule will be added after this one.\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Add new rule to chain after one with given name. See also\n * [[Ruler.before]], [[Ruler.push]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.after = function (afterName, ruleName, fn, options) {\n  var index = this.__find__(afterName);\n  var opt = options || {};\n\n  if (index === -1) { throw new Error('Parser rule not found: ' + afterName); }\n\n  this.__rules__.splice(index + 1, 0, {\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n/**\n * Ruler.push(ruleName, fn [, options])\n * - ruleName (String): name of added rule.\n * - fn (Function): rule function.\n * - options (Object): rule options (not mandatory).\n *\n * Push new rule to the end of chain. See also\n * [[Ruler.before]], [[Ruler.after]].\n *\n * ##### Options:\n *\n * - __alt__ - array with names of \"alternate\" chains.\n *\n * ##### Example\n *\n * ```javascript\n * var md = require('markdown-it')();\n *\n * md.core.ruler.push('my_rule', function replace(state) {\n *   //...\n * });\n * ```\n **/\nRuler.prototype.push = function (ruleName, fn, options) {\n  var opt = options || {};\n\n  this.__rules__.push({\n    name: ruleName,\n    enabled: true,\n    fn: fn,\n    alt: opt.alt || []\n  });\n\n  this.__cache__ = null;\n};\n\n\n/**\n * Ruler.enable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to enable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.disable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.enable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  var result = [];\n\n  // Search by name and enable\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n\n    if (idx < 0) {\n      if (ignoreInvalid) { return; }\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = true;\n    result.push(name);\n  }, this);\n\n  this.__cache__ = null;\n  return result;\n};\n\n\n/**\n * Ruler.enableOnly(list [, ignoreInvalid])\n * - list (String|Array): list of rule names to enable (whitelist).\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Enable rules with given names, and disable everything else. If any rule name\n * not found - throw Error. Errors can be disabled by second param.\n *\n * See also [[Ruler.disable]], [[Ruler.enable]].\n **/\nRuler.prototype.enableOnly = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  this.__rules__.forEach(function (rule) { rule.enabled = false; });\n\n  this.enable(list, ignoreInvalid);\n};\n\n\n/**\n * Ruler.disable(list [, ignoreInvalid]) -> Array\n * - list (String|Array): list of rule names to disable.\n * - ignoreInvalid (Boolean): set `true` to ignore errors when rule not found.\n *\n * Disable rules with given names. If any rule name not found - throw Error.\n * Errors can be disabled by second param.\n *\n * Returns list of found rule names (if no exception happened).\n *\n * See also [[Ruler.enable]], [[Ruler.enableOnly]].\n **/\nRuler.prototype.disable = function (list, ignoreInvalid) {\n  if (!Array.isArray(list)) { list = [ list ]; }\n\n  var result = [];\n\n  // Search by name and disable\n  list.forEach(function (name) {\n    var idx = this.__find__(name);\n\n    if (idx < 0) {\n      if (ignoreInvalid) { return; }\n      throw new Error('Rules manager: invalid rule name ' + name);\n    }\n    this.__rules__[idx].enabled = false;\n    result.push(name);\n  }, this);\n\n  this.__cache__ = null;\n  return result;\n};\n\n\n/**\n * Ruler.getRules(chainName) -> Array\n *\n * Return array of active functions (rules) for given chain name. It analyzes\n * rules configuration, compiles caches if not exists and returns result.\n *\n * Default chain name is `''` (empty string). It can't be skipped. That's\n * done intentionally, to keep signature monomorphic for high speed.\n **/\nRuler.prototype.getRules = function (chainName) {\n  if (this.__cache__ === null) {\n    this.__compile__();\n  }\n\n  // Chain can be empty, if rules disabled. But we still have to return Array.\n  return this.__cache__[chainName] || [];\n};\n\nmodule.exports = Ruler;\n\n},{}],18:[function(require,module,exports){\n// Block quotes\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function blockquote(state, startLine, endLine, silent) {\n  var adjustTab,\n      ch,\n      i,\n      initial,\n      l,\n      lastLineEmpty,\n      lines,\n      nextLine,\n      offset,\n      oldBMarks,\n      oldBSCount,\n      oldIndent,\n      oldParentType,\n      oldSCount,\n      oldTShift,\n      spaceAfterMarker,\n      terminate,\n      terminatorRules,\n      token,\n      wasOutdented,\n      oldLineMax = state.lineMax,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  // check the block quote marker\n  if (state.src.charCodeAt(pos++) !== 0x3E/* > */) { return false; }\n\n  // we know that it's going to be a valid blockquote,\n  // so no point trying to find the end of it in silent mode\n  if (silent) { return true; }\n\n  // skip spaces after \">\" and re-calculate offset\n  initial = offset = state.sCount[startLine] + pos - (state.bMarks[startLine] + state.tShift[startLine]);\n\n  // skip one optional space after '>'\n  if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n    // ' >   test '\n    //     ^ -- position start of line here:\n    pos++;\n    initial++;\n    offset++;\n    adjustTab = false;\n    spaceAfterMarker = true;\n  } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n    spaceAfterMarker = true;\n\n    if ((state.bsCount[startLine] + offset) % 4 === 3) {\n      // '  >\\t  test '\n      //       ^ -- position start of line here (tab has width===1)\n      pos++;\n      initial++;\n      offset++;\n      adjustTab = false;\n    } else {\n      // ' >\\t  test '\n      //    ^ -- position start of line here + shift bsCount slightly\n      //         to make extra space appear\n      adjustTab = true;\n    }\n  } else {\n    spaceAfterMarker = false;\n  }\n\n  oldBMarks = [ state.bMarks[startLine] ];\n  state.bMarks[startLine] = pos;\n\n  while (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (isSpace(ch)) {\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[startLine] + (adjustTab ? 1 : 0)) % 4;\n      } else {\n        offset++;\n      }\n    } else {\n      break;\n    }\n\n    pos++;\n  }\n\n  oldBSCount = [ state.bsCount[startLine] ];\n  state.bsCount[startLine] = state.sCount[startLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n  lastLineEmpty = pos >= max;\n\n  oldSCount = [ state.sCount[startLine] ];\n  state.sCount[startLine] = offset - initial;\n\n  oldTShift = [ state.tShift[startLine] ];\n  state.tShift[startLine] = pos - state.bMarks[startLine];\n\n  terminatorRules = state.md.block.ruler.getRules('blockquote');\n\n  oldParentType = state.parentType;\n  state.parentType = 'blockquote';\n  wasOutdented = false;\n\n  // Search the end of the block\n  //\n  // Block ends with either:\n  //  1. an empty line outside:\n  //     ```\n  //     > test\n  //\n  //     ```\n  //  2. an empty line inside:\n  //     ```\n  //     >\n  //     test\n  //     ```\n  //  3. another tag:\n  //     ```\n  //     > test\n  //      - - -\n  //     ```\n  for (nextLine = startLine + 1; nextLine < endLine; nextLine++) {\n    // check if it's outdented, i.e. it's inside list item and indented\n    // less than said list item:\n    //\n    // ```\n    // 1. anything\n    //    > current blockquote\n    // 2. checking this line\n    // ```\n    if (state.sCount[nextLine] < state.blkIndent) wasOutdented = true;\n\n    pos = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos >= max) {\n      // Case 1: line is not inside the blockquote, and this line is empty.\n      break;\n    }\n\n    if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !wasOutdented) {\n      // This line is inside the blockquote.\n\n      // skip spaces after \">\" and re-calculate offset\n      initial = offset = state.sCount[nextLine] + pos - (state.bMarks[nextLine] + state.tShift[nextLine]);\n\n      // skip one optional space after '>'\n      if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n        // ' >   test '\n        //     ^ -- position start of line here:\n        pos++;\n        initial++;\n        offset++;\n        adjustTab = false;\n        spaceAfterMarker = true;\n      } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n        spaceAfterMarker = true;\n\n        if ((state.bsCount[nextLine] + offset) % 4 === 3) {\n          // '  >\\t  test '\n          //       ^ -- position start of line here (tab has width===1)\n          pos++;\n          initial++;\n          offset++;\n          adjustTab = false;\n        } else {\n          // ' >\\t  test '\n          //    ^ -- position start of line here + shift bsCount slightly\n          //         to make extra space appear\n          adjustTab = true;\n        }\n      } else {\n        spaceAfterMarker = false;\n      }\n\n      oldBMarks.push(state.bMarks[nextLine]);\n      state.bMarks[nextLine] = pos;\n\n      while (pos < max) {\n        ch = state.src.charCodeAt(pos);\n\n        if (isSpace(ch)) {\n          if (ch === 0x09) {\n            offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4;\n          } else {\n            offset++;\n          }\n        } else {\n          break;\n        }\n\n        pos++;\n      }\n\n      lastLineEmpty = pos >= max;\n\n      oldBSCount.push(state.bsCount[nextLine]);\n      state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0);\n\n      oldSCount.push(state.sCount[nextLine]);\n      state.sCount[nextLine] = offset - initial;\n\n      oldTShift.push(state.tShift[nextLine]);\n      state.tShift[nextLine] = pos - state.bMarks[nextLine];\n      continue;\n    }\n\n    // Case 2: line is not inside the blockquote, and the last line was empty.\n    if (lastLineEmpty) { break; }\n\n    // Case 3: another tag found.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n\n    if (terminate) {\n      // Quirk to enforce \"hard termination mode\" for paragraphs;\n      // normally if you call `tokenize(state, startLine, nextLine)`,\n      // paragraphs will look below nextLine for paragraph continuation,\n      // but if blockquote is terminated by another tag, they shouldn't\n      state.lineMax = nextLine;\n\n      if (state.blkIndent !== 0) {\n        // state.blkIndent was non-zero, we now set it to zero,\n        // so we need to re-calculate all offsets to appear as\n        // if indent wasn't changed\n        oldBMarks.push(state.bMarks[nextLine]);\n        oldBSCount.push(state.bsCount[nextLine]);\n        oldTShift.push(state.tShift[nextLine]);\n        oldSCount.push(state.sCount[nextLine]);\n        state.sCount[nextLine] -= state.blkIndent;\n      }\n\n      break;\n    }\n\n    oldBMarks.push(state.bMarks[nextLine]);\n    oldBSCount.push(state.bsCount[nextLine]);\n    oldTShift.push(state.tShift[nextLine]);\n    oldSCount.push(state.sCount[nextLine]);\n\n    // A negative indentation means that this is a paragraph continuation\n    //\n    state.sCount[nextLine] = -1;\n  }\n\n  oldIndent = state.blkIndent;\n  state.blkIndent = 0;\n\n  token        = state.push('blockquote_open', 'blockquote', 1);\n  token.markup = '>';\n  token.map    = lines = [ startLine, 0 ];\n\n  state.md.block.tokenize(state, startLine, nextLine);\n\n  token        = state.push('blockquote_close', 'blockquote', -1);\n  token.markup = '>';\n\n  state.lineMax = oldLineMax;\n  state.parentType = oldParentType;\n  lines[1] = state.line;\n\n  // Restore original tShift; this might not be necessary since the parser\n  // has already been here, but just to make sure we can do that.\n  for (i = 0; i < oldTShift.length; i++) {\n    state.bMarks[i + startLine] = oldBMarks[i];\n    state.tShift[i + startLine] = oldTShift[i];\n    state.sCount[i + startLine] = oldSCount[i];\n    state.bsCount[i + startLine] = oldBSCount[i];\n  }\n  state.blkIndent = oldIndent;\n\n  return true;\n};\n\n},{\"../common/utils\":4}],19:[function(require,module,exports){\n// Code block (4 spaces padded)\n\n'use strict';\n\n\nmodule.exports = function code(state, startLine, endLine/*, silent*/) {\n  var nextLine, last, token;\n\n  if (state.sCount[startLine] - state.blkIndent < 4) { return false; }\n\n  last = nextLine = startLine + 1;\n\n  while (nextLine < endLine) {\n    if (state.isEmpty(nextLine)) {\n      nextLine++;\n      continue;\n    }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      nextLine++;\n      last = nextLine;\n      continue;\n    }\n    break;\n  }\n\n  state.line = last;\n\n  token         = state.push('code_block', 'code', 0);\n  token.content = state.getLines(startLine, last, 4 + state.blkIndent, true);\n  token.map     = [ startLine, state.line ];\n\n  return true;\n};\n\n},{}],20:[function(require,module,exports){\n// fences (``` lang, ~~~ lang)\n\n'use strict';\n\n\nmodule.exports = function fence(state, startLine, endLine, silent) {\n  var marker, len, params, nextLine, mem, token, markup,\n      haveEndMarker = false,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (pos + 3 > max) { return false; }\n\n  marker = state.src.charCodeAt(pos);\n\n  if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n    return false;\n  }\n\n  // scan marker length\n  mem = pos;\n  pos = state.skipChars(pos, marker);\n\n  len = pos - mem;\n\n  if (len < 3) { return false; }\n\n  markup = state.src.slice(mem, pos);\n  params = state.src.slice(pos, max);\n\n  if (params.indexOf(String.fromCharCode(marker)) >= 0) { return false; }\n\n  // Since start is found, we can report success here in validation mode\n  if (silent) { return true; }\n\n  // search end of block\n  nextLine = startLine;\n\n  for (;;) {\n    nextLine++;\n    if (nextLine >= endLine) {\n      // unclosed block should be autoclosed by end of document.\n      // also block seems to be autoclosed by end of parent\n      break;\n    }\n\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine];\n    max = state.eMarks[nextLine];\n\n    if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n      // non-empty line with negative indent should stop the list:\n      // - ```\n      //  test\n      break;\n    }\n\n    if (state.src.charCodeAt(pos) !== marker) { continue; }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      // closing fence should be indented less than 4 spaces\n      continue;\n    }\n\n    pos = state.skipChars(pos, marker);\n\n    // closing code fence must be at least as long as the opening one\n    if (pos - mem < len) { continue; }\n\n    // make sure tail has spaces only\n    pos = state.skipSpaces(pos);\n\n    if (pos < max) { continue; }\n\n    haveEndMarker = true;\n    // found!\n    break;\n  }\n\n  // If a fence has heading spaces, they should be removed from its inner block\n  len = state.sCount[startLine];\n\n  state.line = nextLine + (haveEndMarker ? 1 : 0);\n\n  token         = state.push('fence', 'code', 0);\n  token.info    = params;\n  token.content = state.getLines(startLine + 1, nextLine, len, true);\n  token.markup  = markup;\n  token.map     = [ startLine, state.line ];\n\n  return true;\n};\n\n},{}],21:[function(require,module,exports){\n// heading (#, ##, ...)\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function heading(state, startLine, endLine, silent) {\n  var ch, level, tmp, token,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  ch  = state.src.charCodeAt(pos);\n\n  if (ch !== 0x23/* # */ || pos >= max) { return false; }\n\n  // count heading level\n  level = 1;\n  ch = state.src.charCodeAt(++pos);\n  while (ch === 0x23/* # */ && pos < max && level <= 6) {\n    level++;\n    ch = state.src.charCodeAt(++pos);\n  }\n\n  if (level > 6 || (pos < max && !isSpace(ch))) { return false; }\n\n  if (silent) { return true; }\n\n  // Let's cut tails like '    ###  ' from the end of string\n\n  max = state.skipSpacesBack(max, pos);\n  tmp = state.skipCharsBack(max, 0x23, pos); // #\n  if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n    max = tmp;\n  }\n\n  state.line = startLine + 1;\n\n  token        = state.push('heading_open', 'h' + String(level), 1);\n  token.markup = '########'.slice(0, level);\n  token.map    = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = state.src.slice(pos, max).trim();\n  token.map      = [ startLine, state.line ];\n  token.children = [];\n\n  token        = state.push('heading_close', 'h' + String(level), -1);\n  token.markup = '########'.slice(0, level);\n\n  return true;\n};\n\n},{\"../common/utils\":4}],22:[function(require,module,exports){\n// Horizontal rule\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function hr(state, startLine, endLine, silent) {\n  var marker, cnt, ch, token,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  marker = state.src.charCodeAt(pos++);\n\n  // Check hr marker\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x5F/* _ */) {\n    return false;\n  }\n\n  // markers can be mixed with spaces, but there should be at least 3 of them\n\n  cnt = 1;\n  while (pos < max) {\n    ch = state.src.charCodeAt(pos++);\n    if (ch !== marker && !isSpace(ch)) { return false; }\n    if (ch === marker) { cnt++; }\n  }\n\n  if (cnt < 3) { return false; }\n\n  if (silent) { return true; }\n\n  state.line = startLine + 1;\n\n  token        = state.push('hr', 'hr', 0);\n  token.map    = [ startLine, state.line ];\n  token.markup = Array(cnt + 1).join(String.fromCharCode(marker));\n\n  return true;\n};\n\n},{\"../common/utils\":4}],23:[function(require,module,exports){\n// HTML block\n\n'use strict';\n\n\nvar block_names = require('../common/html_blocks');\nvar HTML_OPEN_CLOSE_TAG_RE = require('../common/html_re').HTML_OPEN_CLOSE_TAG_RE;\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nvar HTML_SEQUENCES = [\n  [ /^<(script|pre|style)(?=(\\s|>|$))/i, /<\\/(script|pre|style)>/i, true ],\n  [ /^<!--/,        /-->/,   true ],\n  [ /^<\\?/,         /\\?>/,   true ],\n  [ /^<![A-Z]/,     />/,     true ],\n  [ /^<!\\[CDATA\\[/, /\\]\\]>/, true ],\n  [ new RegExp('^</?(' + block_names.join('|') + ')(?=(\\\\s|/?>|$))', 'i'), /^$/, true ],\n  [ new RegExp(HTML_OPEN_CLOSE_TAG_RE.source + '\\\\s*$'),  /^$/, false ]\n];\n\n\nmodule.exports = function html_block(state, startLine, endLine, silent) {\n  var i, nextLine, token, lineText,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine];\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (!state.md.options.html) { return false; }\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n  lineText = state.src.slice(pos, max);\n\n  for (i = 0; i < HTML_SEQUENCES.length; i++) {\n    if (HTML_SEQUENCES[i][0].test(lineText)) { break; }\n  }\n\n  if (i === HTML_SEQUENCES.length) { return false; }\n\n  if (silent) {\n    // true if this sequence can be a terminator, false otherwise\n    return HTML_SEQUENCES[i][2];\n  }\n\n  nextLine = startLine + 1;\n\n  // If we are here - we detected HTML block.\n  // Let's roll down till block end.\n  if (!HTML_SEQUENCES[i][1].test(lineText)) {\n    for (; nextLine < endLine; nextLine++) {\n      if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n      lineText = state.src.slice(pos, max);\n\n      if (HTML_SEQUENCES[i][1].test(lineText)) {\n        if (lineText.length !== 0) { nextLine++; }\n        break;\n      }\n    }\n  }\n\n  state.line = nextLine;\n\n  token         = state.push('html_block', '', 0);\n  token.map     = [ startLine, nextLine ];\n  token.content = state.getLines(startLine, nextLine, state.blkIndent, true);\n\n  return true;\n};\n\n},{\"../common/html_blocks\":2,\"../common/html_re\":3}],24:[function(require,module,exports){\n// lheading (---, ===)\n\n'use strict';\n\n\nmodule.exports = function lheading(state, startLine, endLine/*, silent*/) {\n  var content, terminate, i, l, token, pos, max, level, marker,\n      nextLine = startLine + 1, oldParentType,\n      terminatorRules = state.md.block.ruler.getRules('paragraph');\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  oldParentType = state.parentType;\n  state.parentType = 'paragraph'; // use paragraph to match terminatorRules\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    //\n    // Check for underline in setext header\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      pos = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n\n      if (pos < max) {\n        marker = state.src.charCodeAt(pos);\n\n        if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n          pos = state.skipChars(pos, marker);\n          pos = state.skipSpaces(pos);\n\n          if (pos >= max) {\n            level = (marker === 0x3D/* = */ ? 1 : 2);\n            break;\n          }\n        }\n      }\n    }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  if (!level) {\n    // Didn't find valid underline\n    return false;\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n  state.line = nextLine + 1;\n\n  token          = state.push('heading_open', 'h' + String(level), 1);\n  token.markup   = String.fromCharCode(marker);\n  token.map      = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = content;\n  token.map      = [ startLine, state.line - 1 ];\n  token.children = [];\n\n  token          = state.push('heading_close', 'h' + String(level), -1);\n  token.markup   = String.fromCharCode(marker);\n\n  state.parentType = oldParentType;\n\n  return true;\n};\n\n},{}],25:[function(require,module,exports){\n// Lists\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker(state, startLine) {\n  var marker, pos, max, ch;\n\n  pos = state.bMarks[startLine] + state.tShift[startLine];\n  max = state.eMarks[startLine];\n\n  marker = state.src.charCodeAt(pos++);\n  // Check bullet\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x2B/* + */) {\n    return -1;\n  }\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      // \" -test \" - is not a list item\n      return -1;\n    }\n  }\n\n  return pos;\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker(state, startLine) {\n  var ch,\n      start = state.bMarks[startLine] + state.tShift[startLine],\n      pos = start,\n      max = state.eMarks[startLine];\n\n  // List marker should have at least 2 chars (digit + dot)\n  if (pos + 1 >= max) { return -1; }\n\n  ch = state.src.charCodeAt(pos++);\n\n  if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1; }\n\n  for (;;) {\n    // EOL -> fail\n    if (pos >= max) { return -1; }\n\n    ch = state.src.charCodeAt(pos++);\n\n    if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n\n      // List marker should have no more than 9 digits\n      // (prevents integer overflow in browsers)\n      if (pos - start >= 10) { return -1; }\n\n      continue;\n    }\n\n    // found valid marker\n    if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n      break;\n    }\n\n    return -1;\n  }\n\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (!isSpace(ch)) {\n      // \" 1.test \" - is not a list item\n      return -1;\n    }\n  }\n  return pos;\n}\n\nfunction markTightParagraphs(state, idx) {\n  var i, l,\n      level = state.level + 2;\n\n  for (i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n    if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n      state.tokens[i + 2].hidden = true;\n      state.tokens[i].hidden = true;\n      i += 2;\n    }\n  }\n}\n\n\nmodule.exports = function list(state, startLine, endLine, silent) {\n  var ch,\n      contentStart,\n      i,\n      indent,\n      indentAfterMarker,\n      initial,\n      isOrdered,\n      itemLines,\n      l,\n      listLines,\n      listTokIdx,\n      markerCharCode,\n      markerValue,\n      max,\n      nextLine,\n      offset,\n      oldIndent,\n      oldLIndent,\n      oldParentType,\n      oldTShift,\n      oldTight,\n      pos,\n      posAfterMarker,\n      prevEmptyEnd,\n      start,\n      terminate,\n      terminatorRules,\n      token,\n      isTerminatingParagraph = false,\n      tight = true;\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  // limit conditions when list can interrupt\n  // a paragraph (validation mode only)\n  if (silent && state.parentType === 'paragraph') {\n    // Next list item should still terminate previous list item;\n    //\n    // This code can fail if plugins use blkIndent as well as lists,\n    // but I hope the spec gets fixed long before that happens.\n    //\n    if (state.tShift[startLine] >= state.blkIndent) {\n      isTerminatingParagraph = true;\n    }\n  }\n\n  // Detect list type and position after marker\n  if ((posAfterMarker = skipOrderedListMarker(state, startLine)) >= 0) {\n    isOrdered = true;\n    start = state.bMarks[startLine] + state.tShift[startLine];\n    markerValue = Number(state.src.substr(start, posAfterMarker - start - 1));\n\n    // If we're starting a new ordered list right after\n    // a paragraph, it should start with 1.\n    if (isTerminatingParagraph && markerValue !== 1) return false;\n\n  } else if ((posAfterMarker = skipBulletListMarker(state, startLine)) >= 0) {\n    isOrdered = false;\n\n  } else {\n    return false;\n  }\n\n  // If we're starting a new unordered list right after\n  // a paragraph, first line should not be empty.\n  if (isTerminatingParagraph) {\n    if (state.skipSpaces(posAfterMarker) >= state.eMarks[startLine]) return false;\n  }\n\n  // We should terminate list on style change. Remember first one to compare.\n  markerCharCode = state.src.charCodeAt(posAfterMarker - 1);\n\n  // For validation mode we can terminate immediately\n  if (silent) { return true; }\n\n  // Start list\n  listTokIdx = state.tokens.length;\n\n  if (isOrdered) {\n    token       = state.push('ordered_list_open', 'ol', 1);\n    if (markerValue !== 1) {\n      token.attrs = [ [ 'start', markerValue ] ];\n    }\n\n  } else {\n    token       = state.push('bullet_list_open', 'ul', 1);\n  }\n\n  token.map    = listLines = [ startLine, 0 ];\n  token.markup = String.fromCharCode(markerCharCode);\n\n  //\n  // Iterate list items\n  //\n\n  nextLine = startLine;\n  prevEmptyEnd = false;\n  terminatorRules = state.md.block.ruler.getRules('list');\n\n  oldParentType = state.parentType;\n  state.parentType = 'list';\n\n  while (nextLine < endLine) {\n    pos = posAfterMarker;\n    max = state.eMarks[nextLine];\n\n    initial = offset = state.sCount[nextLine] + posAfterMarker - (state.bMarks[startLine] + state.tShift[startLine]);\n\n    while (pos < max) {\n      ch = state.src.charCodeAt(pos);\n\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[nextLine]) % 4;\n      } else if (ch === 0x20) {\n        offset++;\n      } else {\n        break;\n      }\n\n      pos++;\n    }\n\n    contentStart = pos;\n\n    if (contentStart >= max) {\n      // trimming space in \"-    \\n  3\" case, indent is 1 here\n      indentAfterMarker = 1;\n    } else {\n      indentAfterMarker = offset - initial;\n    }\n\n    // If we have more than 4 spaces, the indent is 1\n    // (the rest is just indented code block)\n    if (indentAfterMarker > 4) { indentAfterMarker = 1; }\n\n    // \"  -  test\"\n    //  ^^^^^ - calculating total length of this thing\n    indent = initial + indentAfterMarker;\n\n    // Run subparser & write tokens\n    token        = state.push('list_item_open', 'li', 1);\n    token.markup = String.fromCharCode(markerCharCode);\n    token.map    = itemLines = [ startLine, 0 ];\n\n    oldIndent = state.blkIndent;\n    oldTight = state.tight;\n    oldTShift = state.tShift[startLine];\n    oldLIndent = state.sCount[startLine];\n    state.blkIndent = indent;\n    state.tight = true;\n    state.tShift[startLine] = contentStart - state.bMarks[startLine];\n    state.sCount[startLine] = offset;\n\n    if (contentStart >= max && state.isEmpty(startLine + 1)) {\n      // workaround for this case\n      // (list item is empty, list terminates before \"foo\"):\n      // ~~~~~~~~\n      //   -\n      //\n      //     foo\n      // ~~~~~~~~\n      state.line = Math.min(state.line + 2, endLine);\n    } else {\n      state.md.block.tokenize(state, startLine, endLine, true);\n    }\n\n    // If any of list item is tight, mark list as tight\n    if (!state.tight || prevEmptyEnd) {\n      tight = false;\n    }\n    // Item become loose if finish with empty line,\n    // but we should filter last element, because it means list finish\n    prevEmptyEnd = (state.line - startLine) > 1 && state.isEmpty(state.line - 1);\n\n    state.blkIndent = oldIndent;\n    state.tShift[startLine] = oldTShift;\n    state.sCount[startLine] = oldLIndent;\n    state.tight = oldTight;\n\n    token        = state.push('list_item_close', 'li', -1);\n    token.markup = String.fromCharCode(markerCharCode);\n\n    nextLine = startLine = state.line;\n    itemLines[1] = nextLine;\n    contentStart = state.bMarks[startLine];\n\n    if (nextLine >= endLine) { break; }\n\n    //\n    // Try to check if list is terminated or continued.\n    //\n    if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n    // fail if terminating block found\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n\n    // fail if list has another type\n    if (isOrdered) {\n      posAfterMarker = skipOrderedListMarker(state, nextLine);\n      if (posAfterMarker < 0) { break; }\n    } else {\n      posAfterMarker = skipBulletListMarker(state, nextLine);\n      if (posAfterMarker < 0) { break; }\n    }\n\n    if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break; }\n  }\n\n  // Finalize list\n  if (isOrdered) {\n    token = state.push('ordered_list_close', 'ol', -1);\n  } else {\n    token = state.push('bullet_list_close', 'ul', -1);\n  }\n  token.markup = String.fromCharCode(markerCharCode);\n\n  listLines[1] = nextLine;\n  state.line = nextLine;\n\n  state.parentType = oldParentType;\n\n  // mark paragraphs tight if needed\n  if (tight) {\n    markTightParagraphs(state, listTokIdx);\n  }\n\n  return true;\n};\n\n},{\"../common/utils\":4}],26:[function(require,module,exports){\n// Paragraph\n\n'use strict';\n\n\nmodule.exports = function paragraph(state, startLine/*, endLine*/) {\n  var content, terminate, i, l, token, oldParentType,\n      nextLine = startLine + 1,\n      terminatorRules = state.md.block.ruler.getRules('paragraph'),\n      endLine = state.lineMax;\n\n  oldParentType = state.parentType;\n  state.parentType = 'paragraph';\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  content = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n\n  state.line = nextLine;\n\n  token          = state.push('paragraph_open', 'p', 1);\n  token.map      = [ startLine, state.line ];\n\n  token          = state.push('inline', '', 0);\n  token.content  = content;\n  token.map      = [ startLine, state.line ];\n  token.children = [];\n\n  token          = state.push('paragraph_close', 'p', -1);\n\n  state.parentType = oldParentType;\n\n  return true;\n};\n\n},{}],27:[function(require,module,exports){\n'use strict';\n\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function reference(state, startLine, _endLine, silent) {\n  var ch,\n      destEndPos,\n      destEndLineNo,\n      endLine,\n      href,\n      i,\n      l,\n      label,\n      labelEnd,\n      oldParentType,\n      res,\n      start,\n      str,\n      terminate,\n      terminatorRules,\n      title,\n      lines = 0,\n      pos = state.bMarks[startLine] + state.tShift[startLine],\n      max = state.eMarks[startLine],\n      nextLine = startLine + 1;\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n\n  if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false; }\n\n  // Simple check to quickly interrupt scan on [link](url) at the start of line.\n  // Can be useful on practice: https://github.com/markdown-it/markdown-it/issues/54\n  while (++pos < max) {\n    if (state.src.charCodeAt(pos) === 0x5D /* ] */ &&\n        state.src.charCodeAt(pos - 1) !== 0x5C/* \\ */) {\n      if (pos + 1 === max) { return false; }\n      if (state.src.charCodeAt(pos + 1) !== 0x3A/* : */) { return false; }\n      break;\n    }\n  }\n\n  endLine = state.lineMax;\n\n  // jump line-by-line until empty one or EOF\n  terminatorRules = state.md.block.ruler.getRules('reference');\n\n  oldParentType = state.parentType;\n  state.parentType = 'reference';\n\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue; }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue; }\n\n    // Some tags can terminate paragraph without empty line.\n    terminate = false;\n    for (i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true;\n        break;\n      }\n    }\n    if (terminate) { break; }\n  }\n\n  str = state.getLines(startLine, nextLine, state.blkIndent, false).trim();\n  max = str.length;\n\n  for (pos = 1; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x5B /* [ */) {\n      return false;\n    } else if (ch === 0x5D /* ] */) {\n      labelEnd = pos;\n      break;\n    } else if (ch === 0x0A /* \\n */) {\n      lines++;\n    } else if (ch === 0x5C /* \\ */) {\n      pos++;\n      if (pos < max && str.charCodeAt(pos) === 0x0A) {\n        lines++;\n      }\n    }\n  }\n\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false; }\n\n  // [label]:   destination   'title'\n  //         ^^^ skip optional whitespace here\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x0A) {\n      lines++;\n    } else if (isSpace(ch)) {\n      /*eslint no-empty:0*/\n    } else {\n      break;\n    }\n  }\n\n  // [label]:   destination   'title'\n  //            ^^^^^^^^^^^ parse this\n  res = state.md.helpers.parseLinkDestination(str, pos, max);\n  if (!res.ok) { return false; }\n\n  href = state.md.normalizeLink(res.str);\n  if (!state.md.validateLink(href)) { return false; }\n\n  pos = res.pos;\n  lines += res.lines;\n\n  // save cursor state, we could require to rollback later\n  destEndPos = pos;\n  destEndLineNo = lines;\n\n  // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n  start = pos;\n  for (; pos < max; pos++) {\n    ch = str.charCodeAt(pos);\n    if (ch === 0x0A) {\n      lines++;\n    } else if (isSpace(ch)) {\n      /*eslint no-empty:0*/\n    } else {\n      break;\n    }\n  }\n\n  // [label]:   destination   'title'\n  //                          ^^^^^^^ parse this\n  res = state.md.helpers.parseLinkTitle(str, pos, max);\n  if (pos < max && start !== pos && res.ok) {\n    title = res.str;\n    pos = res.pos;\n    lines += res.lines;\n  } else {\n    title = '';\n    pos = destEndPos;\n    lines = destEndLineNo;\n  }\n\n  // skip trailing spaces until the rest of the line\n  while (pos < max) {\n    ch = str.charCodeAt(pos);\n    if (!isSpace(ch)) { break; }\n    pos++;\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    if (title) {\n      // garbage at the end of the line after title,\n      // but it could still be a valid reference if we roll back\n      title = '';\n      pos = destEndPos;\n      lines = destEndLineNo;\n      while (pos < max) {\n        ch = str.charCodeAt(pos);\n        if (!isSpace(ch)) { break; }\n        pos++;\n      }\n    }\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    // garbage at the end of the line\n    return false;\n  }\n\n  label = normalizeReference(str.slice(1, labelEnd));\n  if (!label) {\n    // CommonMark 0.20 disallows empty labels\n    return false;\n  }\n\n  // Reference can not terminate anything. This check is for safety only.\n  /*istanbul ignore if*/\n  if (silent) { return true; }\n\n  if (typeof state.env.references === 'undefined') {\n    state.env.references = {};\n  }\n  if (typeof state.env.references[label] === 'undefined') {\n    state.env.references[label] = { title: title, href: href };\n  }\n\n  state.parentType = oldParentType;\n\n  state.line = startLine + lines + 1;\n  return true;\n};\n\n},{\"../common/utils\":4}],28:[function(require,module,exports){\n// Parser state class\n\n'use strict';\n\nvar Token = require('../token');\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction StateBlock(src, md, env, tokens) {\n  var ch, s, start, pos, len, indent, offset, indent_found;\n\n  this.src = src;\n\n  // link to parser instance\n  this.md     = md;\n\n  this.env = env;\n\n  //\n  // Internal state vartiables\n  //\n\n  this.tokens = tokens;\n\n  this.bMarks = [];  // line begin offsets for fast jumps\n  this.eMarks = [];  // line end offsets for fast jumps\n  this.tShift = [];  // offsets of the first non-space characters (tabs not expanded)\n  this.sCount = [];  // indents for each line (tabs expanded)\n\n  // An amount of virtual spaces (tabs expanded) between beginning\n  // of each line (bMarks) and real beginning of that line.\n  //\n  // It exists only as a hack because blockquotes override bMarks\n  // losing information in the process.\n  //\n  // It's used only when expanding tabs, you can think about it as\n  // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n  // means first tab should be expanded to 4-21%4 === 3 spaces.\n  //\n  this.bsCount = [];\n\n  // block parser variables\n  this.blkIndent  = 0; // required block content indent\n                       // (for example, if we are in list)\n  this.line       = 0; // line index in src\n  this.lineMax    = 0; // lines count\n  this.tight      = false;  // loose/tight mode for lists\n  this.ddIndent   = -1; // indent of the current dd block (-1 if there isn't any)\n\n  // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n  // used in lists to determine if they interrupt a paragraph\n  this.parentType = 'root';\n\n  this.level = 0;\n\n  // renderer\n  this.result = '';\n\n  // Create caches\n  // Generate markers.\n  s = this.src;\n  indent_found = false;\n\n  for (start = pos = indent = offset = 0, len = s.length; pos < len; pos++) {\n    ch = s.charCodeAt(pos);\n\n    if (!indent_found) {\n      if (isSpace(ch)) {\n        indent++;\n\n        if (ch === 0x09) {\n          offset += 4 - offset % 4;\n        } else {\n          offset++;\n        }\n        continue;\n      } else {\n        indent_found = true;\n      }\n    }\n\n    if (ch === 0x0A || pos === len - 1) {\n      if (ch !== 0x0A) { pos++; }\n      this.bMarks.push(start);\n      this.eMarks.push(pos);\n      this.tShift.push(indent);\n      this.sCount.push(offset);\n      this.bsCount.push(0);\n\n      indent_found = false;\n      indent = 0;\n      offset = 0;\n      start = pos + 1;\n    }\n  }\n\n  // Push fake entry to simplify cache bounds checks\n  this.bMarks.push(s.length);\n  this.eMarks.push(s.length);\n  this.tShift.push(0);\n  this.sCount.push(0);\n  this.bsCount.push(0);\n\n  this.lineMax = this.bMarks.length - 1; // don't count last fake line\n}\n\n// Push new token to \"stream\".\n//\nStateBlock.prototype.push = function (type, tag, nesting) {\n  var token = new Token(type, tag, nesting);\n  token.block = true;\n\n  if (nesting < 0) { this.level--; }\n  token.level = this.level;\n  if (nesting > 0) { this.level++; }\n\n  this.tokens.push(token);\n  return token;\n};\n\nStateBlock.prototype.isEmpty = function isEmpty(line) {\n  return this.bMarks[line] + this.tShift[line] >= this.eMarks[line];\n};\n\nStateBlock.prototype.skipEmptyLines = function skipEmptyLines(from) {\n  for (var max = this.lineMax; from < max; from++) {\n    if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n      break;\n    }\n  }\n  return from;\n};\n\n// Skip spaces from given position.\nStateBlock.prototype.skipSpaces = function skipSpaces(pos) {\n  var ch;\n\n  for (var max = this.src.length; pos < max; pos++) {\n    ch = this.src.charCodeAt(pos);\n    if (!isSpace(ch)) { break; }\n  }\n  return pos;\n};\n\n// Skip spaces from given position in reverse.\nStateBlock.prototype.skipSpacesBack = function skipSpacesBack(pos, min) {\n  if (pos <= min) { return pos; }\n\n  while (pos > min) {\n    if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1; }\n  }\n  return pos;\n};\n\n// Skip char codes from given position\nStateBlock.prototype.skipChars = function skipChars(pos, code) {\n  for (var max = this.src.length; pos < max; pos++) {\n    if (this.src.charCodeAt(pos) !== code) { break; }\n  }\n  return pos;\n};\n\n// Skip char codes reverse from given position - 1\nStateBlock.prototype.skipCharsBack = function skipCharsBack(pos, code, min) {\n  if (pos <= min) { return pos; }\n\n  while (pos > min) {\n    if (code !== this.src.charCodeAt(--pos)) { return pos + 1; }\n  }\n  return pos;\n};\n\n// cut lines range from source.\nStateBlock.prototype.getLines = function getLines(begin, end, indent, keepLastLF) {\n  var i, lineIndent, ch, first, last, queue, lineStart,\n      line = begin;\n\n  if (begin >= end) {\n    return '';\n  }\n\n  queue = new Array(end - begin);\n\n  for (i = 0; line < end; line++, i++) {\n    lineIndent = 0;\n    lineStart = first = this.bMarks[line];\n\n    if (line + 1 < end || keepLastLF) {\n      // No need for bounds check because we have fake entry on tail.\n      last = this.eMarks[line] + 1;\n    } else {\n      last = this.eMarks[line];\n    }\n\n    while (first < last && lineIndent < indent) {\n      ch = this.src.charCodeAt(first);\n\n      if (isSpace(ch)) {\n        if (ch === 0x09) {\n          lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4;\n        } else {\n          lineIndent++;\n        }\n      } else if (first - lineStart < this.tShift[line]) {\n        // patched tShift masked characters to look like spaces (blockquotes, list markers)\n        lineIndent++;\n      } else {\n        break;\n      }\n\n      first++;\n    }\n\n    if (lineIndent > indent) {\n      // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n      // with indent=2 becomes '  \\tfoobar'\n      queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last);\n    } else {\n      queue[i] = this.src.slice(first, last);\n    }\n  }\n\n  return queue.join('');\n};\n\n// re-export Token class to use in block rules\nStateBlock.prototype.Token = Token;\n\n\nmodule.exports = StateBlock;\n\n},{\"../common/utils\":4,\"../token\":51}],29:[function(require,module,exports){\n// GFM table, non-standard\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nfunction getLine(state, line) {\n  var pos = state.bMarks[line] + state.blkIndent,\n      max = state.eMarks[line];\n\n  return state.src.substr(pos, max - pos);\n}\n\nfunction escapedSplit(str) {\n  var result = [],\n      pos = 0,\n      max = str.length,\n      ch,\n      escapes = 0,\n      lastPos = 0,\n      backTicked = false,\n      lastBackTick = 0;\n\n  ch  = str.charCodeAt(pos);\n\n  while (pos < max) {\n    if (ch === 0x60/* ` */) {\n      if (backTicked) {\n        // make \\` close code sequence, but not open it;\n        // the reason is: `\\` is correct code block\n        backTicked = false;\n        lastBackTick = pos;\n      } else if (escapes % 2 === 0) {\n        backTicked = true;\n        lastBackTick = pos;\n      }\n    } else if (ch === 0x7c/* | */ && (escapes % 2 === 0) && !backTicked) {\n      result.push(str.substring(lastPos, pos));\n      lastPos = pos + 1;\n    }\n\n    if (ch === 0x5c/* \\ */) {\n      escapes++;\n    } else {\n      escapes = 0;\n    }\n\n    pos++;\n\n    // If there was an un-closed backtick, go back to just after\n    // the last backtick, but as if it was a normal character\n    if (pos === max && backTicked) {\n      backTicked = false;\n      pos = lastBackTick + 1;\n    }\n\n    ch = str.charCodeAt(pos);\n  }\n\n  result.push(str.substring(lastPos));\n\n  return result;\n}\n\n\nmodule.exports = function table(state, startLine, endLine, silent) {\n  var ch, lineText, pos, i, nextLine, columns, columnCount, token,\n      aligns, t, tableLines, tbodyLines;\n\n  // should have at least two lines\n  if (startLine + 2 > endLine) { return false; }\n\n  nextLine = startLine + 1;\n\n  if (state.sCount[nextLine] < state.blkIndent) { return false; }\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - state.blkIndent >= 4) { return false; }\n\n  // first character of the second line should be '|', '-', ':',\n  // and no other characters are allowed but spaces;\n  // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n  pos = state.bMarks[nextLine] + state.tShift[nextLine];\n  if (pos >= state.eMarks[nextLine]) { return false; }\n\n  ch = state.src.charCodeAt(pos++);\n  if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */) { return false; }\n\n  while (pos < state.eMarks[nextLine]) {\n    ch = state.src.charCodeAt(pos);\n\n    if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false; }\n\n    pos++;\n  }\n\n  lineText = getLine(state, startLine + 1);\n\n  columns = lineText.split('|');\n  aligns = [];\n  for (i = 0; i < columns.length; i++) {\n    t = columns[i].trim();\n    if (!t) {\n      // allow empty columns before and after table, but not in between columns;\n      // e.g. allow ` |---| `, disallow ` ---||--- `\n      if (i === 0 || i === columns.length - 1) {\n        continue;\n      } else {\n        return false;\n      }\n    }\n\n    if (!/^:?-+:?$/.test(t)) { return false; }\n    if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n      aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right');\n    } else if (t.charCodeAt(0) === 0x3A/* : */) {\n      aligns.push('left');\n    } else {\n      aligns.push('');\n    }\n  }\n\n  lineText = getLine(state, startLine).trim();\n  if (lineText.indexOf('|') === -1) { return false; }\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false; }\n  columns = escapedSplit(lineText.replace(/^\\||\\|$/g, ''));\n\n  // header row will define an amount of columns in the entire table,\n  // and align row shouldn't be smaller than that (the rest of the rows can)\n  columnCount = columns.length;\n  if (columnCount > aligns.length) { return false; }\n\n  if (silent) { return true; }\n\n  token     = state.push('table_open', 'table', 1);\n  token.map = tableLines = [ startLine, 0 ];\n\n  token     = state.push('thead_open', 'thead', 1);\n  token.map = [ startLine, startLine + 1 ];\n\n  token     = state.push('tr_open', 'tr', 1);\n  token.map = [ startLine, startLine + 1 ];\n\n  for (i = 0; i < columns.length; i++) {\n    token          = state.push('th_open', 'th', 1);\n    token.map      = [ startLine, startLine + 1 ];\n    if (aligns[i]) {\n      token.attrs  = [ [ 'style', 'text-align:' + aligns[i] ] ];\n    }\n\n    token          = state.push('inline', '', 0);\n    token.content  = columns[i].trim();\n    token.map      = [ startLine, startLine + 1 ];\n    token.children = [];\n\n    token          = state.push('th_close', 'th', -1);\n  }\n\n  token     = state.push('tr_close', 'tr', -1);\n  token     = state.push('thead_close', 'thead', -1);\n\n  token     = state.push('tbody_open', 'tbody', 1);\n  token.map = tbodyLines = [ startLine + 2, 0 ];\n\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) { break; }\n\n    lineText = getLine(state, nextLine).trim();\n    if (lineText.indexOf('|') === -1) { break; }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) { break; }\n    columns = escapedSplit(lineText.replace(/^\\||\\|$/g, ''));\n\n    token = state.push('tr_open', 'tr', 1);\n    for (i = 0; i < columnCount; i++) {\n      token          = state.push('td_open', 'td', 1);\n      if (aligns[i]) {\n        token.attrs  = [ [ 'style', 'text-align:' + aligns[i] ] ];\n      }\n\n      token          = state.push('inline', '', 0);\n      token.content  = columns[i] ? columns[i].trim() : '';\n      token.children = [];\n\n      token          = state.push('td_close', 'td', -1);\n    }\n    token = state.push('tr_close', 'tr', -1);\n  }\n  token = state.push('tbody_close', 'tbody', -1);\n  token = state.push('table_close', 'table', -1);\n\n  tableLines[1] = tbodyLines[1] = nextLine;\n  state.line = nextLine;\n  return true;\n};\n\n},{\"../common/utils\":4}],30:[function(require,module,exports){\n'use strict';\n\n\nmodule.exports = function block(state) {\n  var token;\n\n  if (state.inlineMode) {\n    token          = new state.Token('inline', '', 0);\n    token.content  = state.src;\n    token.map      = [ 0, 1 ];\n    token.children = [];\n    state.tokens.push(token);\n  } else {\n    state.md.block.parse(state.src, state.md, state.env, state.tokens);\n  }\n};\n\n},{}],31:[function(require,module,exports){\n'use strict';\n\nmodule.exports = function inline(state) {\n  var tokens = state.tokens, tok, i, l;\n\n  // Parse inlines\n  for (i = 0, l = tokens.length; i < l; i++) {\n    tok = tokens[i];\n    if (tok.type === 'inline') {\n      state.md.inline.parse(tok.content, state.md, state.env, tok.children);\n    }\n  }\n};\n\n},{}],32:[function(require,module,exports){\n// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n'use strict';\n\n\nvar arrayReplaceAt = require('../common/utils').arrayReplaceAt;\n\n\nfunction isLinkOpen(str) {\n  return /^<a[>\\s]/i.test(str);\n}\nfunction isLinkClose(str) {\n  return /^<\\/a\\s*>/i.test(str);\n}\n\n\nmodule.exports = function linkify(state) {\n  var i, j, l, tokens, token, currentToken, nodes, ln, text, pos, lastPos,\n      level, htmlLinkLevel, url, fullUrl, urlText,\n      blockTokens = state.tokens,\n      links;\n\n  if (!state.md.options.linkify) { return; }\n\n  for (j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline' ||\n        !state.md.linkify.pretest(blockTokens[j].content)) {\n      continue;\n    }\n\n    tokens = blockTokens[j].children;\n\n    htmlLinkLevel = 0;\n\n    // We scan from the end, to keep position when new tags added.\n    // Use reversed logic in links start/end match\n    for (i = tokens.length - 1; i >= 0; i--) {\n      currentToken = tokens[i];\n\n      // Skip content of markdown links\n      if (currentToken.type === 'link_close') {\n        i--;\n        while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n          i--;\n        }\n        continue;\n      }\n\n      // Skip content of html tag links\n      if (currentToken.type === 'html_inline') {\n        if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n          htmlLinkLevel--;\n        }\n        if (isLinkClose(currentToken.content)) {\n          htmlLinkLevel++;\n        }\n      }\n      if (htmlLinkLevel > 0) { continue; }\n\n      if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n\n        text = currentToken.content;\n        links = state.md.linkify.match(text);\n\n        // Now split string to nodes\n        nodes = [];\n        level = currentToken.level;\n        lastPos = 0;\n\n        for (ln = 0; ln < links.length; ln++) {\n\n          url = links[ln].url;\n          fullUrl = state.md.normalizeLink(url);\n          if (!state.md.validateLink(fullUrl)) { continue; }\n\n          urlText = links[ln].text;\n\n          // Linkifier might send raw hostnames like \"example.com\", where url\n          // starts with domain name. So we prepend http:// in those cases,\n          // and remove it afterwards.\n          //\n          if (!links[ln].schema) {\n            urlText = state.md.normalizeLinkText('http://' + urlText).replace(/^http:\\/\\//, '');\n          } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n            urlText = state.md.normalizeLinkText('mailto:' + urlText).replace(/^mailto:/, '');\n          } else {\n            urlText = state.md.normalizeLinkText(urlText);\n          }\n\n          pos = links[ln].index;\n\n          if (pos > lastPos) {\n            token         = new state.Token('text', '', 0);\n            token.content = text.slice(lastPos, pos);\n            token.level   = level;\n            nodes.push(token);\n          }\n\n          token         = new state.Token('link_open', 'a', 1);\n          token.attrs   = [ [ 'href', fullUrl ] ];\n          token.level   = level++;\n          token.markup  = 'linkify';\n          token.info    = 'auto';\n          nodes.push(token);\n\n          token         = new state.Token('text', '', 0);\n          token.content = urlText;\n          token.level   = level;\n          nodes.push(token);\n\n          token         = new state.Token('link_close', 'a', -1);\n          token.level   = --level;\n          token.markup  = 'linkify';\n          token.info    = 'auto';\n          nodes.push(token);\n\n          lastPos = links[ln].lastIndex;\n        }\n        if (lastPos < text.length) {\n          token         = new state.Token('text', '', 0);\n          token.content = text.slice(lastPos);\n          token.level   = level;\n          nodes.push(token);\n        }\n\n        // replace current node\n        blockTokens[j].children = tokens = arrayReplaceAt(tokens, i, nodes);\n      }\n    }\n  }\n};\n\n},{\"../common/utils\":4}],33:[function(require,module,exports){\n// Normalize input string\n\n'use strict';\n\n\nvar NEWLINES_RE  = /\\r[\\n\\u0085]?|[\\u2424\\u2028\\u0085]/g;\nvar NULL_RE      = /\\u0000/g;\n\n\nmodule.exports = function inline(state) {\n  var str;\n\n  // Normalize newlines\n  str = state.src.replace(NEWLINES_RE, '\\n');\n\n  // Replace NULL characters\n  str = str.replace(NULL_RE, '\\uFFFD');\n\n  state.src = str;\n};\n\n},{}],34:[function(require,module,exports){\n// Simple typographyc replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// (p) (P) -> §\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n'use strict';\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - miltiplication 2 x 4 -> 2 × 4\n\nvar RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/;\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nvar SCOPED_ABBR_TEST_RE = /\\((c|tm|r|p)\\)/i;\n\nvar SCOPED_ABBR_RE = /\\((c|tm|r|p)\\)/ig;\nvar SCOPED_ABBR = {\n  c: '©',\n  r: '®',\n  p: '§',\n  tm: '™'\n};\n\nfunction replaceFn(match, name) {\n  return SCOPED_ABBR[name.toLowerCase()];\n}\n\nfunction replace_scoped(inlineTokens) {\n  var i, token, inside_autolink = 0;\n\n  for (i = inlineTokens.length - 1; i >= 0; i--) {\n    token = inlineTokens[i];\n\n    if (token.type === 'text' && !inside_autolink) {\n      token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn);\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\n\nfunction replace_rare(inlineTokens) {\n  var i, token, inside_autolink = 0;\n\n  for (i = inlineTokens.length - 1; i >= 0; i--) {\n    token = inlineTokens[i];\n\n    if (token.type === 'text' && !inside_autolink) {\n      if (RARE_RE.test(token.content)) {\n        token.content = token.content\n                    .replace(/\\+-/g, '±')\n                    // .., ..., ....... -> …\n                    // but ?..... & !..... -> ?.. & !..\n                    .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n                    .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n                    // em-dash\n                    .replace(/(^|[^-])---([^-]|$)/mg, '$1\\u2014$2')\n                    // en-dash\n                    .replace(/(^|\\s)--(\\s|$)/mg, '$1\\u2013$2')\n                    .replace(/(^|[^-\\s])--([^-\\s]|$)/mg, '$1\\u2013$2');\n      }\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--;\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++;\n    }\n  }\n}\n\n\nmodule.exports = function replace(state) {\n  var blkIdx;\n\n  if (!state.md.options.typographer) { return; }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n    if (state.tokens[blkIdx].type !== 'inline') { continue; }\n\n    if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n      replace_scoped(state.tokens[blkIdx].children);\n    }\n\n    if (RARE_RE.test(state.tokens[blkIdx].content)) {\n      replace_rare(state.tokens[blkIdx].children);\n    }\n\n  }\n};\n\n},{}],35:[function(require,module,exports){\n// Convert straight quotation marks to typographic ones\n//\n'use strict';\n\n\nvar isWhiteSpace   = require('../common/utils').isWhiteSpace;\nvar isPunctChar    = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\nvar QUOTE_TEST_RE = /['\"]/;\nvar QUOTE_RE = /['\"]/g;\nvar APOSTROPHE = '\\u2019'; /* ’ */\n\n\nfunction replaceAt(str, index, ch) {\n  return str.substr(0, index) + ch + str.substr(index + 1);\n}\n\nfunction process_inlines(tokens, state) {\n  var i, token, text, t, pos, max, thisLevel, item, lastChar, nextChar,\n      isLastPunctChar, isNextPunctChar, isLastWhiteSpace, isNextWhiteSpace,\n      canOpen, canClose, j, isSingle, stack, openQuote, closeQuote;\n\n  stack = [];\n\n  for (i = 0; i < tokens.length; i++) {\n    token = tokens[i];\n\n    thisLevel = tokens[i].level;\n\n    for (j = stack.length - 1; j >= 0; j--) {\n      if (stack[j].level <= thisLevel) { break; }\n    }\n    stack.length = j + 1;\n\n    if (token.type !== 'text') { continue; }\n\n    text = token.content;\n    pos = 0;\n    max = text.length;\n\n    /*eslint no-labels:0,block-scoped-var:0*/\n    OUTER:\n    while (pos < max) {\n      QUOTE_RE.lastIndex = pos;\n      t = QUOTE_RE.exec(text);\n      if (!t) { break; }\n\n      canOpen = canClose = true;\n      pos = t.index + 1;\n      isSingle = (t[0] === \"'\");\n\n      // Find previous character,\n      // default to space if it's the beginning of the line\n      //\n      lastChar = 0x20;\n\n      if (t.index - 1 >= 0) {\n        lastChar = text.charCodeAt(t.index - 1);\n      } else {\n        for (j = i - 1; j >= 0; j--) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // lastChar defaults to 0x20\n          if (tokens[j].type !== 'text') continue;\n\n          lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1);\n          break;\n        }\n      }\n\n      // Find next character,\n      // default to space if it's the end of the line\n      //\n      nextChar = 0x20;\n\n      if (pos < max) {\n        nextChar = text.charCodeAt(pos);\n      } else {\n        for (j = i + 1; j < tokens.length; j++) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break; // nextChar defaults to 0x20\n          if (tokens[j].type !== 'text') continue;\n\n          nextChar = tokens[j].content.charCodeAt(0);\n          break;\n        }\n      }\n\n      isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n      isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n      isLastWhiteSpace = isWhiteSpace(lastChar);\n      isNextWhiteSpace = isWhiteSpace(nextChar);\n\n      if (isNextWhiteSpace) {\n        canOpen = false;\n      } else if (isNextPunctChar) {\n        if (!(isLastWhiteSpace || isLastPunctChar)) {\n          canOpen = false;\n        }\n      }\n\n      if (isLastWhiteSpace) {\n        canClose = false;\n      } else if (isLastPunctChar) {\n        if (!(isNextWhiteSpace || isNextPunctChar)) {\n          canClose = false;\n        }\n      }\n\n      if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n        if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n          // special case: 1\"\" - count first quote as an inch\n          canClose = canOpen = false;\n        }\n      }\n\n      if (canOpen && canClose) {\n        // treat this as the middle of the word\n        canOpen = false;\n        canClose = isNextPunctChar;\n      }\n\n      if (!canOpen && !canClose) {\n        // middle of word\n        if (isSingle) {\n          token.content = replaceAt(token.content, t.index, APOSTROPHE);\n        }\n        continue;\n      }\n\n      if (canClose) {\n        // this could be a closing quote, rewind the stack to get a match\n        for (j = stack.length - 1; j >= 0; j--) {\n          item = stack[j];\n          if (stack[j].level < thisLevel) { break; }\n          if (item.single === isSingle && stack[j].level === thisLevel) {\n            item = stack[j];\n\n            if (isSingle) {\n              openQuote = state.md.options.quotes[2];\n              closeQuote = state.md.options.quotes[3];\n            } else {\n              openQuote = state.md.options.quotes[0];\n              closeQuote = state.md.options.quotes[1];\n            }\n\n            // replace token.content *before* tokens[item.token].content,\n            // because, if they are pointing at the same token, replaceAt\n            // could mess up indices when quote length != 1\n            token.content = replaceAt(token.content, t.index, closeQuote);\n            tokens[item.token].content = replaceAt(\n              tokens[item.token].content, item.pos, openQuote);\n\n            pos += closeQuote.length - 1;\n            if (item.token === i) { pos += openQuote.length - 1; }\n\n            text = token.content;\n            max = text.length;\n\n            stack.length = j;\n            continue OUTER;\n          }\n        }\n      }\n\n      if (canOpen) {\n        stack.push({\n          token: i,\n          pos: t.index,\n          single: isSingle,\n          level: thisLevel\n        });\n      } else if (canClose && isSingle) {\n        token.content = replaceAt(token.content, t.index, APOSTROPHE);\n      }\n    }\n  }\n}\n\n\nmodule.exports = function smartquotes(state) {\n  /*eslint max-depth:0*/\n  var blkIdx;\n\n  if (!state.md.options.typographer) { return; }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n\n    if (state.tokens[blkIdx].type !== 'inline' ||\n        !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n      continue;\n    }\n\n    process_inlines(state.tokens[blkIdx].children, state);\n  }\n};\n\n},{\"../common/utils\":4}],36:[function(require,module,exports){\n// Core state object\n//\n'use strict';\n\nvar Token = require('../token');\n\n\nfunction StateCore(src, md, env) {\n  this.src = src;\n  this.env = env;\n  this.tokens = [];\n  this.inlineMode = false;\n  this.md = md; // link to parser instance\n}\n\n// re-export Token class to use in core rules\nStateCore.prototype.Token = Token;\n\n\nmodule.exports = StateCore;\n\n},{\"../token\":51}],37:[function(require,module,exports){\n// Process autolinks '<protocol:...>'\n\n'use strict';\n\n\n/*eslint max-len:0*/\nvar EMAIL_RE    = /^<([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/;\nvar AUTOLINK_RE = /^<([a-zA-Z][a-zA-Z0-9+.\\-]{1,31}):([^<>\\x00-\\x20]*)>/;\n\n\nmodule.exports = function autolink(state, silent) {\n  var tail, linkMatch, emailMatch, url, fullUrl, token,\n      pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }\n\n  tail = state.src.slice(pos);\n\n  if (tail.indexOf('>') < 0) { return false; }\n\n  if (AUTOLINK_RE.test(tail)) {\n    linkMatch = tail.match(AUTOLINK_RE);\n\n    url = linkMatch[0].slice(1, -1);\n    fullUrl = state.md.normalizeLink(url);\n    if (!state.md.validateLink(fullUrl)) { return false; }\n\n    if (!silent) {\n      token         = state.push('link_open', 'a', 1);\n      token.attrs   = [ [ 'href', fullUrl ] ];\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n\n      token         = state.push('text', '', 0);\n      token.content = state.md.normalizeLinkText(url);\n\n      token         = state.push('link_close', 'a', -1);\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n    }\n\n    state.pos += linkMatch[0].length;\n    return true;\n  }\n\n  if (EMAIL_RE.test(tail)) {\n    emailMatch = tail.match(EMAIL_RE);\n\n    url = emailMatch[0].slice(1, -1);\n    fullUrl = state.md.normalizeLink('mailto:' + url);\n    if (!state.md.validateLink(fullUrl)) { return false; }\n\n    if (!silent) {\n      token         = state.push('link_open', 'a', 1);\n      token.attrs   = [ [ 'href', fullUrl ] ];\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n\n      token         = state.push('text', '', 0);\n      token.content = state.md.normalizeLinkText(url);\n\n      token         = state.push('link_close', 'a', -1);\n      token.markup  = 'autolink';\n      token.info    = 'auto';\n    }\n\n    state.pos += emailMatch[0].length;\n    return true;\n  }\n\n  return false;\n};\n\n},{}],38:[function(require,module,exports){\n// Parse backticks\n\n'use strict';\n\nmodule.exports = function backtick(state, silent) {\n  var start, max, marker, matchStart, matchEnd, token,\n      pos = state.pos,\n      ch = state.src.charCodeAt(pos);\n\n  if (ch !== 0x60/* ` */) { return false; }\n\n  start = pos;\n  pos++;\n  max = state.posMax;\n\n  while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }\n\n  marker = state.src.slice(start, pos);\n\n  matchStart = matchEnd = pos;\n\n  while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {\n    matchEnd = matchStart + 1;\n\n    while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }\n\n    if (matchEnd - matchStart === marker.length) {\n      if (!silent) {\n        token         = state.push('code_inline', 'code', 0);\n        token.markup  = marker;\n        token.content = state.src.slice(pos, matchStart)\n                                 .replace(/[ \\n]+/g, ' ')\n                                 .trim();\n      }\n      state.pos = matchEnd;\n      return true;\n    }\n  }\n\n  if (!silent) { state.pending += marker; }\n  state.pos += marker.length;\n  return true;\n};\n\n},{}],39:[function(require,module,exports){\n// For each opening emphasis-like marker find a matching closing one\n//\n'use strict';\n\n\nmodule.exports = function link_pairs(state) {\n  var i, j, lastDelim, currDelim,\n      delimiters = state.delimiters,\n      max = state.delimiters.length;\n\n  for (i = 0; i < max; i++) {\n    lastDelim = delimiters[i];\n\n    if (!lastDelim.close) { continue; }\n\n    j = i - lastDelim.jump - 1;\n\n    while (j >= 0) {\n      currDelim = delimiters[j];\n\n      if (currDelim.open &&\n          currDelim.marker === lastDelim.marker &&\n          currDelim.end < 0 &&\n          currDelim.level === lastDelim.level) {\n\n        // typeofs are for backward compatibility with plugins\n        var odd_match = (currDelim.close || lastDelim.open) &&\n                        typeof currDelim.length !== 'undefined' &&\n                        typeof lastDelim.length !== 'undefined' &&\n                        (currDelim.length + lastDelim.length) % 3 === 0;\n\n        if (!odd_match) {\n          lastDelim.jump = i - j;\n          lastDelim.open = false;\n          currDelim.end  = i;\n          currDelim.jump = 0;\n          break;\n        }\n      }\n\n      j -= currDelim.jump + 1;\n    }\n  }\n};\n\n},{}],40:[function(require,module,exports){\n// Process *this* and _that_\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function emphasis(state, silent) {\n  var i, scanned, token,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (silent) { return false; }\n\n  if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false; }\n\n  scanned = state.scanDelims(state.pos, marker === 0x2A);\n\n  for (i = 0; i < scanned.length; i++) {\n    token         = state.push('text', '', 0);\n    token.content = String.fromCharCode(marker);\n\n    state.delimiters.push({\n      // Char code of the starting marker (number).\n      //\n      marker: marker,\n\n      // Total length of these series of delimiters.\n      //\n      length: scanned.length,\n\n      // An amount of characters before this one that's equivalent to\n      // current one. In plain English: if this delimiter does not open\n      // an emphasis, neither do previous `jump` characters.\n      //\n      // Used to skip sequences like \"*****\" in one step, for 1st asterisk\n      // value will be 0, for 2nd it's 1 and so on.\n      //\n      jump:   i,\n\n      // A position of the token this delimiter corresponds to.\n      //\n      token:  state.tokens.length - 1,\n\n      // Token level.\n      //\n      level:  state.level,\n\n      // If this delimiter is matched as a valid opener, `end` will be\n      // equal to its position, otherwise it's `-1`.\n      //\n      end:    -1,\n\n      // Boolean flags that determine if this delimiter could open or close\n      // an emphasis.\n      //\n      open:   scanned.can_open,\n      close:  scanned.can_close\n    });\n  }\n\n  state.pos += scanned.length;\n\n  return true;\n};\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function emphasis(state) {\n  var i,\n      startDelim,\n      endDelim,\n      token,\n      ch,\n      isStrong,\n      delimiters = state.delimiters,\n      max = state.delimiters.length;\n\n  for (i = max - 1; i >= 0; i--) {\n    startDelim = delimiters[i];\n\n    if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n      continue;\n    }\n\n    // Process only opening markers\n    if (startDelim.end === -1) {\n      continue;\n    }\n\n    endDelim = delimiters[startDelim.end];\n\n    // If the previous delimiter has the same marker and is adjacent to this one,\n    // merge those into one strong delimiter.\n    //\n    // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n    //\n    isStrong = i > 0 &&\n               delimiters[i - 1].end === startDelim.end + 1 &&\n               delimiters[i - 1].token === startDelim.token - 1 &&\n               delimiters[startDelim.end + 1].token === endDelim.token + 1 &&\n               delimiters[i - 1].marker === startDelim.marker;\n\n    ch = String.fromCharCode(startDelim.marker);\n\n    token         = state.tokens[startDelim.token];\n    token.type    = isStrong ? 'strong_open' : 'em_open';\n    token.tag     = isStrong ? 'strong' : 'em';\n    token.nesting = 1;\n    token.markup  = isStrong ? ch + ch : ch;\n    token.content = '';\n\n    token         = state.tokens[endDelim.token];\n    token.type    = isStrong ? 'strong_close' : 'em_close';\n    token.tag     = isStrong ? 'strong' : 'em';\n    token.nesting = -1;\n    token.markup  = isStrong ? ch + ch : ch;\n    token.content = '';\n\n    if (isStrong) {\n      state.tokens[delimiters[i - 1].token].content = '';\n      state.tokens[delimiters[startDelim.end + 1].token].content = '';\n      i--;\n    }\n  }\n};\n\n},{}],41:[function(require,module,exports){\n// Process html entity - &#123;, &#xAF;, &quot;, ...\n\n'use strict';\n\nvar entities          = require('../common/entities');\nvar has               = require('../common/utils').has;\nvar isValidEntityCode = require('../common/utils').isValidEntityCode;\nvar fromCodePoint     = require('../common/utils').fromCodePoint;\n\n\nvar DIGITAL_RE = /^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i;\nvar NAMED_RE   = /^&([a-z][a-z0-9]{1,31});/i;\n\n\nmodule.exports = function entity(state, silent) {\n  var ch, code, match, pos = state.pos, max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x26/* & */) { return false; }\n\n  if (pos + 1 < max) {\n    ch = state.src.charCodeAt(pos + 1);\n\n    if (ch === 0x23 /* # */) {\n      match = state.src.slice(pos).match(DIGITAL_RE);\n      if (match) {\n        if (!silent) {\n          code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10);\n          state.pending += isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD);\n        }\n        state.pos += match[0].length;\n        return true;\n      }\n    } else {\n      match = state.src.slice(pos).match(NAMED_RE);\n      if (match) {\n        if (has(entities, match[1])) {\n          if (!silent) { state.pending += entities[match[1]]; }\n          state.pos += match[0].length;\n          return true;\n        }\n      }\n    }\n  }\n\n  if (!silent) { state.pending += '&'; }\n  state.pos++;\n  return true;\n};\n\n},{\"../common/entities\":1,\"../common/utils\":4}],42:[function(require,module,exports){\n// Process escaped chars and hardbreaks\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\nvar ESCAPED = [];\n\nfor (var i = 0; i < 256; i++) { ESCAPED.push(0); }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n  .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1; });\n\n\nmodule.exports = function escape(state, silent) {\n  var ch, pos = state.pos, max = state.posMax;\n\n  if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) { return false; }\n\n  pos++;\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos);\n\n    if (ch < 256 && ESCAPED[ch] !== 0) {\n      if (!silent) { state.pending += state.src[pos]; }\n      state.pos += 2;\n      return true;\n    }\n\n    if (ch === 0x0A) {\n      if (!silent) {\n        state.push('hardbreak', 'br', 0);\n      }\n\n      pos++;\n      // skip leading whitespaces from next line\n      while (pos < max) {\n        ch = state.src.charCodeAt(pos);\n        if (!isSpace(ch)) { break; }\n        pos++;\n      }\n\n      state.pos = pos;\n      return true;\n    }\n  }\n\n  if (!silent) { state.pending += '\\\\'; }\n  state.pos++;\n  return true;\n};\n\n},{\"../common/utils\":4}],43:[function(require,module,exports){\n// Process html tags\n\n'use strict';\n\n\nvar HTML_TAG_RE = require('../common/html_re').HTML_TAG_RE;\n\n\nfunction isLetter(ch) {\n  /*eslint no-bitwise:0*/\n  var lc = ch | 0x20; // to lower case\n  return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */);\n}\n\n\nmodule.exports = function html_inline(state, silent) {\n  var ch, match, max, token,\n      pos = state.pos;\n\n  if (!state.md.options.html) { return false; }\n\n  // Check start\n  max = state.posMax;\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n      pos + 2 >= max) {\n    return false;\n  }\n\n  // Quick fail on second char\n  ch = state.src.charCodeAt(pos + 1);\n  if (ch !== 0x21/* ! */ &&\n      ch !== 0x3F/* ? */ &&\n      ch !== 0x2F/* / */ &&\n      !isLetter(ch)) {\n    return false;\n  }\n\n  match = state.src.slice(pos).match(HTML_TAG_RE);\n  if (!match) { return false; }\n\n  if (!silent) {\n    token         = state.push('html_inline', '', 0);\n    token.content = state.src.slice(pos, pos + match[0].length);\n  }\n  state.pos += match[0].length;\n  return true;\n};\n\n},{\"../common/html_re\":3}],44:[function(require,module,exports){\n// Process ![image](<src> \"title\")\n\n'use strict';\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function image(state, silent) {\n  var attrs,\n      code,\n      content,\n      label,\n      labelEnd,\n      labelStart,\n      pos,\n      ref,\n      res,\n      title,\n      token,\n      tokens,\n      start,\n      href = '',\n      oldPos = state.pos,\n      max = state.posMax;\n\n  if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false; }\n  if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false; }\n\n  labelStart = state.pos + 2;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false; }\n\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n    if (pos >= max) { return false; }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str;\n      pos = res.pos;\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (!isSpace(code) && code !== 0x0A) { break; }\n      }\n    } else {\n      title = '';\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      state.pos = oldPos;\n      return false;\n    }\n    pos++;\n  } else {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false; }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    content = state.src.slice(labelStart, labelEnd);\n\n    state.md.inline.parse(\n      content,\n      state.md,\n      state.env,\n      tokens = []\n    );\n\n    token          = state.push('image', 'img', 0);\n    token.attrs    = attrs = [ [ 'src', href ], [ 'alt', '' ] ];\n    token.children = tokens;\n    token.content  = content;\n\n    if (title) {\n      attrs.push([ 'title', title ]);\n    }\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n};\n\n},{\"../common/utils\":4}],45:[function(require,module,exports){\n// Process [link](<to> \"stuff\")\n\n'use strict';\n\nvar normalizeReference   = require('../common/utils').normalizeReference;\nvar isSpace              = require('../common/utils').isSpace;\n\n\nmodule.exports = function link(state, silent) {\n  var attrs,\n      code,\n      label,\n      labelEnd,\n      labelStart,\n      pos,\n      res,\n      ref,\n      title,\n      token,\n      href = '',\n      oldPos = state.pos,\n      max = state.posMax,\n      start = state.pos,\n      parseReference = true;\n\n  if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false; }\n\n  labelStart = state.pos + 1;\n  labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false; }\n\n  pos = labelEnd + 1;\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // might have found a valid shortcut link, disable reference parsing\n    parseReference = false;\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n    if (pos >= max) { return false; }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos;\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax);\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str);\n      if (state.md.validateLink(href)) {\n        pos = res.pos;\n      } else {\n        href = '';\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos;\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos);\n      if (!isSpace(code) && code !== 0x0A) { break; }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax);\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str;\n      pos = res.pos;\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos);\n        if (!isSpace(code) && code !== 0x0A) { break; }\n      }\n    } else {\n      title = '';\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      // parsing a valid shortcut link failed, fallback to reference\n      parseReference = true;\n    }\n    pos++;\n  }\n\n  if (parseReference) {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false; }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1;\n      pos = state.md.helpers.parseLinkLabel(state, pos);\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++);\n      } else {\n        pos = labelEnd + 1;\n      }\n    } else {\n      pos = labelEnd + 1;\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd); }\n\n    ref = state.env.references[normalizeReference(label)];\n    if (!ref) {\n      state.pos = oldPos;\n      return false;\n    }\n    href = ref.href;\n    title = ref.title;\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    state.pos = labelStart;\n    state.posMax = labelEnd;\n\n    token        = state.push('link_open', 'a', 1);\n    token.attrs  = attrs = [ [ 'href', href ] ];\n    if (title) {\n      attrs.push([ 'title', title ]);\n    }\n\n    state.md.inline.tokenize(state);\n\n    token        = state.push('link_close', 'a', -1);\n  }\n\n  state.pos = pos;\n  state.posMax = max;\n  return true;\n};\n\n},{\"../common/utils\":4}],46:[function(require,module,exports){\n// Proceess '\\n'\n\n'use strict';\n\nvar isSpace = require('../common/utils').isSpace;\n\n\nmodule.exports = function newline(state, silent) {\n  var pmax, max, pos = state.pos;\n\n  if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false; }\n\n  pmax = state.pending.length - 1;\n  max = state.posMax;\n\n  // '  \\n' -> hardbreak\n  // Lookup in pending chars is bad practice! Don't copy to other rules!\n  // Pending string is stored in concat mode, indexed lookups will cause\n  // convertion to flat mode.\n  if (!silent) {\n    if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n      if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n        state.pending = state.pending.replace(/ +$/, '');\n        state.push('hardbreak', 'br', 0);\n      } else {\n        state.pending = state.pending.slice(0, -1);\n        state.push('softbreak', 'br', 0);\n      }\n\n    } else {\n      state.push('softbreak', 'br', 0);\n    }\n  }\n\n  pos++;\n\n  // skip heading spaces for next line\n  while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++; }\n\n  state.pos = pos;\n  return true;\n};\n\n},{\"../common/utils\":4}],47:[function(require,module,exports){\n// Inline parser state\n\n'use strict';\n\n\nvar Token          = require('../token');\nvar isWhiteSpace   = require('../common/utils').isWhiteSpace;\nvar isPunctChar    = require('../common/utils').isPunctChar;\nvar isMdAsciiPunct = require('../common/utils').isMdAsciiPunct;\n\n\nfunction StateInline(src, md, env, outTokens) {\n  this.src = src;\n  this.env = env;\n  this.md = md;\n  this.tokens = outTokens;\n\n  this.pos = 0;\n  this.posMax = this.src.length;\n  this.level = 0;\n  this.pending = '';\n  this.pendingLevel = 0;\n\n  this.cache = {};        // Stores { start: end } pairs. Useful for backtrack\n                          // optimization of pairs parse (emphasis, strikes).\n\n  this.delimiters = [];   // Emphasis-like delimiters\n}\n\n\n// Flush pending text\n//\nStateInline.prototype.pushPending = function () {\n  var token = new Token('text', '', 0);\n  token.content = this.pending;\n  token.level = this.pendingLevel;\n  this.tokens.push(token);\n  this.pending = '';\n  return token;\n};\n\n\n// Push new token to \"stream\".\n// If pending text exists - flush it as text token\n//\nStateInline.prototype.push = function (type, tag, nesting) {\n  if (this.pending) {\n    this.pushPending();\n  }\n\n  var token = new Token(type, tag, nesting);\n\n  if (nesting < 0) { this.level--; }\n  token.level = this.level;\n  if (nesting > 0) { this.level++; }\n\n  this.pendingLevel = this.level;\n  this.tokens.push(token);\n  return token;\n};\n\n\n// Scan a sequence of emphasis-like markers, and determine whether\n// it can start an emphasis sequence or end an emphasis sequence.\n//\n//  - start - position to scan from (it should point at a valid marker);\n//  - canSplitWord - determine if these markers can be found inside a word\n//\nStateInline.prototype.scanDelims = function (start, canSplitWord) {\n  var pos = start, lastChar, nextChar, count, can_open, can_close,\n      isLastWhiteSpace, isLastPunctChar,\n      isNextWhiteSpace, isNextPunctChar,\n      left_flanking = true,\n      right_flanking = true,\n      max = this.posMax,\n      marker = this.src.charCodeAt(start);\n\n  // treat beginning of the line as a whitespace\n  lastChar = start > 0 ? this.src.charCodeAt(start - 1) : 0x20;\n\n  while (pos < max && this.src.charCodeAt(pos) === marker) { pos++; }\n\n  count = pos - start;\n\n  // treat end of the line as a whitespace\n  nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20;\n\n  isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctChar(String.fromCharCode(lastChar));\n  isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctChar(String.fromCharCode(nextChar));\n\n  isLastWhiteSpace = isWhiteSpace(lastChar);\n  isNextWhiteSpace = isWhiteSpace(nextChar);\n\n  if (isNextWhiteSpace) {\n    left_flanking = false;\n  } else if (isNextPunctChar) {\n    if (!(isLastWhiteSpace || isLastPunctChar)) {\n      left_flanking = false;\n    }\n  }\n\n  if (isLastWhiteSpace) {\n    right_flanking = false;\n  } else if (isLastPunctChar) {\n    if (!(isNextWhiteSpace || isNextPunctChar)) {\n      right_flanking = false;\n    }\n  }\n\n  if (!canSplitWord) {\n    can_open  = left_flanking  && (!right_flanking || isLastPunctChar);\n    can_close = right_flanking && (!left_flanking  || isNextPunctChar);\n  } else {\n    can_open  = left_flanking;\n    can_close = right_flanking;\n  }\n\n  return {\n    can_open:  can_open,\n    can_close: can_close,\n    length:    count\n  };\n};\n\n\n// re-export Token class to use in block rules\nStateInline.prototype.Token = Token;\n\n\nmodule.exports = StateInline;\n\n},{\"../common/utils\":4,\"../token\":51}],48:[function(require,module,exports){\n// ~~strike through~~\n//\n'use strict';\n\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nmodule.exports.tokenize = function strikethrough(state, silent) {\n  var i, scanned, token, len, ch,\n      start = state.pos,\n      marker = state.src.charCodeAt(start);\n\n  if (silent) { return false; }\n\n  if (marker !== 0x7E/* ~ */) { return false; }\n\n  scanned = state.scanDelims(state.pos, true);\n  len = scanned.length;\n  ch = String.fromCharCode(marker);\n\n  if (len < 2) { return false; }\n\n  if (len % 2) {\n    token         = state.push('text', '', 0);\n    token.content = ch;\n    len--;\n  }\n\n  for (i = 0; i < len; i += 2) {\n    token         = state.push('text', '', 0);\n    token.content = ch + ch;\n\n    state.delimiters.push({\n      marker: marker,\n      jump:   i,\n      token:  state.tokens.length - 1,\n      level:  state.level,\n      end:    -1,\n      open:   scanned.can_open,\n      close:  scanned.can_close\n    });\n  }\n\n  state.pos += scanned.length;\n\n  return true;\n};\n\n\n// Walk through delimiter list and replace text tokens with tags\n//\nmodule.exports.postProcess = function strikethrough(state) {\n  var i, j,\n      startDelim,\n      endDelim,\n      token,\n      loneMarkers = [],\n      delimiters = state.delimiters,\n      max = state.delimiters.length;\n\n  for (i = 0; i < max; i++) {\n    startDelim = delimiters[i];\n\n    if (startDelim.marker !== 0x7E/* ~ */) {\n      continue;\n    }\n\n    if (startDelim.end === -1) {\n      continue;\n    }\n\n    endDelim = delimiters[startDelim.end];\n\n    token         = state.tokens[startDelim.token];\n    token.type    = 's_open';\n    token.tag     = 's';\n    token.nesting = 1;\n    token.markup  = '~~';\n    token.content = '';\n\n    token         = state.tokens[endDelim.token];\n    token.type    = 's_close';\n    token.tag     = 's';\n    token.nesting = -1;\n    token.markup  = '~~';\n    token.content = '';\n\n    if (state.tokens[endDelim.token - 1].type === 'text' &&\n        state.tokens[endDelim.token - 1].content === '~') {\n\n      loneMarkers.push(endDelim.token - 1);\n    }\n  }\n\n  // If a marker sequence has an odd number of characters, it's splitted\n  // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n  // start of the sequence.\n  //\n  // So, we have to move all those markers after subsequent s_close tags.\n  //\n  while (loneMarkers.length) {\n    i = loneMarkers.pop();\n    j = i + 1;\n\n    while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n      j++;\n    }\n\n    j--;\n\n    if (i !== j) {\n      token = state.tokens[j];\n      state.tokens[j] = state.tokens[i];\n      state.tokens[i] = token;\n    }\n  }\n};\n\n},{}],49:[function(require,module,exports){\n// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\n'use strict';\n\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar(ch) {\n  switch (ch) {\n    case 0x0A/* \\n */:\n    case 0x21/* ! */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2D/* - */:\n    case 0x3A/* : */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true;\n    default:\n      return false;\n  }\n}\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos;\n\n  while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n    pos++;\n  }\n\n  if (pos === state.pos) { return false; }\n\n  if (!silent) { state.pending += state.src.slice(state.pos, pos); }\n\n  state.pos = pos;\n\n  return true;\n};\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParcerInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos,\n      idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n  // first char is terminator -> empty text\n  if (idx === 0) { return false; }\n\n  // no terminator -> text till end of string\n  if (idx < 0) {\n    if (!silent) { state.pending += state.src.slice(pos); }\n    state.pos = state.src.length;\n    return true;\n  }\n\n  if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n  state.pos += idx;\n\n  return true;\n};*/\n\n},{}],50:[function(require,module,exports){\n// Merge adjacent text nodes into one, and re-calculate all token levels\n//\n'use strict';\n\n\nmodule.exports = function text_collapse(state) {\n  var curr, last,\n      level = 0,\n      tokens = state.tokens,\n      max = state.tokens.length;\n\n  for (curr = last = 0; curr < max; curr++) {\n    // re-calculate levels\n    level += tokens[curr].nesting;\n    tokens[curr].level = level;\n\n    if (tokens[curr].type === 'text' &&\n        curr + 1 < max &&\n        tokens[curr + 1].type === 'text') {\n\n      // collapse two adjacent text nodes\n      tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content;\n    } else {\n      if (curr !== last) { tokens[last] = tokens[curr]; }\n\n      last++;\n    }\n  }\n\n  if (curr !== last) {\n    tokens.length = last;\n  }\n};\n\n},{}],51:[function(require,module,exports){\n// Token class\n\n'use strict';\n\n\n/**\n * class Token\n **/\n\n/**\n * new Token(type, tag, nesting)\n *\n * Create new token and fill passed properties.\n **/\nfunction Token(type, tag, nesting) {\n  /**\n   * Token#type -> String\n   *\n   * Type of the token (string, e.g. \"paragraph_open\")\n   **/\n  this.type     = type;\n\n  /**\n   * Token#tag -> String\n   *\n   * html tag name, e.g. \"p\"\n   **/\n  this.tag      = tag;\n\n  /**\n   * Token#attrs -> Array\n   *\n   * Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]`\n   **/\n  this.attrs    = null;\n\n  /**\n   * Token#map -> Array\n   *\n   * Source map info. Format: `[ line_begin, line_end ]`\n   **/\n  this.map      = null;\n\n  /**\n   * Token#nesting -> Number\n   *\n   * Level change (number in {-1, 0, 1} set), where:\n   *\n   * -  `1` means the tag is opening\n   * -  `0` means the tag is self-closing\n   * - `-1` means the tag is closing\n   **/\n  this.nesting  = nesting;\n\n  /**\n   * Token#level -> Number\n   *\n   * nesting level, the same as `state.level`\n   **/\n  this.level    = 0;\n\n  /**\n   * Token#children -> Array\n   *\n   * An array of child nodes (inline and img tokens)\n   **/\n  this.children = null;\n\n  /**\n   * Token#content -> String\n   *\n   * In a case of self-closing tag (code, html, fence, etc.),\n   * it has contents of this tag.\n   **/\n  this.content  = '';\n\n  /**\n   * Token#markup -> String\n   *\n   * '*' or '_' for emphasis, fence string for fence, etc.\n   **/\n  this.markup   = '';\n\n  /**\n   * Token#info -> String\n   *\n   * fence infostring\n   **/\n  this.info     = '';\n\n  /**\n   * Token#meta -> Object\n   *\n   * A place for plugins to store an arbitrary data\n   **/\n  this.meta     = null;\n\n  /**\n   * Token#block -> Boolean\n   *\n   * True for block-level tokens, false for inline tokens.\n   * Used in renderer to calculate line breaks\n   **/\n  this.block    = false;\n\n  /**\n   * Token#hidden -> Boolean\n   *\n   * If it's true, ignore this element when rendering. Used for tight lists\n   * to hide paragraphs.\n   **/\n  this.hidden   = false;\n}\n\n\n/**\n * Token.attrIndex(name) -> Number\n *\n * Search attribute index by name.\n **/\nToken.prototype.attrIndex = function attrIndex(name) {\n  var attrs, i, len;\n\n  if (!this.attrs) { return -1; }\n\n  attrs = this.attrs;\n\n  for (i = 0, len = attrs.length; i < len; i++) {\n    if (attrs[i][0] === name) { return i; }\n  }\n  return -1;\n};\n\n\n/**\n * Token.attrPush(attrData)\n *\n * Add `[ name, value ]` attribute to list. Init attrs if necessary\n **/\nToken.prototype.attrPush = function attrPush(attrData) {\n  if (this.attrs) {\n    this.attrs.push(attrData);\n  } else {\n    this.attrs = [ attrData ];\n  }\n};\n\n\n/**\n * Token.attrSet(name, value)\n *\n * Set `name` attribute to `value`. Override old value if exists.\n **/\nToken.prototype.attrSet = function attrSet(name, value) {\n  var idx = this.attrIndex(name),\n      attrData = [ name, value ];\n\n  if (idx < 0) {\n    this.attrPush(attrData);\n  } else {\n    this.attrs[idx] = attrData;\n  }\n};\n\n\n/**\n * Token.attrGet(name)\n *\n * Get the value of attribute `name`, or null if it does not exist.\n **/\nToken.prototype.attrGet = function attrGet(name) {\n  var idx = this.attrIndex(name), value = null;\n  if (idx >= 0) {\n    value = this.attrs[idx][1];\n  }\n  return value;\n};\n\n\n/**\n * Token.attrJoin(name, value)\n *\n * Join value to existing attribute via space. Or create new attribute if not\n * exists. Useful to operate with token classes.\n **/\nToken.prototype.attrJoin = function attrJoin(name, value) {\n  var idx = this.attrIndex(name);\n\n  if (idx < 0) {\n    this.attrPush([ name, value ]);\n  } else {\n    this.attrs[idx][1] = this.attrs[idx][1] + ' ' + value;\n  }\n};\n\n\nmodule.exports = Token;\n\n},{}],52:[function(require,module,exports){\nmodule.exports={\"Aacute\":\"\\u00C1\",\"aacute\":\"\\u00E1\",\"Abreve\":\"\\u0102\",\"abreve\":\"\\u0103\",\"ac\":\"\\u223E\",\"acd\":\"\\u223F\",\"acE\":\"\\u223E\\u0333\",\"Acirc\":\"\\u00C2\",\"acirc\":\"\\u00E2\",\"acute\":\"\\u00B4\",\"Acy\":\"\\u0410\",\"acy\":\"\\u0430\",\"AElig\":\"\\u00C6\",\"aelig\":\"\\u00E6\",\"af\":\"\\u2061\",\"Afr\":\"\\uD835\\uDD04\",\"afr\":\"\\uD835\\uDD1E\",\"Agrave\":\"\\u00C0\",\"agrave\":\"\\u00E0\",\"alefsym\":\"\\u2135\",\"aleph\":\"\\u2135\",\"Alpha\":\"\\u0391\",\"alpha\":\"\\u03B1\",\"Amacr\":\"\\u0100\",\"amacr\":\"\\u0101\",\"amalg\":\"\\u2A3F\",\"amp\":\"&\",\"AMP\":\"&\",\"andand\":\"\\u2A55\",\"And\":\"\\u2A53\",\"and\":\"\\u2227\",\"andd\":\"\\u2A5C\",\"andslope\":\"\\u2A58\",\"andv\":\"\\u2A5A\",\"ang\":\"\\u2220\",\"ange\":\"\\u29A4\",\"angle\":\"\\u2220\",\"angmsdaa\":\"\\u29A8\",\"angmsdab\":\"\\u29A9\",\"angmsdac\":\"\\u29AA\",\"angmsdad\":\"\\u29AB\",\"angmsdae\":\"\\u29AC\",\"angmsdaf\":\"\\u29AD\",\"angmsdag\":\"\\u29AE\",\"angmsdah\":\"\\u29AF\",\"angmsd\":\"\\u2221\",\"angrt\":\"\\u221F\",\"angrtvb\":\"\\u22BE\",\"angrtvbd\":\"\\u299D\",\"angsph\":\"\\u2222\",\"angst\":\"\\u00C5\",\"angzarr\":\"\\u237C\",\"Aogon\":\"\\u0104\",\"aogon\":\"\\u0105\",\"Aopf\":\"\\uD835\\uDD38\",\"aopf\":\"\\uD835\\uDD52\",\"apacir\":\"\\u2A6F\",\"ap\":\"\\u2248\",\"apE\":\"\\u2A70\",\"ape\":\"\\u224A\",\"apid\":\"\\u224B\",\"apos\":\"'\",\"ApplyFunction\":\"\\u2061\",\"approx\":\"\\u2248\",\"approxeq\":\"\\u224A\",\"Aring\":\"\\u00C5\",\"aring\":\"\\u00E5\",\"Ascr\":\"\\uD835\\uDC9C\",\"ascr\":\"\\uD835\\uDCB6\",\"Assign\":\"\\u2254\",\"ast\":\"*\",\"asymp\":\"\\u2248\",\"asympeq\":\"\\u224D\",\"Atilde\":\"\\u00C3\",\"atilde\":\"\\u00E3\",\"Auml\":\"\\u00C4\",\"auml\":\"\\u00E4\",\"awconint\":\"\\u2233\",\"awint\":\"\\u2A11\",\"backcong\":\"\\u224C\",\"backepsilon\":\"\\u03F6\",\"backprime\":\"\\u2035\",\"backsim\":\"\\u223D\",\"backsimeq\":\"\\u22CD\",\"Backslash\":\"\\u2216\",\"Barv\":\"\\u2AE7\",\"barvee\":\"\\u22BD\",\"barwed\":\"\\u2305\",\"Barwed\":\"\\u2306\",\"barwedge\":\"\\u2305\",\"bbrk\":\"\\u23B5\",\"bbrktbrk\":\"\\u23B6\",\"bcong\":\"\\u224C\",\"Bcy\":\"\\u0411\",\"bcy\":\"\\u0431\",\"bdquo\":\"\\u201E\",\"becaus\":\"\\u2235\",\"because\":\"\\u2235\",\"Because\":\"\\u2235\",\"bemptyv\":\"\\u29B0\",\"bepsi\":\"\\u03F6\",\"bernou\":\"\\u212C\",\"Bernoullis\":\"\\u212C\",\"Beta\":\"\\u0392\",\"beta\":\"\\u03B2\",\"beth\":\"\\u2136\",\"between\":\"\\u226C\",\"Bfr\":\"\\uD835\\uDD05\",\"bfr\":\"\\uD835\\uDD1F\",\"bigcap\":\"\\u22C2\",\"bigcirc\":\"\\u25EF\",\"bigcup\":\"\\u22C3\",\"bigodot\":\"\\u2A00\",\"bigoplus\":\"\\u2A01\",\"bigotimes\":\"\\u2A02\",\"bigsqcup\":\"\\u2A06\",\"bigstar\":\"\\u2605\",\"bigtriangledown\":\"\\u25BD\",\"bigtriangleup\":\"\\u25B3\",\"biguplus\":\"\\u2A04\",\"bigvee\":\"\\u22C1\",\"bigwedge\":\"\\u22C0\",\"bkarow\":\"\\u290D\",\"blacklozenge\":\"\\u29EB\",\"blacksquare\":\"\\u25AA\",\"blacktriangle\":\"\\u25B4\",\"blacktriangledown\":\"\\u25BE\",\"blacktriangleleft\":\"\\u25C2\",\"blacktriangleright\":\"\\u25B8\",\"blank\":\"\\u2423\",\"blk12\":\"\\u2592\",\"blk14\":\"\\u2591\",\"blk34\":\"\\u2593\",\"block\":\"\\u2588\",\"bne\":\"=\\u20E5\",\"bnequiv\":\"\\u2261\\u20E5\",\"bNot\":\"\\u2AED\",\"bnot\":\"\\u2310\",\"Bopf\":\"\\uD835\\uDD39\",\"bopf\":\"\\uD835\\uDD53\",\"bot\":\"\\u22A5\",\"bottom\":\"\\u22A5\",\"bowtie\":\"\\u22C8\",\"boxbox\":\"\\u29C9\",\"boxdl\":\"\\u2510\",\"boxdL\":\"\\u2555\",\"boxDl\":\"\\u2556\",\"boxDL\":\"\\u2557\",\"boxdr\":\"\\u250C\",\"boxdR\":\"\\u2552\",\"boxDr\":\"\\u2553\",\"boxDR\":\"\\u2554\",\"boxh\":\"\\u2500\",\"boxH\":\"\\u2550\",\"boxhd\":\"\\u252C\",\"boxHd\":\"\\u2564\",\"boxhD\":\"\\u2565\",\"boxHD\":\"\\u2566\",\"boxhu\":\"\\u2534\",\"boxHu\":\"\\u2567\",\"boxhU\":\"\\u2568\",\"boxHU\":\"\\u2569\",\"boxminus\":\"\\u229F\",\"boxplus\":\"\\u229E\",\"boxtimes\":\"\\u22A0\",\"boxul\":\"\\u2518\",\"boxuL\":\"\\u255B\",\"boxUl\":\"\\u255C\",\"boxUL\":\"\\u255D\",\"boxur\":\"\\u2514\",\"boxuR\":\"\\u2558\",\"boxUr\":\"\\u2559\",\"boxUR\":\"\\u255A\",\"boxv\":\"\\u2502\",\"boxV\":\"\\u2551\",\"boxvh\":\"\\u253C\",\"boxvH\":\"\\u256A\",\"boxVh\":\"\\u256B\",\"boxVH\":\"\\u256C\",\"boxvl\":\"\\u2524\",\"boxvL\":\"\\u2561\",\"boxVl\":\"\\u2562\",\"boxVL\":\"\\u2563\",\"boxvr\":\"\\u251C\",\"boxvR\":\"\\u255E\",\"boxVr\":\"\\u255F\",\"boxVR\":\"\\u2560\",\"bprime\":\"\\u2035\",\"breve\":\"\\u02D8\",\"Breve\":\"\\u02D8\",\"brvbar\":\"\\u00A6\",\"bscr\":\"\\uD835\\uDCB7\",\"Bscr\":\"\\u212C\",\"bsemi\":\"\\u204F\",\"bsim\":\"\\u223D\",\"bsime\":\"\\u22CD\",\"bsolb\":\"\\u29C5\",\"bsol\":\"\\\\\",\"bsolhsub\":\"\\u27C8\",\"bull\":\"\\u2022\",\"bullet\":\"\\u2022\",\"bump\":\"\\u224E\",\"bumpE\":\"\\u2AAE\",\"bumpe\":\"\\u224F\",\"Bumpeq\":\"\\u224E\",\"bumpeq\":\"\\u224F\",\"Cacute\":\"\\u0106\",\"cacute\":\"\\u0107\",\"capand\":\"\\u2A44\",\"capbrcup\":\"\\u2A49\",\"capcap\":\"\\u2A4B\",\"cap\":\"\\u2229\",\"Cap\":\"\\u22D2\",\"capcup\":\"\\u2A47\",\"capdot\":\"\\u2A40\",\"CapitalDifferentialD\":\"\\u2145\",\"caps\":\"\\u2229\\uFE00\",\"caret\":\"\\u2041\",\"caron\":\"\\u02C7\",\"Cayleys\":\"\\u212D\",\"ccaps\":\"\\u2A4D\",\"Ccaron\":\"\\u010C\",\"ccaron\":\"\\u010D\",\"Ccedil\":\"\\u00C7\",\"ccedil\":\"\\u00E7\",\"Ccirc\":\"\\u0108\",\"ccirc\":\"\\u0109\",\"Cconint\":\"\\u2230\",\"ccups\":\"\\u2A4C\",\"ccupssm\":\"\\u2A50\",\"Cdot\":\"\\u010A\",\"cdot\":\"\\u010B\",\"cedil\":\"\\u00B8\",\"Cedilla\":\"\\u00B8\",\"cemptyv\":\"\\u29B2\",\"cent\":\"\\u00A2\",\"centerdot\":\"\\u00B7\",\"CenterDot\":\"\\u00B7\",\"cfr\":\"\\uD835\\uDD20\",\"Cfr\":\"\\u212D\",\"CHcy\":\"\\u0427\",\"chcy\":\"\\u0447\",\"check\":\"\\u2713\",\"checkmark\":\"\\u2713\",\"Chi\":\"\\u03A7\",\"chi\":\"\\u03C7\",\"circ\":\"\\u02C6\",\"circeq\":\"\\u2257\",\"circlearrowleft\":\"\\u21BA\",\"circlearrowright\":\"\\u21BB\",\"circledast\":\"\\u229B\",\"circledcirc\":\"\\u229A\",\"circleddash\":\"\\u229D\",\"CircleDot\":\"\\u2299\",\"circledR\":\"\\u00AE\",\"circledS\":\"\\u24C8\",\"CircleMinus\":\"\\u2296\",\"CirclePlus\":\"\\u2295\",\"CircleTimes\":\"\\u2297\",\"cir\":\"\\u25CB\",\"cirE\":\"\\u29C3\",\"cire\":\"\\u2257\",\"cirfnint\":\"\\u2A10\",\"cirmid\":\"\\u2AEF\",\"cirscir\":\"\\u29C2\",\"ClockwiseContourIntegral\":\"\\u2232\",\"CloseCurlyDoubleQuote\":\"\\u201D\",\"CloseCurlyQuote\":\"\\u2019\",\"clubs\":\"\\u2663\",\"clubsuit\":\"\\u2663\",\"colon\":\":\",\"Colon\":\"\\u2237\",\"Colone\":\"\\u2A74\",\"colone\":\"\\u2254\",\"coloneq\":\"\\u2254\",\"comma\":\",\",\"commat\":\"@\",\"comp\":\"\\u2201\",\"compfn\":\"\\u2218\",\"complement\":\"\\u2201\",\"complexes\":\"\\u2102\",\"cong\":\"\\u2245\",\"congdot\":\"\\u2A6D\",\"Congruent\":\"\\u2261\",\"conint\":\"\\u222E\",\"Conint\":\"\\u222F\",\"ContourIntegral\":\"\\u222E\",\"copf\":\"\\uD835\\uDD54\",\"Copf\":\"\\u2102\",\"coprod\":\"\\u2210\",\"Coproduct\":\"\\u2210\",\"copy\":\"\\u00A9\",\"COPY\":\"\\u00A9\",\"copysr\":\"\\u2117\",\"CounterClockwiseContourIntegral\":\"\\u2233\",\"crarr\":\"\\u21B5\",\"cross\":\"\\u2717\",\"Cross\":\"\\u2A2F\",\"Cscr\":\"\\uD835\\uDC9E\",\"cscr\":\"\\uD835\\uDCB8\",\"csub\":\"\\u2ACF\",\"csube\":\"\\u2AD1\",\"csup\":\"\\u2AD0\",\"csupe\":\"\\u2AD2\",\"ctdot\":\"\\u22EF\",\"cudarrl\":\"\\u2938\",\"cudarrr\":\"\\u2935\",\"cuepr\":\"\\u22DE\",\"cuesc\":\"\\u22DF\",\"cularr\":\"\\u21B6\",\"cularrp\":\"\\u293D\",\"cupbrcap\":\"\\u2A48\",\"cupcap\":\"\\u2A46\",\"CupCap\":\"\\u224D\",\"cup\":\"\\u222A\",\"Cup\":\"\\u22D3\",\"cupcup\":\"\\u2A4A\",\"cupdot\":\"\\u228D\",\"cupor\":\"\\u2A45\",\"cups\":\"\\u222A\\uFE00\",\"curarr\":\"\\u21B7\",\"curarrm\":\"\\u293C\",\"curlyeqprec\":\"\\u22DE\",\"curlyeqsucc\":\"\\u22DF\",\"curlyvee\":\"\\u22CE\",\"curlywedge\":\"\\u22CF\",\"curren\":\"\\u00A4\",\"curvearrowleft\":\"\\u21B6\",\"curvearrowright\":\"\\u21B7\",\"cuvee\":\"\\u22CE\",\"cuwed\":\"\\u22CF\",\"cwconint\":\"\\u2232\",\"cwint\":\"\\u2231\",\"cylcty\":\"\\u232D\",\"dagger\":\"\\u2020\",\"Dagger\":\"\\u2021\",\"daleth\":\"\\u2138\",\"darr\":\"\\u2193\",\"Darr\":\"\\u21A1\",\"dArr\":\"\\u21D3\",\"dash\":\"\\u2010\",\"Dashv\":\"\\u2AE4\",\"dashv\":\"\\u22A3\",\"dbkarow\":\"\\u290F\",\"dblac\":\"\\u02DD\",\"Dcaron\":\"\\u010E\",\"dcaron\":\"\\u010F\",\"Dcy\":\"\\u0414\",\"dcy\":\"\\u0434\",\"ddagger\":\"\\u2021\",\"ddarr\":\"\\u21CA\",\"DD\":\"\\u2145\",\"dd\":\"\\u2146\",\"DDotrahd\":\"\\u2911\",\"ddotseq\":\"\\u2A77\",\"deg\":\"\\u00B0\",\"Del\":\"\\u2207\",\"Delta\":\"\\u0394\",\"delta\":\"\\u03B4\",\"demptyv\":\"\\u29B1\",\"dfisht\":\"\\u297F\",\"Dfr\":\"\\uD835\\uDD07\",\"dfr\":\"\\uD835\\uDD21\",\"dHar\":\"\\u2965\",\"dharl\":\"\\u21C3\",\"dharr\":\"\\u21C2\",\"DiacriticalAcute\":\"\\u00B4\",\"DiacriticalDot\":\"\\u02D9\",\"DiacriticalDoubleAcute\":\"\\u02DD\",\"DiacriticalGrave\":\"`\",\"DiacriticalTilde\":\"\\u02DC\",\"diam\":\"\\u22C4\",\"diamond\":\"\\u22C4\",\"Diamond\":\"\\u22C4\",\"diamondsuit\":\"\\u2666\",\"diams\":\"\\u2666\",\"die\":\"\\u00A8\",\"DifferentialD\":\"\\u2146\",\"digamma\":\"\\u03DD\",\"disin\":\"\\u22F2\",\"div\":\"\\u00F7\",\"divide\":\"\\u00F7\",\"divideontimes\":\"\\u22C7\",\"divonx\":\"\\u22C7\",\"DJcy\":\"\\u0402\",\"djcy\":\"\\u0452\",\"dlcorn\":\"\\u231E\",\"dlcrop\":\"\\u230D\",\"dollar\":\"$\",\"Dopf\":\"\\uD835\\uDD3B\",\"dopf\":\"\\uD835\\uDD55\",\"Dot\":\"\\u00A8\",\"dot\":\"\\u02D9\",\"DotDot\":\"\\u20DC\",\"doteq\":\"\\u2250\",\"doteqdot\":\"\\u2251\",\"DotEqual\":\"\\u2250\",\"dotminus\":\"\\u2238\",\"dotplus\":\"\\u2214\",\"dotsquare\":\"\\u22A1\",\"doublebarwedge\":\"\\u2306\",\"DoubleContourIntegral\":\"\\u222F\",\"DoubleDot\":\"\\u00A8\",\"DoubleDownArrow\":\"\\u21D3\",\"DoubleLeftArrow\":\"\\u21D0\",\"DoubleLeftRightArrow\":\"\\u21D4\",\"DoubleLeftTee\":\"\\u2AE4\",\"DoubleLongLeftArrow\":\"\\u27F8\",\"DoubleLongLeftRightArrow\":\"\\u27FA\",\"DoubleLongRightArrow\":\"\\u27F9\",\"DoubleRightArrow\":\"\\u21D2\",\"DoubleRightTee\":\"\\u22A8\",\"DoubleUpArrow\":\"\\u21D1\",\"DoubleUpDownArrow\":\"\\u21D5\",\"DoubleVerticalBar\":\"\\u2225\",\"DownArrowBar\":\"\\u2913\",\"downarrow\":\"\\u2193\",\"DownArrow\":\"\\u2193\",\"Downarrow\":\"\\u21D3\",\"DownArrowUpArrow\":\"\\u21F5\",\"DownBreve\":\"\\u0311\",\"downdownarrows\":\"\\u21CA\",\"downharpoonleft\":\"\\u21C3\",\"downharpoonright\":\"\\u21C2\",\"DownLeftRightVector\":\"\\u2950\",\"DownLeftTeeVector\":\"\\u295E\",\"DownLeftVectorBar\":\"\\u2956\",\"DownLeftVector\":\"\\u21BD\",\"DownRightTeeVector\":\"\\u295F\",\"DownRightVectorBar\":\"\\u2957\",\"DownRightVector\":\"\\u21C1\",\"DownTeeArrow\":\"\\u21A7\",\"DownTee\":\"\\u22A4\",\"drbkarow\":\"\\u2910\",\"drcorn\":\"\\u231F\",\"drcrop\":\"\\u230C\",\"Dscr\":\"\\uD835\\uDC9F\",\"dscr\":\"\\uD835\\uDCB9\",\"DScy\":\"\\u0405\",\"dscy\":\"\\u0455\",\"dsol\":\"\\u29F6\",\"Dstrok\":\"\\u0110\",\"dstrok\":\"\\u0111\",\"dtdot\":\"\\u22F1\",\"dtri\":\"\\u25BF\",\"dtrif\":\"\\u25BE\",\"duarr\":\"\\u21F5\",\"duhar\":\"\\u296F\",\"dwangle\":\"\\u29A6\",\"DZcy\":\"\\u040F\",\"dzcy\":\"\\u045F\",\"dzigrarr\":\"\\u27FF\",\"Eacute\":\"\\u00C9\",\"eacute\":\"\\u00E9\",\"easter\":\"\\u2A6E\",\"Ecaron\":\"\\u011A\",\"ecaron\":\"\\u011B\",\"Ecirc\":\"\\u00CA\",\"ecirc\":\"\\u00EA\",\"ecir\":\"\\u2256\",\"ecolon\":\"\\u2255\",\"Ecy\":\"\\u042D\",\"ecy\":\"\\u044D\",\"eDDot\":\"\\u2A77\",\"Edot\":\"\\u0116\",\"edot\":\"\\u0117\",\"eDot\":\"\\u2251\",\"ee\":\"\\u2147\",\"efDot\":\"\\u2252\",\"Efr\":\"\\uD835\\uDD08\",\"efr\":\"\\uD835\\uDD22\",\"eg\":\"\\u2A9A\",\"Egrave\":\"\\u00C8\",\"egrave\":\"\\u00E8\",\"egs\":\"\\u2A96\",\"egsdot\":\"\\u2A98\",\"el\":\"\\u2A99\",\"Element\":\"\\u2208\",\"elinters\":\"\\u23E7\",\"ell\":\"\\u2113\",\"els\":\"\\u2A95\",\"elsdot\":\"\\u2A97\",\"Emacr\":\"\\u0112\",\"emacr\":\"\\u0113\",\"empty\":\"\\u2205\",\"emptyset\":\"\\u2205\",\"EmptySmallSquare\":\"\\u25FB\",\"emptyv\":\"\\u2205\",\"EmptyVerySmallSquare\":\"\\u25AB\",\"emsp13\":\"\\u2004\",\"emsp14\":\"\\u2005\",\"emsp\":\"\\u2003\",\"ENG\":\"\\u014A\",\"eng\":\"\\u014B\",\"ensp\":\"\\u2002\",\"Eogon\":\"\\u0118\",\"eogon\":\"\\u0119\",\"Eopf\":\"\\uD835\\uDD3C\",\"eopf\":\"\\uD835\\uDD56\",\"epar\":\"\\u22D5\",\"eparsl\":\"\\u29E3\",\"eplus\":\"\\u2A71\",\"epsi\":\"\\u03B5\",\"Epsilon\":\"\\u0395\",\"epsilon\":\"\\u03B5\",\"epsiv\":\"\\u03F5\",\"eqcirc\":\"\\u2256\",\"eqcolon\":\"\\u2255\",\"eqsim\":\"\\u2242\",\"eqslantgtr\":\"\\u2A96\",\"eqslantless\":\"\\u2A95\",\"Equal\":\"\\u2A75\",\"equals\":\"=\",\"EqualTilde\":\"\\u2242\",\"equest\":\"\\u225F\",\"Equilibrium\":\"\\u21CC\",\"equiv\":\"\\u2261\",\"equivDD\":\"\\u2A78\",\"eqvparsl\":\"\\u29E5\",\"erarr\":\"\\u2971\",\"erDot\":\"\\u2253\",\"escr\":\"\\u212F\",\"Escr\":\"\\u2130\",\"esdot\":\"\\u2250\",\"Esim\":\"\\u2A73\",\"esim\":\"\\u2242\",\"Eta\":\"\\u0397\",\"eta\":\"\\u03B7\",\"ETH\":\"\\u00D0\",\"eth\":\"\\u00F0\",\"Euml\":\"\\u00CB\",\"euml\":\"\\u00EB\",\"euro\":\"\\u20AC\",\"excl\":\"!\",\"exist\":\"\\u2203\",\"Exists\":\"\\u2203\",\"expectation\":\"\\u2130\",\"exponentiale\":\"\\u2147\",\"ExponentialE\":\"\\u2147\",\"fallingdotseq\":\"\\u2252\",\"Fcy\":\"\\u0424\",\"fcy\":\"\\u0444\",\"female\":\"\\u2640\",\"ffilig\":\"\\uFB03\",\"fflig\":\"\\uFB00\",\"ffllig\":\"\\uFB04\",\"Ffr\":\"\\uD835\\uDD09\",\"ffr\":\"\\uD835\\uDD23\",\"filig\":\"\\uFB01\",\"FilledSmallSquare\":\"\\u25FC\",\"FilledVerySmallSquare\":\"\\u25AA\",\"fjlig\":\"fj\",\"flat\":\"\\u266D\",\"fllig\":\"\\uFB02\",\"fltns\":\"\\u25B1\",\"fnof\":\"\\u0192\",\"Fopf\":\"\\uD835\\uDD3D\",\"fopf\":\"\\uD835\\uDD57\",\"forall\":\"\\u2200\",\"ForAll\":\"\\u2200\",\"fork\":\"\\u22D4\",\"forkv\":\"\\u2AD9\",\"Fouriertrf\":\"\\u2131\",\"fpartint\":\"\\u2A0D\",\"frac12\":\"\\u00BD\",\"frac13\":\"\\u2153\",\"frac14\":\"\\u00BC\",\"frac15\":\"\\u2155\",\"frac16\":\"\\u2159\",\"frac18\":\"\\u215B\",\"frac23\":\"\\u2154\",\"frac25\":\"\\u2156\",\"frac34\":\"\\u00BE\",\"frac35\":\"\\u2157\",\"frac38\":\"\\u215C\",\"frac45\":\"\\u2158\",\"frac56\":\"\\u215A\",\"frac58\":\"\\u215D\",\"frac78\":\"\\u215E\",\"frasl\":\"\\u2044\",\"frown\":\"\\u2322\",\"fscr\":\"\\uD835\\uDCBB\",\"Fscr\":\"\\u2131\",\"gacute\":\"\\u01F5\",\"Gamma\":\"\\u0393\",\"gamma\":\"\\u03B3\",\"Gammad\":\"\\u03DC\",\"gammad\":\"\\u03DD\",\"gap\":\"\\u2A86\",\"Gbreve\":\"\\u011E\",\"gbreve\":\"\\u011F\",\"Gcedil\":\"\\u0122\",\"Gcirc\":\"\\u011C\",\"gcirc\":\"\\u011D\",\"Gcy\":\"\\u0413\",\"gcy\":\"\\u0433\",\"Gdot\":\"\\u0120\",\"gdot\":\"\\u0121\",\"ge\":\"\\u2265\",\"gE\":\"\\u2267\",\"gEl\":\"\\u2A8C\",\"gel\":\"\\u22DB\",\"geq\":\"\\u2265\",\"geqq\":\"\\u2267\",\"geqslant\":\"\\u2A7E\",\"gescc\":\"\\u2AA9\",\"ges\":\"\\u2A7E\",\"gesdot\":\"\\u2A80\",\"gesdoto\":\"\\u2A82\",\"gesdotol\":\"\\u2A84\",\"gesl\":\"\\u22DB\\uFE00\",\"gesles\":\"\\u2A94\",\"Gfr\":\"\\uD835\\uDD0A\",\"gfr\":\"\\uD835\\uDD24\",\"gg\":\"\\u226B\",\"Gg\":\"\\u22D9\",\"ggg\":\"\\u22D9\",\"gimel\":\"\\u2137\",\"GJcy\":\"\\u0403\",\"gjcy\":\"\\u0453\",\"gla\":\"\\u2AA5\",\"gl\":\"\\u2277\",\"glE\":\"\\u2A92\",\"glj\":\"\\u2AA4\",\"gnap\":\"\\u2A8A\",\"gnapprox\":\"\\u2A8A\",\"gne\":\"\\u2A88\",\"gnE\":\"\\u2269\",\"gneq\":\"\\u2A88\",\"gneqq\":\"\\u2269\",\"gnsim\":\"\\u22E7\",\"Gopf\":\"\\uD835\\uDD3E\",\"gopf\":\"\\uD835\\uDD58\",\"grave\":\"`\",\"GreaterEqual\":\"\\u2265\",\"GreaterEqualLess\":\"\\u22DB\",\"GreaterFullEqual\":\"\\u2267\",\"GreaterGreater\":\"\\u2AA2\",\"GreaterLess\":\"\\u2277\",\"GreaterSlantEqual\":\"\\u2A7E\",\"GreaterTilde\":\"\\u2273\",\"Gscr\":\"\\uD835\\uDCA2\",\"gscr\":\"\\u210A\",\"gsim\":\"\\u2273\",\"gsime\":\"\\u2A8E\",\"gsiml\":\"\\u2A90\",\"gtcc\":\"\\u2AA7\",\"gtcir\":\"\\u2A7A\",\"gt\":\">\",\"GT\":\">\",\"Gt\":\"\\u226B\",\"gtdot\":\"\\u22D7\",\"gtlPar\":\"\\u2995\",\"gtquest\":\"\\u2A7C\",\"gtrapprox\":\"\\u2A86\",\"gtrarr\":\"\\u2978\",\"gtrdot\":\"\\u22D7\",\"gtreqless\":\"\\u22DB\",\"gtreqqless\":\"\\u2A8C\",\"gtrless\":\"\\u2277\",\"gtrsim\":\"\\u2273\",\"gvertneqq\":\"\\u2269\\uFE00\",\"gvnE\":\"\\u2269\\uFE00\",\"Hacek\":\"\\u02C7\",\"hairsp\":\"\\u200A\",\"half\":\"\\u00BD\",\"hamilt\":\"\\u210B\",\"HARDcy\":\"\\u042A\",\"hardcy\":\"\\u044A\",\"harrcir\":\"\\u2948\",\"harr\":\"\\u2194\",\"hArr\":\"\\u21D4\",\"harrw\":\"\\u21AD\",\"Hat\":\"^\",\"hbar\":\"\\u210F\",\"Hcirc\":\"\\u0124\",\"hcirc\":\"\\u0125\",\"hearts\":\"\\u2665\",\"heartsuit\":\"\\u2665\",\"hellip\":\"\\u2026\",\"hercon\":\"\\u22B9\",\"hfr\":\"\\uD835\\uDD25\",\"Hfr\":\"\\u210C\",\"HilbertSpace\":\"\\u210B\",\"hksearow\":\"\\u2925\",\"hkswarow\":\"\\u2926\",\"hoarr\":\"\\u21FF\",\"homtht\":\"\\u223B\",\"hookleftarrow\":\"\\u21A9\",\"hookrightarrow\":\"\\u21AA\",\"hopf\":\"\\uD835\\uDD59\",\"Hopf\":\"\\u210D\",\"horbar\":\"\\u2015\",\"HorizontalLine\":\"\\u2500\",\"hscr\":\"\\uD835\\uDCBD\",\"Hscr\":\"\\u210B\",\"hslash\":\"\\u210F\",\"Hstrok\":\"\\u0126\",\"hstrok\":\"\\u0127\",\"HumpDownHump\":\"\\u224E\",\"HumpEqual\":\"\\u224F\",\"hybull\":\"\\u2043\",\"hyphen\":\"\\u2010\",\"Iacute\":\"\\u00CD\",\"iacute\":\"\\u00ED\",\"ic\":\"\\u2063\",\"Icirc\":\"\\u00CE\",\"icirc\":\"\\u00EE\",\"Icy\":\"\\u0418\",\"icy\":\"\\u0438\",\"Idot\":\"\\u0130\",\"IEcy\":\"\\u0415\",\"iecy\":\"\\u0435\",\"iexcl\":\"\\u00A1\",\"iff\":\"\\u21D4\",\"ifr\":\"\\uD835\\uDD26\",\"Ifr\":\"\\u2111\",\"Igrave\":\"\\u00CC\",\"igrave\":\"\\u00EC\",\"ii\":\"\\u2148\",\"iiiint\":\"\\u2A0C\",\"iiint\":\"\\u222D\",\"iinfin\":\"\\u29DC\",\"iiota\":\"\\u2129\",\"IJlig\":\"\\u0132\",\"ijlig\":\"\\u0133\",\"Imacr\":\"\\u012A\",\"imacr\":\"\\u012B\",\"image\":\"\\u2111\",\"ImaginaryI\":\"\\u2148\",\"imagline\":\"\\u2110\",\"imagpart\":\"\\u2111\",\"imath\":\"\\u0131\",\"Im\":\"\\u2111\",\"imof\":\"\\u22B7\",\"imped\":\"\\u01B5\",\"Implies\":\"\\u21D2\",\"incare\":\"\\u2105\",\"in\":\"\\u2208\",\"infin\":\"\\u221E\",\"infintie\":\"\\u29DD\",\"inodot\":\"\\u0131\",\"intcal\":\"\\u22BA\",\"int\":\"\\u222B\",\"Int\":\"\\u222C\",\"integers\":\"\\u2124\",\"Integral\":\"\\u222B\",\"intercal\":\"\\u22BA\",\"Intersection\":\"\\u22C2\",\"intlarhk\":\"\\u2A17\",\"intprod\":\"\\u2A3C\",\"InvisibleComma\":\"\\u2063\",\"InvisibleTimes\":\"\\u2062\",\"IOcy\":\"\\u0401\",\"iocy\":\"\\u0451\",\"Iogon\":\"\\u012E\",\"iogon\":\"\\u012F\",\"Iopf\":\"\\uD835\\uDD40\",\"iopf\":\"\\uD835\\uDD5A\",\"Iota\":\"\\u0399\",\"iota\":\"\\u03B9\",\"iprod\":\"\\u2A3C\",\"iquest\":\"\\u00BF\",\"iscr\":\"\\uD835\\uDCBE\",\"Iscr\":\"\\u2110\",\"isin\":\"\\u2208\",\"isindot\":\"\\u22F5\",\"isinE\":\"\\u22F9\",\"isins\":\"\\u22F4\",\"isinsv\":\"\\u22F3\",\"isinv\":\"\\u2208\",\"it\":\"\\u2062\",\"Itilde\":\"\\u0128\",\"itilde\":\"\\u0129\",\"Iukcy\":\"\\u0406\",\"iukcy\":\"\\u0456\",\"Iuml\":\"\\u00CF\",\"iuml\":\"\\u00EF\",\"Jcirc\":\"\\u0134\",\"jcirc\":\"\\u0135\",\"Jcy\":\"\\u0419\",\"jcy\":\"\\u0439\",\"Jfr\":\"\\uD835\\uDD0D\",\"jfr\":\"\\uD835\\uDD27\",\"jmath\":\"\\u0237\",\"Jopf\":\"\\uD835\\uDD41\",\"jopf\":\"\\uD835\\uDD5B\",\"Jscr\":\"\\uD835\\uDCA5\",\"jscr\":\"\\uD835\\uDCBF\",\"Jsercy\":\"\\u0408\",\"jsercy\":\"\\u0458\",\"Jukcy\":\"\\u0404\",\"jukcy\":\"\\u0454\",\"Kappa\":\"\\u039A\",\"kappa\":\"\\u03BA\",\"kappav\":\"\\u03F0\",\"Kcedil\":\"\\u0136\",\"kcedil\":\"\\u0137\",\"Kcy\":\"\\u041A\",\"kcy\":\"\\u043A\",\"Kfr\":\"\\uD835\\uDD0E\",\"kfr\":\"\\uD835\\uDD28\",\"kgreen\":\"\\u0138\",\"KHcy\":\"\\u0425\",\"khcy\":\"\\u0445\",\"KJcy\":\"\\u040C\",\"kjcy\":\"\\u045C\",\"Kopf\":\"\\uD835\\uDD42\",\"kopf\":\"\\uD835\\uDD5C\",\"Kscr\":\"\\uD835\\uDCA6\",\"kscr\":\"\\uD835\\uDCC0\",\"lAarr\":\"\\u21DA\",\"Lacute\":\"\\u0139\",\"lacute\":\"\\u013A\",\"laemptyv\":\"\\u29B4\",\"lagran\":\"\\u2112\",\"Lambda\":\"\\u039B\",\"lambda\":\"\\u03BB\",\"lang\":\"\\u27E8\",\"Lang\":\"\\u27EA\",\"langd\":\"\\u2991\",\"langle\":\"\\u27E8\",\"lap\":\"\\u2A85\",\"Laplacetrf\":\"\\u2112\",\"laquo\":\"\\u00AB\",\"larrb\":\"\\u21E4\",\"larrbfs\":\"\\u291F\",\"larr\":\"\\u2190\",\"Larr\":\"\\u219E\",\"lArr\":\"\\u21D0\",\"larrfs\":\"\\u291D\",\"larrhk\":\"\\u21A9\",\"larrlp\":\"\\u21AB\",\"larrpl\":\"\\u2939\",\"larrsim\":\"\\u2973\",\"larrtl\":\"\\u21A2\",\"latail\":\"\\u2919\",\"lAtail\":\"\\u291B\",\"lat\":\"\\u2AAB\",\"late\":\"\\u2AAD\",\"lates\":\"\\u2AAD\\uFE00\",\"lbarr\":\"\\u290C\",\"lBarr\":\"\\u290E\",\"lbbrk\":\"\\u2772\",\"lbrace\":\"{\",\"lbrack\":\"[\",\"lbrke\":\"\\u298B\",\"lbrksld\":\"\\u298F\",\"lbrkslu\":\"\\u298D\",\"Lcaron\":\"\\u013D\",\"lcaron\":\"\\u013E\",\"Lcedil\":\"\\u013B\",\"lcedil\":\"\\u013C\",\"lceil\":\"\\u2308\",\"lcub\":\"{\",\"Lcy\":\"\\u041B\",\"lcy\":\"\\u043B\",\"ldca\":\"\\u2936\",\"ldquo\":\"\\u201C\",\"ldquor\":\"\\u201E\",\"ldrdhar\":\"\\u2967\",\"ldrushar\":\"\\u294B\",\"ldsh\":\"\\u21B2\",\"le\":\"\\u2264\",\"lE\":\"\\u2266\",\"LeftAngleBracket\":\"\\u27E8\",\"LeftArrowBar\":\"\\u21E4\",\"leftarrow\":\"\\u2190\",\"LeftArrow\":\"\\u2190\",\"Leftarrow\":\"\\u21D0\",\"LeftArrowRightArrow\":\"\\u21C6\",\"leftarrowtail\":\"\\u21A2\",\"LeftCeiling\":\"\\u2308\",\"LeftDoubleBracket\":\"\\u27E6\",\"LeftDownTeeVector\":\"\\u2961\",\"LeftDownVectorBar\":\"\\u2959\",\"LeftDownVector\":\"\\u21C3\",\"LeftFloor\":\"\\u230A\",\"leftharpoondown\":\"\\u21BD\",\"leftharpoonup\":\"\\u21BC\",\"leftleftarrows\":\"\\u21C7\",\"leftrightarrow\":\"\\u2194\",\"LeftRightArrow\":\"\\u2194\",\"Leftrightarrow\":\"\\u21D4\",\"leftrightarrows\":\"\\u21C6\",\"leftrightharpoons\":\"\\u21CB\",\"leftrightsquigarrow\":\"\\u21AD\",\"LeftRightVector\":\"\\u294E\",\"LeftTeeArrow\":\"\\u21A4\",\"LeftTee\":\"\\u22A3\",\"LeftTeeVector\":\"\\u295A\",\"leftthreetimes\":\"\\u22CB\",\"LeftTriangleBar\":\"\\u29CF\",\"LeftTriangle\":\"\\u22B2\",\"LeftTriangleEqual\":\"\\u22B4\",\"LeftUpDownVector\":\"\\u2951\",\"LeftUpTeeVector\":\"\\u2960\",\"LeftUpVectorBar\":\"\\u2958\",\"LeftUpVector\":\"\\u21BF\",\"LeftVectorBar\":\"\\u2952\",\"LeftVector\":\"\\u21BC\",\"lEg\":\"\\u2A8B\",\"leg\":\"\\u22DA\",\"leq\":\"\\u2264\",\"leqq\":\"\\u2266\",\"leqslant\":\"\\u2A7D\",\"lescc\":\"\\u2AA8\",\"les\":\"\\u2A7D\",\"lesdot\":\"\\u2A7F\",\"lesdoto\":\"\\u2A81\",\"lesdotor\":\"\\u2A83\",\"lesg\":\"\\u22DA\\uFE00\",\"lesges\":\"\\u2A93\",\"lessapprox\":\"\\u2A85\",\"lessdot\":\"\\u22D6\",\"lesseqgtr\":\"\\u22DA\",\"lesseqqgtr\":\"\\u2A8B\",\"LessEqualGreater\":\"\\u22DA\",\"LessFullEqual\":\"\\u2266\",\"LessGreater\":\"\\u2276\",\"lessgtr\":\"\\u2276\",\"LessLess\":\"\\u2AA1\",\"lesssim\":\"\\u2272\",\"LessSlantEqual\":\"\\u2A7D\",\"LessTilde\":\"\\u2272\",\"lfisht\":\"\\u297C\",\"lfloor\":\"\\u230A\",\"Lfr\":\"\\uD835\\uDD0F\",\"lfr\":\"\\uD835\\uDD29\",\"lg\":\"\\u2276\",\"lgE\":\"\\u2A91\",\"lHar\":\"\\u2962\",\"lhard\":\"\\u21BD\",\"lharu\":\"\\u21BC\",\"lharul\":\"\\u296A\",\"lhblk\":\"\\u2584\",\"LJcy\":\"\\u0409\",\"ljcy\":\"\\u0459\",\"llarr\":\"\\u21C7\",\"ll\":\"\\u226A\",\"Ll\":\"\\u22D8\",\"llcorner\":\"\\u231E\",\"Lleftarrow\":\"\\u21DA\",\"llhard\":\"\\u296B\",\"lltri\":\"\\u25FA\",\"Lmidot\":\"\\u013F\",\"lmidot\":\"\\u0140\",\"lmoustache\":\"\\u23B0\",\"lmoust\":\"\\u23B0\",\"lnap\":\"\\u2A89\",\"lnapprox\":\"\\u2A89\",\"lne\":\"\\u2A87\",\"lnE\":\"\\u2268\",\"lneq\":\"\\u2A87\",\"lneqq\":\"\\u2268\",\"lnsim\":\"\\u22E6\",\"loang\":\"\\u27EC\",\"loarr\":\"\\u21FD\",\"lobrk\":\"\\u27E6\",\"longleftarrow\":\"\\u27F5\",\"LongLeftArrow\":\"\\u27F5\",\"Longleftarrow\":\"\\u27F8\",\"longleftrightarrow\":\"\\u27F7\",\"LongLeftRightArrow\":\"\\u27F7\",\"Longleftrightarrow\":\"\\u27FA\",\"longmapsto\":\"\\u27FC\",\"longrightarrow\":\"\\u27F6\",\"LongRightArrow\":\"\\u27F6\",\"Longrightarrow\":\"\\u27F9\",\"looparrowleft\":\"\\u21AB\",\"looparrowright\":\"\\u21AC\",\"lopar\":\"\\u2985\",\"Lopf\":\"\\uD835\\uDD43\",\"lopf\":\"\\uD835\\uDD5D\",\"loplus\":\"\\u2A2D\",\"lotimes\":\"\\u2A34\",\"lowast\":\"\\u2217\",\"lowbar\":\"_\",\"LowerLeftArrow\":\"\\u2199\",\"LowerRightArrow\":\"\\u2198\",\"loz\":\"\\u25CA\",\"lozenge\":\"\\u25CA\",\"lozf\":\"\\u29EB\",\"lpar\":\"(\",\"lparlt\":\"\\u2993\",\"lrarr\":\"\\u21C6\",\"lrcorner\":\"\\u231F\",\"lrhar\":\"\\u21CB\",\"lrhard\":\"\\u296D\",\"lrm\":\"\\u200E\",\"lrtri\":\"\\u22BF\",\"lsaquo\":\"\\u2039\",\"lscr\":\"\\uD835\\uDCC1\",\"Lscr\":\"\\u2112\",\"lsh\":\"\\u21B0\",\"Lsh\":\"\\u21B0\",\"lsim\":\"\\u2272\",\"lsime\":\"\\u2A8D\",\"lsimg\":\"\\u2A8F\",\"lsqb\":\"[\",\"lsquo\":\"\\u2018\",\"lsquor\":\"\\u201A\",\"Lstrok\":\"\\u0141\",\"lstrok\":\"\\u0142\",\"ltcc\":\"\\u2AA6\",\"ltcir\":\"\\u2A79\",\"lt\":\"<\",\"LT\":\"<\",\"Lt\":\"\\u226A\",\"ltdot\":\"\\u22D6\",\"lthree\":\"\\u22CB\",\"ltimes\":\"\\u22C9\",\"ltlarr\":\"\\u2976\",\"ltquest\":\"\\u2A7B\",\"ltri\":\"\\u25C3\",\"ltrie\":\"\\u22B4\",\"ltrif\":\"\\u25C2\",\"ltrPar\":\"\\u2996\",\"lurdshar\":\"\\u294A\",\"luruhar\":\"\\u2966\",\"lvertneqq\":\"\\u2268\\uFE00\",\"lvnE\":\"\\u2268\\uFE00\",\"macr\":\"\\u00AF\",\"male\":\"\\u2642\",\"malt\":\"\\u2720\",\"maltese\":\"\\u2720\",\"Map\":\"\\u2905\",\"map\":\"\\u21A6\",\"mapsto\":\"\\u21A6\",\"mapstodown\":\"\\u21A7\",\"mapstoleft\":\"\\u21A4\",\"mapstoup\":\"\\u21A5\",\"marker\":\"\\u25AE\",\"mcomma\":\"\\u2A29\",\"Mcy\":\"\\u041C\",\"mcy\":\"\\u043C\",\"mdash\":\"\\u2014\",\"mDDot\":\"\\u223A\",\"measuredangle\":\"\\u2221\",\"MediumSpace\":\"\\u205F\",\"Mellintrf\":\"\\u2133\",\"Mfr\":\"\\uD835\\uDD10\",\"mfr\":\"\\uD835\\uDD2A\",\"mho\":\"\\u2127\",\"micro\":\"\\u00B5\",\"midast\":\"*\",\"midcir\":\"\\u2AF0\",\"mid\":\"\\u2223\",\"middot\":\"\\u00B7\",\"minusb\":\"\\u229F\",\"minus\":\"\\u2212\",\"minusd\":\"\\u2238\",\"minusdu\":\"\\u2A2A\",\"MinusPlus\":\"\\u2213\",\"mlcp\":\"\\u2ADB\",\"mldr\":\"\\u2026\",\"mnplus\":\"\\u2213\",\"models\":\"\\u22A7\",\"Mopf\":\"\\uD835\\uDD44\",\"mopf\":\"\\uD835\\uDD5E\",\"mp\":\"\\u2213\",\"mscr\":\"\\uD835\\uDCC2\",\"Mscr\":\"\\u2133\",\"mstpos\":\"\\u223E\",\"Mu\":\"\\u039C\",\"mu\":\"\\u03BC\",\"multimap\":\"\\u22B8\",\"mumap\":\"\\u22B8\",\"nabla\":\"\\u2207\",\"Nacute\":\"\\u0143\",\"nacute\":\"\\u0144\",\"nang\":\"\\u2220\\u20D2\",\"nap\":\"\\u2249\",\"napE\":\"\\u2A70\\u0338\",\"napid\":\"\\u224B\\u0338\",\"napos\":\"\\u0149\",\"napprox\":\"\\u2249\",\"natural\":\"\\u266E\",\"naturals\":\"\\u2115\",\"natur\":\"\\u266E\",\"nbsp\":\"\\u00A0\",\"nbump\":\"\\u224E\\u0338\",\"nbumpe\":\"\\u224F\\u0338\",\"ncap\":\"\\u2A43\",\"Ncaron\":\"\\u0147\",\"ncaron\":\"\\u0148\",\"Ncedil\":\"\\u0145\",\"ncedil\":\"\\u0146\",\"ncong\":\"\\u2247\",\"ncongdot\":\"\\u2A6D\\u0338\",\"ncup\":\"\\u2A42\",\"Ncy\":\"\\u041D\",\"ncy\":\"\\u043D\",\"ndash\":\"\\u2013\",\"nearhk\":\"\\u2924\",\"nearr\":\"\\u2197\",\"neArr\":\"\\u21D7\",\"nearrow\":\"\\u2197\",\"ne\":\"\\u2260\",\"nedot\":\"\\u2250\\u0338\",\"NegativeMediumSpace\":\"\\u200B\",\"NegativeThickSpace\":\"\\u200B\",\"NegativeThinSpace\":\"\\u200B\",\"NegativeVeryThinSpace\":\"\\u200B\",\"nequiv\":\"\\u2262\",\"nesear\":\"\\u2928\",\"nesim\":\"\\u2242\\u0338\",\"NestedGreaterGreater\":\"\\u226B\",\"NestedLessLess\":\"\\u226A\",\"NewLine\":\"\\n\",\"nexist\":\"\\u2204\",\"nexists\":\"\\u2204\",\"Nfr\":\"\\uD835\\uDD11\",\"nfr\":\"\\uD835\\uDD2B\",\"ngE\":\"\\u2267\\u0338\",\"nge\":\"\\u2271\",\"ngeq\":\"\\u2271\",\"ngeqq\":\"\\u2267\\u0338\",\"ngeqslant\":\"\\u2A7E\\u0338\",\"nges\":\"\\u2A7E\\u0338\",\"nGg\":\"\\u22D9\\u0338\",\"ngsim\":\"\\u2275\",\"nGt\":\"\\u226B\\u20D2\",\"ngt\":\"\\u226F\",\"ngtr\":\"\\u226F\",\"nGtv\":\"\\u226B\\u0338\",\"nharr\":\"\\u21AE\",\"nhArr\":\"\\u21CE\",\"nhpar\":\"\\u2AF2\",\"ni\":\"\\u220B\",\"nis\":\"\\u22FC\",\"nisd\":\"\\u22FA\",\"niv\":\"\\u220B\",\"NJcy\":\"\\u040A\",\"njcy\":\"\\u045A\",\"nlarr\":\"\\u219A\",\"nlArr\":\"\\u21CD\",\"nldr\":\"\\u2025\",\"nlE\":\"\\u2266\\u0338\",\"nle\":\"\\u2270\",\"nleftarrow\":\"\\u219A\",\"nLeftarrow\":\"\\u21CD\",\"nleftrightarrow\":\"\\u21AE\",\"nLeftrightarrow\":\"\\u21CE\",\"nleq\":\"\\u2270\",\"nleqq\":\"\\u2266\\u0338\",\"nleqslant\":\"\\u2A7D\\u0338\",\"nles\":\"\\u2A7D\\u0338\",\"nless\":\"\\u226E\",\"nLl\":\"\\u22D8\\u0338\",\"nlsim\":\"\\u2274\",\"nLt\":\"\\u226A\\u20D2\",\"nlt\":\"\\u226E\",\"nltri\":\"\\u22EA\",\"nltrie\":\"\\u22EC\",\"nLtv\":\"\\u226A\\u0338\",\"nmid\":\"\\u2224\",\"NoBreak\":\"\\u2060\",\"NonBreakingSpace\":\"\\u00A0\",\"nopf\":\"\\uD835\\uDD5F\",\"Nopf\":\"\\u2115\",\"Not\":\"\\u2AEC\",\"not\":\"\\u00AC\",\"NotCongruent\":\"\\u2262\",\"NotCupCap\":\"\\u226D\",\"NotDoubleVerticalBar\":\"\\u2226\",\"NotElement\":\"\\u2209\",\"NotEqual\":\"\\u2260\",\"NotEqualTilde\":\"\\u2242\\u0338\",\"NotExists\":\"\\u2204\",\"NotGreater\":\"\\u226F\",\"NotGreaterEqual\":\"\\u2271\",\"NotGreaterFullEqual\":\"\\u2267\\u0338\",\"NotGreaterGreater\":\"\\u226B\\u0338\",\"NotGreaterLess\":\"\\u2279\",\"NotGreaterSlantEqual\":\"\\u2A7E\\u0338\",\"NotGreaterTilde\":\"\\u2275\",\"NotHumpDownHump\":\"\\u224E\\u0338\",\"NotHumpEqual\":\"\\u224F\\u0338\",\"notin\":\"\\u2209\",\"notindot\":\"\\u22F5\\u0338\",\"notinE\":\"\\u22F9\\u0338\",\"notinva\":\"\\u2209\",\"notinvb\":\"\\u22F7\",\"notinvc\":\"\\u22F6\",\"NotLeftTriangleBar\":\"\\u29CF\\u0338\",\"NotLeftTriangle\":\"\\u22EA\",\"NotLeftTriangleEqual\":\"\\u22EC\",\"NotLess\":\"\\u226E\",\"NotLessEqual\":\"\\u2270\",\"NotLessGreater\":\"\\u2278\",\"NotLessLess\":\"\\u226A\\u0338\",\"NotLessSlantEqual\":\"\\u2A7D\\u0338\",\"NotLessTilde\":\"\\u2274\",\"NotNestedGreaterGreater\":\"\\u2AA2\\u0338\",\"NotNestedLessLess\":\"\\u2AA1\\u0338\",\"notni\":\"\\u220C\",\"notniva\":\"\\u220C\",\"notnivb\":\"\\u22FE\",\"notnivc\":\"\\u22FD\",\"NotPrecedes\":\"\\u2280\",\"NotPrecedesEqual\":\"\\u2AAF\\u0338\",\"NotPrecedesSlantEqual\":\"\\u22E0\",\"NotReverseElement\":\"\\u220C\",\"NotRightTriangleBar\":\"\\u29D0\\u0338\",\"NotRightTriangle\":\"\\u22EB\",\"NotRightTriangleEqual\":\"\\u22ED\",\"NotSquareSubset\":\"\\u228F\\u0338\",\"NotSquareSubsetEqual\":\"\\u22E2\",\"NotSquareSuperset\":\"\\u2290\\u0338\",\"NotSquareSupersetEqual\":\"\\u22E3\",\"NotSubset\":\"\\u2282\\u20D2\",\"NotSubsetEqual\":\"\\u2288\",\"NotSucceeds\":\"\\u2281\",\"NotSucceedsEqual\":\"\\u2AB0\\u0338\",\"NotSucceedsSlantEqual\":\"\\u22E1\",\"NotSucceedsTilde\":\"\\u227F\\u0338\",\"NotSuperset\":\"\\u2283\\u20D2\",\"NotSupersetEqual\":\"\\u2289\",\"NotTilde\":\"\\u2241\",\"NotTildeEqual\":\"\\u2244\",\"NotTildeFullEqual\":\"\\u2247\",\"NotTildeTilde\":\"\\u2249\",\"NotVerticalBar\":\"\\u2224\",\"nparallel\":\"\\u2226\",\"npar\":\"\\u2226\",\"nparsl\":\"\\u2AFD\\u20E5\",\"npart\":\"\\u2202\\u0338\",\"npolint\":\"\\u2A14\",\"npr\":\"\\u2280\",\"nprcue\":\"\\u22E0\",\"nprec\":\"\\u2280\",\"npreceq\":\"\\u2AAF\\u0338\",\"npre\":\"\\u2AAF\\u0338\",\"nrarrc\":\"\\u2933\\u0338\",\"nrarr\":\"\\u219B\",\"nrArr\":\"\\u21CF\",\"nrarrw\":\"\\u219D\\u0338\",\"nrightarrow\":\"\\u219B\",\"nRightarrow\":\"\\u21CF\",\"nrtri\":\"\\u22EB\",\"nrtrie\":\"\\u22ED\",\"nsc\":\"\\u2281\",\"nsccue\":\"\\u22E1\",\"nsce\":\"\\u2AB0\\u0338\",\"Nscr\":\"\\uD835\\uDCA9\",\"nscr\":\"\\uD835\\uDCC3\",\"nshortmid\":\"\\u2224\",\"nshortparallel\":\"\\u2226\",\"nsim\":\"\\u2241\",\"nsime\":\"\\u2244\",\"nsimeq\":\"\\u2244\",\"nsmid\":\"\\u2224\",\"nspar\":\"\\u2226\",\"nsqsube\":\"\\u22E2\",\"nsqsupe\":\"\\u22E3\",\"nsub\":\"\\u2284\",\"nsubE\":\"\\u2AC5\\u0338\",\"nsube\":\"\\u2288\",\"nsubset\":\"\\u2282\\u20D2\",\"nsubseteq\":\"\\u2288\",\"nsubseteqq\":\"\\u2AC5\\u0338\",\"nsucc\":\"\\u2281\",\"nsucceq\":\"\\u2AB0\\u0338\",\"nsup\":\"\\u2285\",\"nsupE\":\"\\u2AC6\\u0338\",\"nsupe\":\"\\u2289\",\"nsupset\":\"\\u2283\\u20D2\",\"nsupseteq\":\"\\u2289\",\"nsupseteqq\":\"\\u2AC6\\u0338\",\"ntgl\":\"\\u2279\",\"Ntilde\":\"\\u00D1\",\"ntilde\":\"\\u00F1\",\"ntlg\":\"\\u2278\",\"ntriangleleft\":\"\\u22EA\",\"ntrianglelefteq\":\"\\u22EC\",\"ntriangleright\":\"\\u22EB\",\"ntrianglerighteq\":\"\\u22ED\",\"Nu\":\"\\u039D\",\"nu\":\"\\u03BD\",\"num\":\"#\",\"numero\":\"\\u2116\",\"numsp\":\"\\u2007\",\"nvap\":\"\\u224D\\u20D2\",\"nvdash\":\"\\u22AC\",\"nvDash\":\"\\u22AD\",\"nVdash\":\"\\u22AE\",\"nVDash\":\"\\u22AF\",\"nvge\":\"\\u2265\\u20D2\",\"nvgt\":\">\\u20D2\",\"nvHarr\":\"\\u2904\",\"nvinfin\":\"\\u29DE\",\"nvlArr\":\"\\u2902\",\"nvle\":\"\\u2264\\u20D2\",\"nvlt\":\"<\\u20D2\",\"nvltrie\":\"\\u22B4\\u20D2\",\"nvrArr\":\"\\u2903\",\"nvrtrie\":\"\\u22B5\\u20D2\",\"nvsim\":\"\\u223C\\u20D2\",\"nwarhk\":\"\\u2923\",\"nwarr\":\"\\u2196\",\"nwArr\":\"\\u21D6\",\"nwarrow\":\"\\u2196\",\"nwnear\":\"\\u2927\",\"Oacute\":\"\\u00D3\",\"oacute\":\"\\u00F3\",\"oast\":\"\\u229B\",\"Ocirc\":\"\\u00D4\",\"ocirc\":\"\\u00F4\",\"ocir\":\"\\u229A\",\"Ocy\":\"\\u041E\",\"ocy\":\"\\u043E\",\"odash\":\"\\u229D\",\"Odblac\":\"\\u0150\",\"odblac\":\"\\u0151\",\"odiv\":\"\\u2A38\",\"odot\":\"\\u2299\",\"odsold\":\"\\u29BC\",\"OElig\":\"\\u0152\",\"oelig\":\"\\u0153\",\"ofcir\":\"\\u29BF\",\"Ofr\":\"\\uD835\\uDD12\",\"ofr\":\"\\uD835\\uDD2C\",\"ogon\":\"\\u02DB\",\"Ograve\":\"\\u00D2\",\"ograve\":\"\\u00F2\",\"ogt\":\"\\u29C1\",\"ohbar\":\"\\u29B5\",\"ohm\":\"\\u03A9\",\"oint\":\"\\u222E\",\"olarr\":\"\\u21BA\",\"olcir\":\"\\u29BE\",\"olcross\":\"\\u29BB\",\"oline\":\"\\u203E\",\"olt\":\"\\u29C0\",\"Omacr\":\"\\u014C\",\"omacr\":\"\\u014D\",\"Omega\":\"\\u03A9\",\"omega\":\"\\u03C9\",\"Omicron\":\"\\u039F\",\"omicron\":\"\\u03BF\",\"omid\":\"\\u29B6\",\"ominus\":\"\\u2296\",\"Oopf\":\"\\uD835\\uDD46\",\"oopf\":\"\\uD835\\uDD60\",\"opar\":\"\\u29B7\",\"OpenCurlyDoubleQuote\":\"\\u201C\",\"OpenCurlyQuote\":\"\\u2018\",\"operp\":\"\\u29B9\",\"oplus\":\"\\u2295\",\"orarr\":\"\\u21BB\",\"Or\":\"\\u2A54\",\"or\":\"\\u2228\",\"ord\":\"\\u2A5D\",\"order\":\"\\u2134\",\"orderof\":\"\\u2134\",\"ordf\":\"\\u00AA\",\"ordm\":\"\\u00BA\",\"origof\":\"\\u22B6\",\"oror\":\"\\u2A56\",\"orslope\":\"\\u2A57\",\"orv\":\"\\u2A5B\",\"oS\":\"\\u24C8\",\"Oscr\":\"\\uD835\\uDCAA\",\"oscr\":\"\\u2134\",\"Oslash\":\"\\u00D8\",\"oslash\":\"\\u00F8\",\"osol\":\"\\u2298\",\"Otilde\":\"\\u00D5\",\"otilde\":\"\\u00F5\",\"otimesas\":\"\\u2A36\",\"Otimes\":\"\\u2A37\",\"otimes\":\"\\u2297\",\"Ouml\":\"\\u00D6\",\"ouml\":\"\\u00F6\",\"ovbar\":\"\\u233D\",\"OverBar\":\"\\u203E\",\"OverBrace\":\"\\u23DE\",\"OverBracket\":\"\\u23B4\",\"OverParenthesis\":\"\\u23DC\",\"para\":\"\\u00B6\",\"parallel\":\"\\u2225\",\"par\":\"\\u2225\",\"parsim\":\"\\u2AF3\",\"parsl\":\"\\u2AFD\",\"part\":\"\\u2202\",\"PartialD\":\"\\u2202\",\"Pcy\":\"\\u041F\",\"pcy\":\"\\u043F\",\"percnt\":\"%\",\"period\":\".\",\"permil\":\"\\u2030\",\"perp\":\"\\u22A5\",\"pertenk\":\"\\u2031\",\"Pfr\":\"\\uD835\\uDD13\",\"pfr\":\"\\uD835\\uDD2D\",\"Phi\":\"\\u03A6\",\"phi\":\"\\u03C6\",\"phiv\":\"\\u03D5\",\"phmmat\":\"\\u2133\",\"phone\":\"\\u260E\",\"Pi\":\"\\u03A0\",\"pi\":\"\\u03C0\",\"pitchfork\":\"\\u22D4\",\"piv\":\"\\u03D6\",\"planck\":\"\\u210F\",\"planckh\":\"\\u210E\",\"plankv\":\"\\u210F\",\"plusacir\":\"\\u2A23\",\"plusb\":\"\\u229E\",\"pluscir\":\"\\u2A22\",\"plus\":\"+\",\"plusdo\":\"\\u2214\",\"plusdu\":\"\\u2A25\",\"pluse\":\"\\u2A72\",\"PlusMinus\":\"\\u00B1\",\"plusmn\":\"\\u00B1\",\"plussim\":\"\\u2A26\",\"plustwo\":\"\\u2A27\",\"pm\":\"\\u00B1\",\"Poincareplane\":\"\\u210C\",\"pointint\":\"\\u2A15\",\"popf\":\"\\uD835\\uDD61\",\"Popf\":\"\\u2119\",\"pound\":\"\\u00A3\",\"prap\":\"\\u2AB7\",\"Pr\":\"\\u2ABB\",\"pr\":\"\\u227A\",\"prcue\":\"\\u227C\",\"precapprox\":\"\\u2AB7\",\"prec\":\"\\u227A\",\"preccurlyeq\":\"\\u227C\",\"Precedes\":\"\\u227A\",\"PrecedesEqual\":\"\\u2AAF\",\"PrecedesSlantEqual\":\"\\u227C\",\"PrecedesTilde\":\"\\u227E\",\"preceq\":\"\\u2AAF\",\"precnapprox\":\"\\u2AB9\",\"precneqq\":\"\\u2AB5\",\"precnsim\":\"\\u22E8\",\"pre\":\"\\u2AAF\",\"prE\":\"\\u2AB3\",\"precsim\":\"\\u227E\",\"prime\":\"\\u2032\",\"Prime\":\"\\u2033\",\"primes\":\"\\u2119\",\"prnap\":\"\\u2AB9\",\"prnE\":\"\\u2AB5\",\"prnsim\":\"\\u22E8\",\"prod\":\"\\u220F\",\"Product\":\"\\u220F\",\"profalar\":\"\\u232E\",\"profline\":\"\\u2312\",\"profsurf\":\"\\u2313\",\"prop\":\"\\u221D\",\"Proportional\":\"\\u221D\",\"Proportion\":\"\\u2237\",\"propto\":\"\\u221D\",\"prsim\":\"\\u227E\",\"prurel\":\"\\u22B0\",\"Pscr\":\"\\uD835\\uDCAB\",\"pscr\":\"\\uD835\\uDCC5\",\"Psi\":\"\\u03A8\",\"psi\":\"\\u03C8\",\"puncsp\":\"\\u2008\",\"Qfr\":\"\\uD835\\uDD14\",\"qfr\":\"\\uD835\\uDD2E\",\"qint\":\"\\u2A0C\",\"qopf\":\"\\uD835\\uDD62\",\"Qopf\":\"\\u211A\",\"qprime\":\"\\u2057\",\"Qscr\":\"\\uD835\\uDCAC\",\"qscr\":\"\\uD835\\uDCC6\",\"quaternions\":\"\\u210D\",\"quatint\":\"\\u2A16\",\"quest\":\"?\",\"questeq\":\"\\u225F\",\"quot\":\"\\\"\",\"QUOT\":\"\\\"\",\"rAarr\":\"\\u21DB\",\"race\":\"\\u223D\\u0331\",\"Racute\":\"\\u0154\",\"racute\":\"\\u0155\",\"radic\":\"\\u221A\",\"raemptyv\":\"\\u29B3\",\"rang\":\"\\u27E9\",\"Rang\":\"\\u27EB\",\"rangd\":\"\\u2992\",\"range\":\"\\u29A5\",\"rangle\":\"\\u27E9\",\"raquo\":\"\\u00BB\",\"rarrap\":\"\\u2975\",\"rarrb\":\"\\u21E5\",\"rarrbfs\":\"\\u2920\",\"rarrc\":\"\\u2933\",\"rarr\":\"\\u2192\",\"Rarr\":\"\\u21A0\",\"rArr\":\"\\u21D2\",\"rarrfs\":\"\\u291E\",\"rarrhk\":\"\\u21AA\",\"rarrlp\":\"\\u21AC\",\"rarrpl\":\"\\u2945\",\"rarrsim\":\"\\u2974\",\"Rarrtl\":\"\\u2916\",\"rarrtl\":\"\\u21A3\",\"rarrw\":\"\\u219D\",\"ratail\":\"\\u291A\",\"rAtail\":\"\\u291C\",\"ratio\":\"\\u2236\",\"rationals\":\"\\u211A\",\"rbarr\":\"\\u290D\",\"rBarr\":\"\\u290F\",\"RBarr\":\"\\u2910\",\"rbbrk\":\"\\u2773\",\"rbrace\":\"}\",\"rbrack\":\"]\",\"rbrke\":\"\\u298C\",\"rbrksld\":\"\\u298E\",\"rbrkslu\":\"\\u2990\",\"Rcaron\":\"\\u0158\",\"rcaron\":\"\\u0159\",\"Rcedil\":\"\\u0156\",\"rcedil\":\"\\u0157\",\"rceil\":\"\\u2309\",\"rcub\":\"}\",\"Rcy\":\"\\u0420\",\"rcy\":\"\\u0440\",\"rdca\":\"\\u2937\",\"rdldhar\":\"\\u2969\",\"rdquo\":\"\\u201D\",\"rdquor\":\"\\u201D\",\"rdsh\":\"\\u21B3\",\"real\":\"\\u211C\",\"realine\":\"\\u211B\",\"realpart\":\"\\u211C\",\"reals\":\"\\u211D\",\"Re\":\"\\u211C\",\"rect\":\"\\u25AD\",\"reg\":\"\\u00AE\",\"REG\":\"\\u00AE\",\"ReverseElement\":\"\\u220B\",\"ReverseEquilibrium\":\"\\u21CB\",\"ReverseUpEquilibrium\":\"\\u296F\",\"rfisht\":\"\\u297D\",\"rfloor\":\"\\u230B\",\"rfr\":\"\\uD835\\uDD2F\",\"Rfr\":\"\\u211C\",\"rHar\":\"\\u2964\",\"rhard\":\"\\u21C1\",\"rharu\":\"\\u21C0\",\"rharul\":\"\\u296C\",\"Rho\":\"\\u03A1\",\"rho\":\"\\u03C1\",\"rhov\":\"\\u03F1\",\"RightAngleBracket\":\"\\u27E9\",\"RightArrowBar\":\"\\u21E5\",\"rightarrow\":\"\\u2192\",\"RightArrow\":\"\\u2192\",\"Rightarrow\":\"\\u21D2\",\"RightArrowLeftArrow\":\"\\u21C4\",\"rightarrowtail\":\"\\u21A3\",\"RightCeiling\":\"\\u2309\",\"RightDoubleBracket\":\"\\u27E7\",\"RightDownTeeVector\":\"\\u295D\",\"RightDownVectorBar\":\"\\u2955\",\"RightDownVector\":\"\\u21C2\",\"RightFloor\":\"\\u230B\",\"rightharpoondown\":\"\\u21C1\",\"rightharpoonup\":\"\\u21C0\",\"rightleftarrows\":\"\\u21C4\",\"rightleftharpoons\":\"\\u21CC\",\"rightrightarrows\":\"\\u21C9\",\"rightsquigarrow\":\"\\u219D\",\"RightTeeArrow\":\"\\u21A6\",\"RightTee\":\"\\u22A2\",\"RightTeeVector\":\"\\u295B\",\"rightthreetimes\":\"\\u22CC\",\"RightTriangleBar\":\"\\u29D0\",\"RightTriangle\":\"\\u22B3\",\"RightTriangleEqual\":\"\\u22B5\",\"RightUpDownVector\":\"\\u294F\",\"RightUpTeeVector\":\"\\u295C\",\"RightUpVectorBar\":\"\\u2954\",\"RightUpVector\":\"\\u21BE\",\"RightVectorBar\":\"\\u2953\",\"RightVector\":\"\\u21C0\",\"ring\":\"\\u02DA\",\"risingdotseq\":\"\\u2253\",\"rlarr\":\"\\u21C4\",\"rlhar\":\"\\u21CC\",\"rlm\":\"\\u200F\",\"rmoustache\":\"\\u23B1\",\"rmoust\":\"\\u23B1\",\"rnmid\":\"\\u2AEE\",\"roang\":\"\\u27ED\",\"roarr\":\"\\u21FE\",\"robrk\":\"\\u27E7\",\"ropar\":\"\\u2986\",\"ropf\":\"\\uD835\\uDD63\",\"Ropf\":\"\\u211D\",\"roplus\":\"\\u2A2E\",\"rotimes\":\"\\u2A35\",\"RoundImplies\":\"\\u2970\",\"rpar\":\")\",\"rpargt\":\"\\u2994\",\"rppolint\":\"\\u2A12\",\"rrarr\":\"\\u21C9\",\"Rrightarrow\":\"\\u21DB\",\"rsaquo\":\"\\u203A\",\"rscr\":\"\\uD835\\uDCC7\",\"Rscr\":\"\\u211B\",\"rsh\":\"\\u21B1\",\"Rsh\":\"\\u21B1\",\"rsqb\":\"]\",\"rsquo\":\"\\u2019\",\"rsquor\":\"\\u2019\",\"rthree\":\"\\u22CC\",\"rtimes\":\"\\u22CA\",\"rtri\":\"\\u25B9\",\"rtrie\":\"\\u22B5\",\"rtrif\":\"\\u25B8\",\"rtriltri\":\"\\u29CE\",\"RuleDelayed\":\"\\u29F4\",\"ruluhar\":\"\\u2968\",\"rx\":\"\\u211E\",\"Sacute\":\"\\u015A\",\"sacute\":\"\\u015B\",\"sbquo\":\"\\u201A\",\"scap\":\"\\u2AB8\",\"Scaron\":\"\\u0160\",\"scaron\":\"\\u0161\",\"Sc\":\"\\u2ABC\",\"sc\":\"\\u227B\",\"sccue\":\"\\u227D\",\"sce\":\"\\u2AB0\",\"scE\":\"\\u2AB4\",\"Scedil\":\"\\u015E\",\"scedil\":\"\\u015F\",\"Scirc\":\"\\u015C\",\"scirc\":\"\\u015D\",\"scnap\":\"\\u2ABA\",\"scnE\":\"\\u2AB6\",\"scnsim\":\"\\u22E9\",\"scpolint\":\"\\u2A13\",\"scsim\":\"\\u227F\",\"Scy\":\"\\u0421\",\"scy\":\"\\u0441\",\"sdotb\":\"\\u22A1\",\"sdot\":\"\\u22C5\",\"sdote\":\"\\u2A66\",\"searhk\":\"\\u2925\",\"searr\":\"\\u2198\",\"seArr\":\"\\u21D8\",\"searrow\":\"\\u2198\",\"sect\":\"\\u00A7\",\"semi\":\";\",\"seswar\":\"\\u2929\",\"setminus\":\"\\u2216\",\"setmn\":\"\\u2216\",\"sext\":\"\\u2736\",\"Sfr\":\"\\uD835\\uDD16\",\"sfr\":\"\\uD835\\uDD30\",\"sfrown\":\"\\u2322\",\"sharp\":\"\\u266F\",\"SHCHcy\":\"\\u0429\",\"shchcy\":\"\\u0449\",\"SHcy\":\"\\u0428\",\"shcy\":\"\\u0448\",\"ShortDownArrow\":\"\\u2193\",\"ShortLeftArrow\":\"\\u2190\",\"shortmid\":\"\\u2223\",\"shortparallel\":\"\\u2225\",\"ShortRightArrow\":\"\\u2192\",\"ShortUpArrow\":\"\\u2191\",\"shy\":\"\\u00AD\",\"Sigma\":\"\\u03A3\",\"sigma\":\"\\u03C3\",\"sigmaf\":\"\\u03C2\",\"sigmav\":\"\\u03C2\",\"sim\":\"\\u223C\",\"simdot\":\"\\u2A6A\",\"sime\":\"\\u2243\",\"simeq\":\"\\u2243\",\"simg\":\"\\u2A9E\",\"simgE\":\"\\u2AA0\",\"siml\":\"\\u2A9D\",\"simlE\":\"\\u2A9F\",\"simne\":\"\\u2246\",\"simplus\":\"\\u2A24\",\"simrarr\":\"\\u2972\",\"slarr\":\"\\u2190\",\"SmallCircle\":\"\\u2218\",\"smallsetminus\":\"\\u2216\",\"smashp\":\"\\u2A33\",\"smeparsl\":\"\\u29E4\",\"smid\":\"\\u2223\",\"smile\":\"\\u2323\",\"smt\":\"\\u2AAA\",\"smte\":\"\\u2AAC\",\"smtes\":\"\\u2AAC\\uFE00\",\"SOFTcy\":\"\\u042C\",\"softcy\":\"\\u044C\",\"solbar\":\"\\u233F\",\"solb\":\"\\u29C4\",\"sol\":\"/\",\"Sopf\":\"\\uD835\\uDD4A\",\"sopf\":\"\\uD835\\uDD64\",\"spades\":\"\\u2660\",\"spadesuit\":\"\\u2660\",\"spar\":\"\\u2225\",\"sqcap\":\"\\u2293\",\"sqcaps\":\"\\u2293\\uFE00\",\"sqcup\":\"\\u2294\",\"sqcups\":\"\\u2294\\uFE00\",\"Sqrt\":\"\\u221A\",\"sqsub\":\"\\u228F\",\"sqsube\":\"\\u2291\",\"sqsubset\":\"\\u228F\",\"sqsubseteq\":\"\\u2291\",\"sqsup\":\"\\u2290\",\"sqsupe\":\"\\u2292\",\"sqsupset\":\"\\u2290\",\"sqsupseteq\":\"\\u2292\",\"square\":\"\\u25A1\",\"Square\":\"\\u25A1\",\"SquareIntersection\":\"\\u2293\",\"SquareSubset\":\"\\u228F\",\"SquareSubsetEqual\":\"\\u2291\",\"SquareSuperset\":\"\\u2290\",\"SquareSupersetEqual\":\"\\u2292\",\"SquareUnion\":\"\\u2294\",\"squarf\":\"\\u25AA\",\"squ\":\"\\u25A1\",\"squf\":\"\\u25AA\",\"srarr\":\"\\u2192\",\"Sscr\":\"\\uD835\\uDCAE\",\"sscr\":\"\\uD835\\uDCC8\",\"ssetmn\":\"\\u2216\",\"ssmile\":\"\\u2323\",\"sstarf\":\"\\u22C6\",\"Star\":\"\\u22C6\",\"star\":\"\\u2606\",\"starf\":\"\\u2605\",\"straightepsilon\":\"\\u03F5\",\"straightphi\":\"\\u03D5\",\"strns\":\"\\u00AF\",\"sub\":\"\\u2282\",\"Sub\":\"\\u22D0\",\"subdot\":\"\\u2ABD\",\"subE\":\"\\u2AC5\",\"sube\":\"\\u2286\",\"subedot\":\"\\u2AC3\",\"submult\":\"\\u2AC1\",\"subnE\":\"\\u2ACB\",\"subne\":\"\\u228A\",\"subplus\":\"\\u2ABF\",\"subrarr\":\"\\u2979\",\"subset\":\"\\u2282\",\"Subset\":\"\\u22D0\",\"subseteq\":\"\\u2286\",\"subseteqq\":\"\\u2AC5\",\"SubsetEqual\":\"\\u2286\",\"subsetneq\":\"\\u228A\",\"subsetneqq\":\"\\u2ACB\",\"subsim\":\"\\u2AC7\",\"subsub\":\"\\u2AD5\",\"subsup\":\"\\u2AD3\",\"succapprox\":\"\\u2AB8\",\"succ\":\"\\u227B\",\"succcurlyeq\":\"\\u227D\",\"Succeeds\":\"\\u227B\",\"SucceedsEqual\":\"\\u2AB0\",\"SucceedsSlantEqual\":\"\\u227D\",\"SucceedsTilde\":\"\\u227F\",\"succeq\":\"\\u2AB0\",\"succnapprox\":\"\\u2ABA\",\"succneqq\":\"\\u2AB6\",\"succnsim\":\"\\u22E9\",\"succsim\":\"\\u227F\",\"SuchThat\":\"\\u220B\",\"sum\":\"\\u2211\",\"Sum\":\"\\u2211\",\"sung\":\"\\u266A\",\"sup1\":\"\\u00B9\",\"sup2\":\"\\u00B2\",\"sup3\":\"\\u00B3\",\"sup\":\"\\u2283\",\"Sup\":\"\\u22D1\",\"supdot\":\"\\u2ABE\",\"supdsub\":\"\\u2AD8\",\"supE\":\"\\u2AC6\",\"supe\":\"\\u2287\",\"supedot\":\"\\u2AC4\",\"Superset\":\"\\u2283\",\"SupersetEqual\":\"\\u2287\",\"suphsol\":\"\\u27C9\",\"suphsub\":\"\\u2AD7\",\"suplarr\":\"\\u297B\",\"supmult\":\"\\u2AC2\",\"supnE\":\"\\u2ACC\",\"supne\":\"\\u228B\",\"supplus\":\"\\u2AC0\",\"supset\":\"\\u2283\",\"Supset\":\"\\u22D1\",\"supseteq\":\"\\u2287\",\"supseteqq\":\"\\u2AC6\",\"supsetneq\":\"\\u228B\",\"supsetneqq\":\"\\u2ACC\",\"supsim\":\"\\u2AC8\",\"supsub\":\"\\u2AD4\",\"supsup\":\"\\u2AD6\",\"swarhk\":\"\\u2926\",\"swarr\":\"\\u2199\",\"swArr\":\"\\u21D9\",\"swarrow\":\"\\u2199\",\"swnwar\":\"\\u292A\",\"szlig\":\"\\u00DF\",\"Tab\":\"\\t\",\"target\":\"\\u2316\",\"Tau\":\"\\u03A4\",\"tau\":\"\\u03C4\",\"tbrk\":\"\\u23B4\",\"Tcaron\":\"\\u0164\",\"tcaron\":\"\\u0165\",\"Tcedil\":\"\\u0162\",\"tcedil\":\"\\u0163\",\"Tcy\":\"\\u0422\",\"tcy\":\"\\u0442\",\"tdot\":\"\\u20DB\",\"telrec\":\"\\u2315\",\"Tfr\":\"\\uD835\\uDD17\",\"tfr\":\"\\uD835\\uDD31\",\"there4\":\"\\u2234\",\"therefore\":\"\\u2234\",\"Therefore\":\"\\u2234\",\"Theta\":\"\\u0398\",\"theta\":\"\\u03B8\",\"thetasym\":\"\\u03D1\",\"thetav\":\"\\u03D1\",\"thickapprox\":\"\\u2248\",\"thicksim\":\"\\u223C\",\"ThickSpace\":\"\\u205F\\u200A\",\"ThinSpace\":\"\\u2009\",\"thinsp\":\"\\u2009\",\"thkap\":\"\\u2248\",\"thksim\":\"\\u223C\",\"THORN\":\"\\u00DE\",\"thorn\":\"\\u00FE\",\"tilde\":\"\\u02DC\",\"Tilde\":\"\\u223C\",\"TildeEqual\":\"\\u2243\",\"TildeFullEqual\":\"\\u2245\",\"TildeTilde\":\"\\u2248\",\"timesbar\":\"\\u2A31\",\"timesb\":\"\\u22A0\",\"times\":\"\\u00D7\",\"timesd\":\"\\u2A30\",\"tint\":\"\\u222D\",\"toea\":\"\\u2928\",\"topbot\":\"\\u2336\",\"topcir\":\"\\u2AF1\",\"top\":\"\\u22A4\",\"Topf\":\"\\uD835\\uDD4B\",\"topf\":\"\\uD835\\uDD65\",\"topfork\":\"\\u2ADA\",\"tosa\":\"\\u2929\",\"tprime\":\"\\u2034\",\"trade\":\"\\u2122\",\"TRADE\":\"\\u2122\",\"triangle\":\"\\u25B5\",\"triangledown\":\"\\u25BF\",\"triangleleft\":\"\\u25C3\",\"trianglelefteq\":\"\\u22B4\",\"triangleq\":\"\\u225C\",\"triangleright\":\"\\u25B9\",\"trianglerighteq\":\"\\u22B5\",\"tridot\":\"\\u25EC\",\"trie\":\"\\u225C\",\"triminus\":\"\\u2A3A\",\"TripleDot\":\"\\u20DB\",\"triplus\":\"\\u2A39\",\"trisb\":\"\\u29CD\",\"tritime\":\"\\u2A3B\",\"trpezium\":\"\\u23E2\",\"Tscr\":\"\\uD835\\uDCAF\",\"tscr\":\"\\uD835\\uDCC9\",\"TScy\":\"\\u0426\",\"tscy\":\"\\u0446\",\"TSHcy\":\"\\u040B\",\"tshcy\":\"\\u045B\",\"Tstrok\":\"\\u0166\",\"tstrok\":\"\\u0167\",\"twixt\":\"\\u226C\",\"twoheadleftarrow\":\"\\u219E\",\"twoheadrightarrow\":\"\\u21A0\",\"Uacute\":\"\\u00DA\",\"uacute\":\"\\u00FA\",\"uarr\":\"\\u2191\",\"Uarr\":\"\\u219F\",\"uArr\":\"\\u21D1\",\"Uarrocir\":\"\\u2949\",\"Ubrcy\":\"\\u040E\",\"ubrcy\":\"\\u045E\",\"Ubreve\":\"\\u016C\",\"ubreve\":\"\\u016D\",\"Ucirc\":\"\\u00DB\",\"ucirc\":\"\\u00FB\",\"Ucy\":\"\\u0423\",\"ucy\":\"\\u0443\",\"udarr\":\"\\u21C5\",\"Udblac\":\"\\u0170\",\"udblac\":\"\\u0171\",\"udhar\":\"\\u296E\",\"ufisht\":\"\\u297E\",\"Ufr\":\"\\uD835\\uDD18\",\"ufr\":\"\\uD835\\uDD32\",\"Ugrave\":\"\\u00D9\",\"ugrave\":\"\\u00F9\",\"uHar\":\"\\u2963\",\"uharl\":\"\\u21BF\",\"uharr\":\"\\u21BE\",\"uhblk\":\"\\u2580\",\"ulcorn\":\"\\u231C\",\"ulcorner\":\"\\u231C\",\"ulcrop\":\"\\u230F\",\"ultri\":\"\\u25F8\",\"Umacr\":\"\\u016A\",\"umacr\":\"\\u016B\",\"uml\":\"\\u00A8\",\"UnderBar\":\"_\",\"UnderBrace\":\"\\u23DF\",\"UnderBracket\":\"\\u23B5\",\"UnderParenthesis\":\"\\u23DD\",\"Union\":\"\\u22C3\",\"UnionPlus\":\"\\u228E\",\"Uogon\":\"\\u0172\",\"uogon\":\"\\u0173\",\"Uopf\":\"\\uD835\\uDD4C\",\"uopf\":\"\\uD835\\uDD66\",\"UpArrowBar\":\"\\u2912\",\"uparrow\":\"\\u2191\",\"UpArrow\":\"\\u2191\",\"Uparrow\":\"\\u21D1\",\"UpArrowDownArrow\":\"\\u21C5\",\"updownarrow\":\"\\u2195\",\"UpDownArrow\":\"\\u2195\",\"Updownarrow\":\"\\u21D5\",\"UpEquilibrium\":\"\\u296E\",\"upharpoonleft\":\"\\u21BF\",\"upharpoonright\":\"\\u21BE\",\"uplus\":\"\\u228E\",\"UpperLeftArrow\":\"\\u2196\",\"UpperRightArrow\":\"\\u2197\",\"upsi\":\"\\u03C5\",\"Upsi\":\"\\u03D2\",\"upsih\":\"\\u03D2\",\"Upsilon\":\"\\u03A5\",\"upsilon\":\"\\u03C5\",\"UpTeeArrow\":\"\\u21A5\",\"UpTee\":\"\\u22A5\",\"upuparrows\":\"\\u21C8\",\"urcorn\":\"\\u231D\",\"urcorner\":\"\\u231D\",\"urcrop\":\"\\u230E\",\"Uring\":\"\\u016E\",\"uring\":\"\\u016F\",\"urtri\":\"\\u25F9\",\"Uscr\":\"\\uD835\\uDCB0\",\"uscr\":\"\\uD835\\uDCCA\",\"utdot\":\"\\u22F0\",\"Utilde\":\"\\u0168\",\"utilde\":\"\\u0169\",\"utri\":\"\\u25B5\",\"utrif\":\"\\u25B4\",\"uuarr\":\"\\u21C8\",\"Uuml\":\"\\u00DC\",\"uuml\":\"\\u00FC\",\"uwangle\":\"\\u29A7\",\"vangrt\":\"\\u299C\",\"varepsilon\":\"\\u03F5\",\"varkappa\":\"\\u03F0\",\"varnothing\":\"\\u2205\",\"varphi\":\"\\u03D5\",\"varpi\":\"\\u03D6\",\"varpropto\":\"\\u221D\",\"varr\":\"\\u2195\",\"vArr\":\"\\u21D5\",\"varrho\":\"\\u03F1\",\"varsigma\":\"\\u03C2\",\"varsubsetneq\":\"\\u228A\\uFE00\",\"varsubsetneqq\":\"\\u2ACB\\uFE00\",\"varsupsetneq\":\"\\u228B\\uFE00\",\"varsupsetneqq\":\"\\u2ACC\\uFE00\",\"vartheta\":\"\\u03D1\",\"vartriangleleft\":\"\\u22B2\",\"vartriangleright\":\"\\u22B3\",\"vBar\":\"\\u2AE8\",\"Vbar\":\"\\u2AEB\",\"vBarv\":\"\\u2AE9\",\"Vcy\":\"\\u0412\",\"vcy\":\"\\u0432\",\"vdash\":\"\\u22A2\",\"vDash\":\"\\u22A8\",\"Vdash\":\"\\u22A9\",\"VDash\":\"\\u22AB\",\"Vdashl\":\"\\u2AE6\",\"veebar\":\"\\u22BB\",\"vee\":\"\\u2228\",\"Vee\":\"\\u22C1\",\"veeeq\":\"\\u225A\",\"vellip\":\"\\u22EE\",\"verbar\":\"|\",\"Verbar\":\"\\u2016\",\"vert\":\"|\",\"Vert\":\"\\u2016\",\"VerticalBar\":\"\\u2223\",\"VerticalLine\":\"|\",\"VerticalSeparator\":\"\\u2758\",\"VerticalTilde\":\"\\u2240\",\"VeryThinSpace\":\"\\u200A\",\"Vfr\":\"\\uD835\\uDD19\",\"vfr\":\"\\uD835\\uDD33\",\"vltri\":\"\\u22B2\",\"vnsub\":\"\\u2282\\u20D2\",\"vnsup\":\"\\u2283\\u20D2\",\"Vopf\":\"\\uD835\\uDD4D\",\"vopf\":\"\\uD835\\uDD67\",\"vprop\":\"\\u221D\",\"vrtri\":\"\\u22B3\",\"Vscr\":\"\\uD835\\uDCB1\",\"vscr\":\"\\uD835\\uDCCB\",\"vsubnE\":\"\\u2ACB\\uFE00\",\"vsubne\":\"\\u228A\\uFE00\",\"vsupnE\":\"\\u2ACC\\uFE00\",\"vsupne\":\"\\u228B\\uFE00\",\"Vvdash\":\"\\u22AA\",\"vzigzag\":\"\\u299A\",\"Wcirc\":\"\\u0174\",\"wcirc\":\"\\u0175\",\"wedbar\":\"\\u2A5F\",\"wedge\":\"\\u2227\",\"Wedge\":\"\\u22C0\",\"wedgeq\":\"\\u2259\",\"weierp\":\"\\u2118\",\"Wfr\":\"\\uD835\\uDD1A\",\"wfr\":\"\\uD835\\uDD34\",\"Wopf\":\"\\uD835\\uDD4E\",\"wopf\":\"\\uD835\\uDD68\",\"wp\":\"\\u2118\",\"wr\":\"\\u2240\",\"wreath\":\"\\u2240\",\"Wscr\":\"\\uD835\\uDCB2\",\"wscr\":\"\\uD835\\uDCCC\",\"xcap\":\"\\u22C2\",\"xcirc\":\"\\u25EF\",\"xcup\":\"\\u22C3\",\"xdtri\":\"\\u25BD\",\"Xfr\":\"\\uD835\\uDD1B\",\"xfr\":\"\\uD835\\uDD35\",\"xharr\":\"\\u27F7\",\"xhArr\":\"\\u27FA\",\"Xi\":\"\\u039E\",\"xi\":\"\\u03BE\",\"xlarr\":\"\\u27F5\",\"xlArr\":\"\\u27F8\",\"xmap\":\"\\u27FC\",\"xnis\":\"\\u22FB\",\"xodot\":\"\\u2A00\",\"Xopf\":\"\\uD835\\uDD4F\",\"xopf\":\"\\uD835\\uDD69\",\"xoplus\":\"\\u2A01\",\"xotime\":\"\\u2A02\",\"xrarr\":\"\\u27F6\",\"xrArr\":\"\\u27F9\",\"Xscr\":\"\\uD835\\uDCB3\",\"xscr\":\"\\uD835\\uDCCD\",\"xsqcup\":\"\\u2A06\",\"xuplus\":\"\\u2A04\",\"xutri\":\"\\u25B3\",\"xvee\":\"\\u22C1\",\"xwedge\":\"\\u22C0\",\"Yacute\":\"\\u00DD\",\"yacute\":\"\\u00FD\",\"YAcy\":\"\\u042F\",\"yacy\":\"\\u044F\",\"Ycirc\":\"\\u0176\",\"ycirc\":\"\\u0177\",\"Ycy\":\"\\u042B\",\"ycy\":\"\\u044B\",\"yen\":\"\\u00A5\",\"Yfr\":\"\\uD835\\uDD1C\",\"yfr\":\"\\uD835\\uDD36\",\"YIcy\":\"\\u0407\",\"yicy\":\"\\u0457\",\"Yopf\":\"\\uD835\\uDD50\",\"yopf\":\"\\uD835\\uDD6A\",\"Yscr\":\"\\uD835\\uDCB4\",\"yscr\":\"\\uD835\\uDCCE\",\"YUcy\":\"\\u042E\",\"yucy\":\"\\u044E\",\"yuml\":\"\\u00FF\",\"Yuml\":\"\\u0178\",\"Zacute\":\"\\u0179\",\"zacute\":\"\\u017A\",\"Zcaron\":\"\\u017D\",\"zcaron\":\"\\u017E\",\"Zcy\":\"\\u0417\",\"zcy\":\"\\u0437\",\"Zdot\":\"\\u017B\",\"zdot\":\"\\u017C\",\"zeetrf\":\"\\u2128\",\"ZeroWidthSpace\":\"\\u200B\",\"Zeta\":\"\\u0396\",\"zeta\":\"\\u03B6\",\"zfr\":\"\\uD835\\uDD37\",\"Zfr\":\"\\u2128\",\"ZHcy\":\"\\u0416\",\"zhcy\":\"\\u0436\",\"zigrarr\":\"\\u21DD\",\"zopf\":\"\\uD835\\uDD6B\",\"Zopf\":\"\\u2124\",\"Zscr\":\"\\uD835\\uDCB5\",\"zscr\":\"\\uD835\\uDCCF\",\"zwj\":\"\\u200D\",\"zwnj\":\"\\u200C\"}\n},{}],53:[function(require,module,exports){\n'use strict';\n\n\n////////////////////////////////////////////////////////////////////////////////\n// Helpers\n\n// Merge objects\n//\nfunction assign(obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  sources.forEach(function (source) {\n    if (!source) { return; }\n\n    Object.keys(source).forEach(function (key) {\n      obj[key] = source[key];\n    });\n  });\n\n  return obj;\n}\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\nfunction isString(obj) { return _class(obj) === '[object String]'; }\nfunction isObject(obj) { return _class(obj) === '[object Object]'; }\nfunction isRegExp(obj) { return _class(obj) === '[object RegExp]'; }\nfunction isFunction(obj) { return _class(obj) === '[object Function]'; }\n\n\nfunction escapeRE(str) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&'); }\n\n////////////////////////////////////////////////////////////////////////////////\n\n\nvar defaultOptions = {\n  fuzzyLink: true,\n  fuzzyEmail: true,\n  fuzzyIP: false\n};\n\n\nfunction isOptionsObj(obj) {\n  return Object.keys(obj || {}).reduce(function (acc, k) {\n    return acc || defaultOptions.hasOwnProperty(k);\n  }, false);\n}\n\n\nvar defaultSchemas = {\n  'http:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.http) {\n        // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.http =  new RegExp(\n          '^\\\\/\\\\/' + self.re.src_auth + self.re.src_host_port_strict + self.re.src_path, 'i'\n        );\n      }\n      if (self.re.http.test(tail)) {\n        return tail.match(self.re.http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'https:':  'http:',\n  'ftp:':    'http:',\n  '//':      {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.no_http) {\n      // compile lazily, because \"host\"-containing variables can change on tlds update.\n        self.re.no_http =  new RegExp(\n          '^' +\n          self.re.src_auth +\n          // Don't allow single-level domains, because of false positives like '//test'\n          // with code comments\n          '(?:localhost|(?:(?:' + self.re.src_domain + ')\\\\.)+' + self.re.src_domain_root + ')' +\n          self.re.src_port +\n          self.re.src_host_terminator +\n          self.re.src_path,\n\n          'i'\n        );\n      }\n\n      if (self.re.no_http.test(tail)) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') { return 0; }\n        if (pos >= 3 && text[pos - 3] === '/') { return 0; }\n        return tail.match(self.re.no_http)[0].length;\n      }\n      return 0;\n    }\n  },\n  'mailto:': {\n    validate: function (text, pos, self) {\n      var tail = text.slice(pos);\n\n      if (!self.re.mailto) {\n        self.re.mailto =  new RegExp(\n          '^' + self.re.src_email_name + '@' + self.re.src_host_strict, 'i'\n        );\n      }\n      if (self.re.mailto.test(tail)) {\n        return tail.match(self.re.mailto)[0].length;\n      }\n      return 0;\n    }\n  }\n};\n\n/*eslint-disable max-len*/\n\n// RE pattern for 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nvar tlds_2ch_src_re = 'a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]';\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nvar tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'.split('|');\n\n/*eslint-enable max-len*/\n\n////////////////////////////////////////////////////////////////////////////////\n\nfunction resetScanCache(self) {\n  self.__index__ = -1;\n  self.__text_cache__   = '';\n}\n\nfunction createValidator(re) {\n  return function (text, pos) {\n    var tail = text.slice(pos);\n\n    if (re.test(tail)) {\n      return tail.match(re)[0].length;\n    }\n    return 0;\n  };\n}\n\nfunction createNormalizer() {\n  return function (match, self) {\n    self.normalize(match);\n  };\n}\n\n// Schemas compiler. Build regexps.\n//\nfunction compile(self) {\n\n  // Load & clone RE patterns.\n  var re = self.re = require('./lib/re')(self.__opts__);\n\n  // Define dynamic patterns\n  var tlds = self.__tlds__.slice();\n\n  self.onCompile();\n\n  if (!self.__tlds_replaced__) {\n    tlds.push(tlds_2ch_src_re);\n  }\n  tlds.push(re.src_xn);\n\n  re.src_tlds = tlds.join('|');\n\n  function untpl(tpl) { return tpl.replace('%TLDS%', re.src_tlds); }\n\n  re.email_fuzzy      = RegExp(untpl(re.tpl_email_fuzzy), 'i');\n  re.link_fuzzy       = RegExp(untpl(re.tpl_link_fuzzy), 'i');\n  re.link_no_ip_fuzzy = RegExp(untpl(re.tpl_link_no_ip_fuzzy), 'i');\n  re.host_fuzzy_test  = RegExp(untpl(re.tpl_host_fuzzy_test), 'i');\n\n  //\n  // Compile each schema\n  //\n\n  var aliases = [];\n\n  self.__compiled__ = {}; // Reset compiled data\n\n  function schemaError(name, val) {\n    throw new Error('(LinkifyIt) Invalid schema \"' + name + '\": ' + val);\n  }\n\n  Object.keys(self.__schemas__).forEach(function (name) {\n    var val = self.__schemas__[name];\n\n    // skip disabled methods\n    if (val === null) { return; }\n\n    var compiled = { validate: null, link: null };\n\n    self.__compiled__[name] = compiled;\n\n    if (isObject(val)) {\n      if (isRegExp(val.validate)) {\n        compiled.validate = createValidator(val.validate);\n      } else if (isFunction(val.validate)) {\n        compiled.validate = val.validate;\n      } else {\n        schemaError(name, val);\n      }\n\n      if (isFunction(val.normalize)) {\n        compiled.normalize = val.normalize;\n      } else if (!val.normalize) {\n        compiled.normalize = createNormalizer();\n      } else {\n        schemaError(name, val);\n      }\n\n      return;\n    }\n\n    if (isString(val)) {\n      aliases.push(name);\n      return;\n    }\n\n    schemaError(name, val);\n  });\n\n  //\n  // Compile postponed aliases\n  //\n\n  aliases.forEach(function (alias) {\n    if (!self.__compiled__[self.__schemas__[alias]]) {\n      // Silently fail on missed schemas to avoid errons on disable.\n      // schemaError(alias, self.__schemas__[alias]);\n      return;\n    }\n\n    self.__compiled__[alias].validate =\n      self.__compiled__[self.__schemas__[alias]].validate;\n    self.__compiled__[alias].normalize =\n      self.__compiled__[self.__schemas__[alias]].normalize;\n  });\n\n  //\n  // Fake record for guessed links\n  //\n  self.__compiled__[''] = { validate: null, normalize: createNormalizer() };\n\n  //\n  // Build schema condition\n  //\n  var slist = Object.keys(self.__compiled__)\n                      .filter(function (name) {\n                        // Filter disabled & fake schemas\n                        return name.length > 0 && self.__compiled__[name];\n                      })\n                      .map(escapeRE)\n                      .join('|');\n  // (?!_) cause 1.5x slowdown\n  self.re.schema_test   = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'i');\n  self.re.schema_search = RegExp('(^|(?!_)(?:[><\\uff5c]|' + re.src_ZPCc + '))(' + slist + ')', 'ig');\n\n  self.re.pretest       = RegExp(\n                            '(' + self.re.schema_test.source + ')|' +\n                            '(' + self.re.host_fuzzy_test.source + ')|' +\n                            '@',\n                            'i');\n\n  //\n  // Cleanup\n  //\n\n  resetScanCache(self);\n}\n\n/**\n * class Match\n *\n * Match result. Single element of array, returned by [[LinkifyIt#match]]\n **/\nfunction Match(self, shift) {\n  var start = self.__index__,\n      end   = self.__last_index__,\n      text  = self.__text_cache__.slice(start, end);\n\n  /**\n   * Match#schema -> String\n   *\n   * Prefix (protocol) for matched string.\n   **/\n  this.schema    = self.__schema__.toLowerCase();\n  /**\n   * Match#index -> Number\n   *\n   * First position of matched string.\n   **/\n  this.index     = start + shift;\n  /**\n   * Match#lastIndex -> Number\n   *\n   * Next position after matched string.\n   **/\n  this.lastIndex = end + shift;\n  /**\n   * Match#raw -> String\n   *\n   * Matched string.\n   **/\n  this.raw       = text;\n  /**\n   * Match#text -> String\n   *\n   * Notmalized text of matched string.\n   **/\n  this.text      = text;\n  /**\n   * Match#url -> String\n   *\n   * Normalized url of matched string.\n   **/\n  this.url       = text;\n}\n\nfunction createMatch(self, shift) {\n  var match = new Match(self, shift);\n\n  self.__compiled__[match.schema].normalize(match, self);\n\n  return match;\n}\n\n\n/**\n * class LinkifyIt\n **/\n\n/**\n * new LinkifyIt(schemas, options)\n * - schemas (Object): Optional. Additional schemas to validate (prefix/validator)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Creates new linkifier instance with optional additional schemas.\n * Can be called without `new` keyword for convenience.\n *\n * By default understands:\n *\n * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n * - \"fuzzy\" links and emails (example.com, foo@bar.com).\n *\n * `schemas` is an object, where each key/value describes protocol/rule:\n *\n * - __key__ - link prefix (usually, protocol name with `:` at the end, `skype:`\n *   for example). `linkify-it` makes shure that prefix is not preceeded with\n *   alphanumeric char and symbols. Only whitespaces and punctuation allowed.\n * - __value__ - rule to check tail after link prefix\n *   - _String_ - just alias to existing rule\n *   - _Object_\n *     - _validate_ - validator function (should return matched length on success),\n *       or `RegExp`.\n *     - _normalize_ - optional function to normalize text & url of matched result\n *       (for example, for @twitter mentions).\n *\n * `options`:\n *\n * - __fuzzyLink__ - recognige URL-s without `http(s):` prefix. Default `true`.\n * - __fuzzyIP__ - allow IPs in fuzzy links above. Can conflict with some texts\n *   like version numbers. Default `false`.\n * - __fuzzyEmail__ - recognize emails without `mailto:` prefix.\n *\n **/\nfunction LinkifyIt(schemas, options) {\n  if (!(this instanceof LinkifyIt)) {\n    return new LinkifyIt(schemas, options);\n  }\n\n  if (!options) {\n    if (isOptionsObj(schemas)) {\n      options = schemas;\n      schemas = {};\n    }\n  }\n\n  this.__opts__           = assign({}, defaultOptions, options);\n\n  // Cache last tested result. Used to skip repeating steps on next `match` call.\n  this.__index__          = -1;\n  this.__last_index__     = -1; // Next scan position\n  this.__schema__         = '';\n  this.__text_cache__     = '';\n\n  this.__schemas__        = assign({}, defaultSchemas, schemas);\n  this.__compiled__       = {};\n\n  this.__tlds__           = tlds_default;\n  this.__tlds_replaced__  = false;\n\n  this.re = {};\n\n  compile(this);\n}\n\n\n/** chainable\n * LinkifyIt#add(schema, definition)\n * - schema (String): rule name (fixed pattern prefix)\n * - definition (String|RegExp|Object): schema definition\n *\n * Add new rule definition. See constructor description for details.\n **/\nLinkifyIt.prototype.add = function add(schema, definition) {\n  this.__schemas__[schema] = definition;\n  compile(this);\n  return this;\n};\n\n\n/** chainable\n * LinkifyIt#set(options)\n * - options (Object): { fuzzyLink|fuzzyEmail|fuzzyIP: true|false }\n *\n * Set recognition options for links without schema.\n **/\nLinkifyIt.prototype.set = function set(options) {\n  this.__opts__ = assign(this.__opts__, options);\n  return this;\n};\n\n\n/**\n * LinkifyIt#test(text) -> Boolean\n *\n * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n **/\nLinkifyIt.prototype.test = function test(text) {\n  // Reset scan cache\n  this.__text_cache__ = text;\n  this.__index__      = -1;\n\n  if (!text.length) { return false; }\n\n  var m, ml, me, len, shift, next, re, tld_pos, at_pos;\n\n  // try to scan for link with schema - that's the most simple rule\n  if (this.re.schema_test.test(text)) {\n    re = this.re.schema_search;\n    re.lastIndex = 0;\n    while ((m = re.exec(text)) !== null) {\n      len = this.testSchemaAt(text, m[2], re.lastIndex);\n      if (len) {\n        this.__schema__     = m[2];\n        this.__index__      = m.index + m[1].length;\n        this.__last_index__ = m.index + m[0].length + len;\n        break;\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyLink && this.__compiled__['http:']) {\n    // guess schemaless links\n    tld_pos = text.search(this.re.host_fuzzy_test);\n    if (tld_pos >= 0) {\n      // if tld is located after found link - no need to check fuzzy pattern\n      if (this.__index__ < 0 || tld_pos < this.__index__) {\n        if ((ml = text.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null) {\n\n          shift = ml.index + ml[1].length;\n\n          if (this.__index__ < 0 || shift < this.__index__) {\n            this.__schema__     = '';\n            this.__index__      = shift;\n            this.__last_index__ = ml.index + ml[0].length;\n          }\n        }\n      }\n    }\n  }\n\n  if (this.__opts__.fuzzyEmail && this.__compiled__['mailto:']) {\n    // guess schemaless emails\n    at_pos = text.indexOf('@');\n    if (at_pos >= 0) {\n      // We can't skip this check, because this cases are possible:\n      // 192.168.1.1@gmail.com, my.in@example.com\n      if ((me = text.match(this.re.email_fuzzy)) !== null) {\n\n        shift = me.index + me[1].length;\n        next  = me.index + me[0].length;\n\n        if (this.__index__ < 0 || shift < this.__index__ ||\n            (shift === this.__index__ && next > this.__last_index__)) {\n          this.__schema__     = 'mailto:';\n          this.__index__      = shift;\n          this.__last_index__ = next;\n        }\n      }\n    }\n  }\n\n  return this.__index__ >= 0;\n};\n\n\n/**\n * LinkifyIt#pretest(text) -> Boolean\n *\n * Very quick check, that can give false positives. Returns true if link MAY BE\n * can exists. Can be used for speed optimization, when you need to check that\n * link NOT exists.\n **/\nLinkifyIt.prototype.pretest = function pretest(text) {\n  return this.re.pretest.test(text);\n};\n\n\n/**\n * LinkifyIt#testSchemaAt(text, name, position) -> Number\n * - text (String): text to scan\n * - name (String): rule (schema) name\n * - position (Number): text offset to check from\n *\n * Similar to [[LinkifyIt#test]] but checks only specific protocol tail exactly\n * at given position. Returns length of found pattern (0 on fail).\n **/\nLinkifyIt.prototype.testSchemaAt = function testSchemaAt(text, schema, pos) {\n  // If not supported schema check requested - terminate\n  if (!this.__compiled__[schema.toLowerCase()]) {\n    return 0;\n  }\n  return this.__compiled__[schema.toLowerCase()].validate(text, pos, this);\n};\n\n\n/**\n * LinkifyIt#match(text) -> Array|null\n *\n * Returns array of found link descriptions or `null` on fail. We strongly\n * recommend to use [[LinkifyIt#test]] first, for best speed.\n *\n * ##### Result match description\n *\n * - __schema__ - link schema, can be empty for fuzzy links, or `//` for\n *   protocol-neutral  links.\n * - __index__ - offset of matched text\n * - __lastIndex__ - index of next char after mathch end\n * - __raw__ - matched text\n * - __text__ - normalized text\n * - __url__ - link, generated from matched text\n **/\nLinkifyIt.prototype.match = function match(text) {\n  var shift = 0, result = [];\n\n  // Try to take previous element from cache, if .test() called before\n  if (this.__index__ >= 0 && this.__text_cache__ === text) {\n    result.push(createMatch(this, shift));\n    shift = this.__last_index__;\n  }\n\n  // Cut head if cache was used\n  var tail = shift ? text.slice(shift) : text;\n\n  // Scan string until end reached\n  while (this.test(tail)) {\n    result.push(createMatch(this, shift));\n\n    tail = tail.slice(this.__last_index__);\n    shift += this.__last_index__;\n  }\n\n  if (result.length) {\n    return result;\n  }\n\n  return null;\n};\n\n\n/** chainable\n * LinkifyIt#tlds(list [, keepOld]) -> this\n * - list (Array): list of tlds\n * - keepOld (Boolean): merge with current list if `true` (`false` by default)\n *\n * Load (or merge) new tlds list. Those are user for fuzzy links (without prefix)\n * to avoid false positives. By default this algorythm used:\n *\n * - hostname with any 2-letter root zones are ok.\n * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n *   are ok.\n * - encoded (`xn--...`) root zones are ok.\n *\n * If list is replaced, then exact match for 2-chars root zones will be checked.\n **/\nLinkifyIt.prototype.tlds = function tlds(list, keepOld) {\n  list = Array.isArray(list) ? list : [ list ];\n\n  if (!keepOld) {\n    this.__tlds__ = list.slice();\n    this.__tlds_replaced__ = true;\n    compile(this);\n    return this;\n  }\n\n  this.__tlds__ = this.__tlds__.concat(list)\n                                  .sort()\n                                  .filter(function (el, idx, arr) {\n                                    return el !== arr[idx - 1];\n                                  })\n                                  .reverse();\n\n  compile(this);\n  return this;\n};\n\n/**\n * LinkifyIt#normalize(match)\n *\n * Default normalizer (if schema does not define it's own).\n **/\nLinkifyIt.prototype.normalize = function normalize(match) {\n\n  // Do minimal possible changes by default. Need to collect feedback prior\n  // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n  if (!match.schema) { match.url = 'http://' + match.url; }\n\n  if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n    match.url = 'mailto:' + match.url;\n  }\n};\n\n\n/**\n * LinkifyIt#onCompile()\n *\n * Override to modify basic RegExp-s.\n **/\nLinkifyIt.prototype.onCompile = function onCompile() {\n};\n\n\nmodule.exports = LinkifyIt;\n\n},{\"./lib/re\":54}],54:[function(require,module,exports){\n'use strict';\n\n\nmodule.exports = function (opts) {\n  var re = {};\n\n  // Use direct extract instead of `regenerate` to reduse browserified size\n  re.src_Any = require('uc.micro/properties/Any/regex').source;\n  re.src_Cc  = require('uc.micro/categories/Cc/regex').source;\n  re.src_Z   = require('uc.micro/categories/Z/regex').source;\n  re.src_P   = require('uc.micro/categories/P/regex').source;\n\n  // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n  re.src_ZPCc = [ re.src_Z, re.src_P, re.src_Cc ].join('|');\n\n  // \\p{\\Z\\Cc} (white spaces + control)\n  re.src_ZCc = [ re.src_Z, re.src_Cc ].join('|');\n\n  // Experimental. List of chars, completely prohibited in links\n  // because can separate it from other part of text\n  var text_separators = '[><\\uff5c]';\n\n  // All possible word characters (everything without punctuation, spaces & controls)\n  // Defined via punctuation & spaces to save space\n  // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n  re.src_pseudo_letter       = '(?:(?!' + text_separators + '|' + re.src_ZPCc + ')' + re.src_Any + ')';\n  // The same as abothe but without [0-9]\n  // var src_pseudo_letter_non_d = '(?:(?![0-9]|' + src_ZPCc + ')' + src_Any + ')';\n\n  ////////////////////////////////////////////////////////////////////////////////\n\n  re.src_ip4 =\n\n    '(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)';\n\n  // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n  re.src_auth    = '(?:(?:(?!' + re.src_ZCc + '|[@/\\\\[\\\\]()]).)+@)?';\n\n  re.src_port =\n\n    '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?';\n\n  re.src_host_terminator =\n\n    '(?=$|' + text_separators + '|' + re.src_ZPCc + ')(?!-|_|:\\\\d|\\\\.-|\\\\.(?!$|' + re.src_ZPCc + '))';\n\n  re.src_path =\n\n    '(?:' +\n      '[/?#]' +\n        '(?:' +\n          '(?!' + re.src_ZCc + '|' + text_separators + '|[()[\\\\]{}.,\"\\'?!\\\\-]).|' +\n          '\\\\[(?:(?!' + re.src_ZCc + '|\\\\]).)*\\\\]|' +\n          '\\\\((?:(?!' + re.src_ZCc + '|[)]).)*\\\\)|' +\n          '\\\\{(?:(?!' + re.src_ZCc + '|[}]).)*\\\\}|' +\n          '\\\\\"(?:(?!' + re.src_ZCc + '|[\"]).)+\\\\\"|' +\n          \"\\\\'(?:(?!\" + re.src_ZCc + \"|[']).)+\\\\'|\" +\n          \"\\\\'(?=\" + re.src_pseudo_letter + '|[-]).|' +  // allow `I'm_king` if no pair found\n          '\\\\.{2,3}[a-zA-Z0-9%/]|' + // github has ... in commit range links. Restrict to\n                                     // - english\n                                     // - percent-encoded\n                                     // - parts of file path\n                                     // until more examples found.\n          '\\\\.(?!' + re.src_ZCc + '|[.]).|' +\n          (opts && opts['---'] ?\n            '\\\\-(?!--(?:[^-]|$))(?:-*)|' // `---` => long dash, terminate\n          :\n            '\\\\-+|'\n          ) +\n          '\\\\,(?!' + re.src_ZCc + ').|' +      // allow `,,,` in paths\n          '\\\\!(?!' + re.src_ZCc + '|[!]).|' +\n          '\\\\?(?!' + re.src_ZCc + '|[?]).' +\n        ')+' +\n      '|\\\\/' +\n    ')?';\n\n  re.src_email_name =\n\n    '[\\\\-;:&=\\\\+\\\\$,\\\\\"\\\\.a-zA-Z0-9_]+';\n\n  re.src_xn =\n\n    'xn--[a-z0-9\\\\-]{1,59}';\n\n  // More to read about domain names\n  // http://serverfault.com/questions/638260/\n\n  re.src_domain_root =\n\n    // Allow letters & digits (http://test1)\n    '(?:' +\n      re.src_xn +\n      '|' +\n      re.src_pseudo_letter + '{1,63}' +\n    ')';\n\n  re.src_domain =\n\n    '(?:' +\n      re.src_xn +\n      '|' +\n      '(?:' + re.src_pseudo_letter + ')' +\n      '|' +\n      // don't allow `--` in domain names, because:\n      // - that can conflict with markdown &mdash; / &ndash;\n      // - nobody use those anyway\n      '(?:' + re.src_pseudo_letter + '(?:-(?!-)|' + re.src_pseudo_letter + '){0,61}' + re.src_pseudo_letter + ')' +\n    ')';\n\n  re.src_host =\n\n    '(?:' +\n    // Don't need IP check, because digits are already allowed in normal domain names\n    //   src_ip4 +\n    // '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)*' + re.src_domain/*_root*/ + ')' +\n    ')';\n\n  re.tpl_host_fuzzy =\n\n    '(?:' +\n      re.src_ip4 +\n    '|' +\n      '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))' +\n    ')';\n\n  re.tpl_host_no_ip_fuzzy =\n\n    '(?:(?:(?:' + re.src_domain + ')\\\\.)+(?:%TLDS%))';\n\n  re.src_host_strict =\n\n    re.src_host + re.src_host_terminator;\n\n  re.tpl_host_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_host_terminator;\n\n  re.src_host_port_strict =\n\n    re.src_host + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_fuzzy_strict =\n\n    re.tpl_host_fuzzy + re.src_port + re.src_host_terminator;\n\n  re.tpl_host_port_no_ip_fuzzy_strict =\n\n    re.tpl_host_no_ip_fuzzy + re.src_port + re.src_host_terminator;\n\n\n  ////////////////////////////////////////////////////////////////////////////////\n  // Main rules\n\n  // Rude test fuzzy links by host, for quick deny\n  re.tpl_host_fuzzy_test =\n\n    'localhost|www\\\\.|\\\\.\\\\d{1,3}\\\\.|(?:\\\\.(?:%TLDS%)(?:' + re.src_ZPCc + '|>|$))';\n\n  re.tpl_email_fuzzy =\n\n      '(^|' + text_separators + '|\\\\(|' + re.src_ZCc + ')(' + re.src_email_name + '@' + re.tpl_host_fuzzy_strict + ')';\n\n  re.tpl_link_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_fuzzy_strict + re.src_path + ')';\n\n  re.tpl_link_no_ip_fuzzy =\n      // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n      // but can start with > (markdown blockquote)\n      '(^|(?![.:/\\\\-_@])(?:[$+<=>^`|\\uff5c]|' + re.src_ZPCc + '))' +\n      '((?![$+<=>^`|\\uff5c])' + re.tpl_host_port_no_ip_fuzzy_strict + re.src_path + ')';\n\n  return re;\n};\n\n},{\"uc.micro/categories/Cc/regex\":61,\"uc.micro/categories/P/regex\":63,\"uc.micro/categories/Z/regex\":64,\"uc.micro/properties/Any/regex\":66}],55:[function(require,module,exports){\n\n'use strict';\n\n\n/* eslint-disable no-bitwise */\n\nvar decodeCache = {};\n\nfunction getDecodeCache(exclude) {\n  var i, ch, cache = decodeCache[exclude];\n  if (cache) { return cache; }\n\n  cache = decodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n    cache.push(ch);\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    ch = exclude.charCodeAt(i);\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2);\n  }\n\n  return cache;\n}\n\n\n// Decode percent-encoded string.\n//\nfunction decode(string, exclude) {\n  var cache;\n\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars;\n  }\n\n  cache = getDecodeCache(exclude);\n\n  return string.replace(/(%[a-f0-9]{2})+/gi, function(seq) {\n    var i, l, b1, b2, b3, b4, chr,\n        result = '';\n\n    for (i = 0, l = seq.length; i < l; i += 3) {\n      b1 = parseInt(seq.slice(i + 1, i + 3), 16);\n\n      if (b1 < 0x80) {\n        result += cache[b1];\n        continue;\n      }\n\n      if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n        // 110xxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n\n        if ((b2 & 0xC0) === 0x80) {\n          chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F);\n\n          if (chr < 0x80) {\n            result += '\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 3;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n        // 1110xxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F);\n\n          if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n            result += '\\ufffd\\ufffd\\ufffd';\n          } else {\n            result += String.fromCharCode(chr);\n          }\n\n          i += 6;\n          continue;\n        }\n      }\n\n      if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n        // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n        b2 = parseInt(seq.slice(i + 4, i + 6), 16);\n        b3 = parseInt(seq.slice(i + 7, i + 9), 16);\n        b4 = parseInt(seq.slice(i + 10, i + 12), 16);\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F);\n\n          if (chr < 0x10000 || chr > 0x10FFFF) {\n            result += '\\ufffd\\ufffd\\ufffd\\ufffd';\n          } else {\n            chr -= 0x10000;\n            result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF));\n          }\n\n          i += 9;\n          continue;\n        }\n      }\n\n      result += '\\ufffd';\n    }\n\n    return result;\n  });\n}\n\n\ndecode.defaultChars   = ';/?:@&=+$,#';\ndecode.componentChars = '';\n\n\nmodule.exports = decode;\n\n},{}],56:[function(require,module,exports){\n\n'use strict';\n\n\nvar encodeCache = {};\n\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache(exclude) {\n  var i, ch, cache = encodeCache[exclude];\n  if (cache) { return cache; }\n\n  cache = encodeCache[exclude] = [];\n\n  for (i = 0; i < 128; i++) {\n    ch = String.fromCharCode(i);\n\n    if (/^[0-9a-z]$/i.test(ch)) {\n      // always allow unencoded alphanumeric characters\n      cache.push(ch);\n    } else {\n      cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2));\n    }\n  }\n\n  for (i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i];\n  }\n\n  return cache;\n}\n\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n//  - string       - string to encode\n//  - exclude      - list of characters to ignore (in addition to a-zA-Z0-9)\n//  - keepEscaped  - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode(string, exclude, keepEscaped) {\n  var i, l, code, nextCode, cache,\n      result = '';\n\n  if (typeof exclude !== 'string') {\n    // encode(string, keepEscaped)\n    keepEscaped  = exclude;\n    exclude = encode.defaultChars;\n  }\n\n  if (typeof keepEscaped === 'undefined') {\n    keepEscaped = true;\n  }\n\n  cache = getEncodeCache(exclude);\n\n  for (i = 0, l = string.length; i < l; i++) {\n    code = string.charCodeAt(i);\n\n    if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n      if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n        result += string.slice(i, i + 3);\n        i += 2;\n        continue;\n      }\n    }\n\n    if (code < 128) {\n      result += cache[code];\n      continue;\n    }\n\n    if (code >= 0xD800 && code <= 0xDFFF) {\n      if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n        nextCode = string.charCodeAt(i + 1);\n        if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n          result += encodeURIComponent(string[i] + string[i + 1]);\n          i++;\n          continue;\n        }\n      }\n      result += '%EF%BF%BD';\n      continue;\n    }\n\n    result += encodeURIComponent(string[i]);\n  }\n\n  return result;\n}\n\nencode.defaultChars   = \";/?:@&=+$,-_.!~*'()#\";\nencode.componentChars = \"-_.!~*'()\";\n\n\nmodule.exports = encode;\n\n},{}],57:[function(require,module,exports){\n\n'use strict';\n\n\nmodule.exports = function format(url) {\n  var result = '';\n\n  result += url.protocol || '';\n  result += url.slashes ? '//' : '';\n  result += url.auth ? url.auth + '@' : '';\n\n  if (url.hostname && url.hostname.indexOf(':') !== -1) {\n    // ipv6 address\n    result += '[' + url.hostname + ']';\n  } else {\n    result += url.hostname || '';\n  }\n\n  result += url.port ? ':' + url.port : '';\n  result += url.pathname || '';\n  result += url.search || '';\n  result += url.hash || '';\n\n  return result;\n};\n\n},{}],58:[function(require,module,exports){\n'use strict';\n\n\nmodule.exports.encode = require('./encode');\nmodule.exports.decode = require('./decode');\nmodule.exports.format = require('./format');\nmodule.exports.parse  = require('./parse');\n\n},{\"./decode\":55,\"./encode\":56,\"./format\":57,\"./parse\":59}],59:[function(require,module,exports){\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n//    e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n//    so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n//    i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n//    (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n//    which can be constructed using other parts of the url.\n//\n\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.pathname = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n    portPattern = /:[0-9]*$/,\n\n    // Special case for a simple path URL\n    simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n    // RFC 2396: characters reserved for delimiting URLs.\n    // We actually just auto-escape these.\n    delims = [ '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t' ],\n\n    // RFC 2396: characters not allowed for various reasons.\n    unwise = [ '{', '}', '|', '\\\\', '^', '`' ].concat(delims),\n\n    // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n    autoEscape = [ '\\'' ].concat(unwise),\n    // Characters that are never ever allowed in a hostname.\n    // Note that any invalid chars are also handled, but these\n    // are the ones that are *expected* to be seen, so we fast-path\n    // them.\n    nonHostChars = [ '%', '/', '?', ';', '#' ].concat(autoEscape),\n    hostEndingChars = [ '/', '?', '#' ],\n    hostnameMaxLen = 255,\n    hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n    hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n    // protocols that can allow \"unsafe\" and \"unwise\" chars.\n    /* eslint-disable no-script-url */\n    // protocols that never have a hostname.\n    hostlessProtocol = {\n      'javascript': true,\n      'javascript:': true\n    },\n    // protocols that always contain a // bit.\n    slashedProtocol = {\n      'http': true,\n      'https': true,\n      'ftp': true,\n      'gopher': true,\n      'file': true,\n      'http:': true,\n      'https:': true,\n      'ftp:': true,\n      'gopher:': true,\n      'file:': true\n    };\n    /* eslint-enable no-script-url */\n\nfunction urlParse(url, slashesDenoteHost) {\n  if (url && url instanceof Url) { return url; }\n\n  var u = new Url();\n  u.parse(url, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function(url, slashesDenoteHost) {\n  var i, l, lowerProto, hec, slashes,\n      rest = url;\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    lowerProto = proto.toLowerCase();\n    this.protocol = proto;\n    rest = rest.substr(proto.length);\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (i = 0; i < hostEndingChars.length; i++) {\n      hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = auth;\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (i = 0; i < nonHostChars.length; i++) {\n      hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec;\n      }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) {\n      hostEnd = rest.length;\n    }\n\n    if (rest[hostEnd - 1] === ':') { hostEnd--; }\n    var host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost(host);\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || '';\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    var ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) { continue; }\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    }\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n    }\n  }\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    rest = rest.slice(0, qm);\n  }\n  if (rest) { this.pathname = rest; }\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = '';\n  }\n\n  return this;\n};\n\nUrl.prototype.parseHost = function(host) {\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) { this.hostname = host; }\n};\n\nmodule.exports = urlParse;\n\n},{}],60:[function(require,module,exports){\n(function (global){\n/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],61:[function(require,module,exports){\nmodule.exports=/[\\0-\\x1F\\x7F-\\x9F]/\n},{}],62:[function(require,module,exports){\nmodule.exports=/[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804\\uDCBD|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/\n},{}],63:[function(require,module,exports){\nmodule.exports=/[!-#%-\\*,-/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E49\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDF3C-\\uDF3E]|\\uD806[\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]/\n},{}],64:[function(require,module,exports){\nmodule.exports=/[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/\n},{}],65:[function(require,module,exports){\n'use strict';\n\nexports.Any = require('./properties/Any/regex');\nexports.Cc  = require('./categories/Cc/regex');\nexports.Cf  = require('./categories/Cf/regex');\nexports.P   = require('./categories/P/regex');\nexports.Z   = require('./categories/Z/regex');\n\n},{\"./categories/Cc/regex\":61,\"./categories/Cf/regex\":62,\"./categories/P/regex\":63,\"./categories/Z/regex\":64,\"./properties/Any/regex\":66}],66:[function(require,module,exports){\nmodule.exports=/[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/\n},{}],67:[function(require,module,exports){\n'use strict';\n\n\nmodule.exports = require('./lib/');\n\n},{\"./lib/\":9}]},{},[67])(67)\n});\n","'use strict';\n\n\nvar emojies_defs      = require('./lib/data/full.json');\nvar emojies_shortcuts = require('./lib/data/shortcuts');\nvar emoji_html        = require('./lib/render');\nvar emoji_replace     = require('./lib/replace');\nvar normalize_opts    = require('./lib/normalize_opts');\n\n\nmodule.exports = function emoji_plugin(md, options) {\n  var defaults = {\n    defs: emojies_defs,\n    shortcuts: emojies_shortcuts,\n    enabled: []\n  };\n\n  var opts = normalize_opts(md.utils.assign({}, defaults, options || {}));\n\n  md.renderer.rules.emoji = emoji_html;\n\n  md.core.ruler.push('emoji', emoji_replace(md, opts.defs, opts.shortcuts, opts.scanRE, opts.replaceRE));\n};\n","\"use strict\";\n\nmodule.exports = function bracketed_spans_plugin(md) {\n\n  function span(state) {\n    var max = state.posMax\n\n    if (state.src.charCodeAt(state.pos) !== 0x5B) {\n      // opening [\n      return false;\n    }\n\n    var labelStart = state.pos + 1;\n    var labelEnd   = state.md.helpers.parseLinkLabel(state, state.pos, true);\n\n    if (labelEnd < 0) {\n      // parser failed to find closing ]\n      return false;\n    }\n\n    var pos = labelEnd + 1;\n    if (pos < max && state.src.charCodeAt(pos) === 0x7B /* { */) {\n      // probably found span\n\n      state.pos = labelStart;\n      state.posMax = labelEnd;\n\n      state.push('span_open', 'span', 1);\n      state.md.inline.tokenize(state);\n      state.push('span_close', 'span', -1);\n\n      state.pos = pos;\n      state.posMax = max;\n      return true;\n    } else {\n      return false;\n    }\n  };\n\n  md.inline.ruler.push('bracketed-spans', span);\n}\n","'use strict';\n\nconst patternsConfig = require('./patterns.js');\n\nconst defaultOptions = {\n  leftDelimiter: '{',\n  rightDelimiter: '}',\n  allowedAttributes: []\n};\n\nmodule.exports = function attributes(md, options_) {\n  let options = Object.assign({}, defaultOptions);\n  options = Object.assign(options, options_);\n\n  const patterns = patternsConfig(options);\n\n  function curlyAttrs(state) {\n    let tokens = state.tokens;\n\n    for (let i = 0; i < tokens.length; i++) {\n      for (let p = 0; p < patterns.length; p++) {\n        let pattern = patterns[p];\n        let j = null; // position of child with offset 0\n        let match = pattern.tests.every(t => {\n          let res = test(tokens, i, t);\n          if (res.j !== null) { j = res.j; }\n          return res.match;\n        });\n        if (match) {\n          pattern.transform(tokens, i, j);\n          if (pattern.name === 'inline attributes' || pattern.name === 'inline nesting 0') {\n            // retry, may be several inline attributes\n            p--;\n          }\n        }\n      }\n    }\n  }\n\n  md.core.ruler.before('linkify', 'curly_attributes', curlyAttrs);\n};\n\n/**\n * Test if t matches token stream.\n *\n * @param {array} tokens\n * @param {number} i\n * @param {object} t Test to match.\n * @return {object} { match: true|false, j: null|number }\n */\nfunction test(tokens, i, t) {\n  let res = {\n    match: false,\n    j: null  // position of child\n  };\n\n  let ii = t.shift !== undefined\n    ? i + t.shift\n    : t.position;\n  let token = get(tokens, ii);  // supports negative ii\n\n\n  if (token === undefined) { return res; }\n\n  for (let key in t) {\n    if (key === 'shift' || key === 'position') { continue; }\n\n    if (token[key] === undefined) { return res; }\n\n    if (key === 'children' && isArrayOfObjects(t.children)) {\n      if (token.children.length === 0) {\n        return res;\n      }\n      let match;\n      let childTests = t.children;\n      let children = token.children;\n      if (childTests.every(tt => tt.position !== undefined)) {\n        // positions instead of shifts, do not loop all children\n        match = childTests.every(tt => test(children, tt.position, tt).match);\n        if (match) {\n          // we may need position of child in transform\n          let j = last(childTests).position;\n          res.j = j >= 0 ? j : children.length + j;\n        }\n      } else {\n        for (let j = 0; j < children.length; j++) {\n          match = childTests.every(tt => test(children, j, tt).match);\n          if (match) {\n            res.j = j;\n            // all tests true, continue with next key of pattern t\n            break;\n          }\n        }\n      }\n\n      if (match === false) { return res; }\n\n      continue;\n    }\n\n    switch (typeof t[key]) {\n    case 'boolean':\n    case 'number':\n    case 'string':\n      if (token[key] !== t[key]) { return res; }\n      break;\n    case 'function':\n      if (!t[key](token[key])) { return res; }\n      break;\n    case 'object':\n      if (isArrayOfFunctions(t[key])) {\n        let r = t[key].every(tt => tt(token[key]));\n        if (r === false) { return res; }\n        break;\n      }\n    // fall through for objects !== arrays of functions\n    default:\n      throw new Error(`Unknown type of pattern test (key: ${key}). Test should be of type boolean, number, string, function or array of functions.`);\n    }\n  }\n\n  // no tests returned false -> all tests returns true\n  res.match = true;\n  return res;\n}\n\nfunction isArrayOfObjects(arr) {\n  return Array.isArray(arr) && arr.length && arr.every(i => typeof i === 'object');\n}\n\nfunction isArrayOfFunctions(arr) {\n  return Array.isArray(arr) && arr.length && arr.every(i => typeof i === 'function');\n}\n\n/**\n * Get n item of array. Supports negative n, where -1 is last\n * element in array.\n * @param {array} arr\n * @param {number} n\n */\nfunction get(arr, n) {\n  return n >= 0 ? arr[n] : arr[arr.length + n];\n}\n\n// get last element of array, safe - returns {} if not found\nfunction last(arr) {\n  return arr.slice(-1)[0] || {};\n}\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n  return hasOwnProperty.call(it, key);\n};\n","import firebase from '@firebase/app';(function() {var h,aa=aa||{},l=this;function m(a){return\"string\"==typeof a}function ba(a){return\"boolean\"==typeof a}var ca=/^[\\w+/_-]+[=]{0,2}$/,ea=null;function fa(){}\nfunction ha(a){var b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ia(a){return null===a}function ja(a){return\"array\"==ha(a)}function ka(a){var b=ha(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length}function q(a){return\"function\"==ha(a)}function r(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b}var la=\"closure_uid_\"+(1E9*Math.random()>>>0),ma=0;function na(a,b,c){return a.call.apply(a.bind,arguments)}\nfunction oa(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}}function t(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?t=na:t=oa;return t.apply(null,arguments)}\nfunction pa(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}}var qa=Date.now||function(){return+new Date};function u(a,b){function c(){}c.prototype=b.prototype;a.pb=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.gd=function(d,e,f){for(var g=Array(arguments.length-2),k=2;k<arguments.length;k++)g[k-2]=arguments[k];return b.prototype[e].apply(d,g)}};function ra(a){if(!a)return!1;try{return!!a.$goog_Thenable}catch(b){return!1}};function v(a){if(Error.captureStackTrace)Error.captureStackTrace(this,v);else{var b=Error().stack;b&&(this.stack=b)}a&&(this.message=String(a))}u(v,Error);v.prototype.name=\"CustomError\";function sa(a,b){a=a.split(\"%s\");for(var c=\"\",d=a.length-1,e=0;e<d;e++)c+=a[e]+(e<b.length?b[e]:\"%s\");v.call(this,c+a[d])}u(sa,v);sa.prototype.name=\"AssertionError\";function ta(a,b){throw new sa(\"Failure\"+(a?\": \"+a:\"\"),Array.prototype.slice.call(arguments,1));};function ua(a,b){this.c=a;this.f=b;this.b=0;this.a=null}ua.prototype.get=function(){if(0<this.b){this.b--;var a=this.a;this.a=a.next;a.next=null}else a=this.c();return a};function va(a,b){a.f(b);100>a.b&&(a.b++,b.next=a.a,a.a=b)};function wa(){this.b=this.a=null}var ya=new ua(function(){return new xa},function(a){a.reset()});wa.prototype.add=function(a,b){var c=ya.get();c.set(a,b);this.b?this.b.next=c:this.a=c;this.b=c};function za(){var a=Aa,b=null;a.a&&(b=a.a,a.a=a.a.next,a.a||(a.b=null),b.next=null);return b}function xa(){this.next=this.b=this.a=null}xa.prototype.set=function(a,b){this.a=a;this.b=b;this.next=null};xa.prototype.reset=function(){this.next=this.b=this.a=null};var Ba=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if(m(a))return m(b)&&1==b.length?a.indexOf(b,0):-1;for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},w=Array.prototype.forEach?function(a,b,c){Array.prototype.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=m(a)?a.split(\"\"):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)};function Ca(a,b){for(var c=m(a)?a.split(\"\"):a,d=a.length-1;0<=d;--d)d in c&&b.call(void 0,c[d],d,a)}\nvar Da=Array.prototype.map?function(a,b){return Array.prototype.map.call(a,b,void 0)}:function(a,b){for(var c=a.length,d=Array(c),e=m(a)?a.split(\"\"):a,f=0;f<c;f++)f in e&&(d[f]=b.call(void 0,e[f],f,a));return d},Ea=Array.prototype.some?function(a,b){return Array.prototype.some.call(a,b,void 0)}:function(a,b){for(var c=a.length,d=m(a)?a.split(\"\"):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a))return!0;return!1};\nfunction Fa(a){a:{var b=Ga;for(var c=a.length,d=m(a)?a.split(\"\"):a,e=0;e<c;e++)if(e in d&&b.call(void 0,d[e],e,a)){b=e;break a}b=-1}return 0>b?null:m(a)?a.charAt(b):a[b]}function Ha(a,b){return 0<=Ba(a,b)}function Ia(a,b){b=Ba(a,b);var c;(c=0<=b)&&Array.prototype.splice.call(a,b,1);return c}function x(a,b){var c=0;Ca(a,function(d,e){b.call(void 0,d,e,a)&&1==Array.prototype.splice.call(a,e,1).length&&c++})}function Ja(a){return Array.prototype.concat.apply([],arguments)}\nfunction Ka(a){var b=a.length;if(0<b){for(var c=Array(b),d=0;d<b;d++)c[d]=a[d];return c}return[]};var La=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\\s\\xa0]*([\\s\\S]*?)[\\s\\xa0]*$/.exec(a)[1]},Ma=/&/g,Na=/</g,Oa=/>/g,Pa=/\"/g,Qa=/'/g,Ra=/\\x00/g,Sa=/[\\x00&<>\"']/;function y(a,b){return-1!=a.indexOf(b)}function Ta(a,b){return a<b?-1:a>b?1:0};var Ua;a:{var Va=l.navigator;if(Va){var Wa=Va.userAgent;if(Wa){Ua=Wa;break a}}Ua=\"\"}function B(a){return y(Ua,a)};function Xa(a,b){for(var c in a)b.call(void 0,a[c],c,a)}function Ya(a){for(var b in a)return!1;return!0}function Za(a){var b={},c;for(c in a)b[c]=a[c];return b}var $a=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");function ab(a,b){for(var c,d,e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(var f=0;f<$a.length;f++)c=$a[f],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};function bb(a,b){for(var c=a.split(\"%s\"),d=\"\",e=Array.prototype.slice.call(arguments,1);e.length&&1<c.length;)d+=c.shift()+e.shift();return d+c.join(\"%s\")}function cb(a){Sa.test(a)&&(-1!=a.indexOf(\"&\")&&(a=a.replace(Ma,\"&amp;\")),-1!=a.indexOf(\"<\")&&(a=a.replace(Na,\"&lt;\")),-1!=a.indexOf(\">\")&&(a=a.replace(Oa,\"&gt;\")),-1!=a.indexOf('\"')&&(a=a.replace(Pa,\"&quot;\")),-1!=a.indexOf(\"'\")&&(a=a.replace(Qa,\"&#39;\")),-1!=a.indexOf(\"\\x00\")&&(a=a.replace(Ra,\"&#0;\")));return a};function db(a){l.setTimeout(function(){throw a;},0)}var eb;\nfunction fb(){var a=l.MessageChannel;\"undefined\"===typeof a&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!B(\"Presto\")&&(a=function(){var e=document.createElement(\"IFRAME\");e.style.display=\"none\";e.src=\"\";document.documentElement.appendChild(e);var f=e.contentWindow;e=f.document;e.open();e.write(\"\");e.close();var g=\"callImmediate\"+Math.random(),k=\"file:\"==f.location.protocol?\"*\":f.location.protocol+\"//\"+f.location.host;e=t(function(n){if((\"*\"==k||n.origin==k)&&n.data==\ng)this.port1.onmessage()},this);f.addEventListener(\"message\",e,!1);this.port1={};this.port2={postMessage:function(){f.postMessage(g,k)}}});if(\"undefined\"!==typeof a&&!B(\"Trident\")&&!B(\"MSIE\")){var b=new a,c={},d=c;b.port1.onmessage=function(){if(void 0!==c.next){c=c.next;var e=c.xb;c.xb=null;e()}};return function(e){d.next={xb:e};d=d.next;b.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(e){var f=document.createElement(\"SCRIPT\");\nf.onreadystatechange=function(){f.onreadystatechange=null;f.parentNode.removeChild(f);f=null;e();e=null};document.documentElement.appendChild(f)}:function(e){l.setTimeout(e,0)}};function gb(a,b){hb||ib();jb||(hb(),jb=!0);Aa.add(a,b)}var hb;function ib(){if(l.Promise&&l.Promise.resolve){var a=l.Promise.resolve(void 0);hb=function(){a.then(kb)}}else hb=function(){var b=kb;!q(l.setImmediate)||l.Window&&l.Window.prototype&&!B(\"Edge\")&&l.Window.prototype.setImmediate==l.setImmediate?(eb||(eb=fb()),eb(b)):l.setImmediate(b)}}var jb=!1,Aa=new wa;function kb(){for(var a;a=za();){try{a.a.call(a.b)}catch(b){db(b)}va(ya,a)}jb=!1};function C(a,b){this.a=lb;this.i=void 0;this.f=this.b=this.c=null;this.g=this.h=!1;if(a!=fa)try{var c=this;a.call(b,function(d){mb(c,nb,d)},function(d){if(!(d instanceof ob))try{if(d instanceof Error)throw d;throw Error(\"Promise rejected.\");}catch(e){}mb(c,pb,d)})}catch(d){mb(this,pb,d)}}var lb=0,nb=2,pb=3;function qb(){this.next=this.f=this.b=this.g=this.a=null;this.c=!1}qb.prototype.reset=function(){this.f=this.b=this.g=this.a=null;this.c=!1};var rb=new ua(function(){return new qb},function(a){a.reset()});\nfunction sb(a,b,c){var d=rb.get();d.g=a;d.b=b;d.f=c;return d}function D(a){if(a instanceof C)return a;var b=new C(fa);mb(b,nb,a);return b}function E(a){return new C(function(b,c){c(a)})}function tb(a,b,c){ub(a,b,c,null)||gb(pa(b,a))}function vb(a){return new C(function(b,c){var d=a.length,e=[];if(d)for(var f=function(p,z){d--;e[p]=z;0==d&&b(e)},g=function(p){c(p)},k=0,n;k<a.length;k++)n=a[k],tb(n,pa(f,k),g);else b(e)})}\nfunction wb(a){return new C(function(b){var c=a.length,d=[];if(c)for(var e=function(k,n,p){c--;d[k]=n?{Eb:!0,value:p}:{Eb:!1,reason:p};0==c&&b(d)},f=0,g;f<a.length;f++)g=a[f],tb(g,pa(e,f,!0),pa(e,f,!1));else b(d)})}C.prototype.then=function(a,b,c){return xb(this,q(a)?a:null,q(b)?b:null,c)};C.prototype.$goog_Thenable=!0;h=C.prototype;h.ia=function(a,b){a=sb(a,a,b);a.c=!0;yb(this,a);return this};h.s=function(a,b){return xb(this,null,a,b)};\nh.cancel=function(a){this.a==lb&&gb(function(){var b=new ob(a);zb(this,b)},this)};function zb(a,b){if(a.a==lb)if(a.c){var c=a.c;if(c.b){for(var d=0,e=null,f=null,g=c.b;g&&(g.c||(d++,g.a==a&&(e=g),!(e&&1<d)));g=g.next)e||(f=g);e&&(c.a==lb&&1==d?zb(c,b):(f?(d=f,d.next==c.f&&(c.f=d),d.next=d.next.next):Ab(c),Bb(c,e,pb,b)))}a.c=null}else mb(a,pb,b)}function yb(a,b){a.b||a.a!=nb&&a.a!=pb||Cb(a);a.f?a.f.next=b:a.b=b;a.f=b}\nfunction xb(a,b,c,d){var e=sb(null,null,null);e.a=new C(function(f,g){e.g=b?function(k){try{var n=b.call(d,k);f(n)}catch(p){g(p)}}:f;e.b=c?function(k){try{var n=c.call(d,k);void 0===n&&k instanceof ob?g(k):f(n)}catch(p){g(p)}}:g});e.a.c=a;yb(a,e);return e.a}h.Pc=function(a){this.a=lb;mb(this,nb,a)};h.Qc=function(a){this.a=lb;mb(this,pb,a)};\nfunction mb(a,b,c){a.a==lb&&(a===c&&(b=pb,c=new TypeError(\"Promise cannot resolve to itself\")),a.a=1,ub(c,a.Pc,a.Qc,a)||(a.i=c,a.a=b,a.c=null,Cb(a),b!=pb||c instanceof ob||Db(a,c)))}function ub(a,b,c,d){if(a instanceof C)return yb(a,sb(b||fa,c||null,d)),!0;if(ra(a))return a.then(b,c,d),!0;if(r(a))try{var e=a.then;if(q(e))return Eb(a,e,b,c,d),!0}catch(f){return c.call(d,f),!0}return!1}\nfunction Eb(a,b,c,d,e){function f(n){k||(k=!0,d.call(e,n))}function g(n){k||(k=!0,c.call(e,n))}var k=!1;try{b.call(a,g,f)}catch(n){f(n)}}function Cb(a){a.h||(a.h=!0,gb(a.Yb,a))}function Ab(a){var b=null;a.b&&(b=a.b,a.b=b.next,b.next=null);a.b||(a.f=null);return b}h.Yb=function(){for(var a;a=Ab(this);)Bb(this,a,this.a,this.i);this.h=!1};\nfunction Bb(a,b,c,d){if(c==pb&&b.b&&!b.c)for(;a&&a.g;a=a.c)a.g=!1;if(b.a)b.a.c=null,Fb(b,c,d);else try{b.c?b.g.call(b.f):Fb(b,c,d)}catch(e){Gb.call(null,e)}va(rb,b)}function Fb(a,b,c){b==nb?a.g.call(a.f,c):a.b&&a.b.call(a.f,c)}function Db(a,b){a.g=!0;gb(function(){a.g&&Gb.call(null,b)})}var Gb=db;function ob(a){v.call(this,a)}u(ob,v);ob.prototype.name=\"cancel\";function Hb(){0!=Ib&&(Jb[this[la]||(this[la]=++ma)]=this);this.qa=this.qa;this.ja=this.ja}var Ib=0,Jb={};Hb.prototype.qa=!1;function Kb(a){if(!a.qa&&(a.qa=!0,a.va(),0!=Ib)){var b=a[la]||(a[la]=++ma);if(0!=Ib&&a.ja&&0<a.ja.length)throw Error(a+\" did not empty its onDisposeCallbacks queue. This probably means it overrode dispose() or disposeInternal() without calling the superclass' method.\");delete Jb[b]}}Hb.prototype.va=function(){if(this.ja)for(;this.ja.length;)this.ja.shift()()};function Lb(a){Lb[\" \"](a);return a}Lb[\" \"]=fa;function Mb(a,b){var c=Nb;return Object.prototype.hasOwnProperty.call(c,a)?c[a]:c[a]=b(a)};var Ob=B(\"Opera\"),Pb=B(\"Trident\")||B(\"MSIE\"),Qb=B(\"Edge\"),Rb=Qb||Pb,Sb=B(\"Gecko\")&&!(y(Ua.toLowerCase(),\"webkit\")&&!B(\"Edge\"))&&!(B(\"Trident\")||B(\"MSIE\"))&&!B(\"Edge\"),Tb=y(Ua.toLowerCase(),\"webkit\")&&!B(\"Edge\");function Ub(){var a=l.document;return a?a.documentMode:void 0}var Vb;\na:{var Wb=\"\",Xb=function(){var a=Ua;if(Sb)return/rv:([^\\);]+)(\\)|;)/.exec(a);if(Qb)return/Edge\\/([\\d\\.]+)/.exec(a);if(Pb)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(Tb)return/WebKit\\/(\\S+)/.exec(a);if(Ob)return/(?:Version)[ \\/]?(\\S+)/.exec(a)}();Xb&&(Wb=Xb?Xb[1]:\"\");if(Pb){var Yb=Ub();if(null!=Yb&&Yb>parseFloat(Wb)){Vb=String(Yb);break a}}Vb=Wb}var Nb={};\nfunction Zb(a){return Mb(a,function(){for(var b=0,c=La(String(Vb)).split(\".\"),d=La(String(a)).split(\".\"),e=Math.max(c.length,d.length),f=0;0==b&&f<e;f++){var g=c[f]||\"\",k=d[f]||\"\";do{g=/(\\d*)(\\D*)(.*)/.exec(g)||[\"\",\"\",\"\",\"\"];k=/(\\d*)(\\D*)(.*)/.exec(k)||[\"\",\"\",\"\",\"\"];if(0==g[0].length&&0==k[0].length)break;b=Ta(0==g[1].length?0:parseInt(g[1],10),0==k[1].length?0:parseInt(k[1],10))||Ta(0==g[2].length,0==k[2].length)||Ta(g[2],k[2]);g=g[3];k=k[3]}while(0==b)}return 0<=b})}var $b;var ac=l.document;\n$b=ac&&Pb?Ub()||(\"CSS1Compat\"==ac.compatMode?parseInt(Vb,10):5):void 0;var bc=Object.freeze||function(a){return a};var cc=!Pb||9<=Number($b),dc=Pb&&!Zb(\"9\"),ec=function(){if(!l.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},\"passive\",{get:function(){a=!0}});try{l.addEventListener(\"test\",fa,b),l.removeEventListener(\"test\",fa,b)}catch(c){}return a}();function F(a,b){this.type=a;this.b=this.target=b;this.Kb=!0}F.prototype.preventDefault=function(){this.Kb=!1};function hc(a,b){F.call(this,a?a.type:\"\");this.relatedTarget=this.b=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key=\"\";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.pointerId=0;this.pointerType=\"\";this.a=null;if(a){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.b=b;if(b=a.relatedTarget){if(Sb){a:{try{Lb(b.nodeName);var e=!0;break a}catch(f){}e=!1}e||(b=null)}}else\"mouseover\"==\nc?b=a.fromElement:\"mouseout\"==c&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0):(this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||\"\";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=\na.metaKey;this.pointerId=a.pointerId||0;this.pointerType=m(a.pointerType)?a.pointerType:ic[a.pointerType]||\"\";this.a=a;a.defaultPrevented&&this.preventDefault()}}u(hc,F);var ic=bc({2:\"touch\",3:\"pen\",4:\"mouse\"});hc.prototype.preventDefault=function(){hc.pb.preventDefault.call(this);var a=this.a;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,dc)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};hc.prototype.f=function(){return this.a};var jc=\"closure_listenable_\"+(1E6*Math.random()|0),kc=0;function lc(a,b,c,d,e){this.listener=a;this.proxy=null;this.src=b;this.type=c;this.capture=!!d;this.Ma=e;this.key=++kc;this.oa=this.Ia=!1}function mc(a){a.oa=!0;a.listener=null;a.proxy=null;a.src=null;a.Ma=null};function nc(a){this.src=a;this.a={};this.b=0}nc.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.a[f];a||(a=this.a[f]=[],this.b++);var g=oc(a,b,d,e);-1<g?(b=a[g],c||(b.Ia=!1)):(b=new lc(b,this.src,f,!!d,e),b.Ia=c,a.push(b));return b};function pc(a,b){var c=b.type;c in a.a&&Ia(a.a[c],b)&&(mc(b),0==a.a[c].length&&(delete a.a[c],a.b--))}function oc(a,b,c,d){for(var e=0;e<a.length;++e){var f=a[e];if(!f.oa&&f.listener==b&&f.capture==!!c&&f.Ma==d)return e}return-1};var qc=\"closure_lm_\"+(1E6*Math.random()|0),rc={},sc=0;function tc(a,b,c,d,e){if(d&&d.once)uc(a,b,c,d,e);else if(ja(b))for(var f=0;f<b.length;f++)tc(a,b[f],c,d,e);else c=vc(c),a&&a[jc]?wc(a,b,c,r(d)?!!d.capture:!!d,e):xc(a,b,c,!1,d,e)}\nfunction xc(a,b,c,d,e,f){if(!b)throw Error(\"Invalid event type\");var g=r(e)?!!e.capture:!!e,k=yc(a);k||(a[qc]=k=new nc(a));c=k.add(b,c,d,g,f);if(!c.proxy){d=zc();c.proxy=d;d.src=a;d.listener=c;if(a.addEventListener)ec||(e=g),void 0===e&&(e=!1),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(Ac(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error(\"addEventListener and attachEvent are unavailable.\");sc++}}\nfunction zc(){var a=Bc,b=cc?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b}function uc(a,b,c,d,e){if(ja(b))for(var f=0;f<b.length;f++)uc(a,b[f],c,d,e);else c=vc(c),a&&a[jc]?Cc(a,b,c,r(d)?!!d.capture:!!d,e):xc(a,b,c,!0,d,e)}\nfunction G(a,b,c,d,e){if(ja(b))for(var f=0;f<b.length;f++)G(a,b[f],c,d,e);else(d=r(d)?!!d.capture:!!d,c=vc(c),a&&a[jc])?(a=a.o,b=String(b).toString(),b in a.a&&(f=a.a[b],c=oc(f,c,d,e),-1<c&&(mc(f[c]),Array.prototype.splice.call(f,c,1),0==f.length&&(delete a.a[b],a.b--)))):a&&(a=yc(a))&&(b=a.a[b.toString()],a=-1,b&&(a=oc(b,c,d,e)),(c=-1<a?b[a]:null)&&Dc(c))}\nfunction Dc(a){if(\"number\"!=typeof a&&a&&!a.oa){var b=a.src;if(b&&b[jc])pc(b.o,a);else{var c=a.type,d=a.proxy;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(Ac(c),d):b.addListener&&b.removeListener&&b.removeListener(d);sc--;(c=yc(b))?(pc(c,a),0==c.b&&(c.src=null,b[qc]=null)):mc(a)}}}function Ac(a){return a in rc?rc[a]:rc[a]=\"on\"+a}\nfunction Ec(a,b,c,d){var e=!0;if(a=yc(a))if(b=a.a[b.toString()])for(b=b.concat(),a=0;a<b.length;a++){var f=b[a];f&&f.capture==c&&!f.oa&&(f=Fc(f,d),e=e&&!1!==f)}return e}function Fc(a,b){var c=a.listener,d=a.Ma||a.src;a.Ia&&Dc(a);return c.call(d,b)}\nfunction Bc(a,b){if(a.oa)return!0;if(!cc){if(!b)a:{b=[\"window\",\"event\"];for(var c=l,d=0;d<b.length;d++)if(c=c[b[d]],null==c){b=null;break a}b=c}d=b;b=new hc(d,this);c=!0;if(!(0>d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(g){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.b;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.b=d[e];var f=Ec(d[e],a,!0,b);c=c&&f}for(e=0;e<d.length;e++)b.b=d[e],f=Ec(d[e],a,!1,b),c=c&&f}return c}return Fc(a,\nnew hc(b,this))}function yc(a){a=a[qc];return a instanceof nc?a:null}var Gc=\"__closure_events_fn_\"+(1E9*Math.random()>>>0);function vc(a){if(q(a))return a;a[Gc]||(a[Gc]=function(b){return a.handleEvent(b)});return a[Gc]};function H(){Hb.call(this);this.o=new nc(this);this.Rb=this;this.Wa=null}u(H,Hb);H.prototype[jc]=!0;H.prototype.addEventListener=function(a,b,c,d){tc(this,a,b,c,d)};H.prototype.removeEventListener=function(a,b,c,d){G(this,a,b,c,d)};\nH.prototype.dispatchEvent=function(a){var b,c=this.Wa;if(c)for(b=[];c;c=c.Wa)b.push(c);c=this.Rb;var d=a.type||a;if(m(a))a=new F(a,c);else if(a instanceof F)a.target=a.target||c;else{var e=a;a=new F(d,c);ab(a,e)}e=!0;if(b)for(var f=b.length-1;0<=f;f--){var g=a.b=b[f];e=Hc(g,d,!0,a)&&e}g=a.b=c;e=Hc(g,d,!0,a)&&e;e=Hc(g,d,!1,a)&&e;if(b)for(f=0;f<b.length;f++)g=a.b=b[f],e=Hc(g,d,!1,a)&&e;return e};\nH.prototype.va=function(){H.pb.va.call(this);if(this.o){var a=this.o,b=0,c;for(c in a.a){for(var d=a.a[c],e=0;e<d.length;e++)++b,mc(d[e]);delete a.a[c];a.b--}}this.Wa=null};function wc(a,b,c,d,e){a.o.add(String(b),c,!1,d,e)}function Cc(a,b,c,d,e){a.o.add(String(b),c,!0,d,e)}\nfunction Hc(a,b,c,d){b=a.o.a[String(b)];if(!b)return!0;b=b.concat();for(var e=!0,f=0;f<b.length;++f){var g=b[f];if(g&&!g.oa&&g.capture==c){var k=g.listener,n=g.Ma||g.src;g.Ia&&pc(a.o,g);e=!1!==k.call(n,d)&&e}}return e&&0!=d.Kb};function Ic(a,b,c){if(q(a))c&&(a=t(a,c));else if(a&&\"function\"==typeof a.handleEvent)a=t(a.handleEvent,a);else throw Error(\"Invalid listener argument\");return 2147483647<Number(b)?-1:l.setTimeout(a,b||0)}function Jc(a){var b=null;return(new C(function(c,d){b=Ic(function(){c(void 0)},a);-1==b&&d(Error(\"Failed to schedule timer.\"))})).s(function(c){l.clearTimeout(b);throw c;})};function Kc(a){if(a.S&&\"function\"==typeof a.S)return a.S();if(m(a))return a.split(\"\");if(ka(a)){for(var b=[],c=a.length,d=0;d<c;d++)b.push(a[d]);return b}b=[];c=0;for(d in a)b[c++]=a[d];return b}function Lc(a){if(a.U&&\"function\"==typeof a.U)return a.U();if(!a.S||\"function\"!=typeof a.S){if(ka(a)||m(a)){var b=[];a=a.length;for(var c=0;c<a;c++)b.push(c);return b}b=[];c=0;for(var d in a)b[c++]=d;return b}}\nfunction Mc(a,b){if(a.forEach&&\"function\"==typeof a.forEach)a.forEach(b,void 0);else if(ka(a)||m(a))w(a,b,void 0);else for(var c=Lc(a),d=Kc(a),e=d.length,f=0;f<e;f++)b.call(void 0,d[f],c&&c[f],a)};function Nc(a,b){this.b={};this.a=[];this.c=0;var c=arguments.length;if(1<c){if(c%2)throw Error(\"Uneven number of arguments\");for(var d=0;d<c;d+=2)this.set(arguments[d],arguments[d+1])}else if(a)if(a instanceof Nc)for(c=a.U(),d=0;d<c.length;d++)this.set(c[d],a.get(c[d]));else for(d in a)this.set(d,a[d])}h=Nc.prototype;h.S=function(){Oc(this);for(var a=[],b=0;b<this.a.length;b++)a.push(this.b[this.a[b]]);return a};h.U=function(){Oc(this);return this.a.concat()};\nh.clear=function(){this.b={};this.c=this.a.length=0};function Oc(a){if(a.c!=a.a.length){for(var b=0,c=0;b<a.a.length;){var d=a.a[b];Pc(a.b,d)&&(a.a[c++]=d);b++}a.a.length=c}if(a.c!=a.a.length){var e={};for(c=b=0;b<a.a.length;)d=a.a[b],Pc(e,d)||(a.a[c++]=d,e[d]=1),b++;a.a.length=c}}h.get=function(a,b){return Pc(this.b,a)?this.b[a]:b};h.set=function(a,b){Pc(this.b,a)||(this.c++,this.a.push(a));this.b[a]=b};\nh.forEach=function(a,b){for(var c=this.U(),d=0;d<c.length;d++){var e=c[d],f=this.get(e);a.call(b,f,e,this)}};function Pc(a,b){return Object.prototype.hasOwnProperty.call(a,b)};var Qc=/^(?:([^:/?#.]+):)?(?:\\/\\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#([\\s\\S]*))?$/;function Rc(a,b){if(a){a=a.split(\"&\");for(var c=0;c<a.length;c++){var d=a[c].indexOf(\"=\"),e=null;if(0<=d){var f=a[c].substring(0,d);e=a[c].substring(d+1)}else f=a[c];b(f,e?decodeURIComponent(e.replace(/\\+/g,\" \")):\"\")}}};function Sc(a,b){this.b=this.o=this.c=\"\";this.i=null;this.h=this.g=\"\";this.f=!1;if(a instanceof Sc){this.f=void 0!==b?b:a.f;Tc(this,a.c);this.o=a.o;this.b=a.b;Uc(this,a.i);this.g=a.g;b=a.a;var c=new Vc;c.c=b.c;b.a&&(c.a=new Nc(b.a),c.b=b.b);Wc(this,c);this.h=a.h}else a&&(c=String(a).match(Qc))?(this.f=!!b,Tc(this,c[1]||\"\",!0),this.o=Xc(c[2]||\"\"),this.b=Xc(c[3]||\"\",!0),Uc(this,c[4]),this.g=Xc(c[5]||\"\",!0),Wc(this,c[6]||\"\",!0),this.h=Xc(c[7]||\"\")):(this.f=!!b,this.a=new Vc(null,this.f))}\nSc.prototype.toString=function(){var a=[],b=this.c;b&&a.push(Yc(b,Zc,!0),\":\");var c=this.b;if(c||\"file\"==b)a.push(\"//\"),(b=this.o)&&a.push(Yc(b,Zc,!0),\"@\"),a.push(encodeURIComponent(String(c)).replace(/%25([0-9a-fA-F]{2})/g,\"%$1\")),c=this.i,null!=c&&a.push(\":\",String(c));if(c=this.g)this.b&&\"/\"!=c.charAt(0)&&a.push(\"/\"),a.push(Yc(c,\"/\"==c.charAt(0)?$c:ad,!0));(c=this.a.toString())&&a.push(\"?\",c);(c=this.h)&&a.push(\"#\",Yc(c,bd));return a.join(\"\")};\nfunction Tc(a,b,c){a.c=c?Xc(b,!0):b;a.c&&(a.c=a.c.replace(/:$/,\"\"))}function Uc(a,b){if(b){b=Number(b);if(isNaN(b)||0>b)throw Error(\"Bad port number \"+b);a.i=b}else a.i=null}function Wc(a,b,c){b instanceof Vc?(a.a=b,cd(a.a,a.f)):(c||(b=Yc(b,dd)),a.a=new Vc(b,a.f))}function I(a,b,c){a.a.set(b,c)}function ed(a,b){return a.a.get(b)}function fd(a){return a instanceof Sc?new Sc(a):new Sc(a,void 0)}function gd(a,b){var c=new Sc(null,void 0);Tc(c,\"https\");a&&(c.b=a);b&&(c.g=b);return c}\nfunction Xc(a,b){return a?b?decodeURI(a.replace(/%25/g,\"%2525\")):decodeURIComponent(a):\"\"}function Yc(a,b,c){return m(a)?(a=encodeURI(a).replace(b,hd),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,\"%$1\")),a):null}function hd(a){a=a.charCodeAt(0);return\"%\"+(a>>4&15).toString(16)+(a&15).toString(16)}var Zc=/[#\\/\\?@]/g,ad=/[#\\?:]/g,$c=/[#\\?]/g,dd=/[#\\?@]/g,bd=/#/g;function Vc(a,b){this.b=this.a=null;this.c=a||null;this.f=!!b}\nfunction id(a){a.a||(a.a=new Nc,a.b=0,a.c&&Rc(a.c,function(b,c){a.add(decodeURIComponent(b.replace(/\\+/g,\" \")),c)}))}function jd(a){var b=Lc(a);if(\"undefined\"==typeof b)throw Error(\"Keys are undefined\");var c=new Vc(null,void 0);a=Kc(a);for(var d=0;d<b.length;d++){var e=b[d],f=a[d];ja(f)?kd(c,e,f):c.add(e,f)}return c}h=Vc.prototype;h.add=function(a,b){id(this);this.c=null;a=ld(this,a);var c=this.a.get(a);c||this.a.set(a,c=[]);c.push(b);this.b+=1;return this};\nfunction md(a,b){id(a);b=ld(a,b);Pc(a.a.b,b)&&(a.c=null,a.b-=a.a.get(b).length,a=a.a,Pc(a.b,b)&&(delete a.b[b],a.c--,a.a.length>2*a.c&&Oc(a)))}h.clear=function(){this.a=this.c=null;this.b=0};function nd(a,b){id(a);b=ld(a,b);return Pc(a.a.b,b)}h.forEach=function(a,b){id(this);this.a.forEach(function(c,d){w(c,function(e){a.call(b,e,d,this)},this)},this)};h.U=function(){id(this);for(var a=this.a.S(),b=this.a.U(),c=[],d=0;d<b.length;d++)for(var e=a[d],f=0;f<e.length;f++)c.push(b[d]);return c};\nh.S=function(a){id(this);var b=[];if(m(a))nd(this,a)&&(b=Ja(b,this.a.get(ld(this,a))));else{a=this.a.S();for(var c=0;c<a.length;c++)b=Ja(b,a[c])}return b};h.set=function(a,b){id(this);this.c=null;a=ld(this,a);nd(this,a)&&(this.b-=this.a.get(a).length);this.a.set(a,[b]);this.b+=1;return this};h.get=function(a,b){if(!a)return b;a=this.S(a);return 0<a.length?String(a[0]):b};function kd(a,b,c){md(a,b);0<c.length&&(a.c=null,a.a.set(ld(a,b),Ka(c)),a.b+=c.length)}\nh.toString=function(){if(this.c)return this.c;if(!this.a)return\"\";for(var a=[],b=this.a.U(),c=0;c<b.length;c++){var d=b[c],e=encodeURIComponent(String(d));d=this.S(d);for(var f=0;f<d.length;f++){var g=e;\"\"!==d[f]&&(g+=\"=\"+encodeURIComponent(String(d[f])));a.push(g)}}return this.c=a.join(\"&\")};function ld(a,b){b=String(b);a.f&&(b=b.toLowerCase());return b}function cd(a,b){b&&!a.f&&(id(a),a.c=null,a.a.forEach(function(c,d){var e=d.toLowerCase();d!=e&&(md(this,d),kd(this,e,c))},a));a.f=b};var od=!Pb||9<=Number($b);function pd(a,b){this.a=a===qd&&b||\"\";this.b=rd}pd.prototype.na=!0;pd.prototype.ma=function(){return this.a};pd.prototype.toString=function(){return\"Const{\"+this.a+\"}\"};function sd(a){if(a instanceof pd&&a.constructor===pd&&a.b===rd)return a.a;ta(\"expected object of type Const, got '\"+a+\"'\");return\"type_error:Const\"}var rd={},qd={};function td(){this.a=\"\";this.b=ud}td.prototype.na=!0;td.prototype.ma=function(){return this.a.toString()};td.prototype.toString=function(){return\"TrustedResourceUrl{\"+this.a+\"}\"};function vd(a){if(a instanceof td&&a.constructor===td&&a.b===ud)return a.a;ta(\"expected object of type TrustedResourceUrl, got '\"+a+\"' of type \"+ha(a));return\"type_error:TrustedResourceUrl\"}\nfunction wd(a,b){var c=sd(a);if(!xd.test(c))throw Error(\"Invalid TrustedResourceUrl format: \"+c);a=c.replace(yd,function(d,e){if(!Object.prototype.hasOwnProperty.call(b,e))throw Error('Found marker, \"'+e+'\", in format string, \"'+c+'\", but no valid label mapping found in args: '+JSON.stringify(b));d=b[e];return d instanceof pd?sd(d):encodeURIComponent(String(d))});return zd(a)}var yd=/%{(\\w+)}/g,xd=/^((https:)?\\/\\/[0-9a-z.:[\\]-]+\\/|\\/[^/\\\\]|[^:/\\\\%]+\\/|[^:/\\\\%]*[?#]|about:blank#)/i,ud={};\nfunction zd(a){var b=new td;b.a=a;return b};function Ad(){this.a=\"\";this.b=Bd}Ad.prototype.na=!0;Ad.prototype.ma=function(){return this.a.toString()};Ad.prototype.toString=function(){return\"SafeUrl{\"+this.a+\"}\"};function Cd(a){if(a instanceof Ad&&a.constructor===Ad&&a.b===Bd)return a.a;ta(\"expected object of type SafeUrl, got '\"+a+\"' of type \"+ha(a));return\"type_error:SafeUrl\"}var Dd=/^(?:(?:https?|mailto|ftp):|[^:/?#]*(?:[/?#]|$))/i;\nfunction Ed(a){if(a instanceof Ad)return a;a=\"object\"==typeof a&&a.na?a.ma():String(a);Dd.test(a)||(a=\"about:invalid#zClosurez\");return Fd(a)}var Bd={};function Fd(a){var b=new Ad;b.a=a;return b}Fd(\"about:blank\");function Gd(){this.a=\"\";this.b=Hd}Gd.prototype.na=!0;Gd.prototype.ma=function(){return this.a.toString()};Gd.prototype.toString=function(){return\"SafeHtml{\"+this.a+\"}\"};function Id(a){if(a instanceof Gd&&a.constructor===Gd&&a.b===Hd)return a.a;ta(\"expected object of type SafeHtml, got '\"+a+\"' of type \"+ha(a));return\"type_error:SafeHtml\"}var Hd={};function Jd(a){var b=new Gd;b.a=a;return b}Jd(\"<!DOCTYPE html>\");Jd(\"\");Jd(\"<br>\");function Kd(a,b){a.src=vd(b);if(null===ea)b:{b=l.document;if((b=b.querySelector&&b.querySelector(\"script[nonce]\"))&&(b=b.nonce||b.getAttribute(\"nonce\"))&&ca.test(b)){ea=b;break b}ea=\"\"}b=ea;b&&a.setAttribute(\"nonce\",b)};function Ld(a){var b=document;return m(a)?b.getElementById(a):a}function Md(a,b){Xa(b,function(c,d){c&&\"object\"==typeof c&&c.na&&(c=c.ma());\"style\"==d?a.style.cssText=c:\"class\"==d?a.className=c:\"for\"==d?a.htmlFor=c:Nd.hasOwnProperty(d)?a.setAttribute(Nd[d],c):0==d.lastIndexOf(\"aria-\",0)||0==d.lastIndexOf(\"data-\",0)?a.setAttribute(d,c):a[d]=c})}\nvar Nd={cellpadding:\"cellPadding\",cellspacing:\"cellSpacing\",colspan:\"colSpan\",frameborder:\"frameBorder\",height:\"height\",maxlength:\"maxLength\",nonce:\"nonce\",role:\"role\",rowspan:\"rowSpan\",type:\"type\",usemap:\"useMap\",valign:\"vAlign\",width:\"width\"};\nfunction Od(a,b,c){var d=arguments,e=document,f=String(d[0]),g=d[1];if(!od&&g&&(g.name||g.type)){f=[\"<\",f];g.name&&f.push(' name=\"',cb(g.name),'\"');if(g.type){f.push(' type=\"',cb(g.type),'\"');var k={};ab(k,g);delete k.type;g=k}f.push(\">\");f=f.join(\"\")}f=e.createElement(f);g&&(m(g)?f.className=g:ja(g)?f.className=g.join(\" \"):Md(f,g));2<d.length&&Pd(e,f,d);return f}\nfunction Pd(a,b,c){function d(g){g&&b.appendChild(m(g)?a.createTextNode(g):g)}for(var e=2;e<c.length;e++){var f=c[e];!ka(f)||r(f)&&0<f.nodeType?d(f):w(Qd(f)?Ka(f):f,d)}}function Qd(a){if(a&&\"number\"==typeof a.length){if(r(a))return\"function\"==typeof a.item||\"string\"==typeof a.item;if(q(a))return\"function\"==typeof a.item}return!1};function Rd(a){var b=[];Sd(new Td,a,b);return b.join(\"\")}function Td(){}\nfunction Sd(a,b,c){if(null==b)c.push(\"null\");else{if(\"object\"==typeof b){if(ja(b)){var d=b;b=d.length;c.push(\"[\");for(var e=\"\",f=0;f<b;f++)c.push(e),Sd(a,d[f],c),e=\",\";c.push(\"]\");return}if(b instanceof String||b instanceof Number||b instanceof Boolean)b=b.valueOf();else{c.push(\"{\");e=\"\";for(d in b)Object.prototype.hasOwnProperty.call(b,d)&&(f=b[d],\"function\"!=typeof f&&(c.push(e),Ud(d,c),c.push(\":\"),Sd(a,f,c),e=\",\"));c.push(\"}\");return}}switch(typeof b){case \"string\":Ud(b,c);break;case \"number\":c.push(isFinite(b)&&\n!isNaN(b)?String(b):\"null\");break;case \"boolean\":c.push(String(b));break;case \"function\":c.push(\"null\");break;default:throw Error(\"Unknown type: \"+typeof b);}}}var Vd={'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\",\"/\":\"\\\\/\",\"\\b\":\"\\\\b\",\"\\f\":\"\\\\f\",\"\\n\":\"\\\\n\",\"\\r\":\"\\\\r\",\"\\t\":\"\\\\t\",\"\\x0B\":\"\\\\u000b\"},Wd=/\\uffff/.test(\"\\uffff\")?/[\\\\\"\\x00-\\x1f\\x7f-\\uffff]/g:/[\\\\\"\\x00-\\x1f\\x7f-\\xff]/g;\nfunction Ud(a,b){b.push('\"',a.replace(Wd,function(c){var d=Vd[c];d||(d=\"\\\\u\"+(c.charCodeAt(0)|65536).toString(16).substr(1),Vd[c]=d);return d}),'\"')};/*\n\n Copyright 2017 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\nfunction Xd(){var a=J();return Pb&&!!$b&&11==$b||/Edge\\/\\d+/.test(a)}function Yd(){return l.window&&l.window.location.href||self&&self.location&&self.location.href||\"\"}function Zd(a,b){b=b||l.window;var c=\"about:blank\";a&&(c=Cd(Ed(a)).toString());b.location.href=c}function $d(a,b){var c=[],d;for(d in a)d in b?typeof a[d]!=typeof b[d]?c.push(d):\"object\"==typeof a[d]&&null!=a[d]&&null!=b[d]?0<$d(a[d],b[d]).length&&c.push(d):a[d]!==b[d]&&c.push(d):c.push(d);for(d in b)d in a||c.push(d);return c}\nfunction ae(){var a=J();a=be(a)!=ce?null:(a=a.match(/\\sChrome\\/(\\d+)/i))&&2==a.length?parseInt(a[1],10):null;return a&&30>a?!1:!Pb||!$b||9<$b}function de(a){a=(a||J()).toLowerCase();return a.match(/android/)||a.match(/webos/)||a.match(/iphone|ipad|ipod/)||a.match(/blackberry/)||a.match(/windows phone/)||a.match(/iemobile/)?!0:!1}function ee(a){a=a||l.window;try{a.close()}catch(b){}}\nfunction fe(a,b,c){var d=Math.floor(1E9*Math.random()).toString();b=b||500;c=c||600;var e=(window.screen.availHeight-c)/2,f=(window.screen.availWidth-b)/2;b={width:b,height:c,top:0<e?e:0,left:0<f?f:0,location:!0,resizable:!0,statusbar:!0,toolbar:!1};c=J().toLowerCase();d&&(b.target=d,y(c,\"crios/\")&&(b.target=\"_blank\"));be(J())==ge&&(a=a||\"http://localhost\",b.scrollbars=!0);c=a||\"\";(a=b)||(a={});d=window;b=c instanceof Ad?c:Ed(\"undefined\"!=typeof c.href?c.href:String(c));c=a.target||c.target;e=[];\nfor(g in a)switch(g){case \"width\":case \"height\":case \"top\":case \"left\":e.push(g+\"=\"+a[g]);break;case \"target\":case \"noopener\":case \"noreferrer\":break;default:e.push(g+\"=\"+(a[g]?1:0))}var g=e.join(\",\");(B(\"iPhone\")&&!B(\"iPod\")&&!B(\"iPad\")||B(\"iPad\")||B(\"iPod\"))&&d.navigator&&d.navigator.standalone&&c&&\"_self\"!=c?(g=d.document.createElement(\"A\"),b instanceof Ad||b instanceof Ad||(b=\"object\"==typeof b&&b.na?b.ma():String(b),Dd.test(b)||(b=\"about:invalid#zClosurez\"),b=Fd(b)),g.href=Cd(b),g.setAttribute(\"target\",\nc),a.noreferrer&&g.setAttribute(\"rel\",\"noreferrer\"),a=document.createEvent(\"MouseEvent\"),a.initMouseEvent(\"click\",!0,!0,d,1),g.dispatchEvent(a),g={}):a.noreferrer?(g=d.open(\"\",c,g),a=Cd(b).toString(),g&&(Rb&&y(a,\";\")&&(a=\"'\"+a.replace(/'/g,\"%27\")+\"'\"),g.opener=null,a=Jd('<meta name=\"referrer\" content=\"no-referrer\"><meta http-equiv=\"refresh\" content=\"0; url='+cb(a)+'\">'),g.document.write(Id(a)),g.document.close())):(g=d.open(Cd(b).toString(),c,g))&&a.noopener&&(g.opener=null);if(g)try{g.focus()}catch(k){}return g}\nfunction he(a){return new C(function(b){function c(){Jc(2E3).then(function(){if(!a||a.closed)b();else return c()})}return c()})}var ie=/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/,je=/^[^@]+@[^@]+$/;function ke(){var a=null;return(new C(function(b){\"complete\"==l.document.readyState?b():(a=function(){b()},uc(window,\"load\",a))})).s(function(b){G(window,\"load\",a);throw b;})}\nfunction le(){return me(void 0)?ke().then(function(){return new C(function(a,b){var c=l.document,d=setTimeout(function(){b(Error(\"Cordova framework is not ready.\"))},1E3);c.addEventListener(\"deviceready\",function(){clearTimeout(d);a()},!1)})}):E(Error(\"Cordova must run in an Android or iOS file scheme.\"))}function me(a){a=a||J();return!(\"file:\"!==ne()||!a.toLowerCase().match(/iphone|ipad|ipod|android/))}function oe(){var a=l.window;try{return!(!a||a==a.top)}catch(b){return!1}}\nfunction pe(){return\"undefined\"!==typeof l.WorkerGlobalScope&&\"function\"===typeof l.importScripts}function qe(){return firebase.INTERNAL.hasOwnProperty(\"reactNative\")?\"ReactNative\":firebase.INTERNAL.hasOwnProperty(\"node\")?\"Node\":pe()?\"Worker\":\"Browser\"}function re(){var a=qe();return\"ReactNative\"===a||\"Node\"===a}function se(){for(var a=50,b=[];0<a;)b.push(\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\".charAt(Math.floor(62*Math.random()))),a--;return b.join(\"\")}\nvar ge=\"Firefox\",ce=\"Chrome\";\nfunction be(a){var b=a.toLowerCase();if(y(b,\"opera/\")||y(b,\"opr/\")||y(b,\"opios/\"))return\"Opera\";if(y(b,\"iemobile\"))return\"IEMobile\";if(y(b,\"msie\")||y(b,\"trident/\"))return\"IE\";if(y(b,\"edge/\"))return\"Edge\";if(y(b,\"firefox/\"))return ge;if(y(b,\"silk/\"))return\"Silk\";if(y(b,\"blackberry\"))return\"Blackberry\";if(y(b,\"webos\"))return\"Webos\";if(!y(b,\"safari/\")||y(b,\"chrome/\")||y(b,\"crios/\")||y(b,\"android\"))if(!y(b,\"chrome/\")&&!y(b,\"crios/\")||y(b,\"edge/\")){if(y(b,\"android\"))return\"Android\";if((a=a.match(/([a-zA-Z\\d\\.]+)\\/[a-zA-Z\\d\\.]*$/))&&\n2==a.length)return a[1]}else return ce;else return\"Safari\";return\"Other\"}var te={Wc:\"FirebaseCore-web\",Yc:\"FirebaseUI-web\"};function ue(a,b){b=b||[];var c=[],d={},e;for(e in te)d[te[e]]=!0;for(e=0;e<b.length;e++)\"undefined\"!==typeof d[b[e]]&&(delete d[b[e]],c.push(b[e]));c.sort();b=c;b.length||(b=[\"FirebaseCore-web\"]);c=qe();\"Browser\"===c?(d=J(),c=be(d)):\"Worker\"===c&&(d=J(),c=be(d)+\"-\"+c);return c+\"/JsCore/\"+a+\"/\"+b.join(\",\")}function J(){return l.navigator&&l.navigator.userAgent||\"\"}\nfunction K(a,b){a=a.split(\".\");b=b||l;for(var c=0;c<a.length&&\"object\"==typeof b&&null!=b;c++)b=b[a[c]];c!=a.length&&(b=void 0);return b}function ve(){try{var a=l.localStorage,b=we();if(a)return a.setItem(b,\"1\"),a.removeItem(b),Xd()?!!l.indexedDB:!0}catch(c){return pe()&&!!l.indexedDB}return!1}function xe(){return(ye()||\"chrome-extension:\"===ne()||me())&&!re()&&ve()&&!pe()}function ye(){return\"http:\"===ne()||\"https:\"===ne()}function ne(){return l.location&&l.location.protocol||null}\nfunction ze(a){a=a||J();return de(a)||be(a)==ge?!1:!0}function Ae(a){return\"undefined\"===typeof a?null:Rd(a)}function Be(a){var b={},c;for(c in a)a.hasOwnProperty(c)&&null!==a[c]&&void 0!==a[c]&&(b[c]=a[c]);return b}function Ce(a){if(null!==a)return JSON.parse(a)}function we(a){return a?a:Math.floor(1E9*Math.random()).toString()}function De(a){a=a||J();return\"Safari\"==be(a)||a.toLowerCase().match(/iphone|ipad|ipod/)?!1:!0}\nfunction Ee(){var a=l.___jsl;if(a&&a.H)for(var b in a.H)if(a.H[b].r=a.H[b].r||[],a.H[b].L=a.H[b].L||[],a.H[b].r=a.H[b].L.concat(),a.CP)for(var c=0;c<a.CP.length;c++)a.CP[c]=null}function Fe(a,b){if(a>b)throw Error(\"Short delay should be less than long delay!\");this.a=a;this.c=b;a=J();b=qe();this.b=de(a)||\"ReactNative\"===b}\nFe.prototype.get=function(){var a=l.navigator;return(a&&\"boolean\"===typeof a.onLine&&(ye()||\"chrome-extension:\"===ne()||\"undefined\"!==typeof a.connection)?a.onLine:1)?this.b?this.c:this.a:Math.min(5E3,this.a)};function Ge(){var a=l.document;return a&&\"undefined\"!==typeof a.visibilityState?\"visible\"==a.visibilityState:!0}\nfunction He(){var a=l.document,b=null;return Ge()||!a?D():(new C(function(c){b=function(){Ge()&&(a.removeEventListener(\"visibilitychange\",b,!1),c())};a.addEventListener(\"visibilitychange\",b,!1)})).s(function(c){a.removeEventListener(\"visibilitychange\",b,!1);throw c;})}function Ie(a){try{var b=new Date(parseInt(a,10));if(!isNaN(b.getTime())&&!/[^0-9]/.test(a))return b.toUTCString()}catch(c){}return null}function Je(){return!(!K(\"fireauth.oauthhelper\",l)&&!K(\"fireauth.iframe\",l))}\nfunction Ke(){var a=l.navigator;return a&&a.serviceWorker&&a.serviceWorker.controller||null}function Le(){var a=l.navigator;return a&&a.serviceWorker?D().then(function(){return a.serviceWorker.ready}).then(function(b){return b.active||null}).s(function(){return null}):D(null)};var Me={};function Ne(a){Me[a]||(Me[a]=!0,\"undefined\"!==typeof console&&\"function\"===typeof console.warn&&console.warn(a))};var Oe;try{var Pe={};Object.defineProperty(Pe,\"abcd\",{configurable:!0,enumerable:!0,value:1});Object.defineProperty(Pe,\"abcd\",{configurable:!0,enumerable:!0,value:2});Oe=2==Pe.abcd}catch(a){Oe=!1}function L(a,b,c){Oe?Object.defineProperty(a,b,{configurable:!0,enumerable:!0,value:c}):a[b]=c}function M(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&L(a,c,b[c])}function Qe(a){var b={};M(b,a);return b}function Re(a){var b={},c;for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}\nfunction Se(a,b){if(!b||!b.length)return!0;if(!a)return!1;for(var c=0;c<b.length;c++){var d=a[b[c]];if(void 0===d||null===d||\"\"===d)return!1}return!0}function Te(a){var b=a;if(\"object\"==typeof a&&null!=a){b=\"length\"in a?[]:{};for(var c in a)L(b,c,Te(a[c]))}return b};function Ue(a){var b={},c=a[Ve],d=a[We];a=a[Xe];if(!a||a!=Ye&&!c)throw Error(\"Invalid provider user info!\");b[Ze]=d||null;b[$e]=c||null;L(this,af,a);L(this,bf,Te(b))}var Ye=\"EMAIL_SIGNIN\",Ve=\"email\",We=\"newEmail\",Xe=\"requestType\",$e=\"email\",Ze=\"fromEmail\",bf=\"data\",af=\"operation\";function N(a,b){this.code=cf+a;this.message=b||df[a]||\"\"}u(N,Error);N.prototype.w=function(){return{code:this.code,message:this.message}};N.prototype.toJSON=function(){return this.w()};function ef(a){var b=a&&a.code;return b?new N(b.substring(cf.length),a.message):null}\nvar cf=\"auth/\",df={\"admin-restricted-operation\":\"This operation is restricted to administrators only.\",\"argument-error\":\"\",\"app-not-authorized\":\"This app, identified by the domain where it's hosted, is not authorized to use Firebase Authentication with the provided API key. Review your key configuration in the Google API console.\",\"app-not-installed\":\"The requested mobile application corresponding to the identifier (Android package name or iOS bundle ID) provided is not installed on this device.\",\n\"captcha-check-failed\":\"The reCAPTCHA response token provided is either invalid, expired, already used or the domain associated with it does not match the list of whitelisted domains.\",\"code-expired\":\"The SMS code has expired. Please re-send the verification code to try again.\",\"cordova-not-ready\":\"Cordova framework is not ready.\",\"cors-unsupported\":\"This browser is not supported.\",\"credential-already-in-use\":\"This credential is already associated with a different user account.\",\"custom-token-mismatch\":\"The custom token corresponds to a different audience.\",\n\"requires-recent-login\":\"This operation is sensitive and requires recent authentication. Log in again before retrying this request.\",\"dynamic-link-not-activated\":\"Please activate Dynamic Links in the Firebase Console and agree to the terms and conditions.\",\"email-already-in-use\":\"The email address is already in use by another account.\",\"expired-action-code\":\"The action code has expired. \",\"cancelled-popup-request\":\"This operation has been cancelled due to another conflicting popup being opened.\",\n\"internal-error\":\"An internal error has occurred.\",\"invalid-app-credential\":\"The phone verification request contains an invalid application verifier. The reCAPTCHA token response is either invalid or expired.\",\"invalid-app-id\":\"The mobile app identifier is not registed for the current project.\",\"invalid-user-token\":\"This user's credential isn't valid for this project. This can happen if the user's token has been tampered with, or if the user isn't for the project associated with this API key.\",\"invalid-auth-event\":\"An internal error has occurred.\",\n\"invalid-verification-code\":\"The SMS verification code used to create the phone auth credential is invalid. Please resend the verification code sms and be sure use the verification code provided by the user.\",\"invalid-continue-uri\":\"The continue URL provided in the request is invalid.\",\"invalid-cordova-configuration\":\"The following Cordova plugins must be installed to enable OAuth sign-in: cordova-plugin-buildinfo, cordova-universal-links-plugin, cordova-plugin-browsertab, cordova-plugin-inappbrowser and cordova-plugin-customurlscheme.\",\n\"invalid-custom-token\":\"The custom token format is incorrect. Please check the documentation.\",\"invalid-dynamic-link-domain\":\"The provided dynamic link domain is not configured or authorized for the current project.\",\"invalid-email\":\"The email address is badly formatted.\",\"invalid-api-key\":\"Your API key is invalid, please check you have copied it correctly.\",\"invalid-cert-hash\":\"The SHA-1 certificate hash provided is invalid.\",\"invalid-credential\":\"The supplied auth credential is malformed or has expired.\",\n\"invalid-message-payload\":\"The email template corresponding to this action contains invalid characters in its message. Please fix by going to the Auth email templates section in the Firebase Console.\",\"invalid-oauth-provider\":\"EmailAuthProvider is not supported for this operation. This operation only supports OAuth providers.\",\"invalid-oauth-client-id\":\"The OAuth client ID provided is either invalid or does not match the specified API key.\",\"unauthorized-domain\":\"This domain is not authorized for OAuth operations for your Firebase project. Edit the list of authorized domains from the Firebase console.\",\n\"invalid-action-code\":\"The action code is invalid. This can happen if the code is malformed, expired, or has already been used.\",\"wrong-password\":\"The password is invalid or the user does not have a password.\",\"invalid-persistence-type\":\"The specified persistence type is invalid. It can only be local, session or none.\",\"invalid-phone-number\":\"The format of the phone number provided is incorrect. Please enter the phone number in a format that can be parsed into E.164 format. E.164 phone numbers are written in the format [+][country code][subscriber number including area code].\",\n\"invalid-provider-id\":\"The specified provider ID is invalid.\",\"invalid-recipient-email\":\"The email corresponding to this action failed to send as the provided recipient email address is invalid.\",\"invalid-sender\":\"The email template corresponding to this action contains an invalid sender email or name. Please fix by going to the Auth email templates section in the Firebase Console.\",\"invalid-verification-id\":\"The verification ID used to create the phone auth credential is invalid.\",\"missing-android-pkg-name\":\"An Android Package Name must be provided if the Android App is required to be installed.\",\n\"auth-domain-config-required\":\"Be sure to include authDomain when calling firebase.initializeApp(), by following the instructions in the Firebase console.\",\"missing-app-credential\":\"The phone verification request is missing an application verifier assertion. A reCAPTCHA response token needs to be provided.\",\"missing-verification-code\":\"The phone auth credential was created with an empty SMS verification code.\",\"missing-continue-uri\":\"A continue URL must be provided in the request.\",\"missing-iframe-start\":\"An internal error has occurred.\",\n\"missing-ios-bundle-id\":\"An iOS Bundle ID must be provided if an App Store ID is provided.\",\"missing-or-invalid-nonce\":\"The OIDC ID token requires a valid unhashed nonce.\",\"missing-phone-number\":\"To send verification codes, provide a phone number for the recipient.\",\"missing-verification-id\":\"The phone auth credential was created with an empty verification ID.\",\"app-deleted\":\"This instance of FirebaseApp has been deleted.\",\"account-exists-with-different-credential\":\"An account already exists with the same email address but different sign-in credentials. Sign in using a provider associated with this email address.\",\n\"network-request-failed\":\"A network error (such as timeout, interrupted connection or unreachable host) has occurred.\",\"no-auth-event\":\"An internal error has occurred.\",\"no-such-provider\":\"User was not linked to an account with the given provider.\",\"null-user\":\"A null user object was provided as the argument for an operation which requires a non-null user object.\",\"operation-not-allowed\":\"The given sign-in provider is disabled for this Firebase project. Enable it in the Firebase console, under the sign-in method tab of the Auth section.\",\n\"operation-not-supported-in-this-environment\":'This operation is not supported in the environment this application is running on. \"location.protocol\" must be http, https or chrome-extension and web storage must be enabled.',\"popup-blocked\":\"Unable to establish a connection with the popup. It may have been blocked by the browser.\",\"popup-closed-by-user\":\"The popup has been closed by the user before finalizing the operation.\",\"provider-already-linked\":\"User can only be linked to one identity for the given provider.\",\n\"quota-exceeded\":\"The project's quota for this operation has been exceeded.\",\"redirect-cancelled-by-user\":\"The redirect operation has been cancelled by the user before finalizing.\",\"redirect-operation-pending\":\"A redirect sign-in operation is already pending.\",\"rejected-credential\":\"The request contains malformed or mismatching credentials.\",timeout:\"The operation has timed out.\",\"user-token-expired\":\"The user's credential is no longer valid. The user must sign in again.\",\"too-many-requests\":\"We have blocked all requests from this device due to unusual activity. Try again later.\",\n\"unauthorized-continue-uri\":\"The domain of the continue URL is not whitelisted.  Please whitelist the domain in the Firebase console.\",\"unsupported-persistence-type\":\"The current environment does not support the specified persistence type.\",\"user-cancelled\":\"User did not grant your application the permissions it requested.\",\"user-not-found\":\"There is no user record corresponding to this identifier. The user may have been deleted.\",\"user-disabled\":\"The user account has been disabled by an administrator.\",\n\"user-mismatch\":\"The supplied credentials do not correspond to the previously signed in user.\",\"user-signed-out\":\"\",\"weak-password\":\"The password must be 6 characters long or more.\",\"web-storage-unsupported\":\"This browser is not supported or 3rd party cookies and data may be disabled.\"};function ff(a){var b=a[gf];if(\"undefined\"===typeof b)throw new N(\"missing-continue-uri\");if(\"string\"!==typeof b||\"string\"===typeof b&&!b.length)throw new N(\"invalid-continue-uri\");this.h=b;this.b=this.a=null;this.g=!1;var c=a[hf];if(c&&\"object\"===typeof c){b=c[jf];var d=c[kf];c=c[lf];if(\"string\"===typeof b&&b.length){this.a=b;if(\"undefined\"!==typeof d&&\"boolean\"!==typeof d)throw new N(\"argument-error\",kf+\" property must be a boolean when specified.\");this.g=!!d;if(\"undefined\"!==typeof c&&(\"string\"!==\ntypeof c||\"string\"===typeof c&&!c.length))throw new N(\"argument-error\",lf+\" property must be a non empty string when specified.\");this.b=c||null}else{if(\"undefined\"!==typeof b)throw new N(\"argument-error\",jf+\" property must be a non empty string when specified.\");if(\"undefined\"!==typeof d||\"undefined\"!==typeof c)throw new N(\"missing-android-pkg-name\");}}else if(\"undefined\"!==typeof c)throw new N(\"argument-error\",hf+\" property must be a non null object when specified.\");this.f=null;if((b=a[mf])&&\"object\"===\ntypeof b)if(b=b[nf],\"string\"===typeof b&&b.length)this.f=b;else{if(\"undefined\"!==typeof b)throw new N(\"argument-error\",nf+\" property must be a non empty string when specified.\");}else if(\"undefined\"!==typeof b)throw new N(\"argument-error\",mf+\" property must be a non null object when specified.\");b=a[of];if(\"undefined\"!==typeof b&&\"boolean\"!==typeof b)throw new N(\"argument-error\",of+\" property must be a boolean when specified.\");this.c=!!b;a=a[pf];if(\"undefined\"!==typeof a&&(\"string\"!==typeof a||\"string\"===\ntypeof a&&!a.length))throw new N(\"argument-error\",pf+\" property must be a non empty string when specified.\");this.i=a||null}var hf=\"android\",pf=\"dynamicLinkDomain\",of=\"handleCodeInApp\",mf=\"iOS\",gf=\"url\",kf=\"installApp\",lf=\"minimumVersion\",jf=\"packageName\",nf=\"bundleId\";\nfunction qf(a){var b={};b.continueUrl=a.h;b.canHandleCodeInApp=a.c;if(b.androidPackageName=a.a)b.androidMinimumVersion=a.b,b.androidInstallApp=a.g;b.iOSBundleId=a.f;b.dynamicLinkDomain=a.i;for(var c in b)null===b[c]&&delete b[c];return b};function rf(a){return Da(a,function(b){b=b.toString(16);return 1<b.length?b:\"0\"+b}).join(\"\")};var sf=null,tf=null;function uf(a){var b=\"\";vf(a,function(c){b+=String.fromCharCode(c)});return b}function vf(a,b){function c(n){for(;d<a.length;){var p=a.charAt(d++),z=tf[p];if(null!=z)return z;if(!/^[\\s\\xa0]*$/.test(p))throw Error(\"Unknown base64 encoding at char: \"+p);}return n}wf();for(var d=0;;){var e=c(-1),f=c(0),g=c(64),k=c(64);if(64===k&&-1===e)break;b(e<<2|f>>4);64!=g&&(b(f<<4&240|g>>2),64!=k&&b(g<<6&192|k))}}\nfunction wf(){if(!sf){sf={};tf={};for(var a=0;65>a;a++)sf[a]=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".charAt(a),tf[sf[a]]=a,62<=a&&(tf[\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.\".charAt(a)]=a)}};function xf(a){this.c=a.sub;qa();this.a=a.provider_id||a.firebase&&a.firebase.sign_in_provider||null;this.b=!!a.is_anonymous||\"anonymous\"==this.a}xf.prototype.f=function(){return this.b};function yf(a){return(a=zf(a))&&a.sub&&a.iss&&a.aud&&a.exp?new xf(a):null}function zf(a){if(!a)return null;a=a.split(\".\");if(3!=a.length)return null;a=a[1];for(var b=(4-a.length%4)%4,c=0;c<b;c++)a+=\".\";try{return JSON.parse(uf(a))}catch(d){}return null};var Af={bd:{bb:\"https://www.googleapis.com/identitytoolkit/v3/relyingparty/\",jb:\"https://securetoken.googleapis.com/v1/token\",id:\"p\"},dd:{bb:\"https://staging-www.sandbox.googleapis.com/identitytoolkit/v3/relyingparty/\",jb:\"https://staging-securetoken.sandbox.googleapis.com/v1/token\",id:\"s\"},ed:{bb:\"https://www-googleapis-test.sandbox.google.com/identitytoolkit/v3/relyingparty/\",jb:\"https://test-securetoken.sandbox.googleapis.com/v1/token\",id:\"t\"}};\nfunction Bf(a){for(var b in Af)if(Af[b].id===a)return a=Af[b],{firebaseEndpoint:a.bb,secureTokenEndpoint:a.jb};return null}var Cf;Cf=Bf(\"__EID__\")?\"__EID__\":void 0;var Df=\"oauth_consumer_key oauth_nonce oauth_signature oauth_signature_method oauth_timestamp oauth_token oauth_version\".split(\" \"),Ef=[\"client_id\",\"response_type\",\"scope\",\"redirect_uri\",\"state\"],Ff={Xc:{Na:\"locale\",Ba:500,Aa:600,Oa:\"facebook.com\",ib:Ef},Zc:{Na:null,Ba:500,Aa:620,Oa:\"github.com\",ib:Ef},$c:{Na:\"hl\",Ba:515,Aa:680,Oa:\"google.com\",ib:Ef},fd:{Na:\"lang\",Ba:485,Aa:705,Oa:\"twitter.com\",ib:Df}};function Gf(a){for(var b in Ff)if(Ff[b].Oa==a)return Ff[b];return null};function Hf(a){var b={};b[\"facebook.com\"]=If;b[\"google.com\"]=Jf;b[\"github.com\"]=Kf;b[\"twitter.com\"]=Lf;var c=a&&a[Mf];try{if(c)return b[c]?new b[c](a):new Nf(a);if(\"undefined\"!==typeof a[Of])return new Pf(a)}catch(d){}return null}var Of=\"idToken\",Mf=\"providerId\";\nfunction Pf(a){var b=a[Mf];if(!b&&a[Of]){var c=yf(a[Of]);c&&c.a&&(b=c.a)}if(!b)throw Error(\"Invalid additional user info!\");if(\"anonymous\"==b||\"custom\"==b)b=null;c=!1;\"undefined\"!==typeof a.isNewUser?c=!!a.isNewUser:\"identitytoolkit#SignupNewUserResponse\"===a.kind&&(c=!0);L(this,\"providerId\",b);L(this,\"isNewUser\",c)}function Nf(a){Pf.call(this,a);a=Ce(a.rawUserInfo||\"{}\");L(this,\"profile\",Te(a||{}))}u(Nf,Pf);\nfunction If(a){Nf.call(this,a);if(\"facebook.com\"!=this.providerId)throw Error(\"Invalid provider ID!\");}u(If,Nf);function Kf(a){Nf.call(this,a);if(\"github.com\"!=this.providerId)throw Error(\"Invalid provider ID!\");L(this,\"username\",this.profile&&this.profile.login||null)}u(Kf,Nf);function Jf(a){Nf.call(this,a);if(\"google.com\"!=this.providerId)throw Error(\"Invalid provider ID!\");}u(Jf,Nf);\nfunction Lf(a){Nf.call(this,a);if(\"twitter.com\"!=this.providerId)throw Error(\"Invalid provider ID!\");L(this,\"username\",a.screenName||null)}u(Lf,Nf);function Qf(a){this.a=fd(a)};function Rf(a){var b=fd(a),c=ed(b,\"link\"),d=ed(fd(c),\"link\");b=ed(b,\"deep_link_id\");return ed(fd(b),\"link\")||b||d||c||a};function Sf(){}function Tf(a,b){return a.then(function(c){if(c[Uf]){var d=yf(c[Uf]);if(!d||b!=d.c)throw new N(\"user-mismatch\");return c}throw new N(\"user-mismatch\");}).s(function(c){throw c&&c.code&&c.code==cf+\"user-not-found\"?new N(\"user-mismatch\"):c;})}function Vf(a,b){if(b)this.a=b;else throw new N(\"internal-error\",\"failed to construct a credential\");L(this,\"providerId\",a);L(this,\"signInMethod\",a)}Vf.prototype.la=function(a){return Wf(a,Xf(this))};\nVf.prototype.b=function(a,b){var c=Xf(this);c.idToken=b;return Yf(a,c)};Vf.prototype.f=function(a,b){return Tf(Zf(a,Xf(this)),b)};function Xf(a){return{pendingToken:a.a,requestUri:\"http://localhost\"}}Vf.prototype.w=function(){return{providerId:this.providerId,signInMethod:this.signInMethod,pendingToken:this.a}};function $f(a){if(a&&a.providerId&&a.signInMethod&&0==a.providerId.indexOf(\"saml.\")&&a.pendingToken)try{return new Vf(a.providerId,a.pendingToken)}catch(b){}return null}\nfunction ag(a,b,c){this.a=null;if(b.idToken||b.accessToken)b.idToken&&L(this,\"idToken\",b.idToken),b.accessToken&&L(this,\"accessToken\",b.accessToken),b.nonce&&!b.pendingToken&&L(this,\"nonce\",b.nonce),b.pendingToken&&(this.a=b.pendingToken);else if(b.oauthToken&&b.oauthTokenSecret)L(this,\"accessToken\",b.oauthToken),L(this,\"secret\",b.oauthTokenSecret);else throw new N(\"internal-error\",\"failed to construct a credential\");L(this,\"providerId\",a);L(this,\"signInMethod\",c)}\nag.prototype.la=function(a){return Wf(a,bg(this))};ag.prototype.b=function(a,b){var c=bg(this);c.idToken=b;return Yf(a,c)};ag.prototype.f=function(a,b){var c=bg(this);return Tf(Zf(a,c),b)};\nfunction bg(a){var b={};a.idToken&&(b.id_token=a.idToken);a.accessToken&&(b.access_token=a.accessToken);a.secret&&(b.oauth_token_secret=a.secret);b.providerId=a.providerId;a.nonce&&!a.a&&(b.nonce=a.nonce);b={postBody:jd(b).toString(),requestUri:\"http://localhost\"};a.a&&(delete b.postBody,b.pendingToken=a.a);return b}\nag.prototype.w=function(){var a={providerId:this.providerId,signInMethod:this.signInMethod};this.idToken&&(a.oauthIdToken=this.idToken);this.accessToken&&(a.oauthAccessToken=this.accessToken);this.secret&&(a.oauthTokenSecret=this.secret);this.nonce&&(a.nonce=this.nonce);this.a&&(a.pendingToken=this.a);return a};\nfunction cg(a){if(a&&a.providerId&&a.signInMethod){var b={idToken:a.oauthIdToken,accessToken:a.oauthTokenSecret?null:a.oauthAccessToken,oauthTokenSecret:a.oauthTokenSecret,oauthToken:a.oauthTokenSecret&&a.oauthAccessToken,nonce:a.nonce,pendingToken:a.pendingToken};try{return new ag(a.providerId,b,a.signInMethod)}catch(c){}}return null}function dg(a,b){this.Fc=b||[];M(this,{providerId:a,isOAuthProvider:!0});this.zb={};this.eb=(Gf(a)||{}).Na||null;this.ab=null}\ndg.prototype.Da=function(a){this.zb=Za(a);return this};function eg(a){if(\"string\"!==typeof a||0!=a.indexOf(\"saml.\"))throw new N(\"argument-error\",'SAML provider IDs must be prefixed with \"saml.\"');dg.call(this,a,[])}u(eg,dg);function O(a){dg.call(this,a,Ef);this.a=[]}u(O,dg);O.prototype.ua=function(a){Ha(this.a,a)||this.a.push(a);return this};O.prototype.Fb=function(){return Ka(this.a)};\nO.prototype.credential=function(a,b){var c;r(a)?c={idToken:a.idToken||null,accessToken:a.accessToken||null,nonce:a.rawNonce||null}:c={idToken:a||null,accessToken:b||null};if(!c.idToken&&!c.accessToken)throw new N(\"argument-error\",\"credential failed: must provide the ID token and/or the access token.\");return new ag(this.providerId,c,this.providerId)};function fg(){O.call(this,\"facebook.com\")}u(fg,O);L(fg,\"PROVIDER_ID\",\"facebook.com\");L(fg,\"FACEBOOK_SIGN_IN_METHOD\",\"facebook.com\");\nfunction gg(a){if(!a)throw new N(\"argument-error\",\"credential failed: expected 1 argument (the OAuth access token).\");var b=a;r(a)&&(b=a.accessToken);return(new fg).credential({accessToken:b})}function hg(){O.call(this,\"github.com\")}u(hg,O);L(hg,\"PROVIDER_ID\",\"github.com\");L(hg,\"GITHUB_SIGN_IN_METHOD\",\"github.com\");\nfunction ig(a){if(!a)throw new N(\"argument-error\",\"credential failed: expected 1 argument (the OAuth access token).\");var b=a;r(a)&&(b=a.accessToken);return(new hg).credential({accessToken:b})}function jg(){O.call(this,\"google.com\");this.ua(\"profile\")}u(jg,O);L(jg,\"PROVIDER_ID\",\"google.com\");L(jg,\"GOOGLE_SIGN_IN_METHOD\",\"google.com\");function kg(a,b){var c=a;r(a)&&(c=a.idToken,b=a.accessToken);return(new jg).credential({idToken:c,accessToken:b})}function lg(){dg.call(this,\"twitter.com\",Df)}u(lg,dg);\nL(lg,\"PROVIDER_ID\",\"twitter.com\");L(lg,\"TWITTER_SIGN_IN_METHOD\",\"twitter.com\");function mg(a,b){var c=a;r(c)||(c={oauthToken:a,oauthTokenSecret:b});if(!c.oauthToken||!c.oauthTokenSecret)throw new N(\"argument-error\",\"credential failed: expected 2 arguments (the OAuth access token and secret).\");return new ag(\"twitter.com\",c,\"twitter.com\")}\nfunction ng(a,b,c){this.a=a;this.c=b;L(this,\"providerId\",\"password\");L(this,\"signInMethod\",c===og.EMAIL_LINK_SIGN_IN_METHOD?og.EMAIL_LINK_SIGN_IN_METHOD:og.EMAIL_PASSWORD_SIGN_IN_METHOD)}ng.prototype.la=function(a){return this.signInMethod==og.EMAIL_LINK_SIGN_IN_METHOD?P(a,pg,{email:this.a,oobCode:this.c}):P(a,qg,{email:this.a,password:this.c})};\nng.prototype.b=function(a,b){return this.signInMethod==og.EMAIL_LINK_SIGN_IN_METHOD?P(a,rg,{idToken:b,email:this.a,oobCode:this.c}):P(a,sg,{idToken:b,email:this.a,password:this.c})};ng.prototype.f=function(a,b){return Tf(this.la(a),b)};ng.prototype.w=function(){return{email:this.a,password:this.c,signInMethod:this.signInMethod}};function tg(a){return a&&a.email&&a.password?new ng(a.email,a.password,a.signInMethod):null}function og(){M(this,{providerId:\"password\",isOAuthProvider:!1})}\nfunction ug(a,b){b=vg(b);if(!b)throw new N(\"argument-error\",\"Invalid email link!\");return new ng(a,b,og.EMAIL_LINK_SIGN_IN_METHOD)}function vg(a){a=Rf(a);a=new Qf(a);var b=ed(a.a,\"oobCode\")||null;return\"signIn\"===(ed(a.a,\"mode\")||null)&&b?b:null}M(og,{PROVIDER_ID:\"password\"});M(og,{EMAIL_LINK_SIGN_IN_METHOD:\"emailLink\"});M(og,{EMAIL_PASSWORD_SIGN_IN_METHOD:\"password\"});\nfunction wg(a){if(!(a.Ua&&a.Ta||a.Fa&&a.$))throw new N(\"internal-error\");this.a=a;L(this,\"providerId\",\"phone\");L(this,\"signInMethod\",\"phone\")}wg.prototype.la=function(a){return a.Va(xg(this))};wg.prototype.b=function(a,b){var c=xg(this);c.idToken=b;return P(a,yg,c)};wg.prototype.f=function(a,b){var c=xg(this);c.operation=\"REAUTH\";a=P(a,zg,c);return Tf(a,b)};\nwg.prototype.w=function(){var a={providerId:\"phone\"};this.a.Ua&&(a.verificationId=this.a.Ua);this.a.Ta&&(a.verificationCode=this.a.Ta);this.a.Fa&&(a.temporaryProof=this.a.Fa);this.a.$&&(a.phoneNumber=this.a.$);return a};function Ag(a){if(a&&\"phone\"===a.providerId&&(a.verificationId&&a.verificationCode||a.temporaryProof&&a.phoneNumber)){var b={};w([\"verificationId\",\"verificationCode\",\"temporaryProof\",\"phoneNumber\"],function(c){a[c]&&(b[c]=a[c])});return new wg(b)}return null}\nfunction xg(a){return a.a.Fa&&a.a.$?{temporaryProof:a.a.Fa,phoneNumber:a.a.$}:{sessionInfo:a.a.Ua,code:a.a.Ta}}function Bg(a){try{this.a=a||firebase.auth()}catch(b){throw new N(\"argument-error\",\"Either an instance of firebase.auth.Auth must be passed as an argument to the firebase.auth.PhoneAuthProvider constructor, or the default firebase App instance must be initialized via firebase.initializeApp().\");}M(this,{providerId:\"phone\",isOAuthProvider:!1})}\nBg.prototype.Va=function(a,b){var c=this.a.b;return D(b.verify()).then(function(d){if(!m(d))throw new N(\"argument-error\",\"An implementation of firebase.auth.ApplicationVerifier.prototype.verify() must return a firebase.Promise that resolves with a string.\");switch(b.type){case \"recaptcha\":return Cg(c,{phoneNumber:a,recaptchaToken:d}).then(function(e){\"function\"===typeof b.reset&&b.reset();return e},function(e){\"function\"===typeof b.reset&&b.reset();throw e;});default:throw new N(\"argument-error\",\n'Only firebase.auth.ApplicationVerifiers with type=\"recaptcha\" are currently supported.');}})};function Dg(a,b){if(!a)throw new N(\"missing-verification-id\");if(!b)throw new N(\"missing-verification-code\");return new wg({Ua:a,Ta:b})}M(Bg,{PROVIDER_ID:\"phone\"});M(Bg,{PHONE_SIGN_IN_METHOD:\"phone\"});\nfunction Eg(a){if(a.temporaryProof&&a.phoneNumber)return new wg({Fa:a.temporaryProof,$:a.phoneNumber});var b=a&&a.providerId;if(!b||\"password\"===b)return null;var c=a&&a.oauthAccessToken,d=a&&a.oauthTokenSecret,e=a&&a.nonce,f=a&&a.oauthIdToken,g=a&&a.pendingToken;try{switch(b){case \"google.com\":return kg(f,c);case \"facebook.com\":return gg(c);case \"github.com\":return ig(c);case \"twitter.com\":return mg(c,d);default:return c||d||f||g?g?0==b.indexOf(\"saml.\")?new Vf(b,g):new ag(b,{pendingToken:g,idToken:a.oauthIdToken,\naccessToken:a.oauthAccessToken},b):(new O(b)).credential({idToken:f,accessToken:c,rawNonce:e}):null}}catch(k){return null}}function Fg(a){if(!a.isOAuthProvider)throw new N(\"invalid-oauth-provider\");};function Gg(a,b,c,d,e,f){this.c=a;this.b=b||null;this.g=c||null;this.f=d||null;this.h=f||null;this.a=e||null;if(this.g||this.a){if(this.g&&this.a)throw new N(\"invalid-auth-event\");if(this.g&&!this.f)throw new N(\"invalid-auth-event\");}else throw new N(\"invalid-auth-event\");}Gg.prototype.getUid=function(){var a=[];a.push(this.c);this.b&&a.push(this.b);this.f&&a.push(this.f);this.i&&a.push(this.i);return a.join(\"-\")};\nGg.prototype.w=function(){return{type:this.c,eventId:this.b,urlResponse:this.g,sessionId:this.f,postBody:this.h,error:this.a&&this.a.w()}};function Hg(a){a=a||{};return a.type?new Gg(a.type,a.eventId,a.urlResponse,a.sessionId,a.error&&ef(a.error),a.postBody):null};/*\n\n Copyright 2018 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n   http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\nfunction Ig(){this.b=null;this.a=[]}var Jg=null;Ig.prototype.subscribe=function(a){var b=this;this.a.push(a);this.b||(this.b=function(c){for(var d=0;d<b.a.length;d++)b.a[d](c)},a=K(\"universalLinks.subscribe\",l),\"function\"===typeof a&&a(null,this.b))};Ig.prototype.unsubscribe=function(a){x(this.a,function(b){return b==a})};function Kg(a){var b=\"unauthorized-domain\",c=void 0,d=fd(a);a=d.b;d=d.c;\"chrome-extension\"==d?c=bb(\"This chrome extension ID (chrome-extension://%s) is not authorized to run this operation. Add it to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.\",a):\"http\"==d||\"https\"==d?c=bb(\"This domain (%s) is not authorized to run this operation. Add it to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.\",a):b=\"operation-not-supported-in-this-environment\";\nN.call(this,b,c)}u(Kg,N);function Lg(a,b,c){N.call(this,a,c);a=b||{};a.Ab&&L(this,\"email\",a.Ab);a.$&&L(this,\"phoneNumber\",a.$);a.credential&&L(this,\"credential\",a.credential)}u(Lg,N);Lg.prototype.w=function(){var a={code:this.code,message:this.message};this.email&&(a.email=this.email);this.phoneNumber&&(a.phoneNumber=this.phoneNumber);var b=this.credential&&this.credential.w();b&&ab(a,b);return a};Lg.prototype.toJSON=function(){return this.w()};\nfunction Mg(a){if(a.code){var b=a.code||\"\";0==b.indexOf(cf)&&(b=b.substring(cf.length));var c={credential:Eg(a)};if(a.email)c.Ab=a.email;else if(a.phoneNumber)c.$=a.phoneNumber;else if(!c.credential)return new N(b,a.message||void 0);return new Lg(b,c,a.message)}return null};function Ng(){}Ng.prototype.c=null;function Og(a){return a.c||(a.c=a.b())};var Pg;function Qg(){}u(Qg,Ng);Qg.prototype.a=function(){var a=Rg(this);return a?new ActiveXObject(a):new XMLHttpRequest};Qg.prototype.b=function(){var a={};Rg(this)&&(a[0]=!0,a[1]=!0);return a};\nfunction Rg(a){if(!a.f&&\"undefined\"==typeof XMLHttpRequest&&\"undefined\"!=typeof ActiveXObject){for(var b=[\"MSXML2.XMLHTTP.6.0\",\"MSXML2.XMLHTTP.3.0\",\"MSXML2.XMLHTTP\",\"Microsoft.XMLHTTP\"],c=0;c<b.length;c++){var d=b[c];try{return new ActiveXObject(d),a.f=d}catch(e){}}throw Error(\"Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed\");}return a.f}Pg=new Qg;function Sg(){}u(Sg,Ng);Sg.prototype.a=function(){var a=new XMLHttpRequest;if(\"withCredentials\"in a)return a;if(\"undefined\"!=typeof XDomainRequest)return new Tg;throw Error(\"Unsupported browser\");};Sg.prototype.b=function(){return{}};\nfunction Tg(){this.a=new XDomainRequest;this.readyState=0;this.onreadystatechange=null;this.responseType=this.responseText=this.response=\"\";this.status=-1;this.statusText=\"\";this.a.onload=t(this.fc,this);this.a.onerror=t(this.Gb,this);this.a.onprogress=t(this.gc,this);this.a.ontimeout=t(this.kc,this)}h=Tg.prototype;h.open=function(a,b,c){if(null!=c&&!c)throw Error(\"Only async requests are supported.\");this.a.open(a,b)};\nh.send=function(a){if(a)if(\"string\"==typeof a)this.a.send(a);else throw Error(\"Only string data is supported\");else this.a.send()};h.abort=function(){this.a.abort()};h.setRequestHeader=function(){};h.getResponseHeader=function(a){return\"content-type\"==a.toLowerCase()?this.a.contentType:\"\"};h.fc=function(){this.status=200;this.response=this.responseText=this.a.responseText;Ug(this,4)};h.Gb=function(){this.status=500;this.response=this.responseText=\"\";Ug(this,4)};h.kc=function(){this.Gb()};\nh.gc=function(){this.status=200;Ug(this,1)};function Ug(a,b){a.readyState=b;if(a.onreadystatechange)a.onreadystatechange()}h.getAllResponseHeaders=function(){return\"content-type: \"+this.a.contentType};function Vg(a,b,c){this.reset(a,b,c,void 0,void 0)}Vg.prototype.a=null;var Wg=0;Vg.prototype.reset=function(a,b,c,d,e){\"number\"==typeof e||Wg++;d||qa();delete this.a};function Xg(a){this.f=a;this.b=this.c=this.a=null}function Yg(a,b){this.name=a;this.value=b}Yg.prototype.toString=function(){return this.name};var Zg=new Yg(\"SEVERE\",1E3),$g=new Yg(\"WARNING\",900),ah=new Yg(\"CONFIG\",700),bh=new Yg(\"FINE\",500);function ch(a){if(a.c)return a.c;if(a.a)return ch(a.a);ta(\"Root logger has no level set.\");return null}Xg.prototype.log=function(a,b,c){if(a.value>=ch(this).value)for(q(b)&&(b=b()),a=new Vg(a,String(b),this.f),c&&(a.a=c),c=this;c;)c=c.a};var dh={},eh=null;\nfunction fh(a){eh||(eh=new Xg(\"\"),dh[\"\"]=eh,eh.c=ah);var b;if(!(b=dh[a])){b=new Xg(a);var c=a.lastIndexOf(\".\"),d=a.substr(c+1);c=fh(a.substr(0,c));c.b||(c.b={});c.b[d]=b;b.a=c;dh[a]=b}return b};function gh(a,b){a&&a.log(bh,b,void 0)};function hh(a){this.f=a}u(hh,Ng);hh.prototype.a=function(){return new ih(this.f)};hh.prototype.b=function(a){return function(){return a}}({});function ih(a){H.call(this);this.u=a;this.readyState=jh;this.status=0;this.responseType=this.responseText=this.response=this.statusText=\"\";this.onreadystatechange=null;this.i=new Headers;this.b=null;this.m=\"GET\";this.g=\"\";this.a=!1;this.h=fh(\"goog.net.FetchXmlHttp\");this.l=this.c=this.f=null}u(ih,H);var jh=0;h=ih.prototype;\nh.open=function(a,b){if(this.readyState!=jh)throw this.abort(),Error(\"Error reopening a connection\");this.m=a;this.g=b;this.readyState=1;kh(this)};h.send=function(a){if(1!=this.readyState)throw this.abort(),Error(\"need to call open() first. \");this.a=!0;var b={headers:this.i,method:this.m,credentials:void 0,cache:void 0};a&&(b.body=a);this.u.fetch(new Request(this.g,b)).then(this.jc.bind(this),this.La.bind(this))};\nh.abort=function(){this.response=this.responseText=\"\";this.i=new Headers;this.status=0;this.c&&this.c.cancel(\"Request was aborted.\");1<=this.readyState&&this.a&&4!=this.readyState&&(this.a=!1,lh(this,!1));this.readyState=jh};\nh.jc=function(a){this.a&&(this.f=a,this.b||(this.b=a.headers,this.readyState=2,kh(this)),this.a&&(this.readyState=3,kh(this),this.a&&(\"arraybuffer\"===this.responseType?a.arrayBuffer().then(this.hc.bind(this),this.La.bind(this)):\"undefined\"!==typeof l.ReadableStream&&\"body\"in a?(this.response=this.responseText=\"\",this.c=a.body.getReader(),this.l=new TextDecoder,mh(this)):a.text().then(this.ic.bind(this),this.La.bind(this)))))};function mh(a){a.c.read().then(a.ec.bind(a)).catch(a.La.bind(a))}\nh.ec=function(a){if(this.a){var b=this.l.decode(a.value?a.value:new Uint8Array(0),{stream:!a.done});b&&(this.response=this.responseText+=b);a.done?lh(this,!0):kh(this);3==this.readyState&&mh(this)}};h.ic=function(a){this.a&&(this.response=this.responseText=a,lh(this,!0))};h.hc=function(a){this.a&&(this.response=a,lh(this,!0))};h.La=function(a){var b=this.h;b&&b.log($g,\"Failed to fetch url \"+this.g,a instanceof Error?a:Error(a));this.a&&lh(this,!0)};\nfunction lh(a,b){b&&a.f&&(a.status=a.f.status,a.statusText=a.f.statusText);a.readyState=4;a.f=null;a.c=null;a.l=null;kh(a)}h.setRequestHeader=function(a,b){this.i.append(a,b)};h.getResponseHeader=function(a){return this.b?this.b.get(a.toLowerCase())||\"\":((a=this.h)&&a.log($g,\"Attempting to get response header but no headers have been received for url: \"+this.g,void 0),\"\")};\nh.getAllResponseHeaders=function(){if(!this.b){var a=this.h;a&&a.log($g,\"Attempting to get all response headers but no headers have been received for url: \"+this.g,void 0);return\"\"}a=[];for(var b=this.b.entries(),c=b.next();!c.done;)c=c.value,a.push(c[0]+\": \"+c[1]),c=b.next();return a.join(\"\\r\\n\")};function kh(a){a.onreadystatechange&&a.onreadystatechange.call(a)};function nh(a){H.call(this);this.headers=new Nc;this.D=a||null;this.c=!1;this.A=this.a=null;this.h=this.N=this.l=\"\";this.f=this.I=this.i=this.G=!1;this.g=0;this.u=null;this.m=oh;this.v=this.O=!1}u(nh,H);var oh=\"\";nh.prototype.b=fh(\"goog.net.XhrIo\");var ph=/^https?$/i,qh=[\"POST\",\"PUT\"];\nfunction rh(a,b,c,d,e){if(a.a)throw Error(\"[goog.net.XhrIo] Object is active with another request=\"+a.l+\"; newUri=\"+b);c=c?c.toUpperCase():\"GET\";a.l=b;a.h=\"\";a.N=c;a.G=!1;a.c=!0;a.a=a.D?a.D.a():Pg.a();a.A=a.D?Og(a.D):Og(Pg);a.a.onreadystatechange=t(a.Jb,a);try{gh(a.b,sh(a,\"Opening Xhr\")),a.I=!0,a.a.open(c,String(b),!0),a.I=!1}catch(g){gh(a.b,sh(a,\"Error opening Xhr: \"+g.message));th(a,g);return}b=d||\"\";var f=new Nc(a.headers);e&&Mc(e,function(g,k){f.set(k,g)});e=Fa(f.U());d=l.FormData&&b instanceof\nl.FormData;!Ha(qh,c)||e||d||f.set(\"Content-Type\",\"application/x-www-form-urlencoded;charset=utf-8\");f.forEach(function(g,k){this.a.setRequestHeader(k,g)},a);a.m&&(a.a.responseType=a.m);\"withCredentials\"in a.a&&a.a.withCredentials!==a.O&&(a.a.withCredentials=a.O);try{uh(a),0<a.g&&(a.v=vh(a.a),gh(a.b,sh(a,\"Will abort after \"+a.g+\"ms if incomplete, xhr2 \"+a.v)),a.v?(a.a.timeout=a.g,a.a.ontimeout=t(a.Ga,a)):a.u=Ic(a.Ga,a.g,a)),gh(a.b,sh(a,\"Sending request\")),a.i=!0,a.a.send(b),a.i=!1}catch(g){gh(a.b,\nsh(a,\"Send error: \"+g.message)),th(a,g)}}function vh(a){return Pb&&Zb(9)&&\"number\"==typeof a.timeout&&void 0!==a.ontimeout}function Ga(a){return\"content-type\"==a.toLowerCase()}h=nh.prototype;h.Ga=function(){\"undefined\"!=typeof aa&&this.a&&(this.h=\"Timed out after \"+this.g+\"ms, aborting\",gh(this.b,sh(this,this.h)),this.dispatchEvent(\"timeout\"),this.abort(8))};function th(a,b){a.c=!1;a.a&&(a.f=!0,a.a.abort(),a.f=!1);a.h=b;wh(a);xh(a)}\nfunction wh(a){a.G||(a.G=!0,a.dispatchEvent(\"complete\"),a.dispatchEvent(\"error\"))}h.abort=function(){this.a&&this.c&&(gh(this.b,sh(this,\"Aborting\")),this.c=!1,this.f=!0,this.a.abort(),this.f=!1,this.dispatchEvent(\"complete\"),this.dispatchEvent(\"abort\"),xh(this))};h.va=function(){this.a&&(this.c&&(this.c=!1,this.f=!0,this.a.abort(),this.f=!1),xh(this,!0));nh.pb.va.call(this)};h.Jb=function(){this.qa||(this.I||this.i||this.f?yh(this):this.yc())};h.yc=function(){yh(this)};\nfunction yh(a){if(a.c&&\"undefined\"!=typeof aa)if(a.A[1]&&4==zh(a)&&2==Ah(a))gh(a.b,sh(a,\"Local request error detected and ignored\"));else if(a.i&&4==zh(a))Ic(a.Jb,0,a);else if(a.dispatchEvent(\"readystatechange\"),4==zh(a)){gh(a.b,sh(a,\"Request complete\"));a.c=!1;try{var b=Ah(a);a:switch(b){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:var c=!0;break a;default:c=!1}var d;if(!(d=c)){var e;if(e=0===b){var f=String(a.l).match(Qc)[1]||null;if(!f&&l.self&&l.self.location){var g=l.self.location.protocol;\nf=g.substr(0,g.length-1)}e=!ph.test(f?f.toLowerCase():\"\")}d=e}if(d)a.dispatchEvent(\"complete\"),a.dispatchEvent(\"success\");else{try{var k=2<zh(a)?a.a.statusText:\"\"}catch(n){gh(a.b,\"Can not get status: \"+n.message),k=\"\"}a.h=k+\" [\"+Ah(a)+\"]\";wh(a)}}finally{xh(a)}}}function xh(a,b){if(a.a){uh(a);var c=a.a,d=a.A[0]?fa:null;a.a=null;a.A=null;b||a.dispatchEvent(\"ready\");try{c.onreadystatechange=d}catch(e){(a=a.b)&&a.log(Zg,\"Problem encountered resetting onreadystatechange: \"+e.message,void 0)}}}\nfunction uh(a){a.a&&a.v&&(a.a.ontimeout=null);a.u&&(l.clearTimeout(a.u),a.u=null)}function zh(a){return a.a?a.a.readyState:0}function Ah(a){try{return 2<zh(a)?a.a.status:-1}catch(b){return-1}}function Bh(a){try{return a.a?a.a.responseText:\"\"}catch(b){return gh(a.b,\"Can not get responseText: \"+b.message),\"\"}}\nh.getResponse=function(){try{if(!this.a)return null;if(\"response\"in this.a)return this.a.response;switch(this.m){case oh:case \"text\":return this.a.responseText;case \"arraybuffer\":if(\"mozResponseArrayBuffer\"in this.a)return this.a.mozResponseArrayBuffer}var a=this.b;a&&a.log(Zg,\"Response type \"+this.m+\" is not supported on this browser\",void 0);return null}catch(b){return gh(this.b,\"Can not get response: \"+b.message),null}};function sh(a,b){return b+\" [\"+a.N+\" \"+a.l+\" \"+Ah(a)+\"]\"};/*\n Portions of this code are from MochiKit, received by\n The Closure Authors under the MIT license. All other code is Copyright\n 2005-2009 The Closure Authors. All Rights Reserved.\n*/\nfunction Ch(a){var b=Dh;this.g=[];this.v=b;this.u=a||null;this.f=this.a=!1;this.c=void 0;this.l=this.A=this.i=!1;this.h=0;this.b=null;this.o=0}Ch.prototype.cancel=function(a){if(this.a)this.c instanceof Ch&&this.c.cancel();else{if(this.b){var b=this.b;delete this.b;a?b.cancel(a):(b.o--,0>=b.o&&b.cancel())}this.v?this.v.call(this.u,this):this.l=!0;this.a||(a=new Eh(this),Fh(this),Gh(this,!1,a))}};Ch.prototype.m=function(a,b){this.i=!1;Gh(this,a,b)};function Gh(a,b,c){a.a=!0;a.c=c;a.f=!b;Hh(a)}\nfunction Fh(a){if(a.a){if(!a.l)throw new Ih(a);a.l=!1}}function Jh(a,b){Kh(a,null,b,void 0)}function Kh(a,b,c,d){a.g.push([b,c,d]);a.a&&Hh(a)}Ch.prototype.then=function(a,b,c){var d,e,f=new C(function(g,k){d=g;e=k});Kh(this,d,function(g){g instanceof Eh?f.cancel():e(g)});return f.then(a,b,c)};Ch.prototype.$goog_Thenable=!0;function Lh(a){return Ea(a.g,function(b){return q(b[1])})}\nfunction Hh(a){if(a.h&&a.a&&Lh(a)){var b=a.h,c=Mh[b];c&&(l.clearTimeout(c.a),delete Mh[b]);a.h=0}a.b&&(a.b.o--,delete a.b);b=a.c;for(var d=c=!1;a.g.length&&!a.i;){var e=a.g.shift(),f=e[0],g=e[1];e=e[2];if(f=a.f?g:f)try{var k=f.call(e||a.u,b);void 0!==k&&(a.f=a.f&&(k==b||k instanceof Error),a.c=b=k);if(ra(b)||\"function\"===typeof l.Promise&&b instanceof l.Promise)d=!0,a.i=!0}catch(n){b=n,a.f=!0,Lh(a)||(c=!0)}}a.c=b;d&&(k=t(a.m,a,!0),d=t(a.m,a,!1),b instanceof Ch?(Kh(b,k,d),b.A=!0):b.then(k,d));c&&(b=\nnew Nh(b),Mh[b.a]=b,a.h=b.a)}function Ih(){v.call(this)}u(Ih,v);Ih.prototype.message=\"Deferred has already fired\";Ih.prototype.name=\"AlreadyCalledError\";function Eh(){v.call(this)}u(Eh,v);Eh.prototype.message=\"Deferred was canceled\";Eh.prototype.name=\"CanceledError\";function Nh(a){this.a=l.setTimeout(t(this.c,this),0);this.b=a}Nh.prototype.c=function(){delete Mh[this.a];throw this.b;};var Mh={};function Oh(a){var b={},c=b.document||document,d=vd(a).toString(),e=document.createElement(\"SCRIPT\"),f={Lb:e,Ga:void 0},g=new Ch(f),k=null,n=null!=b.timeout?b.timeout:5E3;0<n&&(k=window.setTimeout(function(){Ph(e,!0);var p=new Qh(Rh,\"Timeout reached for loading script \"+d);Fh(g);Gh(g,!1,p)},n),f.Ga=k);e.onload=e.onreadystatechange=function(){e.readyState&&\"loaded\"!=e.readyState&&\"complete\"!=e.readyState||(Ph(e,b.hd||!1,k),Fh(g),Gh(g,!0,null))};e.onerror=function(){Ph(e,!0,k);var p=new Qh(Sh,\"Error while loading script \"+\nd);Fh(g);Gh(g,!1,p)};f=b.attributes||{};ab(f,{type:\"text/javascript\",charset:\"UTF-8\"});Md(e,f);Kd(e,a);Th(c).appendChild(e);return g}function Th(a){var b;return(b=(a||document).getElementsByTagName(\"HEAD\"))&&0!=b.length?b[0]:a.documentElement}function Dh(){if(this&&this.Lb){var a=this.Lb;a&&\"SCRIPT\"==a.tagName&&Ph(a,!0,this.Ga)}}\nfunction Ph(a,b,c){null!=c&&l.clearTimeout(c);a.onload=fa;a.onerror=fa;a.onreadystatechange=fa;b&&window.setTimeout(function(){a&&a.parentNode&&a.parentNode.removeChild(a)},0)}var Sh=0,Rh=1;function Qh(a,b){var c=\"Jsloader error (code #\"+a+\")\";b&&(c+=\": \"+b);v.call(this,c);this.code=a}u(Qh,v);function Uh(a){this.f=a}u(Uh,Ng);Uh.prototype.a=function(){return new this.f};Uh.prototype.b=function(){return{}};\nfunction Vh(a,b,c){this.b=a;a=b||{};this.i=a.secureTokenEndpoint||\"https://securetoken.googleapis.com/v1/token\";this.o=a.secureTokenTimeout||Wh;this.f=Za(a.secureTokenHeaders||Xh);this.g=a.firebaseEndpoint||\"https://www.googleapis.com/identitytoolkit/v3/relyingparty/\";this.h=a.firebaseTimeout||Yh;this.a=Za(a.firebaseHeaders||Zh);c&&(this.a[\"X-Client-Version\"]=c,this.f[\"X-Client-Version\"]=c);c=\"Node\"==qe();c=l.XMLHttpRequest||c&&firebase.INTERNAL.node&&firebase.INTERNAL.node.XMLHttpRequest;if(!c&&\n!pe())throw new N(\"internal-error\",\"The XMLHttpRequest compatibility library was not found.\");this.c=void 0;pe()?this.c=new hh(self):re()?this.c=new Uh(c):this.c=new Sg}var $h,Uf=\"idToken\",Wh=new Fe(3E4,6E4),Xh={\"Content-Type\":\"application/x-www-form-urlencoded\"},Yh=new Fe(3E4,6E4),Zh={\"Content-Type\":\"application/json\"};function ai(a,b){b?a.a[\"X-Firebase-Locale\"]=b:delete a.a[\"X-Firebase-Locale\"]}\nfunction bi(a,b){b?(a.a[\"X-Client-Version\"]=b,a.f[\"X-Client-Version\"]=b):(delete a.a[\"X-Client-Version\"],delete a.f[\"X-Client-Version\"])}function ci(a,b,c,d,e,f,g){ae()||pe()?a=t(a.m,a):($h||($h=new C(function(k,n){di(k,n)})),a=t(a.l,a));a(b,c,d,e,f,g)}\nVh.prototype.m=function(a,b,c,d,e,f){if(pe()&&(\"undefined\"===typeof l.fetch||\"undefined\"===typeof l.Headers||\"undefined\"===typeof l.Request))throw new N(\"operation-not-supported-in-this-environment\",\"fetch, Headers and Request native APIs or equivalent Polyfills must be available to support HTTP requests from a Worker environment.\");var g=new nh(this.c);if(f){g.g=Math.max(0,f);var k=setTimeout(function(){g.dispatchEvent(\"timeout\")},f)}wc(g,\"complete\",function(){k&&clearTimeout(k);var n=null;try{n=\nJSON.parse(Bh(this))||null}catch(p){n=null}b&&b(n)});Cc(g,\"ready\",function(){k&&clearTimeout(k);Kb(this)});Cc(g,\"timeout\",function(){k&&clearTimeout(k);Kb(this);b&&b(null)});rh(g,a,c,d,e)};var ei=new pd(qd,\"https://apis.google.com/js/client.js?onload=%{onload}\"),fi=\"__fcb\"+Math.floor(1E6*Math.random()).toString();\nfunction di(a,b){if(((window.gapi||{}).client||{}).request)a();else{l[fi]=function(){((window.gapi||{}).client||{}).request?a():b(Error(\"CORS_UNSUPPORTED\"))};var c=wd(ei,{onload:fi});Jh(Oh(c),function(){b(Error(\"CORS_UNSUPPORTED\"))})}}\nVh.prototype.l=function(a,b,c,d,e){var f=this;$h.then(function(){window.gapi.client.setApiKey(f.b);var g=window.gapi.auth.getToken();window.gapi.auth.setToken(null);window.gapi.client.request({path:a,method:c,body:d,headers:e,authType:\"none\",callback:function(k){window.gapi.auth.setToken(g);b&&b(k)}})}).s(function(g){b&&b({error:{message:g&&g.message||\"CORS_UNSUPPORTED\"}})})};\nfunction gi(a,b){return new C(function(c,d){\"refresh_token\"==b.grant_type&&b.refresh_token||\"authorization_code\"==b.grant_type&&b.code?ci(a,a.i+\"?key=\"+encodeURIComponent(a.b),function(e){e?e.error?d(hi(e)):e.access_token&&e.refresh_token?c(e):d(new N(\"internal-error\")):d(new N(\"network-request-failed\"))},\"POST\",jd(b).toString(),a.f,a.o.get()):d(new N(\"internal-error\"))})}\nfunction ii(a,b,c,d,e,f){var g=fd(a.g+b);I(g,\"key\",a.b);f&&I(g,\"cb\",qa().toString());var k=\"GET\"==c;if(k)for(var n in d)d.hasOwnProperty(n)&&I(g,n,d[n]);return new C(function(p,z){ci(a,g.toString(),function(A){A?A.error?z(hi(A,e||{})):p(A):z(new N(\"network-request-failed\"))},c,k?void 0:Rd(Be(d)),a.a,a.h.get())})}function ji(a){a=a.email;if(!m(a)||!je.test(a))throw new N(\"invalid-email\");}function ki(a){\"email\"in a&&ji(a)}\nfunction li(a,b){return P(a,mi,{identifier:b,continueUri:ye()?Yd():\"http://localhost\"}).then(function(c){return c.allProviders||[]})}function ni(a,b){return P(a,mi,{identifier:b,continueUri:ye()?Yd():\"http://localhost\"}).then(function(c){return c.signinMethods||[]})}function oi(a){return P(a,pi,{}).then(function(b){return b.authorizedDomains||[]})}function qi(a){if(!a[Uf])throw new N(\"internal-error\");}\nfunction ri(a){if(a.phoneNumber||a.temporaryProof){if(!a.phoneNumber||!a.temporaryProof)throw new N(\"internal-error\");}else{if(!a.sessionInfo)throw new N(\"missing-verification-id\");if(!a.code)throw new N(\"missing-verification-code\");}}Vh.prototype.Ra=function(){return P(this,si,{})};Vh.prototype.qb=function(a,b){return P(this,ti,{idToken:a,email:b})};Vh.prototype.rb=function(a,b){return P(this,sg,{idToken:a,password:b})};var ui={displayName:\"DISPLAY_NAME\",photoUrl:\"PHOTO_URL\"};h=Vh.prototype;\nh.sb=function(a,b){var c={idToken:a},d=[];Xa(ui,function(e,f){var g=b[f];null===g?d.push(e):f in b&&(c[f]=g)});d.length&&(c.deleteAttribute=d);return P(this,ti,c)};h.lb=function(a,b){a={requestType:\"PASSWORD_RESET\",email:a};ab(a,b);return P(this,vi,a)};h.mb=function(a,b){a={requestType:\"EMAIL_SIGNIN\",email:a};ab(a,b);return P(this,wi,a)};h.kb=function(a,b){a={requestType:\"VERIFY_EMAIL\",idToken:a};ab(a,b);return P(this,xi,a)};function Cg(a,b){return P(a,yi,b)}h.Va=function(a){return P(this,zi,a)};\nfunction Ai(a,b,c){return P(a,Bi,{idToken:b,deleteProvider:c})}function Ci(a){if(!a.requestUri||!a.sessionId&&!a.postBody&&!a.pendingToken)throw new N(\"internal-error\");}function Di(a,b){b.oauthIdToken&&b.providerId&&0==b.providerId.indexOf(\"oidc.\")&&!b.pendingToken&&(a.sessionId?b.nonce=a.sessionId:a.postBody&&(a=new Vc(a.postBody),nd(a,\"nonce\")&&(b.nonce=a.get(\"nonce\"))));return b}\nfunction Ei(a){var b=null;a.needConfirmation?(a.code=\"account-exists-with-different-credential\",b=Mg(a)):\"FEDERATED_USER_ID_ALREADY_LINKED\"==a.errorMessage?(a.code=\"credential-already-in-use\",b=Mg(a)):\"EMAIL_EXISTS\"==a.errorMessage?(a.code=\"email-already-in-use\",b=Mg(a)):a.errorMessage&&(b=Fi(a.errorMessage));if(b)throw b;if(!a[Uf])throw new N(\"internal-error\");}function Wf(a,b){b.returnIdpCredential=!0;return P(a,Gi,b)}function Yf(a,b){b.returnIdpCredential=!0;return P(a,Hi,b)}\nfunction Zf(a,b){b.returnIdpCredential=!0;b.autoCreate=!1;return P(a,Ii,b)}function Ji(a){if(!a.oobCode)throw new N(\"invalid-action-code\");}h.$a=function(a,b){return P(this,Ki,{oobCode:a,newPassword:b})};h.Ja=function(a){return P(this,Li,{oobCode:a})};h.Xa=function(a){return P(this,Mi,{oobCode:a})};\nvar Mi={endpoint:\"setAccountInfo\",C:Ji,da:\"email\"},Li={endpoint:\"resetPassword\",C:Ji,J:function(a){var b=a.requestType;if(!b||!a.email&&\"EMAIL_SIGNIN\"!=b)throw new N(\"internal-error\");}},Ni={endpoint:\"signupNewUser\",C:function(a){ji(a);if(!a.password)throw new N(\"weak-password\");},J:qi,R:!0},mi={endpoint:\"createAuthUri\"},Oi={endpoint:\"deleteAccount\",T:[\"idToken\"]},Bi={endpoint:\"setAccountInfo\",T:[\"idToken\",\"deleteProvider\"],C:function(a){if(!ja(a.deleteProvider))throw new N(\"internal-error\");}},pg=\n{endpoint:\"emailLinkSignin\",T:[\"email\",\"oobCode\"],C:ji,J:qi,R:!0},rg={endpoint:\"emailLinkSignin\",T:[\"idToken\",\"email\",\"oobCode\"],C:ji,J:qi,R:!0},Pi={endpoint:\"getAccountInfo\"},wi={endpoint:\"getOobConfirmationCode\",T:[\"requestType\"],C:function(a){if(\"EMAIL_SIGNIN\"!=a.requestType)throw new N(\"internal-error\");ji(a)},da:\"email\"},xi={endpoint:\"getOobConfirmationCode\",T:[\"idToken\",\"requestType\"],C:function(a){if(\"VERIFY_EMAIL\"!=a.requestType)throw new N(\"internal-error\");},da:\"email\"},vi={endpoint:\"getOobConfirmationCode\",\nT:[\"requestType\"],C:function(a){if(\"PASSWORD_RESET\"!=a.requestType)throw new N(\"internal-error\");ji(a)},da:\"email\"},pi={vb:!0,endpoint:\"getProjectConfig\",Ib:\"GET\"},Qi={vb:!0,endpoint:\"getRecaptchaParam\",Ib:\"GET\",J:function(a){if(!a.recaptchaSiteKey)throw new N(\"internal-error\");}},Ki={endpoint:\"resetPassword\",C:Ji,da:\"email\"},yi={endpoint:\"sendVerificationCode\",T:[\"phoneNumber\",\"recaptchaToken\"],da:\"sessionInfo\"},ti={endpoint:\"setAccountInfo\",T:[\"idToken\"],C:ki,R:!0},sg={endpoint:\"setAccountInfo\",\nT:[\"idToken\"],C:function(a){ki(a);if(!a.password)throw new N(\"weak-password\");},J:qi,R:!0},si={endpoint:\"signupNewUser\",J:qi,R:!0},Gi={endpoint:\"verifyAssertion\",C:Ci,Pa:Di,J:Ei,R:!0},Ii={endpoint:\"verifyAssertion\",C:Ci,Pa:Di,J:function(a){if(a.errorMessage&&\"USER_NOT_FOUND\"==a.errorMessage)throw new N(\"user-not-found\");if(a.errorMessage)throw Fi(a.errorMessage);if(!a[Uf])throw new N(\"internal-error\");},R:!0},Hi={endpoint:\"verifyAssertion\",C:function(a){Ci(a);if(!a.idToken)throw new N(\"internal-error\");\n},Pa:Di,J:Ei,R:!0},Ri={endpoint:\"verifyCustomToken\",C:function(a){if(!a.token)throw new N(\"invalid-custom-token\");},J:qi,R:!0},qg={endpoint:\"verifyPassword\",C:function(a){ji(a);if(!a.password)throw new N(\"wrong-password\");},J:qi,R:!0},zi={endpoint:\"verifyPhoneNumber\",C:ri,J:qi},yg={endpoint:\"verifyPhoneNumber\",C:function(a){if(!a.idToken)throw new N(\"internal-error\");ri(a)},J:function(a){if(a.temporaryProof)throw a.code=\"credential-already-in-use\",Mg(a);qi(a)}},zg={Xb:{USER_NOT_FOUND:\"user-not-found\"},\nendpoint:\"verifyPhoneNumber\",C:ri,J:qi};function P(a,b,c){if(!Se(c,b.T))return E(new N(\"internal-error\"));var d=b.Ib||\"POST\",e;return D(c).then(b.C).then(function(){b.R&&(c.returnSecureToken=!0);return ii(a,b.endpoint,d,c,b.Xb,b.vb||!1)}).then(function(f){e=f;return b.Pa?b.Pa(c,e):e}).then(b.J).then(function(){if(!b.da)return e;if(!(b.da in e))throw new N(\"internal-error\");return e[b.da]})}function Fi(a){return hi({error:{errors:[{message:a}],code:400,message:a}})}\nfunction hi(a,b){var c=(a.error&&a.error.errors&&a.error.errors[0]||{}).reason||\"\";var d={keyInvalid:\"invalid-api-key\",ipRefererBlocked:\"app-not-authorized\"};if(c=d[c]?new N(d[c]):null)return c;c=a.error&&a.error.message||\"\";d={INVALID_CUSTOM_TOKEN:\"invalid-custom-token\",CREDENTIAL_MISMATCH:\"custom-token-mismatch\",MISSING_CUSTOM_TOKEN:\"internal-error\",INVALID_IDENTIFIER:\"invalid-email\",MISSING_CONTINUE_URI:\"internal-error\",INVALID_EMAIL:\"invalid-email\",INVALID_PASSWORD:\"wrong-password\",USER_DISABLED:\"user-disabled\",\nMISSING_PASSWORD:\"internal-error\",EMAIL_EXISTS:\"email-already-in-use\",PASSWORD_LOGIN_DISABLED:\"operation-not-allowed\",INVALID_IDP_RESPONSE:\"invalid-credential\",INVALID_PENDING_TOKEN:\"invalid-credential\",FEDERATED_USER_ID_ALREADY_LINKED:\"credential-already-in-use\",MISSING_OR_INVALID_NONCE:\"missing-or-invalid-nonce\",INVALID_MESSAGE_PAYLOAD:\"invalid-message-payload\",INVALID_RECIPIENT_EMAIL:\"invalid-recipient-email\",INVALID_SENDER:\"invalid-sender\",EMAIL_NOT_FOUND:\"user-not-found\",RESET_PASSWORD_EXCEED_LIMIT:\"too-many-requests\",\nEXPIRED_OOB_CODE:\"expired-action-code\",INVALID_OOB_CODE:\"invalid-action-code\",MISSING_OOB_CODE:\"internal-error\",INVALID_PROVIDER_ID:\"invalid-provider-id\",CREDENTIAL_TOO_OLD_LOGIN_AGAIN:\"requires-recent-login\",INVALID_ID_TOKEN:\"invalid-user-token\",TOKEN_EXPIRED:\"user-token-expired\",USER_NOT_FOUND:\"user-token-expired\",CORS_UNSUPPORTED:\"cors-unsupported\",DYNAMIC_LINK_NOT_ACTIVATED:\"dynamic-link-not-activated\",INVALID_APP_ID:\"invalid-app-id\",TOO_MANY_ATTEMPTS_TRY_LATER:\"too-many-requests\",WEAK_PASSWORD:\"weak-password\",\nOPERATION_NOT_ALLOWED:\"operation-not-allowed\",USER_CANCELLED:\"user-cancelled\",CAPTCHA_CHECK_FAILED:\"captcha-check-failed\",INVALID_APP_CREDENTIAL:\"invalid-app-credential\",INVALID_CODE:\"invalid-verification-code\",INVALID_PHONE_NUMBER:\"invalid-phone-number\",INVALID_SESSION_INFO:\"invalid-verification-id\",INVALID_TEMPORARY_PROOF:\"invalid-credential\",MISSING_APP_CREDENTIAL:\"missing-app-credential\",MISSING_CODE:\"missing-verification-code\",MISSING_PHONE_NUMBER:\"missing-phone-number\",MISSING_SESSION_INFO:\"missing-verification-id\",\nQUOTA_EXCEEDED:\"quota-exceeded\",SESSION_EXPIRED:\"code-expired\",REJECTED_CREDENTIAL:\"rejected-credential\",INVALID_CONTINUE_URI:\"invalid-continue-uri\",MISSING_ANDROID_PACKAGE_NAME:\"missing-android-pkg-name\",MISSING_IOS_BUNDLE_ID:\"missing-ios-bundle-id\",UNAUTHORIZED_DOMAIN:\"unauthorized-continue-uri\",INVALID_DYNAMIC_LINK_DOMAIN:\"invalid-dynamic-link-domain\",INVALID_OAUTH_CLIENT_ID:\"invalid-oauth-client-id\",INVALID_CERT_HASH:\"invalid-cert-hash\",ADMIN_ONLY_OPERATION:\"admin-restricted-operation\"};ab(d,\nb||{});b=(b=c.match(/^[^\\s]+\\s*:\\s*(.*)$/))&&1<b.length?b[1]:void 0;for(var e in d)if(0===c.indexOf(e))return new N(d[e],b);!b&&a&&(b=Ae(a));return new N(\"internal-error\",b)};function Si(a){this.b=a;this.a=null;this.gb=Ti(this)}\nfunction Ti(a){return Ui().then(function(){return new C(function(b,c){K(\"gapi.iframes.getContext\")().open({where:document.body,url:a.b,messageHandlersFilter:K(\"gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER\"),attributes:{style:{position:\"absolute\",top:\"-100px\",width:\"1px\",height:\"1px\"}},dontclear:!0},function(d){function e(){clearTimeout(f);b()}a.a=d;a.a.restyle({setHideOnLeave:!1});var f=setTimeout(function(){c(Error(\"Network Error\"))},Vi.get());d.ping(e).then(e,function(){c(Error(\"Network Error\"))})})})})}\nfunction Wi(a,b){return a.gb.then(function(){return new C(function(c){a.a.send(b.type,b,c,K(\"gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER\"))})})}function Xi(a,b){a.gb.then(function(){a.a.register(\"authEvent\",b,K(\"gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER\"))})}var Yi=new pd(qd,\"https://apis.google.com/js/api.js?onload=%{onload}\"),Zi=new Fe(3E4,6E4),Vi=new Fe(5E3,15E3),$i=null;\nfunction Ui(){return $i?$i:$i=(new C(function(a,b){function c(){Ee();K(\"gapi.load\")(\"gapi.iframes\",{callback:a,ontimeout:function(){Ee();b(Error(\"Network Error\"))},timeout:Zi.get()})}if(K(\"gapi.iframes.Iframe\"))a();else if(K(\"gapi.load\"))c();else{var d=\"__iframefcb\"+Math.floor(1E6*Math.random()).toString();l[d]=function(){K(\"gapi.load\")?c():b(Error(\"Network Error\"))};d=wd(Yi,{onload:d});D(Oh(d)).s(function(){b(Error(\"Network Error\"))})}})).s(function(a){$i=null;throw a;})};function aj(a,b,c){this.i=a;this.g=b;this.h=c;this.f=null;this.a=gd(this.i,\"/__/auth/iframe\");I(this.a,\"apiKey\",this.g);I(this.a,\"appName\",this.h);this.b=null;this.c=[]}aj.prototype.toString=function(){this.f?I(this.a,\"v\",this.f):md(this.a.a,\"v\");this.b?I(this.a,\"eid\",this.b):md(this.a.a,\"eid\");this.c.length?I(this.a,\"fw\",this.c.join(\",\")):md(this.a.a,\"fw\");return this.a.toString()};function bj(a,b,c,d,e){this.m=a;this.l=b;this.c=c;this.o=d;this.h=this.g=this.i=null;this.a=e;this.f=null}\nbj.prototype.toString=function(){var a=gd(this.m,\"/__/auth/handler\");I(a,\"apiKey\",this.l);I(a,\"appName\",this.c);I(a,\"authType\",this.o);if(this.a.isOAuthProvider){var b=this.a;try{var c=firebase.app(this.c).auth().ea()}catch(k){c=null}b.ab=c;I(a,\"providerId\",this.a.providerId);b=this.a;c=Be(b.zb);for(var d in c)c[d]=c[d].toString();d=b.Fc;c=Za(c);for(var e=0;e<d.length;e++){var f=d[e];f in c&&delete c[f]}b.eb&&b.ab&&!c[b.eb]&&(c[b.eb]=b.ab);Ya(c)||I(a,\"customParameters\",Ae(c))}\"function\"===typeof this.a.Fb&&\n(b=this.a.Fb(),b.length&&I(a,\"scopes\",b.join(\",\")));this.i?I(a,\"redirectUrl\",this.i):md(a.a,\"redirectUrl\");this.g?I(a,\"eventId\",this.g):md(a.a,\"eventId\");this.h?I(a,\"v\",this.h):md(a.a,\"v\");if(this.b)for(var g in this.b)this.b.hasOwnProperty(g)&&!ed(a,g)&&I(a,g,this.b[g]);this.f?I(a,\"eid\",this.f):md(a.a,\"eid\");g=cj(this.c);g.length&&I(a,\"fw\",g.join(\",\"));return a.toString()};function cj(a){try{return firebase.app(a).auth().ya()}catch(b){return[]}}\nfunction dj(a,b,c,d,e){this.l=a;this.f=b;this.b=c;this.c=d||null;this.h=e||null;this.m=this.u=this.v=null;this.g=[];this.o=this.a=null}\nfunction ej(a){var b=Yd();return oi(a).then(function(c){a:{var d=fd(b),e=d.c;d=d.b;for(var f=0;f<c.length;f++){var g=c[f];var k=d;var n=e;0==g.indexOf(\"chrome-extension://\")?k=fd(g).b==k&&\"chrome-extension\"==n:\"http\"!=n&&\"https\"!=n?k=!1:ie.test(g)?k=k==g:(g=g.split(\".\").join(\"\\\\.\"),k=(new RegExp(\"^(.+\\\\.\"+g+\"|\"+g+\")$\",\"i\")).test(k));if(k){c=!0;break a}}c=!1}if(!c)throw new Kg(Yd());})}\nfunction fj(a){if(a.o)return a.o;a.o=ke().then(function(){if(!a.u){var b=a.c,c=a.h,d=cj(a.b),e=new aj(a.l,a.f,a.b);e.f=b;e.b=c;e.c=Ka(d||[]);a.u=e.toString()}a.i=new Si(a.u);gj(a)});return a.o}h=dj.prototype;h.Ea=function(a,b,c){var d=new N(\"popup-closed-by-user\"),e=new N(\"web-storage-unsupported\"),f=this,g=!1;return this.ga().then(function(){hj(f).then(function(k){k||(a&&ee(a),b(e),g=!0)})}).s(function(){}).then(function(){if(!g)return he(a)}).then(function(){if(!g)return Jc(c).then(function(){b(d)})})};\nh.Mb=function(){var a=J();return!ze(a)&&!De(a)};h.Hb=function(){return!1};\nh.Db=function(a,b,c,d,e,f,g){if(!a)return E(new N(\"popup-blocked\"));if(g&&!ze())return this.ga().s(function(n){ee(a);e(n)}),d(),D();this.a||(this.a=ej(ij(this)));var k=this;return this.a.then(function(){var n=k.ga().s(function(p){ee(a);e(p);throw p;});d();return n}).then(function(){Fg(c);if(!g){var n=jj(k.l,k.f,k.b,b,c,null,f,k.c,void 0,k.h);Zd(n,a)}}).s(function(n){\"auth/network-request-failed\"==n.code&&(k.a=null);throw n;})};\nfunction ij(a){a.m||(a.v=a.c?ue(a.c,cj(a.b)):null,a.m=new Vh(a.f,Bf(a.h),a.v));return a.m}h.Ca=function(a,b,c){this.a||(this.a=ej(ij(this)));var d=this;return this.a.then(function(){Fg(b);var e=jj(d.l,d.f,d.b,a,b,Yd(),c,d.c,void 0,d.h);Zd(e)}).s(function(e){\"auth/network-request-failed\"==e.code&&(d.a=null);throw e;})};h.ga=function(){var a=this;return fj(this).then(function(){return a.i.gb}).s(function(){a.a=null;throw new N(\"network-request-failed\");})};h.Qb=function(){return!0};\nfunction jj(a,b,c,d,e,f,g,k,n,p){a=new bj(a,b,c,d,e);a.i=f;a.g=g;a.h=k;a.b=Za(n||null);a.f=p;return a.toString()}function gj(a){if(!a.i)throw Error(\"IfcHandler must be initialized!\");Xi(a.i,function(b){var c={};if(b&&b.authEvent){var d=!1;b=Hg(b.authEvent);for(c=0;c<a.g.length;c++)d=a.g[c](b)||d;c={};c.status=d?\"ACK\":\"ERROR\";return D(c)}c.status=\"ERROR\";return D(c)})}\nfunction hj(a){var b={type:\"webStorageSupport\"};return fj(a).then(function(){return Wi(a.i,b)}).then(function(c){if(c&&c.length&&\"undefined\"!==typeof c[0].webStorageSupport)return c[0].webStorageSupport;throw Error();})}h.wa=function(a){this.g.push(a)};h.Ka=function(a){x(this.g,function(b){return b==a})};function kj(a){this.a=a||firebase.INTERNAL.reactNative&&firebase.INTERNAL.reactNative.AsyncStorage;if(!this.a)throw new N(\"internal-error\",\"The React Native compatibility library was not found.\");this.type=\"asyncStorage\"}h=kj.prototype;h.get=function(a){return D(this.a.getItem(a)).then(function(b){return b&&Ce(b)})};h.set=function(a,b){return D(this.a.setItem(a,Ae(b)))};h.P=function(a){return D(this.a.removeItem(a))};h.Y=function(){};h.ca=function(){};function lj(a){this.b=a;this.a={};this.c=t(this.f,this)}var mj=[];function nj(){var a=pe()?self:null;w(mj,function(c){c.b==a&&(b=c)});if(!b){var b=new lj(a);mj.push(b)}return b}\nlj.prototype.f=function(a){var b=a.data.eventType,c=a.data.eventId,d=this.a[b];if(d&&0<d.length){a.ports[0].postMessage({status:\"ack\",eventId:c,eventType:b,response:null});var e=[];w(d,function(f){e.push(D().then(function(){return f(a.origin,a.data.data)}))});wb(e).then(function(f){var g=[];w(f,function(k){g.push({fulfilled:k.Eb,value:k.value,reason:k.reason?k.reason.message:void 0})});w(g,function(k){for(var n in k)\"undefined\"===typeof k[n]&&delete k[n]});a.ports[0].postMessage({status:\"done\",eventId:c,\neventType:b,response:g})})}};lj.prototype.subscribe=function(a,b){Ya(this.a)&&this.b.addEventListener(\"message\",this.c);\"undefined\"===typeof this.a[a]&&(this.a[a]=[]);this.a[a].push(b)};lj.prototype.unsubscribe=function(a,b){\"undefined\"!==typeof this.a[a]&&b?(x(this.a[a],function(c){return c==b}),0==this.a[a].length&&delete this.a[a]):b||delete this.a[a];Ya(this.a)&&this.b.removeEventListener(\"message\",this.c)};function oj(a){this.a=a}oj.prototype.postMessage=function(a,b){this.a.postMessage(a,b)};function pj(a){this.c=a;this.b=!1;this.a=[]}\nfunction qj(a,b,c,d){var e,f=c||{},g,k,n,p=null;if(a.b)return E(Error(\"connection_unavailable\"));var z=d?800:50,A=\"undefined\"!==typeof MessageChannel?new MessageChannel:null;return(new C(function(da,fc){A?(e=Math.floor(Math.random()*Math.pow(10,20)).toString(),A.port1.start(),k=setTimeout(function(){fc(Error(\"unsupported_event\"))},z),g=function(gc){gc.data.eventId===e&&(\"ack\"===gc.data.status?(clearTimeout(k),n=setTimeout(function(){fc(Error(\"timeout\"))},3E3)):\"done\"===gc.data.status?(clearTimeout(n),\n\"undefined\"!==typeof gc.data.response?da(gc.data.response):fc(Error(\"unknown_error\"))):(clearTimeout(k),clearTimeout(n),fc(Error(\"invalid_response\"))))},p={messageChannel:A,onMessage:g},a.a.push(p),A.port1.addEventListener(\"message\",g),a.c.postMessage({eventType:b,eventId:e,data:f},[A.port2])):fc(Error(\"connection_unavailable\"))})).then(function(da){rj(a,p);return da}).s(function(da){rj(a,p);throw da;})}\nfunction rj(a,b){if(b){var c=b.messageChannel,d=b.onMessage;c&&(c.port1.removeEventListener(\"message\",d),c.port1.close());x(a.a,function(e){return e==b})}}pj.prototype.close=function(){for(;0<this.a.length;)rj(this,this.a[0]);this.b=!0};function sj(){if(!tj())throw new N(\"web-storage-unsupported\");this.c={};this.a=[];this.b=0;this.l=l.indexedDB;this.type=\"indexedDB\";this.g=this.o=this.f=this.i=null;this.u=!1;this.h=null;var a=this;pe()&&self?(this.o=nj(),this.o.subscribe(\"keyChanged\",function(b,c){return uj(a).then(function(d){0<d.length&&w(a.a,function(e){e(d)});return{keyProcessed:Ha(d,c.key)}})}),this.o.subscribe(\"ping\",function(){return D([\"keyChanged\"])})):Le().then(function(b){if(a.h=b)a.g=new pj(new oj(b)),qj(a.g,\"ping\",null,\n!0).then(function(c){c[0].fulfilled&&Ha(c[0].value,\"keyChanged\")&&(a.u=!0)}).s(function(){})})}var vj;function wj(a){return new C(function(b,c){var d=a.l.deleteDatabase(\"firebaseLocalStorageDb\");d.onsuccess=function(){b()};d.onerror=function(e){c(Error(e.target.error))}})}\nfunction xj(a){return new C(function(b,c){var d=a.l.open(\"firebaseLocalStorageDb\",1);d.onerror=function(e){try{e.preventDefault()}catch(f){}c(Error(e.target.error))};d.onupgradeneeded=function(e){e=e.target.result;try{e.createObjectStore(\"firebaseLocalStorage\",{keyPath:\"fbase_key\"})}catch(f){c(f)}};d.onsuccess=function(e){e=e.target.result;e.objectStoreNames.contains(\"firebaseLocalStorage\")?b(e):wj(a).then(function(){return xj(a)}).then(function(f){b(f)}).s(function(f){c(f)})}})}\nfunction yj(a){a.m||(a.m=xj(a));return a.m}function tj(){try{return!!l.indexedDB}catch(a){return!1}}function zj(a){return a.objectStore(\"firebaseLocalStorage\")}function Aj(a,b){return a.transaction([\"firebaseLocalStorage\"],b?\"readwrite\":\"readonly\")}function Bj(a){return new C(function(b,c){a.onsuccess=function(d){d&&d.target?b(d.target.result):b()};a.onerror=function(d){c(d.target.error)}})}h=sj.prototype;\nh.set=function(a,b){var c=!1,d,e=this;return yj(this).then(function(f){d=f;f=zj(Aj(d,!0));return Bj(f.get(a))}).then(function(f){var g=zj(Aj(d,!0));if(f)return f.value=b,Bj(g.put(f));e.b++;c=!0;f={};f.fbase_key=a;f.value=b;return Bj(g.add(f))}).then(function(){e.c[a]=b;return Cj(e,a)}).ia(function(){c&&e.b--})};function Cj(a,b){return a.g&&a.h&&Ke()===a.h?qj(a.g,\"keyChanged\",{key:b},a.u).then(function(){}).s(function(){}):D()}\nh.get=function(a){return yj(this).then(function(b){return Bj(zj(Aj(b,!1)).get(a))}).then(function(b){return b&&b.value})};h.P=function(a){var b=!1,c=this;return yj(this).then(function(d){b=!0;c.b++;return Bj(zj(Aj(d,!0))[\"delete\"](a))}).then(function(){delete c.c[a];return Cj(c,a)}).ia(function(){b&&c.b--})};\nfunction uj(a){return yj(a).then(function(b){var c=zj(Aj(b,!1));return c.getAll?Bj(c.getAll()):new C(function(d,e){var f=[],g=c.openCursor();g.onsuccess=function(k){(k=k.target.result)?(f.push(k.value),k[\"continue\"]()):d(f)};g.onerror=function(k){e(k.target.error)}})}).then(function(b){var c={},d=[];if(0==a.b){for(d=0;d<b.length;d++)c[b[d].fbase_key]=b[d].value;d=$d(a.c,c);a.c=c}return d})}h.Y=function(a){0==this.a.length&&Dj(this);this.a.push(a)};\nh.ca=function(a){x(this.a,function(b){return b==a});0==this.a.length&&Ej(this)};function Dj(a){function b(){a.f=setTimeout(function(){a.i=uj(a).then(function(c){0<c.length&&w(a.a,function(d){d(c)})}).then(function(){b()}).s(function(c){\"STOP_EVENT\"!=c.message&&b()})},800)}Ej(a);b()}function Ej(a){a.i&&a.i.cancel(\"STOP_EVENT\");a.f&&(clearTimeout(a.f),a.f=null)};function Fj(a){var b=this,c=null;this.a=[];this.type=\"indexedDB\";this.c=a;this.b=D().then(function(){if(tj()){var d=we(),e=\"__sak\"+d;vj||(vj=new sj);c=vj;return c.set(e,d).then(function(){return c.get(e)}).then(function(f){if(f!==d)throw Error(\"indexedDB not supported!\");return c.P(e)}).then(function(){return c}).s(function(){return b.c})}return b.c}).then(function(d){b.type=d.type;d.Y(function(e){w(b.a,function(f){f(e)})});return d})}h=Fj.prototype;h.get=function(a){return this.b.then(function(b){return b.get(a)})};\nh.set=function(a,b){return this.b.then(function(c){return c.set(a,b)})};h.P=function(a){return this.b.then(function(b){return b.P(a)})};h.Y=function(a){this.a.push(a)};h.ca=function(a){x(this.a,function(b){return b==a})};function Gj(){this.a={};this.type=\"inMemory\"}h=Gj.prototype;h.get=function(a){return D(this.a[a])};h.set=function(a,b){this.a[a]=b;return D()};h.P=function(a){delete this.a[a];return D()};h.Y=function(){};h.ca=function(){};function Hj(){if(!Ij()){if(\"Node\"==qe())throw new N(\"internal-error\",\"The LocalStorage compatibility library was not found.\");throw new N(\"web-storage-unsupported\");}this.a=Jj()||firebase.INTERNAL.node.localStorage;this.type=\"localStorage\"}function Jj(){try{var a=l.localStorage,b=we();a&&(a.setItem(b,\"1\"),a.removeItem(b));return a}catch(c){return null}}\nfunction Ij(){var a=\"Node\"==qe();a=Jj()||a&&firebase.INTERNAL.node&&firebase.INTERNAL.node.localStorage;if(!a)return!1;try{return a.setItem(\"__sak\",\"1\"),a.removeItem(\"__sak\"),!0}catch(b){return!1}}h=Hj.prototype;h.get=function(a){var b=this;return D().then(function(){var c=b.a.getItem(a);return Ce(c)})};h.set=function(a,b){var c=this;return D().then(function(){var d=Ae(b);null===d?c.P(a):c.a.setItem(a,d)})};h.P=function(a){var b=this;return D().then(function(){b.a.removeItem(a)})};\nh.Y=function(a){l.window&&tc(l.window,\"storage\",a)};h.ca=function(a){l.window&&G(l.window,\"storage\",a)};function Kj(){this.type=\"nullStorage\"}h=Kj.prototype;h.get=function(){return D(null)};h.set=function(){return D()};h.P=function(){return D()};h.Y=function(){};h.ca=function(){};function Lj(){if(!Mj()){if(\"Node\"==qe())throw new N(\"internal-error\",\"The SessionStorage compatibility library was not found.\");throw new N(\"web-storage-unsupported\");}this.a=Nj()||firebase.INTERNAL.node.sessionStorage;this.type=\"sessionStorage\"}function Nj(){try{var a=l.sessionStorage,b=we();a&&(a.setItem(b,\"1\"),a.removeItem(b));return a}catch(c){return null}}\nfunction Mj(){var a=\"Node\"==qe();a=Nj()||a&&firebase.INTERNAL.node&&firebase.INTERNAL.node.sessionStorage;if(!a)return!1;try{return a.setItem(\"__sak\",\"1\"),a.removeItem(\"__sak\"),!0}catch(b){return!1}}h=Lj.prototype;h.get=function(a){var b=this;return D().then(function(){var c=b.a.getItem(a);return Ce(c)})};h.set=function(a,b){var c=this;return D().then(function(){var d=Ae(b);null===d?c.P(a):c.a.setItem(a,d)})};h.P=function(a){var b=this;return D().then(function(){b.a.removeItem(a)})};h.Y=function(){};\nh.ca=function(){};function Oj(){var a={};a.Browser=Pj;a.Node=Qj;a.ReactNative=Rj;a.Worker=Sj;this.a=a[qe()]}var Tj,Pj={B:Hj,Sa:Lj},Qj={B:Hj,Sa:Lj},Rj={B:kj,Sa:Kj},Sj={B:Hj,Sa:Kj};var Uj={ad:\"local\",NONE:\"none\",cd:\"session\"};function Vj(a){var b=new N(\"invalid-persistence-type\"),c=new N(\"unsupported-persistence-type\");a:{for(d in Uj)if(Uj[d]==a){var d=!0;break a}d=!1}if(!d||\"string\"!==typeof a)throw b;switch(qe()){case \"ReactNative\":if(\"session\"===a)throw c;break;case \"Node\":if(\"none\"!==a)throw c;break;default:if(!ve()&&\"none\"!==a)throw c;}}\nfunction Wj(){var a=!De(J())&&oe()?!0:!1,b=ze(),c=ve();this.m=a;this.h=b;this.o=c;this.a={};Tj||(Tj=new Oj);a=Tj;try{this.g=!Xd()&&Je()||!l.indexedDB?new a.a.B:new Fj(pe()?new Gj:new a.a.B)}catch(d){this.g=new Gj,this.h=!0}try{this.i=new a.a.Sa}catch(d){this.i=new Gj}this.l=new Gj;this.f=t(this.Pb,this);this.b={}}var Xj;function Yj(){Xj||(Xj=new Wj);return Xj}function Zj(a,b){switch(b){case \"session\":return a.i;case \"none\":return a.l;default:return a.g}}\nfunction ak(a,b){return\"firebase:\"+a.name+(b?\":\"+b:\"\")}function bk(a,b,c){var d=ak(b,c),e=Zj(a,b.B);return a.get(b,c).then(function(f){var g=null;try{g=Ce(l.localStorage.getItem(d))}catch(k){}if(g&&!f)return l.localStorage.removeItem(d),a.set(b,g,c);g&&f&&\"localStorage\"!=e.type&&l.localStorage.removeItem(d)})}h=Wj.prototype;h.get=function(a,b){return Zj(this,a.B).get(ak(a,b))};function ck(a,b,c){c=ak(b,c);\"local\"==b.B&&(a.b[c]=null);return Zj(a,b.B).P(c)}\nh.set=function(a,b,c){var d=ak(a,c),e=this,f=Zj(this,a.B);return f.set(d,b).then(function(){return f.get(d)}).then(function(g){\"local\"==a.B&&(e.b[d]=g)})};h.addListener=function(a,b,c){a=ak(a,b);this.o&&(this.b[a]=l.localStorage.getItem(a));Ya(this.a)&&(Zj(this,\"local\").Y(this.f),this.h||(Xd()||!Je())&&l.indexedDB||!this.o||dk(this));this.a[a]||(this.a[a]=[]);this.a[a].push(c)};\nh.removeListener=function(a,b,c){a=ak(a,b);this.a[a]&&(x(this.a[a],function(d){return d==c}),0==this.a[a].length&&delete this.a[a]);Ya(this.a)&&(Zj(this,\"local\").ca(this.f),ek(this))};function dk(a){ek(a);a.c=setInterval(function(){for(var b in a.a){var c=l.localStorage.getItem(b),d=a.b[b];c!=d&&(a.b[b]=c,c=new hc({type:\"storage\",key:b,target:window,oldValue:d,newValue:c,a:!0}),a.Pb(c))}},1E3)}function ek(a){a.c&&(clearInterval(a.c),a.c=null)}\nh.Pb=function(a){if(a&&a.f){var b=a.a.key;if(null==b)for(var c in this.a){var d=this.b[c];\"undefined\"===typeof d&&(d=null);var e=l.localStorage.getItem(c);e!==d&&(this.b[c]=e,this.Ya(c))}else if(0==b.indexOf(\"firebase:\")&&this.a[b]){\"undefined\"!==typeof a.a.a?Zj(this,\"local\").ca(this.f):ek(this);if(this.m)if(c=l.localStorage.getItem(b),d=a.a.newValue,d!==c)null!==d?l.localStorage.setItem(b,d):l.localStorage.removeItem(b);else if(this.b[b]===d&&\"undefined\"===typeof a.a.a)return;var f=this;c=function(){if(\"undefined\"!==\ntypeof a.a.a||f.b[b]!==l.localStorage.getItem(b))f.b[b]=l.localStorage.getItem(b),f.Ya(b)};Pb&&$b&&10==$b&&l.localStorage.getItem(b)!==a.a.newValue&&a.a.newValue!==a.a.oldValue?setTimeout(c,10):c()}}else w(a,t(this.Ya,this))};h.Ya=function(a){this.a[a]&&w(this.a[a],function(b){b()})};function fk(a){this.a=a;this.b=Yj()}var gk={name:\"authEvent\",B:\"local\"};function hk(a){return a.b.get(gk,a.a).then(function(b){return Hg(b)})};function ik(){this.a=Yj()};function jk(){this.b=-1};function kk(a,b){this.b=lk;this.f=l.Uint8Array?new Uint8Array(this.b):Array(this.b);this.g=this.c=0;this.a=[];this.i=a;this.h=b;this.o=l.Int32Array?new Int32Array(64):Array(64);void 0!==mk||(l.Int32Array?mk=new Int32Array(nk):mk=nk);this.reset()}var mk;u(kk,jk);for(var lk=64,ok=lk-1,pk=[],qk=0;qk<ok;qk++)pk[qk]=0;var rk=Ja(128,pk);kk.prototype.reset=function(){this.g=this.c=0;this.a=l.Int32Array?new Int32Array(this.h):Ka(this.h)};\nfunction sk(a){for(var b=a.f,c=a.o,d=0,e=0;e<b.length;)c[d++]=b[e]<<24|b[e+1]<<16|b[e+2]<<8|b[e+3],e=4*d;for(b=16;64>b;b++){e=c[b-15]|0;d=c[b-2]|0;var f=(c[b-16]|0)+((e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3)|0,g=(c[b-7]|0)+((d>>>17|d<<15)^(d>>>19|d<<13)^d>>>10)|0;c[b]=f+g|0}d=a.a[0]|0;e=a.a[1]|0;var k=a.a[2]|0,n=a.a[3]|0,p=a.a[4]|0,z=a.a[5]|0,A=a.a[6]|0;f=a.a[7]|0;for(b=0;64>b;b++){var da=((d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10))+(d&e^d&k^e&k)|0;g=p&z^~p&A;f=f+((p>>>6|p<<26)^(p>>>11|p<<21)^(p>>>25|\np<<7))|0;g=g+(mk[b]|0)|0;g=f+(g+(c[b]|0)|0)|0;f=A;A=z;z=p;p=n+g|0;n=k;k=e;e=d;d=g+da|0}a.a[0]=a.a[0]+d|0;a.a[1]=a.a[1]+e|0;a.a[2]=a.a[2]+k|0;a.a[3]=a.a[3]+n|0;a.a[4]=a.a[4]+p|0;a.a[5]=a.a[5]+z|0;a.a[6]=a.a[6]+A|0;a.a[7]=a.a[7]+f|0}\nfunction tk(a,b,c){void 0===c&&(c=b.length);var d=0,e=a.c;if(m(b))for(;d<c;)a.f[e++]=b.charCodeAt(d++),e==a.b&&(sk(a),e=0);else if(ka(b))for(;d<c;){var f=b[d++];if(!(\"number\"==typeof f&&0<=f&&255>=f&&f==(f|0)))throw Error(\"message must be a byte array\");a.f[e++]=f;e==a.b&&(sk(a),e=0)}else throw Error(\"message must be string or array\");a.c=e;a.g+=c}\nvar nk=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,\n4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function uk(){kk.call(this,8,vk)}u(uk,kk);var vk=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];function wk(a,b,c,d,e){this.l=a;this.i=b;this.o=c;this.m=d||null;this.u=e||null;this.h=b+\":\"+c;this.v=new ik;this.g=new fk(this.h);this.f=null;this.b=[];this.a=this.c=null}function xk(a){return new N(\"invalid-cordova-configuration\",a)}h=wk.prototype;\nh.ga=function(){return this.za?this.za:this.za=le().then(function(){if(\"function\"!==typeof K(\"universalLinks.subscribe\",l))throw xk(\"cordova-universal-links-plugin-fix is not installed\");if(\"undefined\"===typeof K(\"BuildInfo.packageName\",l))throw xk(\"cordova-plugin-buildinfo is not installed\");if(\"function\"!==typeof K(\"cordova.plugins.browsertab.openUrl\",l))throw xk(\"cordova-plugin-browsertab is not installed\");if(\"function\"!==typeof K(\"cordova.InAppBrowser.open\",l))throw xk(\"cordova-plugin-inappbrowser is not installed\");\n},function(){throw new N(\"cordova-not-ready\");})};function yk(){for(var a=20,b=[];0<a;)b.push(\"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\".charAt(Math.floor(62*Math.random()))),a--;return b.join(\"\")}function zk(a){var b=new uk;tk(b,a);a=[];var c=8*b.g;56>b.c?tk(b,rk,56-b.c):tk(b,rk,b.b-(b.c-56));for(var d=63;56<=d;d--)b.f[d]=c&255,c/=256;sk(b);for(d=c=0;d<b.i;d++)for(var e=24;0<=e;e-=8)a[c++]=b.a[d]>>e&255;return rf(a)}\nh.Ea=function(a,b){b(new N(\"operation-not-supported-in-this-environment\"));return D()};h.Db=function(){return E(new N(\"operation-not-supported-in-this-environment\"))};h.Qb=function(){return!1};h.Mb=function(){return!0};h.Hb=function(){return!0};\nh.Ca=function(a,b,c){if(this.c)return E(new N(\"redirect-operation-pending\"));var d=this,e=l.document,f=null,g=null,k=null,n=null;return this.c=D().then(function(){Fg(b);return Ak(d)}).then(function(){return Bk(d,a,b,c)}).then(function(){return(new C(function(p,z){g=function(){var A=K(\"cordova.plugins.browsertab.close\",l);p();\"function\"===typeof A&&A();d.a&&\"function\"===typeof d.a.close&&(d.a.close(),d.a=null);return!1};d.wa(g);k=function(){f||(f=Jc(2E3).then(function(){z(new N(\"redirect-cancelled-by-user\"))}))};\nn=function(){Ge()&&k()};e.addEventListener(\"resume\",k,!1);J().toLowerCase().match(/android/)||e.addEventListener(\"visibilitychange\",n,!1)})).s(function(p){return Ck(d).then(function(){throw p;})})}).ia(function(){k&&e.removeEventListener(\"resume\",k,!1);n&&e.removeEventListener(\"visibilitychange\",n,!1);f&&f.cancel();g&&d.Ka(g);d.c=null})};\nfunction Bk(a,b,c,d){var e=yk(),f=new Gg(b,d,null,e,new N(\"no-auth-event\")),g=K(\"BuildInfo.packageName\",l);if(\"string\"!==typeof g)throw new N(\"invalid-cordova-configuration\");var k=K(\"BuildInfo.displayName\",l),n={};if(J().toLowerCase().match(/iphone|ipad|ipod/))n.ibi=g;else if(J().toLowerCase().match(/android/))n.apn=g;else return E(new N(\"operation-not-supported-in-this-environment\"));k&&(n.appDisplayName=k);e=zk(e);n.sessionId=e;var p=jj(a.l,a.i,a.o,b,c,null,d,a.m,n,a.u);return a.ga().then(function(){var z=\na.h;return a.v.a.set(gk,f.w(),z)}).then(function(){var z=K(\"cordova.plugins.browsertab.isAvailable\",l);if(\"function\"!==typeof z)throw new N(\"invalid-cordova-configuration\");var A=null;z(function(da){if(da){A=K(\"cordova.plugins.browsertab.openUrl\",l);if(\"function\"!==typeof A)throw new N(\"invalid-cordova-configuration\");A(p)}else{A=K(\"cordova.InAppBrowser.open\",l);if(\"function\"!==typeof A)throw new N(\"invalid-cordova-configuration\");da=J();a.a=A(p,da.match(/(iPad|iPhone|iPod).*OS 7_\\d/i)||da.match(/(iPad|iPhone|iPod).*OS 8_\\d/i)?\n\"_blank\":\"_system\",\"location=yes\")}})})}function Dk(a,b){for(var c=0;c<a.b.length;c++)try{a.b[c](b)}catch(d){}}function Ak(a){a.f||(a.f=a.ga().then(function(){return new C(function(b){function c(d){b(d);a.Ka(c);return!1}a.wa(c);Ek(a)})}));return a.f}function Ck(a){var b=null;return hk(a.g).then(function(c){b=c;c=a.g;return ck(c.b,gk,c.a)}).then(function(){return b})}\nfunction Ek(a){function b(g){d=!0;e&&e.cancel();Ck(a).then(function(k){var n=c;if(k&&g&&g.url){var p=null;n=Rf(g.url);-1!=n.indexOf(\"/__/auth/callback\")&&(p=fd(n),p=Ce(ed(p,\"firebaseError\")||null),p=(p=\"object\"===typeof p?ef(p):null)?new Gg(k.c,k.b,null,null,p):new Gg(k.c,k.b,n,k.f));n=p||c}Dk(a,n)})}var c=new Gg(\"unknown\",null,null,null,new N(\"no-auth-event\")),d=!1,e=Jc(500).then(function(){return Ck(a).then(function(){d||Dk(a,c)})}),f=l.handleOpenURL;l.handleOpenURL=function(g){0==g.toLowerCase().indexOf(K(\"BuildInfo.packageName\",\nl).toLowerCase()+\"://\")&&b({url:g});if(\"function\"===typeof f)try{f(g)}catch(k){console.error(k)}};Jg||(Jg=new Ig);Jg.subscribe(b)}h.wa=function(a){this.b.push(a);Ak(this).s(function(b){\"auth/invalid-cordova-configuration\"===b.code&&(b=new Gg(\"unknown\",null,null,null,new N(\"no-auth-event\")),a(b))})};h.Ka=function(a){x(this.b,function(b){return b==a})};function Fk(a){this.a=a;this.b=Yj()}var Gk={name:\"pendingRedirect\",B:\"session\"};function Hk(a){return a.b.set(Gk,\"pending\",a.a)}function Ik(a){return ck(a.b,Gk,a.a)}function Jk(a){return a.b.get(Gk,a.a).then(function(b){return\"pending\"==b})};function Kk(a,b,c){this.i={};this.u=0;this.A=a;this.l=b;this.m=c;this.h=[];this.f=!1;this.o=t(this.cb,this);this.b=new Lk;this.v=new Mk;this.g=new Fk(this.l+\":\"+this.m);this.c={};this.c.unknown=this.b;this.c.signInViaRedirect=this.b;this.c.linkViaRedirect=this.b;this.c.reauthViaRedirect=this.b;this.c.signInViaPopup=this.v;this.c.linkViaPopup=this.v;this.c.reauthViaPopup=this.v;this.a=Nk(this.A,this.l,this.m,Cf)}\nfunction Nk(a,b,c,d){var e=firebase.SDK_VERSION||null;return me()?new wk(a,b,c,e,d):new dj(a,b,c,e,d)}h=Kk.prototype;h.reset=function(){this.f=!1;this.a.Ka(this.o);this.a=Nk(this.A,this.l,this.m);this.i={}};h.Za=function(){this.b.Za()};function Ok(a){a.f||(a.f=!0,a.a.wa(a.o));var b=a.a;return a.a.ga().s(function(c){a.a==b&&a.reset();throw c;})}\nfunction Pk(a){a.a.Mb()&&Ok(a).s(function(b){var c=new Gg(\"unknown\",null,null,null,new N(\"operation-not-supported-in-this-environment\"));Qk(b)&&a.cb(c)});a.a.Hb()||Rk(a.b)}h.subscribe=function(a){Ha(this.h,a)||this.h.push(a);if(!this.f){var b=this;Jk(this.g).then(function(c){c?Ik(b.g).then(function(){Ok(b).s(function(d){var e=new Gg(\"unknown\",null,null,null,new N(\"operation-not-supported-in-this-environment\"));Qk(d)&&b.cb(e)})}):Pk(b)}).s(function(){Pk(b)})}};\nh.unsubscribe=function(a){x(this.h,function(b){return b==a})};h.cb=function(a){if(!a)throw new N(\"invalid-auth-event\");6E5<=qa()-this.u&&(this.i={},this.u=0);if(a&&a.getUid()&&this.i.hasOwnProperty(a.getUid()))return!1;for(var b=!1,c=0;c<this.h.length;c++){var d=this.h[c];if(d.wb(a.c,a.b)){if(b=this.c[a.c])b.h(a,d),a&&(a.f||a.b)&&(this.i[a.getUid()]=!0,this.u=qa());b=!0;break}}Rk(this.b);return b};var Sk=new Fe(2E3,1E4),Tk=new Fe(3E4,6E4);Kk.prototype.fa=function(){return this.b.fa()};\nfunction Uk(a,b,c,d,e,f){return a.a.Db(b,c,d,function(){a.f||(a.f=!0,a.a.wa(a.o))},function(){a.reset()},e,f)}function Qk(a){return a&&\"auth/cordova-not-ready\"==a.code?!0:!1}Kk.prototype.Ca=function(a,b,c){var d=this,e;return Hk(this.g).then(function(){return d.a.Ca(a,b,c).s(function(f){if(Qk(f))throw new N(\"operation-not-supported-in-this-environment\");e=f;return Ik(d.g).then(function(){throw e;})}).then(function(){return d.a.Qb()?new C(function(){}):Ik(d.g).then(function(){return d.fa()}).then(function(){}).s(function(){})})})};\nKk.prototype.Ea=function(a,b,c,d){return this.a.Ea(c,function(e){a.ha(b,null,e,d)},Sk.get())};var Vk={};function Wk(a,b,c){var d=b+\":\"+c;Vk[d]||(Vk[d]=new Kk(a,b,c));return Vk[d]}function Lk(){this.b=null;this.f=[];this.c=[];this.a=null;this.i=this.g=!1}Lk.prototype.reset=function(){this.b=null;this.a&&(this.a.cancel(),this.a=null)};\nLk.prototype.h=function(a,b){if(a){this.reset();this.g=!0;var c=a.c,d=a.b,e=a.a&&\"auth/web-storage-unsupported\"==a.a.code,f=a.a&&\"auth/operation-not-supported-in-this-environment\"==a.a.code;this.i=!(!e&&!f);\"unknown\"!=c||e||f?a.a?(Xk(this,!0,null,a.a),D()):b.xa(c,d)?Yk(this,a,b):E(new N(\"invalid-auth-event\")):(Xk(this,!1,null,null),D())}else E(new N(\"invalid-auth-event\"))};function Rk(a){a.g||(a.g=!0,Xk(a,!1,null,null))}Lk.prototype.Za=function(){this.g&&!this.i&&Xk(this,!1,null,null)};\nfunction Yk(a,b,c){c=c.xa(b.c,b.b);var d=b.g,e=b.f,f=b.h,g=!!b.c.match(/Redirect$/);c(d,e,f).then(function(k){Xk(a,g,k,null)}).s(function(k){Xk(a,g,null,k)})}function Zk(a,b){a.b=function(){return E(b)};if(a.c.length)for(var c=0;c<a.c.length;c++)a.c[c](b)}function $k(a,b){a.b=function(){return D(b)};if(a.f.length)for(var c=0;c<a.f.length;c++)a.f[c](b)}function Xk(a,b,c,d){b?d?Zk(a,d):$k(a,c):$k(a,{user:null});a.f=[];a.c=[]}\nLk.prototype.fa=function(){var a=this;return new C(function(b,c){a.b?a.b().then(b,c):(a.f.push(b),a.c.push(c),al(a))})};function al(a){var b=new N(\"timeout\");a.a&&a.a.cancel();a.a=Jc(Tk.get()).then(function(){a.b||(a.g=!0,Xk(a,!0,null,b))})}function Mk(){}Mk.prototype.h=function(a,b){if(a){var c=a.c,d=a.b;a.a?(b.ha(a.c,null,a.a,a.b),D()):b.xa(c,d)?bl(a,b):E(new N(\"invalid-auth-event\"))}else E(new N(\"invalid-auth-event\"))};\nfunction bl(a,b){var c=a.b,d=a.c;b.xa(d,c)(a.g,a.f,a.h).then(function(e){b.ha(d,e,null,c)}).s(function(e){b.ha(d,null,e,c)})};function cl(){this.tb=!1;Object.defineProperty(this,\"appVerificationDisabled\",{get:function(){return this.tb},set:function(a){this.tb=a},enumerable:!1})};function dl(a,b){this.a=b;L(this,\"verificationId\",a)}dl.prototype.confirm=function(a){a=Dg(this.verificationId,a);return this.a(a)};function el(a,b,c,d){return(new Bg(a)).Va(b,c).then(function(e){return new dl(e,d)})};function fl(a){var b=zf(a);if(!(b&&b.exp&&b.auth_time&&b.iat))throw new N(\"internal-error\",\"An internal error occurred. The token obtained by Firebase appears to be malformed. Please retry the operation.\");M(this,{token:a,expirationTime:Ie(1E3*b.exp),authTime:Ie(1E3*b.auth_time),issuedAtTime:Ie(1E3*b.iat),signInProvider:b.firebase&&b.firebase.sign_in_provider?b.firebase.sign_in_provider:null,claims:b})};function gl(a,b,c){this.h=a;this.i=b;this.g=c;this.c=3E4;this.f=96E4;this.b=null;this.a=this.c;if(this.f<this.c)throw Error(\"Proactive refresh lower bound greater than upper bound!\");}gl.prototype.start=function(){this.a=this.c;hl(this,!0)};function il(a,b){if(b)return a.a=a.c,a.g();b=a.a;a.a*=2;a.a>a.f&&(a.a=a.f);return b}function hl(a,b){a.stop();a.b=Jc(il(a,b)).then(function(){return He()}).then(function(){return a.h()}).then(function(){hl(a,!0)}).s(function(c){a.i(c)&&hl(a,!1)})}\ngl.prototype.stop=function(){this.b&&(this.b.cancel(),this.b=null)};function jl(a){this.f=a;this.b=this.a=null;this.c=0}jl.prototype.w=function(){return{apiKey:this.f.b,refreshToken:this.a,accessToken:this.b,expirationTime:this.c}};function kl(a,b){var c=b[Uf],d=b.refreshToken;b=ll(b.expiresIn);a.b=c;a.c=b;a.a=d}function ml(a,b){a.b=b.b;a.a=b.a;a.c=b.c}function ll(a){return qa()+1E3*parseInt(a,10)}\nfunction nl(a,b){return gi(a.f,b).then(function(c){a.b=c.access_token;a.c=ll(c.expires_in);a.a=c.refresh_token;return{accessToken:a.b,expirationTime:a.c,refreshToken:a.a}}).s(function(c){\"auth/user-token-expired\"==c.code&&(a.a=null);throw c;})}jl.prototype.getToken=function(a){a=!!a;return this.b&&!this.a?E(new N(\"user-token-expired\")):a||!this.b||qa()>this.c-3E4?this.a?nl(this,{grant_type:\"refresh_token\",refresh_token:this.a}):D(null):D({accessToken:this.b,expirationTime:this.c,refreshToken:this.a})};function ol(a,b){this.a=a||null;this.b=b||null;M(this,{lastSignInTime:Ie(b||null),creationTime:Ie(a||null)})}function pl(a){return new ol(a.a,a.b)}ol.prototype.w=function(){return{lastLoginAt:this.b,createdAt:this.a}};function ql(a,b,c,d,e,f){M(this,{uid:a,displayName:d||null,photoURL:e||null,email:c||null,phoneNumber:f||null,providerId:b})}function rl(a,b){F.call(this,a);for(var c in b)this[c]=b[c]}u(rl,F);\nfunction Q(a,b,c){this.G=[];this.l=a.apiKey;this.m=a.appName;this.u=a.authDomain||null;a=firebase.SDK_VERSION?ue(firebase.SDK_VERSION):null;this.b=new Vh(this.l,Bf(Cf),a);this.h=new jl(this.b);sl(this,b[Uf]);kl(this.h,b);L(this,\"refreshToken\",this.h.a);tl(this,c||{});H.call(this);this.I=!1;this.u&&xe()&&(this.a=Wk(this.u,this.l,this.m));this.N=[];this.i=null;this.A=ul(this);this.V=t(this.Ha,this);var d=this;this.ka=null;this.ta=function(e){d.pa(e.g)};this.X=null;this.O=[];this.sa=function(e){vl(d,\ne.c)};this.W=null}u(Q,H);Q.prototype.pa=function(a){this.ka=a;ai(this.b,a)};Q.prototype.ea=function(){return this.ka};function wl(a,b){a.X&&G(a.X,\"languageCodeChanged\",a.ta);(a.X=b)&&tc(b,\"languageCodeChanged\",a.ta)}function vl(a,b){a.O=b;bi(a.b,firebase.SDK_VERSION?ue(firebase.SDK_VERSION,a.O):null)}Q.prototype.ya=function(){return Ka(this.O)};function xl(a,b){a.W&&G(a.W,\"frameworkChanged\",a.sa);(a.W=b)&&tc(b,\"frameworkChanged\",a.sa)}Q.prototype.Ha=function(){this.A.b&&(this.A.stop(),this.A.start())};\nfunction yl(a){try{return firebase.app(a.m).auth()}catch(b){throw new N(\"internal-error\",\"No firebase.auth.Auth instance is available for the Firebase App '\"+a.m+\"'!\");}}function ul(a){return new gl(function(){return a.F(!0)},function(b){return b&&\"auth/network-request-failed\"==b.code?!0:!1},function(){var b=a.h.c-qa()-3E5;return 0<b?b:0})}function zl(a){a.D||a.A.b||(a.A.start(),G(a,\"tokenChanged\",a.V),tc(a,\"tokenChanged\",a.V))}function Al(a){G(a,\"tokenChanged\",a.V);a.A.stop()}\nfunction sl(a,b){a.ra=b;L(a,\"_lat\",b)}function Bl(a,b){x(a.N,function(c){return c==b})}function Cl(a){for(var b=[],c=0;c<a.N.length;c++)b.push(a.N[c](a));return wb(b).then(function(){return a})}function Dl(a){a.a&&!a.I&&(a.I=!0,a.a.subscribe(a))}\nfunction tl(a,b){M(a,{uid:b.uid,displayName:b.displayName||null,photoURL:b.photoURL||null,email:b.email||null,emailVerified:b.emailVerified||!1,phoneNumber:b.phoneNumber||null,isAnonymous:b.isAnonymous||!1,metadata:new ol(b.createdAt,b.lastLoginAt),providerData:[]})}L(Q.prototype,\"providerId\",\"firebase\");function El(){}function Fl(a){return D().then(function(){if(a.D)throw new N(\"app-deleted\");})}function Gl(a){return Da(a.providerData,function(b){return b.providerId})}\nfunction Hl(a,b){b&&(Il(a,b.providerId),a.providerData.push(b))}function Il(a,b){x(a.providerData,function(c){return c.providerId==b})}function Jl(a,b,c){(\"uid\"!=b||c)&&a.hasOwnProperty(b)&&L(a,b,c)}\nfunction Kl(a,b){a!=b&&(M(a,{uid:b.uid,displayName:b.displayName,photoURL:b.photoURL,email:b.email,emailVerified:b.emailVerified,phoneNumber:b.phoneNumber,isAnonymous:b.isAnonymous,providerData:[]}),b.metadata?L(a,\"metadata\",pl(b.metadata)):L(a,\"metadata\",new ol),w(b.providerData,function(c){Hl(a,c)}),ml(a.h,b.h),L(a,\"refreshToken\",a.h.a))}h=Q.prototype;h.reload=function(){var a=this;return R(this,Fl(this).then(function(){return Ll(a).then(function(){return Cl(a)}).then(El)}))};\nfunction Ll(a){return a.F().then(function(b){var c=a.isAnonymous;return Ml(a,b).then(function(){c||Jl(a,\"isAnonymous\",!1);return b})})}h.dc=function(a){return this.F(a).then(function(b){return new fl(b)})};h.F=function(a){var b=this;return R(this,Fl(this).then(function(){return b.h.getToken(a)}).then(function(c){if(!c)throw new N(\"internal-error\");c.accessToken!=b.ra&&(sl(b,c.accessToken),b.dispatchEvent(new rl(\"tokenChanged\")));Jl(b,\"refreshToken\",c.refreshToken);return c.accessToken}))};\nfunction Nl(a,b){b[Uf]&&a.ra!=b[Uf]&&(kl(a.h,b),a.dispatchEvent(new rl(\"tokenChanged\")),sl(a,b[Uf]),Jl(a,\"refreshToken\",a.h.a))}function Ml(a,b){return P(a.b,Pi,{idToken:b}).then(t(a.zc,a))}\nh.zc=function(a){a=a.users;if(!a||!a.length)throw new N(\"internal-error\");a=a[0];tl(this,{uid:a.localId,displayName:a.displayName,photoURL:a.photoUrl,email:a.email,emailVerified:!!a.emailVerified,phoneNumber:a.phoneNumber,lastLoginAt:a.lastLoginAt,createdAt:a.createdAt});for(var b=Ol(a),c=0;c<b.length;c++)Hl(this,b[c]);Jl(this,\"isAnonymous\",!(this.email&&a.passwordHash)&&!(this.providerData&&this.providerData.length))};\nfunction Ol(a){return(a=a.providerUserInfo)&&a.length?Da(a,function(b){return new ql(b.rawId,b.providerId,b.email,b.displayName,b.photoUrl,b.phoneNumber)}):[]}h.hb=function(a){var b=this,c=null;return R(this,a.f(this.b,this.uid).then(function(d){Nl(b,d);c=Pl(b,d,\"reauthenticate\");b.i=null;return b.reload()}).then(function(){return c}),!0)};\nh.Ac=function(a){Ne(\"firebase.User.prototype.reauthenticateWithCredential is deprecated. Please use firebase.User.prototype.reauthenticateAndRetrieveDataWithCredential instead.\");return this.hb(a).then(function(){})};function Ql(a,b){return Ll(a).then(function(){if(Ha(Gl(a),b))return Cl(a).then(function(){throw new N(\"provider-already-linked\");})})}\nh.fb=function(a){var b=this,c=null;return R(this,Ql(this,a.providerId).then(function(){return b.F()}).then(function(d){return a.b(b.b,d)}).then(function(d){c=Pl(b,d,\"link\");return Rl(b,d)}).then(function(){return c}))};h.rc=function(a){Ne(\"firebase.User.prototype.linkWithCredential is deprecated. Please use firebase.User.prototype.linkAndRetrieveDataWithCredential instead.\");return this.fb(a).then(function(b){return b.user})};\nh.sc=function(a,b){var c=this;return R(this,Ql(this,\"phone\").then(function(){return el(yl(c),a,b,t(c.fb,c))}))};h.Bc=function(a,b){var c=this;return R(this,D().then(function(){return el(yl(c),a,b,t(c.hb,c))}),!0)};function Pl(a,b,c){var d=Eg(b);b=Hf(b);return Qe({user:a,credential:d,additionalUserInfo:b,operationType:c})}function Rl(a,b){Nl(a,b);return a.reload().then(function(){return a})}\nh.qb=function(a){var b=this;return R(this,this.F().then(function(c){return b.b.qb(c,a)}).then(function(c){Nl(b,c);return b.reload()}))};h.Tc=function(a){var b=this;return R(this,this.F().then(function(c){return a.b(b.b,c)}).then(function(c){Nl(b,c);return b.reload()}))};h.rb=function(a){var b=this;return R(this,this.F().then(function(c){return b.b.rb(c,a)}).then(function(c){Nl(b,c);return b.reload()}))};\nh.sb=function(a){if(void 0===a.displayName&&void 0===a.photoURL)return Fl(this);var b=this;return R(this,this.F().then(function(c){return b.b.sb(c,{displayName:a.displayName,photoUrl:a.photoURL})}).then(function(c){Nl(b,c);Jl(b,\"displayName\",c.displayName||null);Jl(b,\"photoURL\",c.photoUrl||null);w(b.providerData,function(d){\"password\"===d.providerId&&(L(d,\"displayName\",b.displayName),L(d,\"photoURL\",b.photoURL))});return Cl(b)}).then(El))};\nh.Rc=function(a){var b=this;return R(this,Ll(this).then(function(c){return Ha(Gl(b),a)?Ai(b.b,c,[a]).then(function(d){var e={};w(d.providerUserInfo||[],function(f){e[f.providerId]=!0});w(Gl(b),function(f){e[f]||Il(b,f)});e[Bg.PROVIDER_ID]||L(b,\"phoneNumber\",null);return Cl(b)}):Cl(b).then(function(){throw new N(\"no-such-provider\");})}))};\nh.delete=function(){var a=this;return R(this,this.F().then(function(b){return P(a.b,Oi,{idToken:b})}).then(function(){a.dispatchEvent(new rl(\"userDeleted\"))})).then(function(){for(var b=0;b<a.G.length;b++)a.G[b].cancel(\"app-deleted\");wl(a,null);xl(a,null);a.G=[];a.D=!0;Al(a);L(a,\"refreshToken\",null);a.a&&a.a.unsubscribe(a)})};\nh.wb=function(a,b){return\"linkViaPopup\"==a&&(this.g||null)==b&&this.f||\"reauthViaPopup\"==a&&(this.g||null)==b&&this.f||\"linkViaRedirect\"==a&&(this.aa||null)==b||\"reauthViaRedirect\"==a&&(this.aa||null)==b?!0:!1};h.ha=function(a,b,c,d){\"linkViaPopup\"!=a&&\"reauthViaPopup\"!=a||d!=(this.g||null)||(c&&this.v?this.v(c):b&&!c&&this.f&&this.f(b),this.c&&(this.c.cancel(),this.c=null),delete this.f,delete this.v)};\nh.xa=function(a,b){return\"linkViaPopup\"==a&&b==(this.g||null)?t(this.Bb,this):\"reauthViaPopup\"==a&&b==(this.g||null)?t(this.Cb,this):\"linkViaRedirect\"==a&&(this.aa||null)==b?t(this.Bb,this):\"reauthViaRedirect\"==a&&(this.aa||null)==b?t(this.Cb,this):null};h.tc=function(a){var b=this;return Sl(this,\"linkViaPopup\",a,function(){return Ql(b,a.providerId).then(function(){return Cl(b)})},!1)};h.Cc=function(a){return Sl(this,\"reauthViaPopup\",a,function(){return D()},!0)};\nfunction Sl(a,b,c,d,e){if(!xe())return E(new N(\"operation-not-supported-in-this-environment\"));if(a.i&&!e)return E(a.i);var f=Gf(c.providerId),g=we(a.uid+\":::\"),k=null;(!ze()||oe())&&a.u&&c.isOAuthProvider&&(k=jj(a.u,a.l,a.m,b,c,null,g,firebase.SDK_VERSION||null));var n=fe(k,f&&f.Ba,f&&f.Aa);d=d().then(function(){Tl(a);if(!e)return a.F().then(function(){})}).then(function(){return Uk(a.a,n,b,c,g,!!k)}).then(function(){return new C(function(p,z){a.ha(b,null,new N(\"cancelled-popup-request\"),a.g||null);\na.f=p;a.v=z;a.g=g;a.c=a.a.Ea(a,b,n,g)})}).then(function(p){n&&ee(n);return p?Qe(p):null}).s(function(p){n&&ee(n);throw p;});return R(a,d,e)}h.uc=function(a){var b=this;return Ul(this,\"linkViaRedirect\",a,function(){return Ql(b,a.providerId)},!1)};h.Dc=function(a){return Ul(this,\"reauthViaRedirect\",a,function(){return D()},!0)};\nfunction Ul(a,b,c,d,e){if(!xe())return E(new N(\"operation-not-supported-in-this-environment\"));if(a.i&&!e)return E(a.i);var f=null,g=we(a.uid+\":::\");d=d().then(function(){Tl(a);if(!e)return a.F().then(function(){})}).then(function(){a.aa=g;return Cl(a)}).then(function(k){a.ba&&(k=a.ba,k=k.b.set(Vl,a.w(),k.a));return k}).then(function(){return a.a.Ca(b,c,g)}).s(function(k){f=k;if(a.ba)return Wl(a.ba);throw f;}).then(function(){if(f)throw f;});return R(a,d,e)}\nfunction Tl(a){if(!a.a||!a.I){if(a.a&&!a.I)throw new N(\"internal-error\");throw new N(\"auth-domain-config-required\");}}h.Bb=function(a,b,c){var d=this;this.c&&(this.c.cancel(),this.c=null);var e=null,f=this.F().then(function(g){return Yf(d.b,{requestUri:a,postBody:c,sessionId:b,idToken:g})}).then(function(g){e=Pl(d,g,\"link\");return Rl(d,g)}).then(function(){return e});return R(this,f)};\nh.Cb=function(a,b,c){var d=this;this.c&&(this.c.cancel(),this.c=null);var e=null,f=D().then(function(){return Tf(Zf(d.b,{requestUri:a,sessionId:b,postBody:c}),d.uid)}).then(function(g){e=Pl(d,g,\"reauthenticate\");Nl(d,g);d.i=null;return d.reload()}).then(function(){return e});return R(this,f,!0)};h.kb=function(a){var b=this,c=null;return R(this,this.F().then(function(d){c=d;return\"undefined\"===typeof a||Ya(a)?{}:qf(new ff(a))}).then(function(d){return b.b.kb(c,d)}).then(function(d){if(b.email!=d)return b.reload()}).then(function(){}))};\nfunction R(a,b,c){var d=Xl(a,b,c);a.G.push(d);d.ia(function(){Ia(a.G,d)});return d}function Xl(a,b,c){return a.i&&!c?(b.cancel(),E(a.i)):b.s(function(d){!d||\"auth/user-disabled\"!=d.code&&\"auth/user-token-expired\"!=d.code||(a.i||a.dispatchEvent(new rl(\"userInvalidated\")),a.i=d);throw d;})}h.toJSON=function(){return this.w()};\nh.w=function(){var a={uid:this.uid,displayName:this.displayName,photoURL:this.photoURL,email:this.email,emailVerified:this.emailVerified,phoneNumber:this.phoneNumber,isAnonymous:this.isAnonymous,providerData:[],apiKey:this.l,appName:this.m,authDomain:this.u,stsTokenManager:this.h.w(),redirectEventId:this.aa||null};this.metadata&&ab(a,this.metadata.w());w(this.providerData,function(b){a.providerData.push(Re(b))});return a};\nfunction Yl(a){if(!a.apiKey)return null;var b={apiKey:a.apiKey,authDomain:a.authDomain,appName:a.appName},c={};if(a.stsTokenManager&&a.stsTokenManager.accessToken&&a.stsTokenManager.expirationTime)c[Uf]=a.stsTokenManager.accessToken,c.refreshToken=a.stsTokenManager.refreshToken||null,c.expiresIn=(a.stsTokenManager.expirationTime-qa())/1E3;else return null;var d=new Q(b,c,a);a.providerData&&w(a.providerData,function(e){e&&Hl(d,Qe(e))});a.redirectEventId&&(d.aa=a.redirectEventId);return d}\nfunction Zl(a,b,c,d){var e=new Q(a,b);c&&(e.ba=c);d&&vl(e,d);return e.reload().then(function(){return e})}function $l(a,b,c,d){b=b||{apiKey:a.l,authDomain:a.u,appName:a.m};var e=a.h,f={};f[Uf]=e.b;f.refreshToken=e.a;f.expiresIn=(e.c-qa())/1E3;b=new Q(b,f);c&&(b.ba=c);d&&vl(b,d);Kl(b,a);return b};function am(a){this.a=a;this.b=Yj()}var Vl={name:\"redirectUser\",B:\"session\"};function Wl(a){return ck(a.b,Vl,a.a)}function bm(a,b){return a.b.get(Vl,a.a).then(function(c){c&&b&&(c.authDomain=b);return Yl(c||{})})};function cm(a){this.a=a;this.b=Yj();this.c=null;this.f=dm(this);this.b.addListener(em(\"local\"),this.a,t(this.g,this))}cm.prototype.g=function(){var a=this,b=em(\"local\");fm(this,function(){return D().then(function(){return a.c&&\"local\"!=a.c.B?a.b.get(b,a.a):null}).then(function(c){if(c)return gm(a,\"local\").then(function(){a.c=b})})})};function gm(a,b){var c=[],d;for(d in Uj)Uj[d]!==b&&c.push(ck(a.b,em(Uj[d]),a.a));c.push(ck(a.b,hm,a.a));return vb(c)}\nfunction dm(a){var b=em(\"local\"),c=em(\"session\"),d=em(\"none\");return bk(a.b,b,a.a).then(function(){return a.b.get(c,a.a)}).then(function(e){return e?c:a.b.get(d,a.a).then(function(f){return f?d:a.b.get(b,a.a).then(function(g){return g?b:a.b.get(hm,a.a).then(function(k){return k?em(k):b})})})}).then(function(e){a.c=e;return gm(a,e.B)}).s(function(){a.c||(a.c=b)})}var hm={name:\"persistence\",B:\"session\"};function em(a){return{name:\"authUser\",B:a}}\ncm.prototype.nb=function(a){var b=null,c=this;Vj(a);return fm(this,function(){return a!=c.c.B?c.b.get(c.c,c.a).then(function(d){b=d;return gm(c,a)}).then(function(){c.c=em(a);if(b)return c.b.set(c.c,b,c.a)}):D()})};function im(a){return fm(a,function(){return a.b.set(hm,a.c.B,a.a)})}function jm(a,b){return fm(a,function(){return a.b.set(a.c,b.w(),a.a)})}function km(a){return fm(a,function(){return ck(a.b,a.c,a.a)})}\nfunction lm(a,b){return fm(a,function(){return a.b.get(a.c,a.a).then(function(c){c&&b&&(c.authDomain=b);return Yl(c||{})})})}function fm(a,b){a.f=a.f.then(b,b);return a.f};function mm(a){this.l=!1;L(this,\"settings\",new cl);L(this,\"app\",a);if(S(this).options&&S(this).options.apiKey)a=firebase.SDK_VERSION?ue(firebase.SDK_VERSION):null,this.b=new Vh(S(this).options&&S(this).options.apiKey,Bf(Cf),a);else throw new N(\"invalid-api-key\");this.N=[];this.m=[];this.I=[];this.Tb=firebase.INTERNAL.createSubscribe(t(this.oc,this));this.O=void 0;this.Ub=firebase.INTERNAL.createSubscribe(t(this.pc,this));nm(this,null);this.h=new cm(S(this).options.apiKey+\":\"+S(this).name);this.A=\nnew am(S(this).options.apiKey+\":\"+S(this).name);this.V=T(this,om(this));this.i=T(this,pm(this));this.X=!1;this.ka=t(this.Oc,this);this.Ha=t(this.Z,this);this.ra=t(this.bc,this);this.sa=t(this.mc,this);this.ta=t(this.nc,this);qm(this);this.INTERNAL={};this.INTERNAL[\"delete\"]=t(this.delete,this);this.INTERNAL.logFramework=t(this.vc,this);this.u=0;H.call(this);rm(this);this.G=[]}u(mm,H);function sm(a){F.call(this,\"languageCodeChanged\");this.g=a}u(sm,F);\nfunction tm(a){F.call(this,\"frameworkChanged\");this.c=a}u(tm,F);h=mm.prototype;h.nb=function(a){a=this.h.nb(a);return T(this,a)};h.pa=function(a){this.W===a||this.l||(this.W=a,ai(this.b,this.W),this.dispatchEvent(new sm(this.ea())))};h.ea=function(){return this.W};h.Uc=function(){var a=l.navigator;this.pa(a?a.languages&&a.languages[0]||a.language||a.userLanguage||null:null)};h.vc=function(a){this.G.push(a);bi(this.b,firebase.SDK_VERSION?ue(firebase.SDK_VERSION,this.G):null);this.dispatchEvent(new tm(this.G))};\nh.ya=function(){return Ka(this.G)};function rm(a){Object.defineProperty(a,\"lc\",{get:function(){return this.ea()},set:function(b){this.pa(b)},enumerable:!1});a.W=null}h.toJSON=function(){return{apiKey:S(this).options.apiKey,authDomain:S(this).options.authDomain,appName:S(this).name,currentUser:U(this)&&U(this).w()}};function um(a){return a.Sb||E(new N(\"auth-domain-config-required\"))}\nfunction qm(a){var b=S(a).options.authDomain,c=S(a).options.apiKey;b&&xe()&&(a.Sb=a.V.then(function(){if(!a.l){a.a=Wk(b,c,S(a).name);a.a.subscribe(a);U(a)&&Dl(U(a));if(a.D){Dl(a.D);var d=a.D;d.pa(a.ea());wl(d,a);d=a.D;vl(d,a.G);xl(d,a);a.D=null}return a.a}}))}h.wb=function(a,b){switch(a){case \"unknown\":case \"signInViaRedirect\":return!0;case \"signInViaPopup\":return this.g==b&&!!this.f;default:return!1}};\nh.ha=function(a,b,c,d){\"signInViaPopup\"==a&&this.g==d&&(c&&this.v?this.v(c):b&&!c&&this.f&&this.f(b),this.c&&(this.c.cancel(),this.c=null),delete this.f,delete this.v)};h.xa=function(a,b){return\"signInViaRedirect\"==a||\"signInViaPopup\"==a&&this.g==b&&this.f?t(this.ac,this):null};\nh.ac=function(a,b,c){var d=this;a={requestUri:a,postBody:c,sessionId:b};this.c&&(this.c.cancel(),this.c=null);var e=null,f=null,g=Wf(d.b,a).then(function(k){e=Eg(k);f=Hf(k);return k});a=d.V.then(function(){return g}).then(function(k){return vm(d,k)}).then(function(){return Qe({user:U(d),credential:e,additionalUserInfo:f,operationType:\"signIn\"})});return T(this,a)};\nh.Mc=function(a){if(!xe())return E(new N(\"operation-not-supported-in-this-environment\"));var b=this,c=Gf(a.providerId),d=we(),e=null;(!ze()||oe())&&S(this).options.authDomain&&a.isOAuthProvider&&(e=jj(S(this).options.authDomain,S(this).options.apiKey,S(this).name,\"signInViaPopup\",a,null,d,firebase.SDK_VERSION||null));var f=fe(e,c&&c.Ba,c&&c.Aa);c=um(this).then(function(g){return Uk(g,f,\"signInViaPopup\",a,d,!!e)}).then(function(){return new C(function(g,k){b.ha(\"signInViaPopup\",null,new N(\"cancelled-popup-request\"),\nb.g);b.f=g;b.v=k;b.g=d;b.c=b.a.Ea(b,\"signInViaPopup\",f,d)})}).then(function(g){f&&ee(f);return g?Qe(g):null}).s(function(g){f&&ee(f);throw g;});return T(this,c)};h.Nc=function(a){if(!xe())return E(new N(\"operation-not-supported-in-this-environment\"));var b=this,c=um(this).then(function(){return im(b.h)}).then(function(){return b.a.Ca(\"signInViaRedirect\",a)});return T(this,c)};\nh.fa=function(){if(!xe())return E(new N(\"operation-not-supported-in-this-environment\"));var a=this,b=um(this).then(function(){return a.a.fa()}).then(function(c){return c?Qe(c):null});return T(this,b)};\nh.Sc=function(a){if(!a)return E(new N(\"null-user\"));var b=this,c={};c.apiKey=S(this).options.apiKey;c.authDomain=S(this).options.authDomain;c.appName=S(this).name;var d=$l(a,c,b.A,b.ya());return T(this,this.i.then(function(){if(S(b).options.apiKey!=a.l)return d.reload()}).then(function(){if(U(b)&&a.uid==U(b).uid)return Kl(U(b),a),b.Z(a);nm(b,d);Dl(d);return b.Z(d)}).then(function(){wm(b)}))};\nfunction vm(a,b){var c={};c.apiKey=S(a).options.apiKey;c.authDomain=S(a).options.authDomain;c.appName=S(a).name;return a.V.then(function(){return Zl(c,b,a.A,a.ya())}).then(function(d){if(U(a)&&d.uid==U(a).uid)return Kl(U(a),d),a.Z(d);nm(a,d);Dl(d);return a.Z(d)}).then(function(){wm(a)})}\nfunction nm(a,b){U(a)&&(Bl(U(a),a.Ha),G(U(a),\"tokenChanged\",a.ra),G(U(a),\"userDeleted\",a.sa),G(U(a),\"userInvalidated\",a.ta),Al(U(a)));b&&(b.N.push(a.Ha),tc(b,\"tokenChanged\",a.ra),tc(b,\"userDeleted\",a.sa),tc(b,\"userInvalidated\",a.ta),0<a.u&&zl(b));L(a,\"currentUser\",b);b&&(b.pa(a.ea()),wl(b,a),vl(b,a.G),xl(b,a))}h.ob=function(){var a=this,b=this.i.then(function(){if(!U(a))return D();nm(a,null);return km(a.h).then(function(){wm(a)})});return T(this,b)};\nfunction xm(a){var b=bm(a.A,S(a).options.authDomain).then(function(c){if(a.D=c)c.ba=a.A;return Wl(a.A)});return T(a,b)}function om(a){var b=S(a).options.authDomain,c=xm(a).then(function(){return lm(a.h,b)}).then(function(d){return d?(d.ba=a.A,a.D&&(a.D.aa||null)==(d.aa||null)?d:d.reload().then(function(){return jm(a.h,d).then(function(){return d})}).s(function(e){return\"auth/network-request-failed\"==e.code?d:km(a.h)})):null}).then(function(d){nm(a,d||null)});return T(a,c)}\nfunction pm(a){return a.V.then(function(){return a.fa()}).s(function(){}).then(function(){if(!a.l)return a.ka()}).s(function(){}).then(function(){if(!a.l){a.X=!0;var b=a.h;b.b.addListener(em(\"local\"),b.a,a.ka)}})}\nh.Oc=function(){var a=this;return lm(this.h,S(this).options.authDomain).then(function(b){if(!a.l){var c;if(c=U(a)&&b){c=U(a).uid;var d=b.uid;c=void 0===c||null===c||\"\"===c||void 0===d||null===d||\"\"===d?!1:c==d}if(c)return Kl(U(a),b),U(a).F();if(U(a)||b)nm(a,b),b&&(Dl(b),b.ba=a.A),a.a&&a.a.subscribe(a),wm(a)}})};h.Z=function(a){return jm(this.h,a)};h.bc=function(){wm(this);this.Z(U(this))};h.mc=function(){this.ob()};h.nc=function(){this.ob()};\nfunction ym(a,b){var c=null,d=null;return T(a,b.then(function(e){c=Eg(e);d=Hf(e);return vm(a,e)}).then(function(){return Qe({user:U(a),credential:c,additionalUserInfo:d,operationType:\"signIn\"})}))}h.oc=function(a){var b=this;this.addAuthTokenListener(function(){a.next(U(b))})};h.pc=function(a){var b=this;zm(this,function(){a.next(U(b))})};h.xc=function(a,b,c){var d=this;this.X&&firebase.Promise.resolve().then(function(){q(a)?a(U(d)):q(a.next)&&a.next(U(d))});return this.Tb(a,b,c)};\nh.wc=function(a,b,c){var d=this;this.X&&firebase.Promise.resolve().then(function(){d.O=d.getUid();q(a)?a(U(d)):q(a.next)&&a.next(U(d))});return this.Ub(a,b,c)};h.cc=function(a){var b=this,c=this.i.then(function(){return U(b)?U(b).F(a).then(function(d){return{accessToken:d}}):null});return T(this,c)};h.Nb=function(a){var b=this;return this.i.then(function(){return ym(b,P(b.b,Ri,{token:a}))}).then(function(c){var d=c.user;Jl(d,\"isAnonymous\",!1);b.Z(d);return c})};\nh.Gc=function(a){Ne(\"firebase.auth.Auth.prototype.signInAndRetrieveDataWithCustomToken is deprecated. Please use firebase.auth.Auth.prototype.signInWithCustomToken instead.\");return this.Nb(a)};h.Hc=function(a,b){Ne(\"firebase.auth.Auth.prototype.signInAndRetrieveDataWithEmailAndPassword is deprecated. Please use firebase.auth.Auth.prototype.signInWithEmailAndPassword instead.\");return this.Ob(a,b)};h.Ob=function(a,b){var c=this;return this.i.then(function(){return ym(c,P(c.b,qg,{email:a,password:b}))})};\nh.yb=function(a,b){var c=this;return this.i.then(function(){return ym(c,P(c.b,Ni,{email:a,password:b}))})};h.Wb=function(a,b){Ne(\"firebase.auth.Auth.prototype.createUserAndRetrieveDataWithEmailAndPassword is deprecated. Please use firebase.auth.Auth.prototype.createUserWithEmailAndPassword instead.\");return this.yb(a,b)};h.Jc=function(a){Ne(\"firebase.auth.Auth.prototype.signInWithCredential is deprecated. Please use firebase.auth.Auth.prototype.signInAndRetrieveDataWithCredential instead.\");return this.Qa(a).then(function(b){return b.user})};\nh.Qa=function(a){var b=this;return this.i.then(function(){return ym(b,a.la(b.b))})};h.Ra=function(){var a=this;return this.i.then(function(){var b=U(a);if(b&&b.isAnonymous){var c=Qe({providerId:null,isNewUser:!1});return Qe({user:b,credential:null,additionalUserInfo:c,operationType:\"signIn\"})}return ym(a,a.b.Ra()).then(function(d){var e=d.user;Jl(e,\"isAnonymous\",!0);a.Z(e);return d})})};\nh.Ic=function(){Ne(\"firebase.auth.Auth.prototype.signInAnonymouslyAndRetrieveData is deprecated. Please use firebase.auth.Auth.prototype.signInAnonymously instead.\");return this.Ra()};function S(a){return a.app}function U(a){return a.currentUser}h.getUid=function(){return U(this)&&U(this).uid||null};function Am(a){return U(a)&&U(a)._lat||null}\nfunction wm(a){if(a.X){for(var b=0;b<a.m.length;b++)if(a.m[b])a.m[b](Am(a));if(a.O!==a.getUid()&&a.I.length)for(a.O=a.getUid(),b=0;b<a.I.length;b++)if(a.I[b])a.I[b](Am(a))}}h.Vb=function(a){this.addAuthTokenListener(a);this.u++;0<this.u&&U(this)&&zl(U(this))};h.Ec=function(a){var b=this;w(this.m,function(c){c==a&&b.u--});0>this.u&&(this.u=0);0==this.u&&U(this)&&Al(U(this));this.removeAuthTokenListener(a)};\nh.addAuthTokenListener=function(a){var b=this;this.m.push(a);T(this,this.i.then(function(){b.l||Ha(b.m,a)&&a(Am(b))}))};h.removeAuthTokenListener=function(a){x(this.m,function(b){return b==a})};function zm(a,b){a.I.push(b);T(a,a.i.then(function(){!a.l&&Ha(a.I,b)&&a.O!==a.getUid()&&(a.O=a.getUid(),b(Am(a)))}))}\nh.delete=function(){this.l=!0;for(var a=0;a<this.N.length;a++)this.N[a].cancel(\"app-deleted\");this.N=[];this.h&&(a=this.h,a.b.removeListener(em(\"local\"),a.a,this.ka));this.a&&(this.a.unsubscribe(this),this.a.Za());return firebase.Promise.resolve()};function T(a,b){a.N.push(b);b.ia(function(){Ia(a.N,b)});return b}\nh.Zb=function(a){Ne(\"firebase.auth.Auth.prototype.fetchProvidersForEmail is deprecated. Please use firebase.auth.Auth.prototype.fetchSignInMethodsForEmail instead.\");return T(this,li(this.b,a))};h.$b=function(a){return T(this,ni(this.b,a))};h.qc=function(a){return!!vg(a)};h.mb=function(a,b){var c=this;return T(this,D().then(function(){var d=new ff(b);if(!d.c)throw new N(\"argument-error\",of+\" must be true when sending sign in link to email\");return qf(d)}).then(function(d){return c.b.mb(a,d)}).then(function(){}))};\nh.Vc=function(a){return this.Ja(a).then(function(b){return b.data.email})};h.$a=function(a,b){return T(this,this.b.$a(a,b).then(function(){}))};h.Ja=function(a){return T(this,this.b.Ja(a).then(function(b){return new Ue(b)}))};h.Xa=function(a){return T(this,this.b.Xa(a).then(function(){}))};h.lb=function(a,b){var c=this;return T(this,D().then(function(){return\"undefined\"===typeof b||Ya(b)?{}:qf(new ff(b))}).then(function(d){return c.b.lb(a,d)}).then(function(){}))};\nh.Lc=function(a,b){return T(this,el(this,a,b,t(this.Qa,this)))};h.Kc=function(a,b){var c=this;return T(this,D().then(function(){var d=ug(a,b||Yd());return c.Qa(d)}))};function Bm(){}Bm.prototype.render=function(){};Bm.prototype.reset=function(){};Bm.prototype.getResponse=function(){};Bm.prototype.execute=function(){};function Cm(){this.a={};this.b=1E12}var Dm=null;Cm.prototype.render=function(a,b){this.a[this.b.toString()]=new Em(a,b);return this.b++};Cm.prototype.reset=function(a){var b=Fm(this,a);a=Gm(a);b&&a&&(b.delete(),delete this.a[a])};Cm.prototype.getResponse=function(a){return(a=Fm(this,a))?a.getResponse():null};Cm.prototype.execute=function(a){(a=Fm(this,a))&&a.execute()};function Fm(a,b){return(b=Gm(b))?a.a[b]||null:null}function Gm(a){return(a=\"undefined\"===typeof a?1E12:a)?a.toString():null}\nfunction Em(a,b){this.g=!1;this.c=b;this.a=this.b=null;this.h=\"invisible\"!==this.c.size;this.f=Ld(a);var c=this;this.i=function(){c.execute()};this.h?this.execute():tc(this.f,\"click\",this.i)}Em.prototype.getResponse=function(){Hm(this);return this.b};\nEm.prototype.execute=function(){Hm(this);var a=this;this.a||(this.a=setTimeout(function(){a.b=se();var b=a.c.callback,c=a.c[\"expired-callback\"];if(b)try{b(a.b)}catch(d){}a.a=setTimeout(function(){a.a=null;a.b=null;if(c)try{c()}catch(d){}a.h&&a.execute()},6E4)},500))};Em.prototype.delete=function(){Hm(this);this.g=!0;clearTimeout(this.a);this.a=null;G(this.f,\"click\",this.i)};function Hm(a){if(a.g)throw Error(\"reCAPTCHA mock was already deleted!\");};function Im(){}Im.prototype.g=function(){Dm||(Dm=new Cm);return D(Dm)};Im.prototype.c=function(){};var Jm=null;function Km(){this.b=l.grecaptcha?Infinity:0;this.f=null;this.a=\"__rcb\"+Math.floor(1E6*Math.random()).toString()}var Lm=new pd(qd,\"https://www.google.com/recaptcha/api.js?onload=%{onload}&render=explicit&hl=%{hl}\"),Mm=new Fe(3E4,6E4);\nKm.prototype.g=function(a){var b=this;return new C(function(c,d){var e=setTimeout(function(){d(new N(\"network-request-failed\"))},Mm.get());if(!l.grecaptcha||a!==b.f&&!b.b){l[b.a]=function(){if(l.grecaptcha){b.f=a;var g=l.grecaptcha.render;l.grecaptcha.render=function(k,n){k=g(k,n);b.b++;return k};clearTimeout(e);c(l.grecaptcha)}else clearTimeout(e),d(new N(\"internal-error\"));delete l[b.a]};var f=wd(Lm,{onload:b.a,hl:a||\"\"});D(Oh(f)).s(function(){clearTimeout(e);d(new N(\"internal-error\",\"Unable to load external reCAPTCHA dependencies!\"))})}else clearTimeout(e),\nc(l.grecaptcha)})};Km.prototype.c=function(){this.b--};var Nm=null;function Om(a,b,c,d,e,f,g){L(this,\"type\",\"recaptcha\");this.c=this.f=null;this.D=!1;this.l=b;this.g=null;g?(Jm||(Jm=new Im),g=Jm):(Nm||(Nm=new Km),g=Nm);this.m=g;this.a=c||{theme:\"light\",type:\"image\"};this.h=[];if(this.a[Pm])throw new N(\"argument-error\",\"sitekey should not be provided for reCAPTCHA as one is automatically provisioned for the current project.\");this.i=\"invisible\"===this.a[Qm];if(!l.document)throw new N(\"operation-not-supported-in-this-environment\",\"RecaptchaVerifier is only supported in a browser HTTP/HTTPS environment with DOM support.\");\nif(!Ld(b)||!this.i&&Ld(b).hasChildNodes())throw new N(\"argument-error\",\"reCAPTCHA container is either not found or already contains inner elements!\");this.u=new Vh(a,f||null,e||null);this.v=d||function(){return null};var k=this;this.o=[];var n=this.a[Rm];this.a[Rm]=function(z){Sm(k,z);if(\"function\"===typeof n)n(z);else if(\"string\"===typeof n){var A=K(n,l);\"function\"===typeof A&&A(z)}};var p=this.a[Tm];this.a[Tm]=function(){Sm(k,null);if(\"function\"===typeof p)p();else if(\"string\"===typeof p){var z=\nK(p,l);\"function\"===typeof z&&z()}}}var Rm=\"callback\",Tm=\"expired-callback\",Pm=\"sitekey\",Qm=\"size\";function Sm(a,b){for(var c=0;c<a.o.length;c++)try{a.o[c](b)}catch(d){}}function Um(a,b){x(a.o,function(c){return c==b})}function Vm(a,b){a.h.push(b);b.ia(function(){Ia(a.h,b)});return b}h=Om.prototype;\nh.za=function(){var a=this;return this.f?this.f:this.f=Vm(this,D().then(function(){if(ye()&&!pe())return ke();throw new N(\"operation-not-supported-in-this-environment\",\"RecaptchaVerifier is only supported in a browser HTTP/HTTPS environment.\");}).then(function(){return a.m.g(a.v())}).then(function(b){a.g=b;return P(a.u,Qi,{})}).then(function(b){a.a[Pm]=b.recaptchaSiteKey}).s(function(b){a.f=null;throw b;}))};\nh.render=function(){Wm(this);var a=this;return Vm(this,this.za().then(function(){if(null===a.c){var b=a.l;if(!a.i){var c=Ld(b);b=Od(\"DIV\");c.appendChild(b)}a.c=a.g.render(b,a.a)}return a.c}))};h.verify=function(){Wm(this);var a=this;return Vm(this,this.render().then(function(b){return new C(function(c){var d=a.g.getResponse(b);if(d)c(d);else{var e=function(f){f&&(Um(a,e),c(f))};a.o.push(e);a.i&&a.g.execute(a.c)}})}))};h.reset=function(){Wm(this);null!==this.c&&this.g.reset(this.c)};\nfunction Wm(a){if(a.D)throw new N(\"internal-error\",\"RecaptchaVerifier instance has been destroyed.\");}h.clear=function(){Wm(this);this.D=!0;this.m.c();for(var a=0;a<this.h.length;a++)this.h[a].cancel(\"RecaptchaVerifier instance has been destroyed.\");if(!this.i){a=Ld(this.l);for(var b;b=a.firstChild;)a.removeChild(b)}};\nfunction Xm(a,b,c){var d=!1;try{this.b=c||firebase.app()}catch(g){throw new N(\"argument-error\",\"No firebase.app.App instance is currently initialized.\");}if(this.b.options&&this.b.options.apiKey)c=this.b.options.apiKey;else throw new N(\"invalid-api-key\");var e=this,f=null;try{f=this.b.auth().ya()}catch(g){}try{d=this.b.auth().settings.appVerificationDisabledForTesting}catch(g){}f=firebase.SDK_VERSION?ue(firebase.SDK_VERSION,f):null;Om.call(this,c,a,b,function(){try{var g=e.b.auth().ea()}catch(k){g=\nnull}return g},f,Bf(Cf),d)}u(Xm,Om);function Ym(a,b,c,d){a:{c=Array.prototype.slice.call(c);var e=0;for(var f=!1,g=0;g<b.length;g++)if(b[g].optional)f=!0;else{if(f)throw new N(\"internal-error\",\"Argument validator encountered a required argument after an optional argument.\");e++}f=b.length;if(c.length<e||f<c.length)d=\"Expected \"+(e==f?1==e?\"1 argument\":e+\" arguments\":e+\"-\"+f+\" arguments\")+\" but got \"+c.length+\".\";else{for(e=0;e<c.length;e++)if(f=b[e].optional&&void 0===c[e],!b[e].M(c[e])&&!f){b=b[e];if(0>e||e>=Zm.length)throw new N(\"internal-error\",\n\"Argument validator received an unsupported number of arguments.\");c=Zm[e];d=(d?\"\":c+\" argument \")+(b.name?'\"'+b.name+'\" ':\"\")+\"must be \"+b.K+\".\";break a}d=null}}if(d)throw new N(\"argument-error\",a+\" failed: \"+d);}var Zm=\"First Second Third Fourth Fifth Sixth Seventh Eighth Ninth\".split(\" \");function V(a,b){return{name:a||\"\",K:\"a valid string\",optional:!!b,M:m}}function $m(a,b){return{name:a||\"\",K:\"a boolean\",optional:!!b,M:ba}}\nfunction W(a,b){return{name:a||\"\",K:\"a valid object\",optional:!!b,M:r}}function an(a,b){return{name:a||\"\",K:\"a function\",optional:!!b,M:q}}function bn(a,b){return{name:a||\"\",K:\"null\",optional:!!b,M:ia}}function cn(){return{name:\"\",K:\"an HTML element\",optional:!1,M:function(a){return!!(a&&a instanceof Element)}}}function dn(){return{name:\"auth\",K:\"an instance of Firebase Auth\",optional:!0,M:function(a){return!!(a&&a instanceof mm)}}}\nfunction en(){return{name:\"app\",K:\"an instance of Firebase App\",optional:!0,M:function(a){return!!(a&&a instanceof firebase.app.App)}}}function fn(a){return{name:a?a+\"Credential\":\"credential\",K:a?\"a valid \"+a+\" credential\":\"a valid credential\",optional:!1,M:function(b){if(!b)return!1;var c=!a||b.providerId===a;return!(!b.la||!c)}}}\nfunction gn(){return{name:\"authProvider\",K:\"a valid Auth provider\",optional:!1,M:function(a){return!!(a&&a.providerId&&a.hasOwnProperty&&a.hasOwnProperty(\"isOAuthProvider\"))}}}function hn(){return{name:\"applicationVerifier\",K:\"an implementation of firebase.auth.ApplicationVerifier\",optional:!1,M:function(a){return!!(a&&m(a.type)&&q(a.verify))}}}function X(a,b,c,d){return{name:c||\"\",K:a.K+\" or \"+b.K,optional:!!d,M:function(e){return a.M(e)||b.M(e)}}};function Y(a,b){for(var c in b){var d=b[c].name;a[d]=jn(d,a[c],b[c].j)}}function kn(a,b){for(var c in b){var d=b[c].name;d!==c&&Object.defineProperty(a,d,{get:pa(function(e){return this[e]},c),set:pa(function(e,f,g,k){Ym(e,[g],[k],!0);this[f]=k},d,c,b[c].ub),enumerable:!0})}}function Z(a,b,c,d){a[b]=jn(b,c,d)}\nfunction jn(a,b,c){function d(){var g=Array.prototype.slice.call(arguments);Ym(e,c,g);return b.apply(this,g)}if(!c)return b;var e=ln(a),f;for(f in b)d[f]=b[f];for(f in b.prototype)d.prototype[f]=b.prototype[f];return d}function ln(a){a=a.split(\".\");return a[a.length-1]};Y(mm.prototype,{Xa:{name:\"applyActionCode\",j:[V(\"code\")]},Ja:{name:\"checkActionCode\",j:[V(\"code\")]},$a:{name:\"confirmPasswordReset\",j:[V(\"code\"),V(\"newPassword\")]},yb:{name:\"createUserWithEmailAndPassword\",j:[V(\"email\"),V(\"password\")]},Wb:{name:\"createUserAndRetrieveDataWithEmailAndPassword\",j:[V(\"email\"),V(\"password\")]},Zb:{name:\"fetchProvidersForEmail\",j:[V(\"email\")]},$b:{name:\"fetchSignInMethodsForEmail\",j:[V(\"email\")]},fa:{name:\"getRedirectResult\",j:[]},qc:{name:\"isSignInWithEmailLink\",j:[V(\"emailLink\")]},\nwc:{name:\"onAuthStateChanged\",j:[X(W(),an(),\"nextOrObserver\"),an(\"opt_error\",!0),an(\"opt_completed\",!0)]},xc:{name:\"onIdTokenChanged\",j:[X(W(),an(),\"nextOrObserver\"),an(\"opt_error\",!0),an(\"opt_completed\",!0)]},lb:{name:\"sendPasswordResetEmail\",j:[V(\"email\"),X(W(\"opt_actionCodeSettings\",!0),bn(null,!0),\"opt_actionCodeSettings\",!0)]},mb:{name:\"sendSignInLinkToEmail\",j:[V(\"email\"),W(\"actionCodeSettings\")]},nb:{name:\"setPersistence\",j:[V(\"persistence\")]},Qa:{name:\"signInAndRetrieveDataWithCredential\",\nj:[fn()]},Ra:{name:\"signInAnonymously\",j:[]},Ic:{name:\"signInAnonymouslyAndRetrieveData\",j:[]},Jc:{name:\"signInWithCredential\",j:[fn()]},Nb:{name:\"signInWithCustomToken\",j:[V(\"token\")]},Gc:{name:\"signInAndRetrieveDataWithCustomToken\",j:[V(\"token\")]},Ob:{name:\"signInWithEmailAndPassword\",j:[V(\"email\"),V(\"password\")]},Kc:{name:\"signInWithEmailLink\",j:[V(\"email\"),V(\"emailLink\",!0)]},Hc:{name:\"signInAndRetrieveDataWithEmailAndPassword\",j:[V(\"email\"),V(\"password\")]},Lc:{name:\"signInWithPhoneNumber\",j:[V(\"phoneNumber\"),\nhn()]},Mc:{name:\"signInWithPopup\",j:[gn()]},Nc:{name:\"signInWithRedirect\",j:[gn()]},Sc:{name:\"updateCurrentUser\",j:[X(function(a){return{name:\"user\",K:\"an instance of Firebase User\",optional:!!a,M:function(b){return!!(b&&b instanceof Q)}}}(),bn(),\"user\")]},ob:{name:\"signOut\",j:[]},toJSON:{name:\"toJSON\",j:[V(null,!0)]},Uc:{name:\"useDeviceLanguage\",j:[]},Vc:{name:\"verifyPasswordResetCode\",j:[V(\"code\")]}});kn(mm.prototype,{lc:{name:\"languageCode\",ub:X(V(),bn(),\"languageCode\")}});mm.Persistence=Uj;\nmm.Persistence.LOCAL=\"local\";mm.Persistence.SESSION=\"session\";mm.Persistence.NONE=\"none\";\nY(Q.prototype,{\"delete\":{name:\"delete\",j:[]},dc:{name:\"getIdTokenResult\",j:[$m(\"opt_forceRefresh\",!0)]},F:{name:\"getIdToken\",j:[$m(\"opt_forceRefresh\",!0)]},fb:{name:\"linkAndRetrieveDataWithCredential\",j:[fn()]},rc:{name:\"linkWithCredential\",j:[fn()]},sc:{name:\"linkWithPhoneNumber\",j:[V(\"phoneNumber\"),hn()]},tc:{name:\"linkWithPopup\",j:[gn()]},uc:{name:\"linkWithRedirect\",j:[gn()]},hb:{name:\"reauthenticateAndRetrieveDataWithCredential\",j:[fn()]},Ac:{name:\"reauthenticateWithCredential\",j:[fn()]},Bc:{name:\"reauthenticateWithPhoneNumber\",\nj:[V(\"phoneNumber\"),hn()]},Cc:{name:\"reauthenticateWithPopup\",j:[gn()]},Dc:{name:\"reauthenticateWithRedirect\",j:[gn()]},reload:{name:\"reload\",j:[]},kb:{name:\"sendEmailVerification\",j:[X(W(\"opt_actionCodeSettings\",!0),bn(null,!0),\"opt_actionCodeSettings\",!0)]},toJSON:{name:\"toJSON\",j:[V(null,!0)]},Rc:{name:\"unlink\",j:[V(\"provider\")]},qb:{name:\"updateEmail\",j:[V(\"email\")]},rb:{name:\"updatePassword\",j:[V(\"password\")]},Tc:{name:\"updatePhoneNumber\",j:[fn(\"phone\")]},sb:{name:\"updateProfile\",j:[W(\"profile\")]}});\nY(Cm.prototype,{execute:{name:\"execute\"},render:{name:\"render\"},reset:{name:\"reset\"},getResponse:{name:\"getResponse\"}});Y(Bm.prototype,{execute:{name:\"execute\"},render:{name:\"render\"},reset:{name:\"reset\"},getResponse:{name:\"getResponse\"}});Y(C.prototype,{ia:{name:\"finally\"},s:{name:\"catch\"},then:{name:\"then\"}});kn(cl.prototype,{appVerificationDisabled:{name:\"appVerificationDisabledForTesting\",ub:$m(\"appVerificationDisabledForTesting\")}});Y(dl.prototype,{confirm:{name:\"confirm\",j:[V(\"verificationCode\")]}});\nZ(Sf,\"fromJSON\",function(a){a=m(a)?JSON.parse(a):a;for(var b,c=[cg,tg,Ag,$f],d=0;d<c.length;d++)if(b=c[d](a))return b;return null},[X(V(),W(),\"json\")]);Z(og,\"credential\",function(a,b){return new ng(a,b)},[V(\"email\"),V(\"password\")]);Y(ng.prototype,{w:{name:\"toJSON\",j:[V(null,!0)]}});Y(fg.prototype,{ua:{name:\"addScope\",j:[V(\"scope\")]},Da:{name:\"setCustomParameters\",j:[W(\"customOAuthParameters\")]}});Z(fg,\"credential\",gg,[X(V(),W(),\"token\")]);Z(og,\"credentialWithLink\",ug,[V(\"email\"),V(\"emailLink\")]);\nY(hg.prototype,{ua:{name:\"addScope\",j:[V(\"scope\")]},Da:{name:\"setCustomParameters\",j:[W(\"customOAuthParameters\")]}});Z(hg,\"credential\",ig,[X(V(),W(),\"token\")]);Y(jg.prototype,{ua:{name:\"addScope\",j:[V(\"scope\")]},Da:{name:\"setCustomParameters\",j:[W(\"customOAuthParameters\")]}});Z(jg,\"credential\",kg,[X(V(),X(W(),bn()),\"idToken\"),X(V(),bn(),\"accessToken\",!0)]);Y(lg.prototype,{Da:{name:\"setCustomParameters\",j:[W(\"customOAuthParameters\")]}});Z(lg,\"credential\",mg,[X(V(),W(),\"token\"),V(\"secret\",!0)]);\nY(O.prototype,{ua:{name:\"addScope\",j:[V(\"scope\")]},credential:{name:\"credential\",j:[X(V(),X(W(),bn()),\"optionsOrIdToken\"),X(V(),bn(),\"accessToken\",!0)]},Da:{name:\"setCustomParameters\",j:[W(\"customOAuthParameters\")]}});Y(ag.prototype,{w:{name:\"toJSON\",j:[V(null,!0)]}});Y(Vf.prototype,{w:{name:\"toJSON\",j:[V(null,!0)]}});Z(Bg,\"credential\",Dg,[V(\"verificationId\"),V(\"verificationCode\")]);Y(Bg.prototype,{Va:{name:\"verifyPhoneNumber\",j:[V(\"phoneNumber\"),hn()]}});\nY(wg.prototype,{w:{name:\"toJSON\",j:[V(null,!0)]}});Y(N.prototype,{toJSON:{name:\"toJSON\",j:[V(null,!0)]}});Y(Lg.prototype,{toJSON:{name:\"toJSON\",j:[V(null,!0)]}});Y(Kg.prototype,{toJSON:{name:\"toJSON\",j:[V(null,!0)]}});Y(Xm.prototype,{clear:{name:\"clear\",j:[]},render:{name:\"render\",j:[]},verify:{name:\"verify\",j:[]}});\n(function(){if(\"undefined\"!==typeof firebase&&firebase.INTERNAL&&firebase.INTERNAL.registerService){var a={Auth:mm,AuthCredential:Sf,Error:N};Z(a,\"EmailAuthProvider\",og,[]);Z(a,\"FacebookAuthProvider\",fg,[]);Z(a,\"GithubAuthProvider\",hg,[]);Z(a,\"GoogleAuthProvider\",jg,[]);Z(a,\"TwitterAuthProvider\",lg,[]);Z(a,\"OAuthProvider\",O,[V(\"providerId\")]);Z(a,\"SAMLAuthProvider\",eg,[V(\"providerId\")]);Z(a,\"PhoneAuthProvider\",Bg,[dn()]);Z(a,\"RecaptchaVerifier\",Xm,[X(V(),cn(),\"recaptchaContainer\"),W(\"recaptchaParameters\",\n!0),en()]);firebase.INTERNAL.registerService(\"auth\",function(b,c){b=new mm(b);c({INTERNAL:{getUid:t(b.getUid,b),getToken:t(b.cc,b),addAuthTokenListener:t(b.Vb,b),removeAuthTokenListener:t(b.Ec,b)}});return b},a,function(b,c){if(\"create\"===b)try{c.auth()}catch(d){}});firebase.INTERNAL.extendNamespace({User:Q})}else throw Error(\"Cannot find the firebase namespace; be sure to include firebase-app.js before this library.\");})();}).apply(typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {});\n\n//# sourceMappingURL=auth.esm.js.map\n","import 'whatwg-fetch';\nimport 'promise-polyfill/lib/polyfill';\nimport 'core-js/features/array/find';\nimport 'core-js/features/array/find-index';\nimport 'core-js/features/object/assign';\nimport 'core-js/features/string/starts-with';\nimport 'core-js/features/string/repeat';\nimport 'core-js/features/symbol';\nimport 'core-js/features/symbol/iterator';\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\n//# sourceMappingURL=index.esm.js.map\n","(function(self) {\n  'use strict';\n\n  if (self.fetch) {\n    return\n  }\n\n  var support = {\n    searchParams: 'URLSearchParams' in self,\n    iterable: 'Symbol' in self && 'iterator' in Symbol,\n    blob: 'FileReader' in self && 'Blob' in self && (function() {\n      try {\n        new Blob()\n        return true\n      } catch(e) {\n        return false\n      }\n    })(),\n    formData: 'FormData' in self,\n    arrayBuffer: 'ArrayBuffer' in self\n  }\n\n  if (support.arrayBuffer) {\n    var viewClasses = [\n      '[object Int8Array]',\n      '[object Uint8Array]',\n      '[object Uint8ClampedArray]',\n      '[object Int16Array]',\n      '[object Uint16Array]',\n      '[object Int32Array]',\n      '[object Uint32Array]',\n      '[object Float32Array]',\n      '[object Float64Array]'\n    ]\n\n    var isDataView = function(obj) {\n      return obj && DataView.prototype.isPrototypeOf(obj)\n    }\n\n    var isArrayBufferView = ArrayBuffer.isView || function(obj) {\n      return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n    }\n  }\n\n  function normalizeName(name) {\n    if (typeof name !== 'string') {\n      name = String(name)\n    }\n    if (/[^a-z0-9\\-#$%&'*+.\\^_`|~]/i.test(name)) {\n      throw new TypeError('Invalid character in header field name')\n    }\n    return name.toLowerCase()\n  }\n\n  function normalizeValue(value) {\n    if (typeof value !== 'string') {\n      value = String(value)\n    }\n    return value\n  }\n\n  // Build a destructive iterator for the value list\n  function iteratorFor(items) {\n    var iterator = {\n      next: function() {\n        var value = items.shift()\n        return {done: value === undefined, value: value}\n      }\n    }\n\n    if (support.iterable) {\n      iterator[Symbol.iterator] = function() {\n        return iterator\n      }\n    }\n\n    return iterator\n  }\n\n  function Headers(headers) {\n    this.map = {}\n\n    if (headers instanceof Headers) {\n      headers.forEach(function(value, name) {\n        this.append(name, value)\n      }, this)\n    } else if (Array.isArray(headers)) {\n      headers.forEach(function(header) {\n        this.append(header[0], header[1])\n      }, this)\n    } else if (headers) {\n      Object.getOwnPropertyNames(headers).forEach(function(name) {\n        this.append(name, headers[name])\n      }, this)\n    }\n  }\n\n  Headers.prototype.append = function(name, value) {\n    name = normalizeName(name)\n    value = normalizeValue(value)\n    var oldValue = this.map[name]\n    this.map[name] = oldValue ? oldValue+','+value : value\n  }\n\n  Headers.prototype['delete'] = function(name) {\n    delete this.map[normalizeName(name)]\n  }\n\n  Headers.prototype.get = function(name) {\n    name = normalizeName(name)\n    return this.has(name) ? this.map[name] : null\n  }\n\n  Headers.prototype.has = function(name) {\n    return this.map.hasOwnProperty(normalizeName(name))\n  }\n\n  Headers.prototype.set = function(name, value) {\n    this.map[normalizeName(name)] = normalizeValue(value)\n  }\n\n  Headers.prototype.forEach = function(callback, thisArg) {\n    for (var name in this.map) {\n      if (this.map.hasOwnProperty(name)) {\n        callback.call(thisArg, this.map[name], name, this)\n      }\n    }\n  }\n\n  Headers.prototype.keys = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push(name) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.values = function() {\n    var items = []\n    this.forEach(function(value) { items.push(value) })\n    return iteratorFor(items)\n  }\n\n  Headers.prototype.entries = function() {\n    var items = []\n    this.forEach(function(value, name) { items.push([name, value]) })\n    return iteratorFor(items)\n  }\n\n  if (support.iterable) {\n    Headers.prototype[Symbol.iterator] = Headers.prototype.entries\n  }\n\n  function consumed(body) {\n    if (body.bodyUsed) {\n      return Promise.reject(new TypeError('Already read'))\n    }\n    body.bodyUsed = true\n  }\n\n  function fileReaderReady(reader) {\n    return new Promise(function(resolve, reject) {\n      reader.onload = function() {\n        resolve(reader.result)\n      }\n      reader.onerror = function() {\n        reject(reader.error)\n      }\n    })\n  }\n\n  function readBlobAsArrayBuffer(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsArrayBuffer(blob)\n    return promise\n  }\n\n  function readBlobAsText(blob) {\n    var reader = new FileReader()\n    var promise = fileReaderReady(reader)\n    reader.readAsText(blob)\n    return promise\n  }\n\n  function readArrayBufferAsText(buf) {\n    var view = new Uint8Array(buf)\n    var chars = new Array(view.length)\n\n    for (var i = 0; i < view.length; i++) {\n      chars[i] = String.fromCharCode(view[i])\n    }\n    return chars.join('')\n  }\n\n  function bufferClone(buf) {\n    if (buf.slice) {\n      return buf.slice(0)\n    } else {\n      var view = new Uint8Array(buf.byteLength)\n      view.set(new Uint8Array(buf))\n      return view.buffer\n    }\n  }\n\n  function Body() {\n    this.bodyUsed = false\n\n    this._initBody = function(body) {\n      this._bodyInit = body\n      if (!body) {\n        this._bodyText = ''\n      } else if (typeof body === 'string') {\n        this._bodyText = body\n      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n        this._bodyBlob = body\n      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n        this._bodyFormData = body\n      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n        this._bodyText = body.toString()\n      } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n        this._bodyArrayBuffer = bufferClone(body.buffer)\n        // IE 10-11 can't handle a DataView body.\n        this._bodyInit = new Blob([this._bodyArrayBuffer])\n      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n        this._bodyArrayBuffer = bufferClone(body)\n      } else {\n        throw new Error('unsupported BodyInit type')\n      }\n\n      if (!this.headers.get('content-type')) {\n        if (typeof body === 'string') {\n          this.headers.set('content-type', 'text/plain;charset=UTF-8')\n        } else if (this._bodyBlob && this._bodyBlob.type) {\n          this.headers.set('content-type', this._bodyBlob.type)\n        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8')\n        }\n      }\n    }\n\n    if (support.blob) {\n      this.blob = function() {\n        var rejected = consumed(this)\n        if (rejected) {\n          return rejected\n        }\n\n        if (this._bodyBlob) {\n          return Promise.resolve(this._bodyBlob)\n        } else if (this._bodyArrayBuffer) {\n          return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n        } else if (this._bodyFormData) {\n          throw new Error('could not read FormData body as blob')\n        } else {\n          return Promise.resolve(new Blob([this._bodyText]))\n        }\n      }\n\n      this.arrayBuffer = function() {\n        if (this._bodyArrayBuffer) {\n          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n        } else {\n          return this.blob().then(readBlobAsArrayBuffer)\n        }\n      }\n    }\n\n    this.text = function() {\n      var rejected = consumed(this)\n      if (rejected) {\n        return rejected\n      }\n\n      if (this._bodyBlob) {\n        return readBlobAsText(this._bodyBlob)\n      } else if (this._bodyArrayBuffer) {\n        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n      } else if (this._bodyFormData) {\n        throw new Error('could not read FormData body as text')\n      } else {\n        return Promise.resolve(this._bodyText)\n      }\n    }\n\n    if (support.formData) {\n      this.formData = function() {\n        return this.text().then(decode)\n      }\n    }\n\n    this.json = function() {\n      return this.text().then(JSON.parse)\n    }\n\n    return this\n  }\n\n  // HTTP methods whose capitalization should be normalized\n  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT']\n\n  function normalizeMethod(method) {\n    var upcased = method.toUpperCase()\n    return (methods.indexOf(upcased) > -1) ? upcased : method\n  }\n\n  function Request(input, options) {\n    options = options || {}\n    var body = options.body\n\n    if (input instanceof Request) {\n      if (input.bodyUsed) {\n        throw new TypeError('Already read')\n      }\n      this.url = input.url\n      this.credentials = input.credentials\n      if (!options.headers) {\n        this.headers = new Headers(input.headers)\n      }\n      this.method = input.method\n      this.mode = input.mode\n      if (!body && input._bodyInit != null) {\n        body = input._bodyInit\n        input.bodyUsed = true\n      }\n    } else {\n      this.url = String(input)\n    }\n\n    this.credentials = options.credentials || this.credentials || 'omit'\n    if (options.headers || !this.headers) {\n      this.headers = new Headers(options.headers)\n    }\n    this.method = normalizeMethod(options.method || this.method || 'GET')\n    this.mode = options.mode || this.mode || null\n    this.referrer = null\n\n    if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n      throw new TypeError('Body not allowed for GET or HEAD requests')\n    }\n    this._initBody(body)\n  }\n\n  Request.prototype.clone = function() {\n    return new Request(this, { body: this._bodyInit })\n  }\n\n  function decode(body) {\n    var form = new FormData()\n    body.trim().split('&').forEach(function(bytes) {\n      if (bytes) {\n        var split = bytes.split('=')\n        var name = split.shift().replace(/\\+/g, ' ')\n        var value = split.join('=').replace(/\\+/g, ' ')\n        form.append(decodeURIComponent(name), decodeURIComponent(value))\n      }\n    })\n    return form\n  }\n\n  function parseHeaders(rawHeaders) {\n    var headers = new Headers()\n    // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n    // https://tools.ietf.org/html/rfc7230#section-3.2\n    var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ')\n    preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n      var parts = line.split(':')\n      var key = parts.shift().trim()\n      if (key) {\n        var value = parts.join(':').trim()\n        headers.append(key, value)\n      }\n    })\n    return headers\n  }\n\n  Body.call(Request.prototype)\n\n  function Response(bodyInit, options) {\n    if (!options) {\n      options = {}\n    }\n\n    this.type = 'default'\n    this.status = options.status === undefined ? 200 : options.status\n    this.ok = this.status >= 200 && this.status < 300\n    this.statusText = 'statusText' in options ? options.statusText : 'OK'\n    this.headers = new Headers(options.headers)\n    this.url = options.url || ''\n    this._initBody(bodyInit)\n  }\n\n  Body.call(Response.prototype)\n\n  Response.prototype.clone = function() {\n    return new Response(this._bodyInit, {\n      status: this.status,\n      statusText: this.statusText,\n      headers: new Headers(this.headers),\n      url: this.url\n    })\n  }\n\n  Response.error = function() {\n    var response = new Response(null, {status: 0, statusText: ''})\n    response.type = 'error'\n    return response\n  }\n\n  var redirectStatuses = [301, 302, 303, 307, 308]\n\n  Response.redirect = function(url, status) {\n    if (redirectStatuses.indexOf(status) === -1) {\n      throw new RangeError('Invalid status code')\n    }\n\n    return new Response(null, {status: status, headers: {location: url}})\n  }\n\n  self.Headers = Headers\n  self.Request = Request\n  self.Response = Response\n\n  self.fetch = function(input, init) {\n    return new Promise(function(resolve, reject) {\n      var request = new Request(input, init)\n      var xhr = new XMLHttpRequest()\n\n      xhr.onload = function() {\n        var options = {\n          status: xhr.status,\n          statusText: xhr.statusText,\n          headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n        }\n        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL')\n        var body = 'response' in xhr ? xhr.response : xhr.responseText\n        resolve(new Response(body, options))\n      }\n\n      xhr.onerror = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.ontimeout = function() {\n        reject(new TypeError('Network request failed'))\n      }\n\n      xhr.open(request.method, request.url, true)\n\n      if (request.credentials === 'include') {\n        xhr.withCredentials = true\n      } else if (request.credentials === 'omit') {\n        xhr.withCredentials = false\n      }\n\n      if ('responseType' in xhr && support.blob) {\n        xhr.responseType = 'blob'\n      }\n\n      request.headers.forEach(function(value, name) {\n        xhr.setRequestHeader(name, value)\n      })\n\n      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit)\n    })\n  }\n  self.fetch.polyfill = true\n})(typeof self !== 'undefined' ? self : this);\n","'use strict';\n\n/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n  var constructor = this.constructor;\n  return this.then(\n    function(value) {\n      return constructor.resolve(callback()).then(function() {\n        return value;\n      });\n    },\n    function(reason) {\n      return constructor.resolve(callback()).then(function() {\n        return constructor.reject(reason);\n      });\n    }\n  );\n}\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n  return function() {\n    fn.apply(thisArg, arguments);\n  };\n}\n\n/**\n * @constructor\n * @param {Function} fn\n */\nfunction Promise(fn) {\n  if (!(this instanceof Promise))\n    throw new TypeError('Promises must be constructed via new');\n  if (typeof fn !== 'function') throw new TypeError('not a function');\n  /** @type {!number} */\n  this._state = 0;\n  /** @type {!boolean} */\n  this._handled = false;\n  /** @type {Promise|undefined} */\n  this._value = undefined;\n  /** @type {!Array<!Function>} */\n  this._deferreds = [];\n\n  doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n  while (self._state === 3) {\n    self = self._value;\n  }\n  if (self._state === 0) {\n    self._deferreds.push(deferred);\n    return;\n  }\n  self._handled = true;\n  Promise._immediateFn(function() {\n    var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n    if (cb === null) {\n      (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n      return;\n    }\n    var ret;\n    try {\n      ret = cb(self._value);\n    } catch (e) {\n      reject(deferred.promise, e);\n      return;\n    }\n    resolve(deferred.promise, ret);\n  });\n}\n\nfunction resolve(self, newValue) {\n  try {\n    // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n    if (newValue === self)\n      throw new TypeError('A promise cannot be resolved with itself.');\n    if (\n      newValue &&\n      (typeof newValue === 'object' || typeof newValue === 'function')\n    ) {\n      var then = newValue.then;\n      if (newValue instanceof Promise) {\n        self._state = 3;\n        self._value = newValue;\n        finale(self);\n        return;\n      } else if (typeof then === 'function') {\n        doResolve(bind(then, newValue), self);\n        return;\n      }\n    }\n    self._state = 1;\n    self._value = newValue;\n    finale(self);\n  } catch (e) {\n    reject(self, e);\n  }\n}\n\nfunction reject(self, newValue) {\n  self._state = 2;\n  self._value = newValue;\n  finale(self);\n}\n\nfunction finale(self) {\n  if (self._state === 2 && self._deferreds.length === 0) {\n    Promise._immediateFn(function() {\n      if (!self._handled) {\n        Promise._unhandledRejectionFn(self._value);\n      }\n    });\n  }\n\n  for (var i = 0, len = self._deferreds.length; i < len; i++) {\n    handle(self, self._deferreds[i]);\n  }\n  self._deferreds = null;\n}\n\n/**\n * @constructor\n */\nfunction Handler(onFulfilled, onRejected, promise) {\n  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n  this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n  this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n  var done = false;\n  try {\n    fn(\n      function(value) {\n        if (done) return;\n        done = true;\n        resolve(self, value);\n      },\n      function(reason) {\n        if (done) return;\n        done = true;\n        reject(self, reason);\n      }\n    );\n  } catch (ex) {\n    if (done) return;\n    done = true;\n    reject(self, ex);\n  }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n  return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n  // @ts-ignore\n  var prom = new this.constructor(noop);\n\n  handle(this, new Handler(onFulfilled, onRejected, prom));\n  return prom;\n};\n\nPromise.prototype['finally'] = finallyConstructor;\n\nPromise.all = function(arr) {\n  return new Promise(function(resolve, reject) {\n    if (!arr || typeof arr.length === 'undefined')\n      throw new TypeError('Promise.all accepts an array');\n    var args = Array.prototype.slice.call(arr);\n    if (args.length === 0) return resolve([]);\n    var remaining = args.length;\n\n    function res(i, val) {\n      try {\n        if (val && (typeof val === 'object' || typeof val === 'function')) {\n          var then = val.then;\n          if (typeof then === 'function') {\n            then.call(\n              val,\n              function(val) {\n                res(i, val);\n              },\n              reject\n            );\n            return;\n          }\n        }\n        args[i] = val;\n        if (--remaining === 0) {\n          resolve(args);\n        }\n      } catch (ex) {\n        reject(ex);\n      }\n    }\n\n    for (var i = 0; i < args.length; i++) {\n      res(i, args[i]);\n    }\n  });\n};\n\nPromise.resolve = function(value) {\n  if (value && typeof value === 'object' && value.constructor === Promise) {\n    return value;\n  }\n\n  return new Promise(function(resolve) {\n    resolve(value);\n  });\n};\n\nPromise.reject = function(value) {\n  return new Promise(function(resolve, reject) {\n    reject(value);\n  });\n};\n\nPromise.race = function(values) {\n  return new Promise(function(resolve, reject) {\n    for (var i = 0, len = values.length; i < len; i++) {\n      values[i].then(resolve, reject);\n    }\n  });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n  (typeof setImmediate === 'function' &&\n    function(fn) {\n      setImmediate(fn);\n    }) ||\n  function(fn) {\n    setTimeoutFunc(fn, 0);\n  };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n  if (typeof console !== 'undefined' && console) {\n    console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n  }\n};\n\n/** @suppress {undefinedVars} */\nvar globalNS = (function() {\n  // the only reliable means to get the global object is\n  // `Function('return this')()`\n  // However, this causes CSP violations in Chrome apps.\n  if (typeof self !== 'undefined') {\n    return self;\n  }\n  if (typeof window !== 'undefined') {\n    return window;\n  }\n  if (typeof global !== 'undefined') {\n    return global;\n  }\n  throw new Error('unable to locate global object');\n})();\n\nif (!('Promise' in globalNS)) {\n  globalNS['Promise'] = Promise;\n} else if (!globalNS.Promise.prototype['finally']) {\n  globalNS.Promise.prototype['finally'] = finallyConstructor;\n}\n","module.exports = require('../../es/array/find');\n","require('../../modules/es.array.find');\n\nmodule.exports = require('../../internals/entry-unbind')('Array', 'find');\n","'use strict';\nvar internalFind = require('../internals/array-methods')(5);\nvar FIND = 'find';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.find` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\nrequire('../internals/export')({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n  find: function find(callbackfn /* , that = undefined */) {\n    return internalFind(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nrequire('../internals/add-to-unscopables')(FIND);\n","module.exports = function (it) {\n  if (typeof it != 'function') {\n    throw TypeError(String(it) + ' is not a function');\n  } return it;\n};\n","var nativeFunctionToString = require('../internals/function-to-string');\nvar WeakMap = require('../internals/global').WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(nativeFunctionToString.call(WeakMap));\n","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nrequire('@firebase/polyfill');\nvar firebase = _interopDefault(require('@firebase/app'));\n\n/**\r\n * @license\r\n * Copyright 2018 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\n\nmodule.exports = firebase;\n//# sourceMappingURL=index.cjs.js.map\n","var getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\nvar Reflect = require('../internals/global').Reflect;\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n  var keys = getOwnPropertyNamesModule.f(anObject(it));\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\n// false -> Array#indexOf\n// https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n// true  -> Array#includes\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\nmodule.exports = function (IS_INCLUDES) {\n  return function ($this, el, fromIndex) {\n    var O = toIndexedObject($this);\n    var length = toLength(O.length);\n    var index = toAbsoluteIndex(fromIndex, length);\n    var value;\n    // Array#includes uses SameValueZero equality algorithm\n    // eslint-disable-next-line no-self-compare\n    if (IS_INCLUDES && el != el) while (length > index) {\n      value = O[index++];\n      // eslint-disable-next-line no-self-compare\n      if (value != value) return true;\n    // Array#indexOf ignores holes, Array#includes - not\n    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n      if (O[index] === el) return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n","var toInteger = require('../internals/to-integer');\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(length, length).\nmodule.exports = function (index, length) {\n  var integer = toInteger(index);\n  return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var fails = require('../internals/fails');\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n  var value = data[normalize(feature)];\n  return value == POLYFILL ? true\n    : value == NATIVE ? false\n    : typeof detection == 'function' ? fails(detection)\n    : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n  return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n  anObject(O);\n  var keys = objectKeys(Properties);\n  var length = keys.length;\n  var i = 0;\n  var key;\n  while (length > i) definePropertyModule.f(O, key = keys[i++], Properties[key]);\n  return O;\n};\n","var document = require('../internals/global').document;\n\nmodule.exports = document && document.documentElement;\n","module.exports = require('../../es/array/find-index');\n","require('../../modules/es.array.find-index');\n\nmodule.exports = require('../../internals/entry-unbind')('Array', 'findIndex');\n","'use strict';\nvar internalFindIndex = require('../internals/array-methods')(6);\nvar FIND_INDEX = 'findIndex';\nvar SKIPS_HOLES = true;\n\n// Shouldn't skip holes\nif (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES = false; });\n\n// `Array.prototype.findIndex` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.findindex\nrequire('../internals/export')({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {\n  findIndex: function findIndex(callbackfn /* , that = undefined */) {\n    return internalFindIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nrequire('../internals/add-to-unscopables')(FIND_INDEX);\n","module.exports = require('../../es/object/assign');\n","module.exports = function (exec) {\n  try {\n    return !!exec();\n  } catch (error) {\n    return true;\n  }\n};\n","require('../../modules/es.object.assign');\n\nmodule.exports = require('../../internals/path').Object.assign;\n","var assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nrequire('../internals/export')({ target: 'Object', stat: true, forced: Object.assign !== assign }, { assign: assign });\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar nativeAssign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !nativeAssign || require('../internals/fails')(function () {\n  var A = {};\n  var B = {};\n  // eslint-disable-next-line no-undef\n  var symbol = Symbol();\n  var alphabet = 'abcdefghijklmnopqrst';\n  A[symbol] = 7;\n  alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n  return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n  var T = toObject(target);\n  var argumentsLength = arguments.length;\n  var index = 1;\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  var propertyIsEnumerable = propertyIsEnumerableModule.f;\n  while (argumentsLength > index) {\n    var S = IndexedObject(arguments[index++]);\n    var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n    var length = keys.length;\n    var j = 0;\n    var key;\n    while (length > j) if (propertyIsEnumerable.call(S, key = keys[j++])) T[key] = S[key];\n  } return T;\n} : nativeAssign;\n","module.exports = require('../../es/string/starts-with');\n","require('../../modules/es.string.starts-with');\n\nmodule.exports = require('../../internals/entry-unbind')('String', 'startsWith');\n","'use strict';\nvar toLength = require('../internals/to-length');\nvar validateArguments = require('../internals/validate-string-method-arguments');\nvar STARTS_WITH = 'startsWith';\nvar CORRECT_IS_REGEXP_LOGIC = require('../internals/correct-is-regexp-logic')(STARTS_WITH);\nvar nativeStartsWith = ''[STARTS_WITH];\n\n// `String.prototype.startsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.startswith\nrequire('../internals/export')({ target: 'String', proto: true, forced: !CORRECT_IS_REGEXP_LOGIC }, {\n  startsWith: function startsWith(searchString /* , position = 0 */) {\n    var that = validateArguments(this, searchString, STARTS_WITH);\n    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n    var search = String(searchString);\n    return nativeStartsWith\n      ? nativeStartsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('../internals/is-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (that, searchString, NAME) {\n  if (isRegExp(searchString)) {\n    throw TypeError('String.prototype.' + NAME + \" doesn't accept regex\");\n  } return String(requireObjectCoercible(that));\n};\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar MATCH = require('../internals/well-known-symbol')('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.github.io/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var MATCH = require('../internals/well-known-symbol')('match');\n\nmodule.exports = function (METHOD_NAME) {\n  var regexp = /./;\n  try {\n    '/./'[METHOD_NAME](regexp);\n  } catch (e) {\n    try {\n      regexp[MATCH] = false;\n      return '/./'[METHOD_NAME](regexp);\n    } catch (f) { /* empty */ }\n  } return false;\n};\n","module.exports = require('../../es/string/repeat');\n","module.exports = function (it) {\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","require('../../modules/es.string.repeat');\n\nmodule.exports = require('../../internals/entry-unbind')('String', 'repeat');\n","// `String.prototype.repeat` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\nrequire('../internals/export')({ target: 'String', proto: true }, {\n  repeat: require('../internals/string-repeat')\n});\n","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.github.io/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n  var str = String(requireObjectCoercible(this));\n  var result = '';\n  var n = toInteger(count);\n  if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n","module.exports = require('../../es/symbol');\n\nrequire('../../modules/esnext.symbol.dispose');\nrequire('../../modules/esnext.symbol.observable');\nrequire('../../modules/esnext.symbol.pattern-match');\n","require('../../modules/es.array.concat');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.symbol');\nrequire('../../modules/es.symbol.async-iterator');\nrequire('../../modules/es.symbol.description');\nrequire('../../modules/es.symbol.has-instance');\nrequire('../../modules/es.symbol.is-concat-spreadable');\nrequire('../../modules/es.symbol.iterator');\nrequire('../../modules/es.symbol.match');\nrequire('../../modules/es.symbol.replace');\nrequire('../../modules/es.symbol.search');\nrequire('../../modules/es.symbol.species');\nrequire('../../modules/es.symbol.split');\nrequire('../../modules/es.symbol.to-primitive');\nrequire('../../modules/es.symbol.to-string-tag');\nrequire('../../modules/es.symbol.unscopables');\nrequire('../../modules/es.math.to-string-tag');\nrequire('../../modules/es.json.to-string-tag');\n\nmodule.exports = require('../../internals/path').Symbol;\n","'use strict';\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar IS_CONCAT_SPREADABLE = require('../internals/well-known-symbol')('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\n\nvar IS_CONCAT_SPREADABLE_SUPPORT = !require('../internals/fails')(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = require('../internals/array-method-has-species-support')('concat');\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\nrequire('../internals/export')({ target: 'Array', proto: true, forced: FORCED }, {\n  concat: function concat(arg) { // eslint-disable-line no-unused-vars\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = toLength(E.length);\n        if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n  var propertyKey = toPrimitive(key);\n  if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n  else object[propertyKey] = value;\n};\n","var fails = require('../internals/fails');\nvar SPECIES = require('../internals/well-known-symbol')('species');\n\nmodule.exports = function (METHOD_NAME) {\n  return !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n","var toString = require('../internals/object-to-string');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.prototype.toString` method\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nif (toString !== ObjectPrototype.toString) {\n  require('../internals/redefine')(ObjectPrototype, 'toString', toString, { unsafe: true });\n}\n","'use strict';\nvar classof = require('../internals/classof');\nvar TO_STRING_TAG = require('../internals/well-known-symbol')('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\n// `Object.prototype.toString` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.tostring\nmodule.exports = String(test) !== '[object z]' ? function toString() {\n  return '[object ' + classof(this) + ']';\n} : test.toString;\n","var definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = require('../internals/descriptors') ? function (object, key, value) {\n  return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n  object[key] = value;\n  return object;\n};\n","var classofRaw = require('../internals/classof-raw');\nvar TO_STRING_TAG = require('../internals/well-known-symbol')('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n  try {\n    return it[key];\n  } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = function (it) {\n  var O, tag, result;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n    // builtinTag case\n    : CORRECT_ARGUMENTS ? classofRaw(O)\n    // ES3 arguments fallback\n    : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('../internals/global');\nvar has = require('../internals/has');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IS_PURE = require('../internals/is-pure');\nvar $export = require('../internals/export');\nvar redefine = require('../internals/redefine');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar fails = require('../internals/fails');\nvar shared = require('../internals/shared');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/wrapped-well-known-symbol');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar enumKeys = require('../internals/enum-keys');\nvar isArray = require('../internals/is-array');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar hide = require('../internals/hide');\nvar objectKeys = require('../internals/object-keys');\nvar HIDDEN = require('../internals/shared-key')('hidden');\nvar InternalStateModule = require('../internals/internal-state');\nvar SYMBOL = 'Symbol';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar $Symbol = global.Symbol;\nvar JSON = global.JSON;\nvar nativeJSONStringify = JSON && JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar WellKnownSymbolsStore = shared('wks');\nvar ObjectPrototype = Object[PROTOTYPE];\nvar QObject = global.QObject;\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n  return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n    get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n  })).a != 7;\n}) ? function (it, key, D) {\n  var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, key);\n  if (ObjectPrototypeDescriptor) delete ObjectPrototype[key];\n  nativeDefineProperty(it, key, D);\n  if (ObjectPrototypeDescriptor && it !== ObjectPrototype) {\n    nativeDefineProperty(ObjectPrototype, key, ObjectPrototypeDescriptor);\n  }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n  var symbol = AllSymbols[tag] = nativeObjectCreate($Symbol[PROTOTYPE]);\n  setInternalState(symbol, {\n    type: SYMBOL,\n    tag: tag,\n    description: description\n  });\n  if (!DESCRIPTORS) symbol.description = description;\n  return symbol;\n};\n\nvar isSymbol = NATIVE_SYMBOL && typeof $Symbol.iterator == 'symbol' ? function (it) {\n  return typeof it == 'symbol';\n} : function (it) {\n  return Object(it) instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n  if (it === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, key, D);\n  anObject(it);\n  key = toPrimitive(key, true);\n  anObject(D);\n  if (has(AllSymbols, key)) {\n    if (!D.enumerable) {\n      if (!has(it, HIDDEN)) nativeDefineProperty(it, HIDDEN, createPropertyDescriptor(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n      D = nativeObjectCreate(D, { enumerable: createPropertyDescriptor(0, false) });\n    } return setSymbolDescriptor(it, key, D);\n  } return nativeDefineProperty(it, key, D);\n};\n\nvar $defineProperties = function defineProperties(it, P) {\n  anObject(it);\n  var keys = enumKeys(P = toIndexedObject(P));\n  var i = 0;\n  var l = keys.length;\n  var key;\n  while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\n\nvar $create = function create(it, P) {\n  return P === undefined ? nativeObjectCreate(it) : $defineProperties(nativeObjectCreate(it), P);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n  var E = nativePropertyIsEnumerable.call(this, key = toPrimitive(key, true));\n  if (this === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n  it = toIndexedObject(it);\n  key = toPrimitive(key, true);\n  if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;\n  var D = nativeGetOwnPropertyDescriptor(it, key);\n  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n  return D;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n  var names = nativeGetOwnPropertyNames(toIndexedObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (!has(AllSymbols, key = names[i++]) && !has(hiddenKeys, key)) result.push(key);\n  } return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n  var IS_OP = it === ObjectPrototype;\n  var names = nativeGetOwnPropertyNames(IS_OP ? ObjectPrototypeSymbols : toIndexedObject(it));\n  var result = [];\n  var i = 0;\n  var key;\n  while (names.length > i) {\n    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectPrototype, key) : true)) result.push(AllSymbols[key]);\n  } return result;\n};\n\n// `Symbol` constructor\n// https://tc39.github.io/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n  $Symbol = function Symbol() {\n    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');\n    var description = arguments[0] === undefined ? undefined : String(arguments[0]);\n    var tag = uid(description);\n    var setter = function (value) {\n      if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);\n      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n      setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n    };\n    if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n    return wrap(tag, description);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n    return getInternalState(this).tag;\n  });\n\n  propertyIsEnumerableModule.f = $propertyIsEnumerable;\n  definePropertyModule.f = $defineProperty;\n  getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n  require('../internals/object-get-own-property-names').f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n  require('../internals/object-get-own-property-symbols').f = $getOwnPropertySymbols;\n\n  if (DESCRIPTORS) {\n    // https://github.com/tc39/proposal-Symbol-description\n    nativeDefineProperty($Symbol[PROTOTYPE], 'description', {\n      configurable: true,\n      get: function description() {\n        return getInternalState(this).description;\n      }\n    });\n    if (!IS_PURE) {\n      redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n    }\n  }\n\n  wrappedWellKnownSymbolModule.f = function (name) {\n    return wrap(wellKnownSymbol(name), name);\n  };\n}\n\n$export({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, { Symbol: $Symbol });\n\nfor (var wellKnownSymbols = objectKeys(WellKnownSymbolsStore), k = 0; wellKnownSymbols.length > k;) {\n  defineWellKnownSymbol(wellKnownSymbols[k++]);\n}\n\n$export({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Symbol.for` method\n  // https://tc39.github.io/ecma262/#sec-symbol.for\n  'for': function (key) {\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // `Symbol.keyFor` method\n  // https://tc39.github.io/ecma262/#sec-symbol.keyfor\n  keyFor: function keyFor(sym) {\n    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n    for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n  },\n  useSetter: function () { USE_SETTER = true; },\n  useSimple: function () { USE_SETTER = false; }\n});\n\n$export({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n  // `Object.create` method\n  // https://tc39.github.io/ecma262/#sec-object.create\n  create: $create,\n  // `Object.defineProperty` method\n  // https://tc39.github.io/ecma262/#sec-object.defineproperty\n  defineProperty: $defineProperty,\n  // `Object.defineProperties` method\n  // https://tc39.github.io/ecma262/#sec-object.defineproperties\n  defineProperties: $defineProperties,\n  // `Object.getOwnPropertyDescriptor` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$export({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n  // `Object.getOwnPropertyNames` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertynames\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // `Object.getOwnPropertySymbols` method\n  // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.github.io/ecma262/#sec-json.stringify\nJSON && $export({ target: 'JSON', stat: true, forced: !NATIVE_SYMBOL || fails(function () {\n  var symbol = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  return nativeJSONStringify([symbol]) != '[null]'\n    // WebKit converts symbol values to JSON as null\n    || nativeJSONStringify({ a: symbol }) != '{}'\n    // V8 throws on boxed symbols\n    || nativeJSONStringify(Object(symbol)) != '{}';\n}) }, {\n  stringify: function stringify(it) {\n    var args = [it];\n    var i = 1;\n    var replacer, $replacer;\n    while (arguments.length > i) args.push(arguments[i++]);\n    $replacer = replacer = args[1];\n    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n    if (!isArray(replacer)) replacer = function (key, value) {\n      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n      if (!isSymbol(value)) return value;\n    };\n    args[1] = replacer;\n    return nativeJSONStringify.apply(JSON, args);\n  }\n});\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!$Symbol[PROTOTYPE][TO_PRIMITIVE]) hide($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\n\n// all enumerable object keys, includes symbols\nmodule.exports = function (it) {\n  var result = objectKeys(it);\n  var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n  if (getOwnPropertySymbols) {\n    var symbols = getOwnPropertySymbols(it);\n    var propertyIsEnumerable = propertyIsEnumerableModule.f;\n    var i = 0;\n    var key;\n    while (symbols.length > i) if (propertyIsEnumerable.call(it, key = symbols[i++])) result.push(key);\n  } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n  try {\n    return nativeGetOwnPropertyNames(it);\n  } catch (error) {\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n  return windowNames && toString.call(it) == '[object Window]'\n    ? getWindowNames(it)\n    : nativeGetOwnPropertyNames(toIndexedObject(it));\n};\n","// `Symbol.asyncIterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.asynciterator\nrequire('../internals/define-well-known-symbol')('asyncIterator');\n","// `Symbol.prototype.description` getter\n// https://tc39.github.io/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar has = require('../internals/has');\nvar isObject = require('../internals/is-object');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar NativeSymbol = require('../internals/global').Symbol;\n\nif (DESCRIPTORS && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) ||\n  // Safari 12 bug\n  NativeSymbol().description !== undefined\n)) {\n  var EmptyStringDescriptionStore = {};\n  // wrap Symbol constructor for correct work with undefined description\n  var SymbolWrapper = function Symbol() {\n    var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]);\n    var result = this instanceof SymbolWrapper\n      ? new NativeSymbol(description)\n      // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n      : description === undefined ? NativeSymbol() : NativeSymbol(description);\n    if (description === '') EmptyStringDescriptionStore[result] = true;\n    return result;\n  };\n  copyConstructorProperties(SymbolWrapper, NativeSymbol);\n  var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype;\n  symbolPrototype.constructor = SymbolWrapper;\n\n  var symbolToString = symbolPrototype.toString;\n  var native = String(NativeSymbol('test')) == 'Symbol(test)';\n  var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n  defineProperty(symbolPrototype, 'description', {\n    configurable: true,\n    get: function description() {\n      var symbol = isObject(this) ? this.valueOf() : this;\n      var string = symbolToString.call(symbol);\n      if (has(EmptyStringDescriptionStore, symbol)) return '';\n      var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1');\n      return desc === '' ? undefined : desc;\n    }\n  });\n\n  require('../internals/export')({ global: true, forced: true }, { Symbol: SymbolWrapper });\n}\n","// `Symbol.hasInstance` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.hasinstance\nrequire('../internals/define-well-known-symbol')('hasInstance');\n","// `Symbol.isConcatSpreadable` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.isconcatspreadable\nrequire('../internals/define-well-known-symbol')('isConcatSpreadable');\n","// `Symbol.match` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.match\nrequire('../internals/define-well-known-symbol')('match');\n","// `Symbol.replace` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.replace\nrequire('../internals/define-well-known-symbol')('replace');\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar hide = require('../internals/hide');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n  options.target      - name of the target object\n  options.global      - target is the global object\n  options.stat        - export as static methods of target\n  options.proto       - export as prototype methods of target\n  options.real        - real prototype method for the `pure` version\n  options.forced      - export even if the native feature is available\n  options.bind        - bind methods to the target, required for the `pure` version\n  options.wrap        - wrap constructors to preventing global pollution, required for the `pure` version\n  options.unsafe      - use the simple assignment of property instead of delete + defineProperty\n  options.sham        - add a flag to not completely full polyfills\n  options.enumerable  - export as enumerable property\n  options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n  var TARGET = options.target;\n  var GLOBAL = options.global;\n  var STATIC = options.stat;\n  var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n  if (GLOBAL) {\n    target = global;\n  } else if (STATIC) {\n    target = global[TARGET] || setGlobal(TARGET, {});\n  } else {\n    target = (global[TARGET] || {}).prototype;\n  }\n  if (target) for (key in source) {\n    sourceProperty = source[key];\n    if (options.noTargetGet) {\n      descriptor = getOwnPropertyDescriptor(target, key);\n      targetProperty = descriptor && descriptor.value;\n    } else targetProperty = target[key];\n    FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n    // contained in target\n    if (!FORCED && targetProperty !== undefined) {\n      if (typeof sourceProperty === typeof targetProperty) continue;\n      copyConstructorProperties(sourceProperty, targetProperty);\n    }\n    // add a flag to not completely full polyfills\n    if (options.sham || (targetProperty && targetProperty.sham)) {\n      hide(sourceProperty, 'sham', true);\n    }\n    // extend global\n    redefine(target, key, sourceProperty, options);\n  }\n};\n","// `Symbol.search` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.search\nrequire('../internals/define-well-known-symbol')('search');\n","// `Symbol.species` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.species\nrequire('../internals/define-well-known-symbol')('species');\n","// `Symbol.split` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.split\nrequire('../internals/define-well-known-symbol')('split');\n","// `Symbol.toPrimitive` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.toprimitive\nrequire('../internals/define-well-known-symbol')('toPrimitive');\n","// `Symbol.toStringTag` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.tostringtag\nrequire('../internals/define-well-known-symbol')('toStringTag');\n","// `Symbol.unscopables` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.unscopables\nrequire('../internals/define-well-known-symbol')('unscopables');\n","// Math[@@toStringTag] property\n// https://tc39.github.io/ecma262/#sec-math-@@tostringtag\nrequire('../internals/set-to-string-tag')(Math, 'Math', true);\n","// JSON[@@toStringTag] property\n// https://tc39.github.io/ecma262/#sec-json-@@tostringtag\nrequire('../internals/set-to-string-tag')(require('../internals/global').JSON, 'JSON', true);\n","// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-using-statement\nrequire('../internals/define-well-known-symbol')('dispose');\n","// https://github.com/tc39/proposal-observable\nrequire('../internals/define-well-known-symbol')('observable');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar nativeDefineProperty = Object.defineProperty;\n\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if (IE8_DOM_DEFINE) try {\n    return nativeDefineProperty(O, P, Attributes);\n  } catch (error) { /* empty */ }\n  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n  if ('value' in Attributes) O[P] = Attributes.value;\n  return O;\n};\n","// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\nrequire('../internals/define-well-known-symbol')('patternMatch');\n","module.exports = require('../../es/symbol/iterator');\n","require('../../modules/es.symbol.iterator');\nrequire('../../modules/es.string.iterator');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = require('../../internals/wrapped-well-known-symbol').f('iterator');\n","'use strict';\nvar codePointAt = require('../internals/string-at');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n  setInternalState(this, {\n    type: STRING_ITERATOR,\n    string: String(iterated),\n    index: 0\n  });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n  var state = getInternalState(this);\n  var string = state.string;\n  var index = state.index;\n  var point;\n  if (index >= string.length) return { value: undefined, done: true };\n  point = codePointAt(string, index, true);\n  state.index += point.length;\n  return { value: point, done: false };\n});\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n// CONVERT_TO_STRING: true  -> String#at\n// CONVERT_TO_STRING: false -> String#codePointAt\nmodule.exports = function (that, pos, CONVERT_TO_STRING) {\n  var S = String(requireObjectCoercible(that));\n  var position = toInteger(pos);\n  var size = S.length;\n  var first, second;\n  if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n  first = S.charCodeAt(position);\n  return first < 0xD800 || first > 0xDBFF || position + 1 === size\n    || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n      ? CONVERT_TO_STRING ? S.charAt(position) : first\n      : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n  var TO_STRING_TAG = NAME + ' Iterator';\n  IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n  setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n  Iterators[TO_STRING_TAG] = returnThis;\n  return IteratorConstructor;\n};\n","module.exports = !require('../internals/fails')(function () {\n  function F() { /* empty */ }\n  F.prototype.constructor = null;\n  return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar validateSetPrototypeOfArguments = require('../internals/validate-set-prototype-of-arguments');\n\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n  var correctSetter = false;\n  var test = {};\n  var setter;\n  try {\n    setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n    setter.call(test, []);\n    correctSetter = test instanceof Array;\n  } catch (error) { /* empty */ }\n  return function setPrototypeOf(O, proto) {\n    validateSetPrototypeOfArguments(O, proto);\n    if (correctSetter) setter.call(O, proto);\n    else O.__proto__ = proto;\n    return O;\n  };\n}() : undefined);\n","var isObject = require('../internals/is-object');\nvar anObject = require('../internals/an-object');\n\nmodule.exports = function (O, proto) {\n  anObject(O);\n  if (!isObject(proto) && proto !== null) {\n    throw TypeError(\"Can't set \" + String(proto) + ' as a prototype');\n  }\n};\n","var DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar global = require('../internals/global');\nvar hide = require('../internals/hide');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n  var Collection = global[COLLECTION_NAME];\n  var CollectionPrototype = Collection && Collection.prototype;\n  if (CollectionPrototype) {\n    // some Chrome versions have non-configurable methods on DOMTokenList\n    if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n      hide(CollectionPrototype, ITERATOR, ArrayValues);\n    } catch (error) {\n      CollectionPrototype[ITERATOR] = ArrayValues;\n    }\n    if (!CollectionPrototype[TO_STRING_TAG]) hide(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n    if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n      // some Chrome versions have non-configurable methods on DOMTokenList\n      if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n        hide(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n      } catch (error) {\n        CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n      }\n    }\n  }\n}\n","var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nimport { PLATFORM } from 'aurelia-pal';\n\nfunction isObject(val) {\n  return val && (typeof val === 'function' || (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object');\n}\n\nexport var metadata = {\n  resource: 'aurelia:resource',\n  paramTypes: 'design:paramtypes',\n  propertyType: 'design:type',\n  properties: 'design:properties',\n  get: function get(metadataKey, target, targetKey) {\n    if (!isObject(target)) {\n      return undefined;\n    }\n    var result = metadata.getOwn(metadataKey, target, targetKey);\n    return result === undefined ? metadata.get(metadataKey, Object.getPrototypeOf(target), targetKey) : result;\n  },\n  getOwn: function getOwn(metadataKey, target, targetKey) {\n    if (!isObject(target)) {\n      return undefined;\n    }\n    return Reflect.getOwnMetadata(metadataKey, target, targetKey);\n  },\n  define: function define(metadataKey, metadataValue, target, targetKey) {\n    Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);\n  },\n  getOrCreateOwn: function getOrCreateOwn(metadataKey, Type, target, targetKey) {\n    var result = metadata.getOwn(metadataKey, target, targetKey);\n\n    if (result === undefined) {\n      result = new Type();\n      Reflect.defineMetadata(metadataKey, result, target, targetKey);\n    }\n\n    return result;\n  }\n};\n\nvar originStorage = new Map();\nvar unknownOrigin = Object.freeze({ moduleId: undefined, moduleMember: undefined });\n\nexport var Origin = function () {\n  function Origin(moduleId, moduleMember) {\n    \n\n    this.moduleId = moduleId;\n    this.moduleMember = moduleMember;\n  }\n\n  Origin.get = function get(fn) {\n    var origin = originStorage.get(fn);\n\n    if (origin === undefined) {\n      PLATFORM.eachModule(function (key, value) {\n        if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n          for (var name in value) {\n            try {\n              var exp = value[name];\n              if (exp === fn) {\n                originStorage.set(fn, origin = new Origin(key, name));\n                return true;\n              }\n            } catch (e) {}\n          }\n        }\n\n        if (value === fn) {\n          originStorage.set(fn, origin = new Origin(key, 'default'));\n          return true;\n        }\n\n        return false;\n      });\n    }\n\n    return origin || unknownOrigin;\n  };\n\n  Origin.set = function set(fn, origin) {\n    originStorage.set(fn, origin);\n  };\n\n  return Origin;\n}();\n\nexport function decorators() {\n  for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {\n    rest[_key] = arguments[_key];\n  }\n\n  var applicator = function applicator(target, key, descriptor) {\n    var i = rest.length;\n\n    if (key) {\n      descriptor = descriptor || {\n        value: target[key],\n        writable: true,\n        configurable: true,\n        enumerable: true\n      };\n\n      while (i--) {\n        descriptor = rest[i](target, key, descriptor) || descriptor;\n      }\n\n      Object.defineProperty(target, key, descriptor);\n    } else {\n      while (i--) {\n        target = rest[i](target) || target;\n      }\n    }\n\n    return target;\n  };\n\n  applicator.on = applicator;\n  return applicator;\n}\n\nexport function deprecated(optionsOrTarget, maybeKey, maybeDescriptor) {\n  function decorator(target, key, descriptor) {\n    var methodSignature = target.constructor.name + '#' + key;\n    var options = maybeKey ? {} : optionsOrTarget || {};\n    var message = 'DEPRECATION - ' + methodSignature;\n\n    if (typeof descriptor.value !== 'function') {\n      throw new SyntaxError('Only methods can be marked as deprecated.');\n    }\n\n    if (options.message) {\n      message += ' - ' + options.message;\n    }\n\n    return _extends({}, descriptor, {\n      value: function deprecationWrapper() {\n        if (options.error) {\n          throw new Error(message);\n        } else {\n          console.warn(message);\n        }\n\n        return descriptor.value.apply(this, arguments);\n      }\n    });\n  }\n\n  return maybeKey ? decorator(optionsOrTarget, maybeKey, maybeDescriptor) : decorator;\n}\n\nexport function mixin(behavior) {\n  var instanceKeys = Object.keys(behavior);\n\n  function _mixin(possible) {\n    var decorator = function decorator(target) {\n      var resolvedTarget = typeof target === 'function' ? target.prototype : target;\n\n      var i = instanceKeys.length;\n      while (i--) {\n        var property = instanceKeys[i];\n        Object.defineProperty(resolvedTarget, property, {\n          value: behavior[property],\n          writable: true\n        });\n      }\n    };\n\n    return possible ? decorator(possible) : decorator;\n  }\n\n  return _mixin;\n}\n\nfunction alwaysValid() {\n  return true;\n}\nfunction noCompose() {}\n\nfunction ensureProtocolOptions(options) {\n  if (options === undefined) {\n    options = {};\n  } else if (typeof options === 'function') {\n    options = {\n      validate: options\n    };\n  }\n\n  if (!options.validate) {\n    options.validate = alwaysValid;\n  }\n\n  if (!options.compose) {\n    options.compose = noCompose;\n  }\n\n  return options;\n}\n\nfunction createProtocolValidator(validate) {\n  return function (target) {\n    var result = validate(target);\n    return result === true;\n  };\n}\n\nfunction createProtocolAsserter(name, validate) {\n  return function (target) {\n    var result = validate(target);\n    if (result !== true) {\n      throw new Error(result || name + ' was not correctly implemented.');\n    }\n  };\n}\n\nexport function protocol(name, options) {\n  options = ensureProtocolOptions(options);\n\n  var result = function result(target) {\n    var resolvedTarget = typeof target === 'function' ? target.prototype : target;\n\n    options.compose(resolvedTarget);\n    result.assert(resolvedTarget);\n\n    Object.defineProperty(resolvedTarget, 'protocol:' + name, {\n      enumerable: false,\n      configurable: false,\n      writable: false,\n      value: true\n    });\n  };\n\n  result.validate = createProtocolValidator(options.validate);\n  result.assert = createProtocolAsserter(name, options.validate);\n\n  return result;\n}\n\nprotocol.create = function (name, options) {\n  options = ensureProtocolOptions(options);\n  var hidden = 'protocol:' + name;\n  var result = function result(target) {\n    var decorator = protocol(name, options);\n    return target ? decorator(target) : decorator;\n  };\n\n  result.decorates = function (obj) {\n    return obj[hidden] === true;\n  };\n  result.validate = createProtocolValidator(options.validate);\n  result.assert = createProtocolAsserter(name, options.validate);\n\n  return result;\n};","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n  CSSRuleList: 0,\n  CSSStyleDeclaration: 0,\n  CSSValueList: 0,\n  ClientRectList: 0,\n  DOMRectList: 0,\n  DOMStringList: 0,\n  DOMTokenList: 1,\n  DataTransferItemList: 0,\n  FileList: 0,\n  HTMLAllCollection: 0,\n  HTMLCollection: 0,\n  HTMLFormElement: 0,\n  HTMLSelectElement: 0,\n  MediaList: 0,\n  MimeTypeArray: 0,\n  NamedNodeMap: 0,\n  NodeList: 1,\n  PaintRequestList: 0,\n  Plugin: 0,\n  PluginArray: 0,\n  SVGLengthList: 0,\n  SVGNumberList: 0,\n  SVGPathSegList: 0,\n  SVGPointList: 0,\n  SVGStringList: 0,\n  SVGTransformList: 0,\n  SourceBufferList: 0,\n  StyleSheetList: 0,\n  TextTrackCueList: 0,\n  TextTrackList: 0,\n  TouchList: 0\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n  setInternalState(this, {\n    type: ARRAY_ITERATOR,\n    target: toIndexedObject(iterated), // target\n    index: 0,                          // next index\n    kind: kind                         // kind\n  });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n  var state = getInternalState(this);\n  var target = state.target;\n  var kind = state.kind;\n  var index = state.index++;\n  if (!target || index >= target.length) {\n    state.target = undefined;\n    return { value: undefined, done: true };\n  }\n  if (kind == 'keys') return { value: index, done: false };\n  if (kind == 'values') return { value: target[index], done: false };\n  return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar firebase = _interopDefault(require('@firebase/app'));\nvar tslib_1 = require('tslib');\nvar util = require('@firebase/util');\nvar logger$1 = require('@firebase/logger');\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Wraps a DOM Storage object and:\r\n * - automatically encode objects as JSON strings before storing them to allow us to store arbitrary types.\r\n * - prefixes names with \"firebase:\" to avoid collisions with app data.\r\n *\r\n * We automatically (see storage.js) create two such wrappers, one for sessionStorage,\r\n * and one for localStorage.\r\n *\r\n * @constructor\r\n */\r\nvar DOMStorageWrapper = /** @class */ (function () {\r\n    /**\r\n     * @param {Storage} domStorage_ The underlying storage object (e.g. localStorage or sessionStorage)\r\n     */\r\n    function DOMStorageWrapper(domStorage_) {\r\n        this.domStorage_ = domStorage_;\r\n        // Use a prefix to avoid collisions with other stuff saved by the app.\r\n        this.prefix_ = 'firebase:';\r\n    }\r\n    /**\r\n     * @param {string} key The key to save the value under\r\n     * @param {?Object} value The value being stored, or null to remove the key.\r\n     */\r\n    DOMStorageWrapper.prototype.set = function (key, value) {\r\n        if (value == null) {\r\n            this.domStorage_.removeItem(this.prefixedName_(key));\r\n        }\r\n        else {\r\n            this.domStorage_.setItem(this.prefixedName_(key), util.stringify(value));\r\n        }\r\n    };\r\n    /**\r\n     * @param {string} key\r\n     * @return {*} The value that was stored under this key, or null\r\n     */\r\n    DOMStorageWrapper.prototype.get = function (key) {\r\n        var storedVal = this.domStorage_.getItem(this.prefixedName_(key));\r\n        if (storedVal == null) {\r\n            return null;\r\n        }\r\n        else {\r\n            return util.jsonEval(storedVal);\r\n        }\r\n    };\r\n    /**\r\n     * @param {string} key\r\n     */\r\n    DOMStorageWrapper.prototype.remove = function (key) {\r\n        this.domStorage_.removeItem(this.prefixedName_(key));\r\n    };\r\n    /**\r\n     * @param {string} name\r\n     * @return {string}\r\n     */\r\n    DOMStorageWrapper.prototype.prefixedName_ = function (name) {\r\n        return this.prefix_ + name;\r\n    };\r\n    DOMStorageWrapper.prototype.toString = function () {\r\n        return this.domStorage_.toString();\r\n    };\r\n    return DOMStorageWrapper;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An in-memory storage implementation that matches the API of DOMStorageWrapper\r\n * (TODO: create interface for both to implement).\r\n *\r\n * @constructor\r\n */\r\nvar MemoryStorage = /** @class */ (function () {\r\n    function MemoryStorage() {\r\n        this.cache_ = {};\r\n        this.isInMemoryStorage = true;\r\n    }\r\n    MemoryStorage.prototype.set = function (key, value) {\r\n        if (value == null) {\r\n            delete this.cache_[key];\r\n        }\r\n        else {\r\n            this.cache_[key] = value;\r\n        }\r\n    };\r\n    MemoryStorage.prototype.get = function (key) {\r\n        if (util.contains(this.cache_, key)) {\r\n            return this.cache_[key];\r\n        }\r\n        return null;\r\n    };\r\n    MemoryStorage.prototype.remove = function (key) {\r\n        delete this.cache_[key];\r\n    };\r\n    return MemoryStorage;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Helper to create a DOMStorageWrapper or else fall back to MemoryStorage.\r\n * TODO: Once MemoryStorage and DOMStorageWrapper have a shared interface this method annotation should change\r\n * to reflect this type\r\n *\r\n * @param {string} domStorageName Name of the underlying storage object\r\n *   (e.g. 'localStorage' or 'sessionStorage').\r\n * @return {?} Turning off type information until a common interface is defined.\r\n */\r\nvar createStoragefor = function (domStorageName) {\r\n    try {\r\n        // NOTE: just accessing \"localStorage\" or \"window['localStorage']\" may throw a security exception,\r\n        // so it must be inside the try/catch.\r\n        if (typeof window !== 'undefined' &&\r\n            typeof window[domStorageName] !== 'undefined') {\r\n            // Need to test cache. Just because it's here doesn't mean it works\r\n            var domStorage = window[domStorageName];\r\n            domStorage.setItem('firebase:sentinel', 'cache');\r\n            domStorage.removeItem('firebase:sentinel');\r\n            return new DOMStorageWrapper(domStorage);\r\n        }\r\n    }\r\n    catch (e) { }\r\n    // Failed to create wrapper.  Just return in-memory storage.\r\n    // TODO: log?\r\n    return new MemoryStorage();\r\n};\r\n/** A storage object that lasts across sessions */\r\nvar PersistentStorage = createStoragefor('localStorage');\r\n/** A storage object that only lasts one session */\r\nvar SessionStorage = createStoragefor('sessionStorage');\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar logClient = new logger$1.Logger('@firebase/database');\r\n/**\r\n * Returns a locally-unique ID (generated by just incrementing up from 0 each time its called).\r\n * @type {function(): number} Generated ID.\r\n */\r\nvar LUIDGenerator = (function () {\r\n    var id = 1;\r\n    return function () {\r\n        return id++;\r\n    };\r\n})();\r\n/**\r\n * Sha1 hash of the input string\r\n * @param {!string} str The string to hash\r\n * @return {!string} The resulting hash\r\n */\r\nvar sha1 = function (str) {\r\n    var utf8Bytes = util.stringToByteArray(str);\r\n    var sha1 = new util.Sha1();\r\n    sha1.update(utf8Bytes);\r\n    var sha1Bytes = sha1.digest();\r\n    return util.base64.encodeByteArray(sha1Bytes);\r\n};\r\n/**\r\n * @param {...*} var_args\r\n * @return {string}\r\n * @private\r\n */\r\nvar buildLogMessage_ = function () {\r\n    var var_args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        var_args[_i] = arguments[_i];\r\n    }\r\n    var message = '';\r\n    for (var i = 0; i < var_args.length; i++) {\r\n        if (Array.isArray(var_args[i]) ||\r\n            (var_args[i] &&\r\n                typeof var_args[i] === 'object' &&\r\n                typeof var_args[i].length === 'number')) {\r\n            message += buildLogMessage_.apply(null, var_args[i]);\r\n        }\r\n        else if (typeof var_args[i] === 'object') {\r\n            message += util.stringify(var_args[i]);\r\n        }\r\n        else {\r\n            message += var_args[i];\r\n        }\r\n        message += ' ';\r\n    }\r\n    return message;\r\n};\r\n/**\r\n * Use this for all debug messages in Firebase.\r\n * @type {?function(string)}\r\n */\r\nvar logger = null;\r\n/**\r\n * Flag to check for log availability on first log message\r\n * @type {boolean}\r\n * @private\r\n */\r\nvar firstLog_ = true;\r\n/**\r\n * The implementation of Firebase.enableLogging (defined here to break dependencies)\r\n * @param {boolean|?function(string)} logger_ A flag to turn on logging, or a custom logger\r\n * @param {boolean=} persistent Whether or not to persist logging settings across refreshes\r\n */\r\nvar enableLogging = function (logger_, persistent) {\r\n    util.assert(!persistent || (logger_ === true || logger_ === false), \"Can't turn on custom loggers persistently.\");\r\n    if (logger_ === true) {\r\n        logClient.logLevel = logger$1.LogLevel.VERBOSE;\r\n        logger = logClient.log.bind(logClient);\r\n        if (persistent)\r\n            SessionStorage.set('logging_enabled', true);\r\n    }\r\n    else if (typeof logger_ === 'function') {\r\n        logger = logger_;\r\n    }\r\n    else {\r\n        logger = null;\r\n        SessionStorage.remove('logging_enabled');\r\n    }\r\n};\r\n/**\r\n *\r\n * @param {...(string|Arguments)} var_args\r\n */\r\nvar log = function () {\r\n    var var_args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        var_args[_i] = arguments[_i];\r\n    }\r\n    if (firstLog_ === true) {\r\n        firstLog_ = false;\r\n        if (logger === null && SessionStorage.get('logging_enabled') === true)\r\n            enableLogging(true);\r\n    }\r\n    if (logger) {\r\n        var message = buildLogMessage_.apply(null, var_args);\r\n        logger(message);\r\n    }\r\n};\r\n/**\r\n * @param {!string} prefix\r\n * @return {function(...[*])}\r\n */\r\nvar logWrapper = function (prefix) {\r\n    return function () {\r\n        var var_args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            var_args[_i] = arguments[_i];\r\n        }\r\n        log.apply(void 0, [prefix].concat(var_args));\r\n    };\r\n};\r\n/**\r\n * @param {...string} var_args\r\n */\r\nvar error = function () {\r\n    var var_args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        var_args[_i] = arguments[_i];\r\n    }\r\n    var message = 'FIREBASE INTERNAL ERROR: ' + buildLogMessage_.apply(void 0, var_args);\r\n    logClient.error(message);\r\n};\r\n/**\r\n * @param {...string} var_args\r\n */\r\nvar fatal = function () {\r\n    var var_args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        var_args[_i] = arguments[_i];\r\n    }\r\n    var message = \"FIREBASE FATAL ERROR: \" + buildLogMessage_.apply(void 0, var_args);\r\n    logClient.error(message);\r\n    throw new Error(message);\r\n};\r\n/**\r\n * @param {...*} var_args\r\n */\r\nvar warn = function () {\r\n    var var_args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        var_args[_i] = arguments[_i];\r\n    }\r\n    var message = 'FIREBASE WARNING: ' + buildLogMessage_.apply(void 0, var_args);\r\n    logClient.warn(message);\r\n};\r\n/**\r\n * Logs a warning if the containing page uses https. Called when a call to new Firebase\r\n * does not use https.\r\n */\r\nvar warnIfPageIsSecure = function () {\r\n    // Be very careful accessing browser globals. Who knows what may or may not exist.\r\n    if (typeof window !== 'undefined' &&\r\n        window.location &&\r\n        window.location.protocol &&\r\n        window.location.protocol.indexOf('https:') !== -1) {\r\n        warn('Insecure Firebase access from a secure page. ' +\r\n            'Please use https in calls to new Firebase().');\r\n    }\r\n};\r\n/**\r\n * Returns true if data is NaN, or +/- Infinity.\r\n * @param {*} data\r\n * @return {boolean}\r\n */\r\nvar isInvalidJSONNumber = function (data) {\r\n    return (typeof data === 'number' &&\r\n        (data != data || // NaN\r\n            data == Number.POSITIVE_INFINITY ||\r\n            data == Number.NEGATIVE_INFINITY));\r\n};\r\n/**\r\n * @param {function()} fn\r\n */\r\nvar executeWhenDOMReady = function (fn) {\r\n    if (util.isNodeSdk() || document.readyState === 'complete') {\r\n        fn();\r\n    }\r\n    else {\r\n        // Modeled after jQuery. Try DOMContentLoaded and onreadystatechange (which\r\n        // fire before onload), but fall back to onload.\r\n        var called_1 = false;\r\n        var wrappedFn_1 = function () {\r\n            if (!document.body) {\r\n                setTimeout(wrappedFn_1, Math.floor(10));\r\n                return;\r\n            }\r\n            if (!called_1) {\r\n                called_1 = true;\r\n                fn();\r\n            }\r\n        };\r\n        if (document.addEventListener) {\r\n            document.addEventListener('DOMContentLoaded', wrappedFn_1, false);\r\n            // fallback to onload.\r\n            window.addEventListener('load', wrappedFn_1, false);\r\n        }\r\n        else if (document.attachEvent) {\r\n            // IE.\r\n            document.attachEvent('onreadystatechange', function () {\r\n                if (document.readyState === 'complete')\r\n                    wrappedFn_1();\r\n            });\r\n            // fallback to onload.\r\n            window.attachEvent('onload', wrappedFn_1);\r\n            // jQuery has an extra hack for IE that we could employ (based on\r\n            // http://javascript.nwbox.com/IEContentLoaded/) But it looks really old.\r\n            // I'm hoping we don't need it.\r\n        }\r\n    }\r\n};\r\n/**\r\n * Minimum key name. Invalid for actual data, used as a marker to sort before any valid names\r\n * @type {!string}\r\n */\r\nvar MIN_NAME = '[MIN_NAME]';\r\n/**\r\n * Maximum key name. Invalid for actual data, used as a marker to sort above any valid names\r\n * @type {!string}\r\n */\r\nvar MAX_NAME = '[MAX_NAME]';\r\n/**\r\n * Compares valid Firebase key names, plus min and max name\r\n * @param {!string} a\r\n * @param {!string} b\r\n * @return {!number}\r\n */\r\nvar nameCompare = function (a, b) {\r\n    if (a === b) {\r\n        return 0;\r\n    }\r\n    else if (a === MIN_NAME || b === MAX_NAME) {\r\n        return -1;\r\n    }\r\n    else if (b === MIN_NAME || a === MAX_NAME) {\r\n        return 1;\r\n    }\r\n    else {\r\n        var aAsInt = tryParseInt(a), bAsInt = tryParseInt(b);\r\n        if (aAsInt !== null) {\r\n            if (bAsInt !== null) {\r\n                return aAsInt - bAsInt == 0 ? a.length - b.length : aAsInt - bAsInt;\r\n            }\r\n            else {\r\n                return -1;\r\n            }\r\n        }\r\n        else if (bAsInt !== null) {\r\n            return 1;\r\n        }\r\n        else {\r\n            return a < b ? -1 : 1;\r\n        }\r\n    }\r\n};\r\n/**\r\n * @param {!string} a\r\n * @param {!string} b\r\n * @return {!number} comparison result.\r\n */\r\nvar stringCompare = function (a, b) {\r\n    if (a === b) {\r\n        return 0;\r\n    }\r\n    else if (a < b) {\r\n        return -1;\r\n    }\r\n    else {\r\n        return 1;\r\n    }\r\n};\r\n/**\r\n * @param {string} key\r\n * @param {Object} obj\r\n * @return {*}\r\n */\r\nvar requireKey = function (key, obj) {\r\n    if (obj && key in obj) {\r\n        return obj[key];\r\n    }\r\n    else {\r\n        throw new Error('Missing required key (' + key + ') in object: ' + util.stringify(obj));\r\n    }\r\n};\r\n/**\r\n * @param {*} obj\r\n * @return {string}\r\n */\r\nvar ObjectToUniqueKey = function (obj) {\r\n    if (typeof obj !== 'object' || obj === null)\r\n        return util.stringify(obj);\r\n    var keys = [];\r\n    for (var k in obj) {\r\n        keys.push(k);\r\n    }\r\n    // Export as json, but with the keys sorted.\r\n    keys.sort();\r\n    var key = '{';\r\n    for (var i = 0; i < keys.length; i++) {\r\n        if (i !== 0)\r\n            key += ',';\r\n        key += util.stringify(keys[i]);\r\n        key += ':';\r\n        key += ObjectToUniqueKey(obj[keys[i]]);\r\n    }\r\n    key += '}';\r\n    return key;\r\n};\r\n/**\r\n * Splits a string into a number of smaller segments of maximum size\r\n * @param {!string} str The string\r\n * @param {!number} segsize The maximum number of chars in the string.\r\n * @return {Array.<string>} The string, split into appropriately-sized chunks\r\n */\r\nvar splitStringBySize = function (str, segsize) {\r\n    var len = str.length;\r\n    if (len <= segsize) {\r\n        return [str];\r\n    }\r\n    var dataSegs = [];\r\n    for (var c = 0; c < len; c += segsize) {\r\n        if (c + segsize > len) {\r\n            dataSegs.push(str.substring(c, len));\r\n        }\r\n        else {\r\n            dataSegs.push(str.substring(c, c + segsize));\r\n        }\r\n    }\r\n    return dataSegs;\r\n};\r\n/**\r\n * Apply a function to each (key, value) pair in an object or\r\n * apply a function to each (index, value) pair in an array\r\n * @param {!(Object|Array)} obj The object or array to iterate over\r\n * @param {function(?, ?)} fn The function to apply\r\n */\r\nvar each = function (obj, fn) {\r\n    if (Array.isArray(obj)) {\r\n        for (var i = 0; i < obj.length; ++i) {\r\n            fn(i, obj[i]);\r\n        }\r\n    }\r\n    else {\r\n        /**\r\n         * in the conversion of code we removed the goog.object.forEach\r\n         * function which did a value,key callback. We standardized on\r\n         * a single impl that does a key, value callback. So we invert\r\n         * to not have to touch the `each` code points\r\n         */\r\n        util.forEach(obj, function (key, val) { return fn(val, key); });\r\n    }\r\n};\r\n/**\r\n * Borrowed from http://hg.secondlife.com/llsd/src/tip/js/typedarray.js (MIT License)\r\n * I made one modification at the end and removed the NaN / Infinity\r\n * handling (since it seemed broken [caused an overflow] and we don't need it).  See MJL comments.\r\n * @param {!number} v A double\r\n * @return {string}\r\n */\r\nvar doubleToIEEE754String = function (v) {\r\n    util.assert(!isInvalidJSONNumber(v), 'Invalid JSON number'); // MJL\r\n    var ebits = 11, fbits = 52;\r\n    var bias = (1 << (ebits - 1)) - 1, s, e, f, ln, i, bits, str;\r\n    // Compute sign, exponent, fraction\r\n    // Skip NaN / Infinity handling --MJL.\r\n    if (v === 0) {\r\n        e = 0;\r\n        f = 0;\r\n        s = 1 / v === -Infinity ? 1 : 0;\r\n    }\r\n    else {\r\n        s = v < 0;\r\n        v = Math.abs(v);\r\n        if (v >= Math.pow(2, 1 - bias)) {\r\n            // Normalized\r\n            ln = Math.min(Math.floor(Math.log(v) / Math.LN2), bias);\r\n            e = ln + bias;\r\n            f = Math.round(v * Math.pow(2, fbits - ln) - Math.pow(2, fbits));\r\n        }\r\n        else {\r\n            // Denormalized\r\n            e = 0;\r\n            f = Math.round(v / Math.pow(2, 1 - bias - fbits));\r\n        }\r\n    }\r\n    // Pack sign, exponent, fraction\r\n    bits = [];\r\n    for (i = fbits; i; i -= 1) {\r\n        bits.push(f % 2 ? 1 : 0);\r\n        f = Math.floor(f / 2);\r\n    }\r\n    for (i = ebits; i; i -= 1) {\r\n        bits.push(e % 2 ? 1 : 0);\r\n        e = Math.floor(e / 2);\r\n    }\r\n    bits.push(s ? 1 : 0);\r\n    bits.reverse();\r\n    str = bits.join('');\r\n    // Return the data as a hex string. --MJL\r\n    var hexByteString = '';\r\n    for (i = 0; i < 64; i += 8) {\r\n        var hexByte = parseInt(str.substr(i, 8), 2).toString(16);\r\n        if (hexByte.length === 1)\r\n            hexByte = '0' + hexByte;\r\n        hexByteString = hexByteString + hexByte;\r\n    }\r\n    return hexByteString.toLowerCase();\r\n};\r\n/**\r\n * Used to detect if we're in a Chrome content script (which executes in an\r\n * isolated environment where long-polling doesn't work).\r\n * @return {boolean}\r\n */\r\nvar isChromeExtensionContentScript = function () {\r\n    return !!(typeof window === 'object' &&\r\n        window['chrome'] &&\r\n        window['chrome']['extension'] &&\r\n        !/^chrome/.test(window.location.href));\r\n};\r\n/**\r\n * Used to detect if we're in a Windows 8 Store app.\r\n * @return {boolean}\r\n */\r\nvar isWindowsStoreApp = function () {\r\n    // Check for the presence of a couple WinRT globals\r\n    return typeof Windows === 'object' && typeof Windows.UI === 'object';\r\n};\r\n/**\r\n * Converts a server error code to a Javascript Error\r\n * @param {!string} code\r\n * @param {!Query} query\r\n * @return {Error}\r\n */\r\nvar errorForServerCode = function (code, query) {\r\n    var reason = 'Unknown Error';\r\n    if (code === 'too_big') {\r\n        reason =\r\n            'The data requested exceeds the maximum size ' +\r\n                'that can be accessed with a single request.';\r\n    }\r\n    else if (code == 'permission_denied') {\r\n        reason = \"Client doesn't have permission to access the desired data.\";\r\n    }\r\n    else if (code == 'unavailable') {\r\n        reason = 'The service is unavailable';\r\n    }\r\n    var error = new Error(code + ' at ' + query.path.toString() + ': ' + reason);\r\n    error.code = code.toUpperCase();\r\n    return error;\r\n};\r\n/**\r\n * Used to test for integer-looking strings\r\n * @type {RegExp}\r\n * @private\r\n */\r\nvar INTEGER_REGEXP_ = new RegExp('^-?\\\\d{1,10}$');\r\n/**\r\n * If the string contains a 32-bit integer, return it.  Else return null.\r\n * @param {!string} str\r\n * @return {?number}\r\n */\r\nvar tryParseInt = function (str) {\r\n    if (INTEGER_REGEXP_.test(str)) {\r\n        var intVal = Number(str);\r\n        if (intVal >= -2147483648 && intVal <= 2147483647) {\r\n            return intVal;\r\n        }\r\n    }\r\n    return null;\r\n};\r\n/**\r\n * Helper to run some code but catch any exceptions and re-throw them later.\r\n * Useful for preventing user callbacks from breaking internal code.\r\n *\r\n * Re-throwing the exception from a setTimeout is a little evil, but it's very\r\n * convenient (we don't have to try to figure out when is a safe point to\r\n * re-throw it), and the behavior seems reasonable:\r\n *\r\n * * If you aren't pausing on exceptions, you get an error in the console with\r\n *   the correct stack trace.\r\n * * If you're pausing on all exceptions, the debugger will pause on your\r\n *   exception and then again when we rethrow it.\r\n * * If you're only pausing on uncaught exceptions, the debugger will only pause\r\n *   on us re-throwing it.\r\n *\r\n * @param {!function()} fn The code to guard.\r\n */\r\nvar exceptionGuard = function (fn) {\r\n    try {\r\n        fn();\r\n    }\r\n    catch (e) {\r\n        // Re-throw exception when it's safe.\r\n        setTimeout(function () {\r\n            // It used to be that \"throw e\" would result in a good console error with\r\n            // relevant context, but as of Chrome 39, you just get the firebase.js\r\n            // file/line number where we re-throw it, which is useless. So we log\r\n            // e.stack explicitly.\r\n            var stack = e.stack || '';\r\n            warn('Exception was thrown by user callback.', stack);\r\n            throw e;\r\n        }, Math.floor(0));\r\n    }\r\n};\r\n/**\r\n * @return {boolean} true if we think we're currently being crawled.\r\n */\r\nvar beingCrawled = function () {\r\n    var userAgent = (typeof window === 'object' &&\r\n        window['navigator'] &&\r\n        window['navigator']['userAgent']) ||\r\n        '';\r\n    // For now we whitelist the most popular crawlers.  We should refine this to be the set of crawlers we\r\n    // believe to support JavaScript/AJAX rendering.\r\n    // NOTE: Google Webmaster Tools doesn't really belong, but their \"This is how a visitor to your website\r\n    // would have seen the page\" is flaky if we don't treat it as a crawler.\r\n    return (userAgent.search(/googlebot|google webmaster tools|bingbot|yahoo! slurp|baiduspider|yandexbot|duckduckbot/i) >= 0);\r\n};\r\n/**\r\n * Same as setTimeout() except on Node.JS it will /not/ prevent the process from exiting.\r\n *\r\n * It is removed with clearTimeout() as normal.\r\n *\r\n * @param {Function} fn Function to run.\r\n * @param {number} time Milliseconds to wait before running.\r\n * @return {number|Object} The setTimeout() return value.\r\n */\r\nvar setTimeoutNonBlocking = function (fn, time) {\r\n    var timeout = setTimeout(fn, time);\r\n    if (typeof timeout === 'object' && timeout['unref']) {\r\n        timeout['unref']();\r\n    }\r\n    return timeout;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An immutable object representing a parsed path.  It's immutable so that you\r\n * can pass them around to other functions without worrying about them changing\r\n * it.\r\n */\r\nvar Path = /** @class */ (function () {\r\n    /**\r\n     * @param {string|Array.<string>} pathOrString Path string to parse,\r\n     *      or another path, or the raw tokens array\r\n     * @param {number=} pieceNum\r\n     */\r\n    function Path(pathOrString, pieceNum) {\r\n        if (pieceNum === void 0) {\r\n            this.pieces_ = pathOrString.split('/');\r\n            // Remove empty pieces.\r\n            var copyTo = 0;\r\n            for (var i = 0; i < this.pieces_.length; i++) {\r\n                if (this.pieces_[i].length > 0) {\r\n                    this.pieces_[copyTo] = this.pieces_[i];\r\n                    copyTo++;\r\n                }\r\n            }\r\n            this.pieces_.length = copyTo;\r\n            this.pieceNum_ = 0;\r\n        }\r\n        else {\r\n            this.pieces_ = pathOrString;\r\n            this.pieceNum_ = pieceNum;\r\n        }\r\n    }\r\n    Object.defineProperty(Path, \"Empty\", {\r\n        /**\r\n         * Singleton to represent an empty path\r\n         *\r\n         * @const\r\n         */\r\n        get: function () {\r\n            return new Path('');\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Path.prototype.getFront = function () {\r\n        if (this.pieceNum_ >= this.pieces_.length)\r\n            return null;\r\n        return this.pieces_[this.pieceNum_];\r\n    };\r\n    /**\r\n     * @return {number} The number of segments in this path\r\n     */\r\n    Path.prototype.getLength = function () {\r\n        return this.pieces_.length - this.pieceNum_;\r\n    };\r\n    /**\r\n     * @return {!Path}\r\n     */\r\n    Path.prototype.popFront = function () {\r\n        var pieceNum = this.pieceNum_;\r\n        if (pieceNum < this.pieces_.length) {\r\n            pieceNum++;\r\n        }\r\n        return new Path(this.pieces_, pieceNum);\r\n    };\r\n    /**\r\n     * @return {?string}\r\n     */\r\n    Path.prototype.getBack = function () {\r\n        if (this.pieceNum_ < this.pieces_.length)\r\n            return this.pieces_[this.pieces_.length - 1];\r\n        return null;\r\n    };\r\n    Path.prototype.toString = function () {\r\n        var pathString = '';\r\n        for (var i = this.pieceNum_; i < this.pieces_.length; i++) {\r\n            if (this.pieces_[i] !== '')\r\n                pathString += '/' + this.pieces_[i];\r\n        }\r\n        return pathString || '/';\r\n    };\r\n    Path.prototype.toUrlEncodedString = function () {\r\n        var pathString = '';\r\n        for (var i = this.pieceNum_; i < this.pieces_.length; i++) {\r\n            if (this.pieces_[i] !== '')\r\n                pathString += '/' + encodeURIComponent(String(this.pieces_[i]));\r\n        }\r\n        return pathString || '/';\r\n    };\r\n    /**\r\n     * Shallow copy of the parts of the path.\r\n     *\r\n     * @param {number=} begin\r\n     * @return {!Array<string>}\r\n     */\r\n    Path.prototype.slice = function (begin) {\r\n        if (begin === void 0) { begin = 0; }\r\n        return this.pieces_.slice(this.pieceNum_ + begin);\r\n    };\r\n    /**\r\n     * @return {?Path}\r\n     */\r\n    Path.prototype.parent = function () {\r\n        if (this.pieceNum_ >= this.pieces_.length)\r\n            return null;\r\n        var pieces = [];\r\n        for (var i = this.pieceNum_; i < this.pieces_.length - 1; i++)\r\n            pieces.push(this.pieces_[i]);\r\n        return new Path(pieces, 0);\r\n    };\r\n    /**\r\n     * @param {string|!Path} childPathObj\r\n     * @return {!Path}\r\n     */\r\n    Path.prototype.child = function (childPathObj) {\r\n        var pieces = [];\r\n        for (var i = this.pieceNum_; i < this.pieces_.length; i++)\r\n            pieces.push(this.pieces_[i]);\r\n        if (childPathObj instanceof Path) {\r\n            for (var i = childPathObj.pieceNum_; i < childPathObj.pieces_.length; i++) {\r\n                pieces.push(childPathObj.pieces_[i]);\r\n            }\r\n        }\r\n        else {\r\n            var childPieces = childPathObj.split('/');\r\n            for (var i = 0; i < childPieces.length; i++) {\r\n                if (childPieces[i].length > 0)\r\n                    pieces.push(childPieces[i]);\r\n            }\r\n        }\r\n        return new Path(pieces, 0);\r\n    };\r\n    /**\r\n     * @return {boolean} True if there are no segments in this path\r\n     */\r\n    Path.prototype.isEmpty = function () {\r\n        return this.pieceNum_ >= this.pieces_.length;\r\n    };\r\n    /**\r\n     * @param {!Path} outerPath\r\n     * @param {!Path} innerPath\r\n     * @return {!Path} The path from outerPath to innerPath\r\n     */\r\n    Path.relativePath = function (outerPath, innerPath) {\r\n        var outer = outerPath.getFront(), inner = innerPath.getFront();\r\n        if (outer === null) {\r\n            return innerPath;\r\n        }\r\n        else if (outer === inner) {\r\n            return Path.relativePath(outerPath.popFront(), innerPath.popFront());\r\n        }\r\n        else {\r\n            throw new Error('INTERNAL ERROR: innerPath (' +\r\n                innerPath +\r\n                ') is not within ' +\r\n                'outerPath (' +\r\n                outerPath +\r\n                ')');\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Path} left\r\n     * @param {!Path} right\r\n     * @return {number} -1, 0, 1 if left is less, equal, or greater than the right.\r\n     */\r\n    Path.comparePaths = function (left, right) {\r\n        var leftKeys = left.slice();\r\n        var rightKeys = right.slice();\r\n        for (var i = 0; i < leftKeys.length && i < rightKeys.length; i++) {\r\n            var cmp = nameCompare(leftKeys[i], rightKeys[i]);\r\n            if (cmp !== 0)\r\n                return cmp;\r\n        }\r\n        if (leftKeys.length === rightKeys.length)\r\n            return 0;\r\n        return leftKeys.length < rightKeys.length ? -1 : 1;\r\n    };\r\n    /**\r\n     *\r\n     * @param {Path} other\r\n     * @return {boolean} true if paths are the same.\r\n     */\r\n    Path.prototype.equals = function (other) {\r\n        if (this.getLength() !== other.getLength()) {\r\n            return false;\r\n        }\r\n        for (var i = this.pieceNum_, j = other.pieceNum_; i <= this.pieces_.length; i++, j++) {\r\n            if (this.pieces_[i] !== other.pieces_[j]) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    /**\r\n     *\r\n     * @param {!Path} other\r\n     * @return {boolean} True if this path is a parent (or the same as) other\r\n     */\r\n    Path.prototype.contains = function (other) {\r\n        var i = this.pieceNum_;\r\n        var j = other.pieceNum_;\r\n        if (this.getLength() > other.getLength()) {\r\n            return false;\r\n        }\r\n        while (i < this.pieces_.length) {\r\n            if (this.pieces_[i] !== other.pieces_[j]) {\r\n                return false;\r\n            }\r\n            ++i;\r\n            ++j;\r\n        }\r\n        return true;\r\n    };\r\n    return Path;\r\n}()); // end Path\r\n/**\r\n * Dynamic (mutable) path used to count path lengths.\r\n *\r\n * This class is used to efficiently check paths for valid\r\n * length (in UTF8 bytes) and depth (used in path validation).\r\n *\r\n * Throws Error exception if path is ever invalid.\r\n *\r\n * The definition of a path always begins with '/'.\r\n */\r\nvar ValidationPath = /** @class */ (function () {\r\n    /**\r\n     * @param {!Path} path Initial Path.\r\n     * @param {string} errorPrefix_ Prefix for any error messages.\r\n     */\r\n    function ValidationPath(path, errorPrefix_) {\r\n        this.errorPrefix_ = errorPrefix_;\r\n        /** @type {!Array<string>} */\r\n        this.parts_ = path.slice();\r\n        /** @type {number} Initialize to number of '/' chars needed in path. */\r\n        this.byteLength_ = Math.max(1, this.parts_.length);\r\n        for (var i = 0; i < this.parts_.length; i++) {\r\n            this.byteLength_ += util.stringLength(this.parts_[i]);\r\n        }\r\n        this.checkValid_();\r\n    }\r\n    Object.defineProperty(ValidationPath, \"MAX_PATH_DEPTH\", {\r\n        /** @const {number} Maximum key depth. */\r\n        get: function () {\r\n            return 32;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(ValidationPath, \"MAX_PATH_LENGTH_BYTES\", {\r\n        /** @const {number} Maximum number of (UTF8) bytes in a Firebase path. */\r\n        get: function () {\r\n            return 768;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /** @param {string} child */\r\n    ValidationPath.prototype.push = function (child) {\r\n        // Count the needed '/'\r\n        if (this.parts_.length > 0) {\r\n            this.byteLength_ += 1;\r\n        }\r\n        this.parts_.push(child);\r\n        this.byteLength_ += util.stringLength(child);\r\n        this.checkValid_();\r\n    };\r\n    ValidationPath.prototype.pop = function () {\r\n        var last = this.parts_.pop();\r\n        this.byteLength_ -= util.stringLength(last);\r\n        // Un-count the previous '/'\r\n        if (this.parts_.length > 0) {\r\n            this.byteLength_ -= 1;\r\n        }\r\n    };\r\n    ValidationPath.prototype.checkValid_ = function () {\r\n        if (this.byteLength_ > ValidationPath.MAX_PATH_LENGTH_BYTES) {\r\n            throw new Error(this.errorPrefix_ +\r\n                'has a key path longer than ' +\r\n                ValidationPath.MAX_PATH_LENGTH_BYTES +\r\n                ' bytes (' +\r\n                this.byteLength_ +\r\n                ').');\r\n        }\r\n        if (this.parts_.length > ValidationPath.MAX_PATH_DEPTH) {\r\n            throw new Error(this.errorPrefix_ +\r\n                'path specified exceeds the maximum depth that can be written (' +\r\n                ValidationPath.MAX_PATH_DEPTH +\r\n                ') or object contains a cycle ' +\r\n                this.toErrorString());\r\n        }\r\n    };\r\n    /**\r\n     * String for use in error messages - uses '.' notation for path.\r\n     *\r\n     * @return {string}\r\n     */\r\n    ValidationPath.prototype.toErrorString = function () {\r\n        if (this.parts_.length == 0) {\r\n            return '';\r\n        }\r\n        return \"in property '\" + this.parts_.join('.') + \"'\";\r\n    };\r\n    return ValidationPath;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar PROTOCOL_VERSION = '5';\r\nvar VERSION_PARAM = 'v';\r\nvar TRANSPORT_SESSION_PARAM = 's';\r\nvar REFERER_PARAM = 'r';\r\nvar FORGE_REF = 'f';\r\nvar FORGE_DOMAIN = 'firebaseio.com';\r\nvar LAST_SESSION_PARAM = 'ls';\r\nvar WEBSOCKET = 'websocket';\r\nvar LONG_POLLING = 'long_polling';\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A class that holds metadata about a Repo object\r\n *\r\n * @constructor\r\n */\r\nvar RepoInfo = /** @class */ (function () {\r\n    /**\r\n     * @param {string} host Hostname portion of the url for the repo\r\n     * @param {boolean} secure Whether or not this repo is accessed over ssl\r\n     * @param {string} namespace The namespace represented by the repo\r\n     * @param {boolean} webSocketOnly Whether to prefer websockets over all other transports (used by Nest).\r\n     * @param {string=} persistenceKey Override the default session persistence storage key\r\n     */\r\n    function RepoInfo(host, secure, namespace, webSocketOnly, persistenceKey) {\r\n        if (persistenceKey === void 0) { persistenceKey = ''; }\r\n        this.secure = secure;\r\n        this.namespace = namespace;\r\n        this.webSocketOnly = webSocketOnly;\r\n        this.persistenceKey = persistenceKey;\r\n        this.host = host.toLowerCase();\r\n        this.domain = this.host.substr(this.host.indexOf('.') + 1);\r\n        this.internalHost = PersistentStorage.get('host:' + host) || this.host;\r\n    }\r\n    RepoInfo.prototype.needsQueryParam = function () {\r\n        return this.host !== this.internalHost || this.isCustomHost();\r\n    };\r\n    RepoInfo.prototype.isCacheableHost = function () {\r\n        return this.internalHost.substr(0, 2) === 's-';\r\n    };\r\n    RepoInfo.prototype.isDemoHost = function () {\r\n        return this.domain === 'firebaseio-demo.com';\r\n    };\r\n    RepoInfo.prototype.isCustomHost = function () {\r\n        return (this.domain !== 'firebaseio.com' && this.domain !== 'firebaseio-demo.com');\r\n    };\r\n    RepoInfo.prototype.updateHost = function (newHost) {\r\n        if (newHost !== this.internalHost) {\r\n            this.internalHost = newHost;\r\n            if (this.isCacheableHost()) {\r\n                PersistentStorage.set('host:' + this.host, this.internalHost);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Returns the websocket URL for this repo\r\n     * @param {string} type of connection\r\n     * @param {Object} params list\r\n     * @return {string} The URL for this repo\r\n     */\r\n    RepoInfo.prototype.connectionURL = function (type, params) {\r\n        util.assert(typeof type === 'string', 'typeof type must == string');\r\n        util.assert(typeof params === 'object', 'typeof params must == object');\r\n        var connURL;\r\n        if (type === WEBSOCKET) {\r\n            connURL =\r\n                (this.secure ? 'wss://' : 'ws://') + this.internalHost + '/.ws?';\r\n        }\r\n        else if (type === LONG_POLLING) {\r\n            connURL =\r\n                (this.secure ? 'https://' : 'http://') + this.internalHost + '/.lp?';\r\n        }\r\n        else {\r\n            throw new Error('Unknown connection type: ' + type);\r\n        }\r\n        if (this.needsQueryParam()) {\r\n            params['ns'] = this.namespace;\r\n        }\r\n        var pairs = [];\r\n        util.forEach(params, function (key, value) {\r\n            pairs.push(key + '=' + value);\r\n        });\r\n        return connURL + pairs.join('&');\r\n    };\r\n    /** @return {string} */\r\n    RepoInfo.prototype.toString = function () {\r\n        var str = this.toURLString();\r\n        if (this.persistenceKey) {\r\n            str += '<' + this.persistenceKey + '>';\r\n        }\r\n        return str;\r\n    };\r\n    /** @return {string} */\r\n    RepoInfo.prototype.toURLString = function () {\r\n        return (this.secure ? 'https://' : 'http://') + this.host;\r\n    };\r\n    return RepoInfo;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param {!string} pathString\r\n * @return {string}\r\n */\r\nfunction decodePath(pathString) {\r\n    var pathStringDecoded = '';\r\n    var pieces = pathString.split('/');\r\n    for (var i = 0; i < pieces.length; i++) {\r\n        if (pieces[i].length > 0) {\r\n            var piece = pieces[i];\r\n            try {\r\n                piece = decodeURIComponent(piece.replace(/\\+/g, ' '));\r\n            }\r\n            catch (e) { }\r\n            pathStringDecoded += '/' + piece;\r\n        }\r\n    }\r\n    return pathStringDecoded;\r\n}\r\n/**\r\n * @param {!string} queryString\r\n * @return {!{[key:string]:string}} key value hash\r\n */\r\nfunction decodeQuery(queryString) {\r\n    var results = {};\r\n    if (queryString.charAt(0) === '?') {\r\n        queryString = queryString.substring(1);\r\n    }\r\n    for (var _i = 0, _a = queryString.split('&'); _i < _a.length; _i++) {\r\n        var segment = _a[_i];\r\n        if (segment.length === 0) {\r\n            continue;\r\n        }\r\n        var kv = segment.split('=');\r\n        if (kv.length === 2) {\r\n            results[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);\r\n        }\r\n        else {\r\n            warn(\"Invalid query segment '\" + segment + \"' in query '\" + queryString + \"'\");\r\n        }\r\n    }\r\n    return results;\r\n}\r\n/**\r\n *\r\n * @param {!string} dataURL\r\n * @return {{repoInfo: !RepoInfo, path: !Path}}\r\n */\r\nvar parseRepoInfo = function (dataURL) {\r\n    var parsedUrl = parseURL(dataURL), namespace = parsedUrl.subdomain;\r\n    if (parsedUrl.domain === 'firebase') {\r\n        fatal(parsedUrl.host +\r\n            ' is no longer supported. ' +\r\n            'Please use <YOUR FIREBASE>.firebaseio.com instead');\r\n    }\r\n    // Catch common error of uninitialized namespace value.\r\n    if ((!namespace || namespace == 'undefined') &&\r\n        parsedUrl.domain !== 'localhost') {\r\n        fatal('Cannot parse Firebase url. Please use https://<YOUR FIREBASE>.firebaseio.com');\r\n    }\r\n    if (!parsedUrl.secure) {\r\n        warnIfPageIsSecure();\r\n    }\r\n    var webSocketOnly = parsedUrl.scheme === 'ws' || parsedUrl.scheme === 'wss';\r\n    return {\r\n        repoInfo: new RepoInfo(parsedUrl.host, parsedUrl.secure, namespace, webSocketOnly),\r\n        path: new Path(parsedUrl.pathString)\r\n    };\r\n};\r\n/**\r\n *\r\n * @param {!string} dataURL\r\n * @return {{host: string, port: number, domain: string, subdomain: string, secure: boolean, scheme: string, pathString: string}}\r\n */\r\nvar parseURL = function (dataURL) {\r\n    // Default to empty strings in the event of a malformed string.\r\n    var host = '', domain = '', subdomain = '', pathString = '';\r\n    // Always default to SSL, unless otherwise specified.\r\n    var secure = true, scheme = 'https', port = 443;\r\n    // Don't do any validation here. The caller is responsible for validating the result of parsing.\r\n    if (typeof dataURL === 'string') {\r\n        // Parse scheme.\r\n        var colonInd = dataURL.indexOf('//');\r\n        if (colonInd >= 0) {\r\n            scheme = dataURL.substring(0, colonInd - 1);\r\n            dataURL = dataURL.substring(colonInd + 2);\r\n        }\r\n        // Parse host, path, and query string.\r\n        var slashInd = dataURL.indexOf('/');\r\n        if (slashInd === -1) {\r\n            slashInd = dataURL.length;\r\n        }\r\n        var questionMarkInd = dataURL.indexOf('?');\r\n        if (questionMarkInd === -1) {\r\n            questionMarkInd = dataURL.length;\r\n        }\r\n        host = dataURL.substring(0, Math.min(slashInd, questionMarkInd));\r\n        if (slashInd < questionMarkInd) {\r\n            // For pathString, questionMarkInd will always come after slashInd\r\n            pathString = decodePath(dataURL.substring(slashInd, questionMarkInd));\r\n        }\r\n        var queryParams = decodeQuery(dataURL.substring(Math.min(dataURL.length, questionMarkInd)));\r\n        // If we have a port, use scheme for determining if it's secure.\r\n        colonInd = host.indexOf(':');\r\n        if (colonInd >= 0) {\r\n            secure = scheme === 'https' || scheme === 'wss';\r\n            port = parseInt(host.substring(colonInd + 1), 10);\r\n        }\r\n        else {\r\n            colonInd = dataURL.length;\r\n        }\r\n        var parts = host.split('.');\r\n        if (parts.length === 3) {\r\n            // Normalize namespaces to lowercase to share storage / connection.\r\n            domain = parts[1];\r\n            subdomain = parts[0].toLowerCase();\r\n        }\r\n        else if (parts.length === 2) {\r\n            domain = parts[0];\r\n        }\r\n        else if (parts[0].slice(0, colonInd).toLowerCase() === 'localhost') {\r\n            domain = 'localhost';\r\n        }\r\n        // Support `ns` query param if subdomain not already set\r\n        if (subdomain === '' && 'ns' in queryParams) {\r\n            subdomain = queryParams['ns'];\r\n        }\r\n    }\r\n    return {\r\n        host: host,\r\n        port: port,\r\n        domain: domain,\r\n        subdomain: subdomain,\r\n        secure: secure,\r\n        scheme: scheme,\r\n        pathString: pathString\r\n    };\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * True for invalid Firebase keys\r\n * @type {RegExp}\r\n * @private\r\n */\r\nvar INVALID_KEY_REGEX_ = /[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * True for invalid Firebase paths.\r\n * Allows '/' in paths.\r\n * @type {RegExp}\r\n * @private\r\n */\r\nvar INVALID_PATH_REGEX_ = /[\\[\\].#$\\u0000-\\u001F\\u007F]/;\r\n/**\r\n * Maximum number of characters to allow in leaf value\r\n * @type {number}\r\n * @private\r\n */\r\nvar MAX_LEAF_SIZE_ = 10 * 1024 * 1024;\r\n/**\r\n * @param {*} key\r\n * @return {boolean}\r\n */\r\nvar isValidKey = function (key) {\r\n    return (typeof key === 'string' && key.length !== 0 && !INVALID_KEY_REGEX_.test(key));\r\n};\r\n/**\r\n * @param {string} pathString\r\n * @return {boolean}\r\n */\r\nvar isValidPathString = function (pathString) {\r\n    return (typeof pathString === 'string' &&\r\n        pathString.length !== 0 &&\r\n        !INVALID_PATH_REGEX_.test(pathString));\r\n};\r\n/**\r\n * @param {string} pathString\r\n * @return {boolean}\r\n */\r\nvar isValidRootPathString = function (pathString) {\r\n    if (pathString) {\r\n        // Allow '/.info/' at the beginning.\r\n        pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n    }\r\n    return isValidPathString(pathString);\r\n};\r\n/**\r\n * @param {*} priority\r\n * @return {boolean}\r\n */\r\nvar isValidPriority = function (priority) {\r\n    return (priority === null ||\r\n        typeof priority === 'string' ||\r\n        (typeof priority === 'number' && !isInvalidJSONNumber(priority)) ||\r\n        (priority && typeof priority === 'object' && util.contains(priority, '.sv')));\r\n};\r\n/**\r\n * Pre-validate a datum passed as an argument to Firebase function.\r\n *\r\n * @param {string} fnName\r\n * @param {number} argumentNumber\r\n * @param {*} data\r\n * @param {!Path} path\r\n * @param {boolean} optional\r\n */\r\nvar validateFirebaseDataArg = function (fnName, argumentNumber, data, path, optional) {\r\n    if (optional && data === undefined)\r\n        return;\r\n    validateFirebaseData(util.errorPrefix(fnName, argumentNumber, optional), data, path);\r\n};\r\n/**\r\n * Validate a data object client-side before sending to server.\r\n *\r\n * @param {string} errorPrefix\r\n * @param {*} data\r\n * @param {!Path|!ValidationPath} path_\r\n */\r\nvar validateFirebaseData = function (errorPrefix, data, path_) {\r\n    var path = path_ instanceof Path ? new ValidationPath(path_, errorPrefix) : path_;\r\n    if (data === undefined) {\r\n        throw new Error(errorPrefix + 'contains undefined ' + path.toErrorString());\r\n    }\r\n    if (typeof data === 'function') {\r\n        throw new Error(errorPrefix +\r\n            'contains a function ' +\r\n            path.toErrorString() +\r\n            ' with contents = ' +\r\n            data.toString());\r\n    }\r\n    if (isInvalidJSONNumber(data)) {\r\n        throw new Error(errorPrefix + 'contains ' + data.toString() + ' ' + path.toErrorString());\r\n    }\r\n    // Check max leaf size, but try to avoid the utf8 conversion if we can.\r\n    if (typeof data === 'string' &&\r\n        data.length > MAX_LEAF_SIZE_ / 3 &&\r\n        util.stringLength(data) > MAX_LEAF_SIZE_) {\r\n        throw new Error(errorPrefix +\r\n            'contains a string greater than ' +\r\n            MAX_LEAF_SIZE_ +\r\n            ' utf8 bytes ' +\r\n            path.toErrorString() +\r\n            \" ('\" +\r\n            data.substring(0, 50) +\r\n            \"...')\");\r\n    }\r\n    // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON\r\n    // to save extra walking of large objects.\r\n    if (data && typeof data === 'object') {\r\n        var hasDotValue_1 = false, hasActualChild_1 = false;\r\n        util.forEach(data, function (key, value) {\r\n            if (key === '.value') {\r\n                hasDotValue_1 = true;\r\n            }\r\n            else if (key !== '.priority' && key !== '.sv') {\r\n                hasActualChild_1 = true;\r\n                if (!isValidKey(key)) {\r\n                    throw new Error(errorPrefix +\r\n                        ' contains an invalid key (' +\r\n                        key +\r\n                        ') ' +\r\n                        path.toErrorString() +\r\n                        '.  Keys must be non-empty strings ' +\r\n                        'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n                }\r\n            }\r\n            path.push(key);\r\n            validateFirebaseData(errorPrefix, value, path);\r\n            path.pop();\r\n        });\r\n        if (hasDotValue_1 && hasActualChild_1) {\r\n            throw new Error(errorPrefix +\r\n                ' contains \".value\" child ' +\r\n                path.toErrorString() +\r\n                ' in addition to actual children.');\r\n        }\r\n    }\r\n};\r\n/**\r\n * Pre-validate paths passed in the firebase function.\r\n *\r\n * @param {string} errorPrefix\r\n * @param {Array<!Path>} mergePaths\r\n */\r\nvar validateFirebaseMergePaths = function (errorPrefix, mergePaths) {\r\n    var i, curPath;\r\n    for (i = 0; i < mergePaths.length; i++) {\r\n        curPath = mergePaths[i];\r\n        var keys = curPath.slice();\r\n        for (var j = 0; j < keys.length; j++) {\r\n            if (keys[j] === '.priority' && j === keys.length - 1) ;\r\n            else if (!isValidKey(keys[j])) {\r\n                throw new Error(errorPrefix +\r\n                    'contains an invalid key (' +\r\n                    keys[j] +\r\n                    ') in path ' +\r\n                    curPath.toString() +\r\n                    '. Keys must be non-empty strings ' +\r\n                    'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n            }\r\n        }\r\n    }\r\n    // Check that update keys are not descendants of each other.\r\n    // We rely on the property that sorting guarantees that ancestors come\r\n    // right before descendants.\r\n    mergePaths.sort(Path.comparePaths);\r\n    var prevPath = null;\r\n    for (i = 0; i < mergePaths.length; i++) {\r\n        curPath = mergePaths[i];\r\n        if (prevPath !== null && prevPath.contains(curPath)) {\r\n            throw new Error(errorPrefix +\r\n                'contains a path ' +\r\n                prevPath.toString() +\r\n                ' that is ancestor of another path ' +\r\n                curPath.toString());\r\n        }\r\n        prevPath = curPath;\r\n    }\r\n};\r\n/**\r\n * pre-validate an object passed as an argument to firebase function (\r\n * must be an object - e.g. for firebase.update()).\r\n *\r\n * @param {string} fnName\r\n * @param {number} argumentNumber\r\n * @param {*} data\r\n * @param {!Path} path\r\n * @param {boolean} optional\r\n */\r\nvar validateFirebaseMergeDataArg = function (fnName, argumentNumber, data, path, optional) {\r\n    if (optional && data === undefined)\r\n        return;\r\n    var errorPrefix = util.errorPrefix(fnName, argumentNumber, optional);\r\n    if (!(data && typeof data === 'object') || Array.isArray(data)) {\r\n        throw new Error(errorPrefix + ' must be an object containing the children to replace.');\r\n    }\r\n    var mergePaths = [];\r\n    util.forEach(data, function (key, value) {\r\n        var curPath = new Path(key);\r\n        validateFirebaseData(errorPrefix, value, path.child(curPath));\r\n        if (curPath.getBack() === '.priority') {\r\n            if (!isValidPriority(value)) {\r\n                throw new Error(errorPrefix +\r\n                    \"contains an invalid value for '\" +\r\n                    curPath.toString() +\r\n                    \"', which must be a valid \" +\r\n                    'Firebase priority (a string, finite number, server value, or null).');\r\n            }\r\n        }\r\n        mergePaths.push(curPath);\r\n    });\r\n    validateFirebaseMergePaths(errorPrefix, mergePaths);\r\n};\r\nvar validatePriority = function (fnName, argumentNumber, priority, optional) {\r\n    if (optional && priority === undefined)\r\n        return;\r\n    if (isInvalidJSONNumber(priority))\r\n        throw new Error(util.errorPrefix(fnName, argumentNumber, optional) +\r\n            'is ' +\r\n            priority.toString() +\r\n            ', but must be a valid Firebase priority (a string, finite number, ' +\r\n            'server value, or null).');\r\n    // Special case to allow importing data with a .sv.\r\n    if (!isValidPriority(priority))\r\n        throw new Error(util.errorPrefix(fnName, argumentNumber, optional) +\r\n            'must be a valid Firebase priority ' +\r\n            '(a string, finite number, server value, or null).');\r\n};\r\nvar validateEventType = function (fnName, argumentNumber, eventType, optional) {\r\n    if (optional && eventType === undefined)\r\n        return;\r\n    switch (eventType) {\r\n        case 'value':\r\n        case 'child_added':\r\n        case 'child_removed':\r\n        case 'child_changed':\r\n        case 'child_moved':\r\n            break;\r\n        default:\r\n            throw new Error(util.errorPrefix(fnName, argumentNumber, optional) +\r\n                'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n                '\"child_changed\", or \"child_moved\".');\r\n    }\r\n};\r\nvar validateKey = function (fnName, argumentNumber, key, optional) {\r\n    if (optional && key === undefined)\r\n        return;\r\n    if (!isValidKey(key))\r\n        throw new Error(util.errorPrefix(fnName, argumentNumber, optional) +\r\n            'was an invalid key = \"' +\r\n            key +\r\n            '\".  Firebase keys must be non-empty strings and ' +\r\n            'can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\").');\r\n};\r\nvar validatePathString = function (fnName, argumentNumber, pathString, optional) {\r\n    if (optional && pathString === undefined)\r\n        return;\r\n    if (!isValidPathString(pathString))\r\n        throw new Error(util.errorPrefix(fnName, argumentNumber, optional) +\r\n            'was an invalid path = \"' +\r\n            pathString +\r\n            '\". Paths must be non-empty strings and ' +\r\n            'can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\"');\r\n};\r\nvar validateRootPathString = function (fnName, argumentNumber, pathString, optional) {\r\n    if (pathString) {\r\n        // Allow '/.info/' at the beginning.\r\n        pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n    }\r\n    validatePathString(fnName, argumentNumber, pathString, optional);\r\n};\r\nvar validateWritablePath = function (fnName, path) {\r\n    if (path.getFront() === '.info') {\r\n        throw new Error(fnName + \" failed = Can't modify data under /.info/\");\r\n    }\r\n};\r\nvar validateUrl = function (fnName, argumentNumber, parsedUrl) {\r\n    // TODO = Validate server better.\r\n    var pathString = parsedUrl.path.toString();\r\n    if (!(typeof parsedUrl.repoInfo.host === 'string') ||\r\n        parsedUrl.repoInfo.host.length === 0 ||\r\n        (!isValidKey(parsedUrl.repoInfo.namespace) &&\r\n            parsedUrl.repoInfo.host.split(':')[0] !== 'localhost') ||\r\n        (pathString.length !== 0 && !isValidRootPathString(pathString))) {\r\n        throw new Error(util.errorPrefix(fnName, argumentNumber, false) +\r\n            'must be a valid firebase URL and ' +\r\n            'the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');\r\n    }\r\n};\r\nvar validateBoolean = function (fnName, argumentNumber, bool, optional) {\r\n    if (optional && bool === undefined)\r\n        return;\r\n    if (typeof bool !== 'boolean')\r\n        throw new Error(util.errorPrefix(fnName, argumentNumber, optional) + 'must be a boolean.');\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @constructor\r\n */\r\nvar OnDisconnect = /** @class */ (function () {\r\n    /**\r\n     * @param {!Repo} repo_\r\n     * @param {!Path} path_\r\n     */\r\n    function OnDisconnect(repo_, path_) {\r\n        this.repo_ = repo_;\r\n        this.path_ = path_;\r\n    }\r\n    /**\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!firebase.Promise}\r\n     */\r\n    OnDisconnect.prototype.cancel = function (onComplete) {\r\n        util.validateArgCount('OnDisconnect.cancel', 0, 1, arguments.length);\r\n        util.validateCallback('OnDisconnect.cancel', 1, onComplete, true);\r\n        var deferred = new util.Deferred();\r\n        this.repo_.onDisconnectCancel(this.path_, deferred.wrapCallback(onComplete));\r\n        return deferred.promise;\r\n    };\r\n    /**\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!firebase.Promise}\r\n     */\r\n    OnDisconnect.prototype.remove = function (onComplete) {\r\n        util.validateArgCount('OnDisconnect.remove', 0, 1, arguments.length);\r\n        validateWritablePath('OnDisconnect.remove', this.path_);\r\n        util.validateCallback('OnDisconnect.remove', 1, onComplete, true);\r\n        var deferred = new util.Deferred();\r\n        this.repo_.onDisconnectSet(this.path_, null, deferred.wrapCallback(onComplete));\r\n        return deferred.promise;\r\n    };\r\n    /**\r\n     * @param {*} value\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!firebase.Promise}\r\n     */\r\n    OnDisconnect.prototype.set = function (value, onComplete) {\r\n        util.validateArgCount('OnDisconnect.set', 1, 2, arguments.length);\r\n        validateWritablePath('OnDisconnect.set', this.path_);\r\n        validateFirebaseDataArg('OnDisconnect.set', 1, value, this.path_, false);\r\n        util.validateCallback('OnDisconnect.set', 2, onComplete, true);\r\n        var deferred = new util.Deferred();\r\n        this.repo_.onDisconnectSet(this.path_, value, deferred.wrapCallback(onComplete));\r\n        return deferred.promise;\r\n    };\r\n    /**\r\n     * @param {*} value\r\n     * @param {number|string|null} priority\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!firebase.Promise}\r\n     */\r\n    OnDisconnect.prototype.setWithPriority = function (value, priority, onComplete) {\r\n        util.validateArgCount('OnDisconnect.setWithPriority', 2, 3, arguments.length);\r\n        validateWritablePath('OnDisconnect.setWithPriority', this.path_);\r\n        validateFirebaseDataArg('OnDisconnect.setWithPriority', 1, value, this.path_, false);\r\n        validatePriority('OnDisconnect.setWithPriority', 2, priority, false);\r\n        util.validateCallback('OnDisconnect.setWithPriority', 3, onComplete, true);\r\n        var deferred = new util.Deferred();\r\n        this.repo_.onDisconnectSetWithPriority(this.path_, value, priority, deferred.wrapCallback(onComplete));\r\n        return deferred.promise;\r\n    };\r\n    /**\r\n     * @param {!Object} objectToMerge\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!firebase.Promise}\r\n     */\r\n    OnDisconnect.prototype.update = function (objectToMerge, onComplete) {\r\n        util.validateArgCount('OnDisconnect.update', 1, 2, arguments.length);\r\n        validateWritablePath('OnDisconnect.update', this.path_);\r\n        if (Array.isArray(objectToMerge)) {\r\n            var newObjectToMerge = {};\r\n            for (var i = 0; i < objectToMerge.length; ++i) {\r\n                newObjectToMerge['' + i] = objectToMerge[i];\r\n            }\r\n            objectToMerge = newObjectToMerge;\r\n            warn('Passing an Array to firebase.database.onDisconnect().update() is deprecated. Use set() if you want to overwrite the ' +\r\n                'existing data, or an Object with integer keys if you really do want to only update some of the children.');\r\n        }\r\n        validateFirebaseMergeDataArg('OnDisconnect.update', 1, objectToMerge, this.path_, false);\r\n        util.validateCallback('OnDisconnect.update', 2, onComplete, true);\r\n        var deferred = new util.Deferred();\r\n        this.repo_.onDisconnectUpdate(this.path_, objectToMerge, deferred.wrapCallback(onComplete));\r\n        return deferred.promise;\r\n    };\r\n    return OnDisconnect;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar TransactionResult = /** @class */ (function () {\r\n    /**\r\n     * A type for the resolve value of Firebase.transaction.\r\n     * @constructor\r\n     * @dict\r\n     * @param {boolean} committed\r\n     * @param {DataSnapshot} snapshot\r\n     */\r\n    function TransactionResult(committed, snapshot) {\r\n        this.committed = committed;\r\n        this.snapshot = snapshot;\r\n    }\r\n    // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n    // for end-users\r\n    TransactionResult.prototype.toJSON = function () {\r\n        util.validateArgCount('TransactionResult.toJSON', 0, 1, arguments.length);\r\n        return { committed: this.committed, snapshot: this.snapshot.toJSON() };\r\n    };\r\n    return TransactionResult;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Fancy ID generator that creates 20-character string identifiers with the\r\n * following properties:\r\n *\r\n * 1. They're based on timestamp so that they sort *after* any existing ids.\r\n * 2. They contain 72-bits of random data after the timestamp so that IDs won't\r\n *    collide with other clients' IDs.\r\n * 3. They sort *lexicographically* (so the timestamp is converted to characters\r\n *    that will sort properly).\r\n * 4. They're monotonically increasing. Even if you generate more than one in\r\n *    the same timestamp, the latter ones will sort after the former ones. We do\r\n *    this by using the previous random bits but \"incrementing\" them by 1 (only\r\n *    in the case of a timestamp collision).\r\n */\r\nvar nextPushId = (function () {\r\n    // Modeled after base64 web-safe chars, but ordered by ASCII.\r\n    var PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';\r\n    // Timestamp of last push, used to prevent local collisions if you push twice\r\n    // in one ms.\r\n    var lastPushTime = 0;\r\n    // We generate 72-bits of randomness which get turned into 12 characters and\r\n    // appended to the timestamp to prevent collisions with other clients. We\r\n    // store the last characters we generated because in the event of a collision,\r\n    // we'll use those same characters except \"incremented\" by one.\r\n    var lastRandChars = [];\r\n    return function (now) {\r\n        var duplicateTime = now === lastPushTime;\r\n        lastPushTime = now;\r\n        var i;\r\n        var timeStampChars = new Array(8);\r\n        for (i = 7; i >= 0; i--) {\r\n            timeStampChars[i] = PUSH_CHARS.charAt(now % 64);\r\n            // NOTE: Can't use << here because javascript will convert to int and lose\r\n            // the upper bits.\r\n            now = Math.floor(now / 64);\r\n        }\r\n        util.assert(now === 0, 'Cannot push at time == 0');\r\n        var id = timeStampChars.join('');\r\n        if (!duplicateTime) {\r\n            for (i = 0; i < 12; i++) {\r\n                lastRandChars[i] = Math.floor(Math.random() * 64);\r\n            }\r\n        }\r\n        else {\r\n            // If the timestamp hasn't changed since last push, use the same random\r\n            // number, except incremented by 1.\r\n            for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {\r\n                lastRandChars[i] = 0;\r\n            }\r\n            lastRandChars[i]++;\r\n        }\r\n        for (i = 0; i < 12; i++) {\r\n            id += PUSH_CHARS.charAt(lastRandChars[i]);\r\n        }\r\n        util.assert(id.length === 20, 'nextPushId: Length should be 20.');\r\n        return id;\r\n    };\r\n})();\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n *\r\n * @param {!string} name\r\n * @param {!Node} node\r\n * @constructor\r\n * @struct\r\n */\r\nvar NamedNode = /** @class */ (function () {\r\n    function NamedNode(name, node) {\r\n        this.name = name;\r\n        this.node = node;\r\n    }\r\n    /**\r\n     *\r\n     * @param {!string} name\r\n     * @param {!Node} node\r\n     * @return {NamedNode}\r\n     */\r\n    NamedNode.Wrap = function (name, node) {\r\n        return new NamedNode(name, node);\r\n    };\r\n    return NamedNode;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n *\r\n * @constructor\r\n */\r\nvar Index = /** @class */ (function () {\r\n    function Index() {\r\n    }\r\n    /**\r\n     * @return {function(!NamedNode, !NamedNode):number} A standalone comparison function for\r\n     * this index\r\n     */\r\n    Index.prototype.getCompare = function () {\r\n        return this.compare.bind(this);\r\n    };\r\n    /**\r\n     * Given a before and after value for a node, determine if the indexed value has changed. Even if they are different,\r\n     * it's possible that the changes are isolated to parts of the snapshot that are not indexed.\r\n     *\r\n     * @param {!Node} oldNode\r\n     * @param {!Node} newNode\r\n     * @return {boolean} True if the portion of the snapshot being indexed changed between oldNode and newNode\r\n     */\r\n    Index.prototype.indexedValueChanged = function (oldNode, newNode) {\r\n        var oldWrapped = new NamedNode(MIN_NAME, oldNode);\r\n        var newWrapped = new NamedNode(MIN_NAME, newNode);\r\n        return this.compare(oldWrapped, newWrapped) !== 0;\r\n    };\r\n    /**\r\n     * @return {!NamedNode} a node wrapper that will sort equal to or less than\r\n     * any other node wrapper, using this index\r\n     */\r\n    Index.prototype.minPost = function () {\r\n        return NamedNode.MIN;\r\n    };\r\n    return Index;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar __EMPTY_NODE;\r\nvar KeyIndex = /** @class */ (function (_super) {\r\n    tslib_1.__extends(KeyIndex, _super);\r\n    function KeyIndex() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Object.defineProperty(KeyIndex, \"__EMPTY_NODE\", {\r\n        get: function () {\r\n            return __EMPTY_NODE;\r\n        },\r\n        set: function (val) {\r\n            __EMPTY_NODE = val;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    KeyIndex.prototype.compare = function (a, b) {\r\n        return nameCompare(a.name, b.name);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    KeyIndex.prototype.isDefinedOn = function (node) {\r\n        // We could probably return true here (since every node has a key), but it's never called\r\n        // so just leaving unimplemented for now.\r\n        throw util.assertionError('KeyIndex.isDefinedOn not expected to be called.');\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    KeyIndex.prototype.indexedValueChanged = function (oldNode, newNode) {\r\n        return false; // The key for a node never changes.\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    KeyIndex.prototype.minPost = function () {\r\n        return NamedNode.MIN;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    KeyIndex.prototype.maxPost = function () {\r\n        // TODO: This should really be created once and cached in a static property, but\r\n        // NamedNode isn't defined yet, so I can't use it in a static.  Bleh.\r\n        return new NamedNode(MAX_NAME, __EMPTY_NODE);\r\n    };\r\n    /**\r\n     * @param {*} indexValue\r\n     * @param {string} name\r\n     * @return {!NamedNode}\r\n     */\r\n    KeyIndex.prototype.makePost = function (indexValue, name) {\r\n        util.assert(typeof indexValue === 'string', 'KeyIndex indexValue must always be a string.');\r\n        // We just use empty node, but it'll never be compared, since our comparator only looks at name.\r\n        return new NamedNode(indexValue, __EMPTY_NODE);\r\n    };\r\n    /**\r\n     * @return {!string} String representation for inclusion in a query spec\r\n     */\r\n    KeyIndex.prototype.toString = function () {\r\n        return '.key';\r\n    };\r\n    return KeyIndex;\r\n}(Index));\r\nvar KEY_INDEX = new KeyIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar MAX_NODE;\r\nfunction setMaxNode(val) {\r\n    MAX_NODE = val;\r\n}\r\n/**\r\n * @param {(!string|!number)} priority\r\n * @return {!string}\r\n */\r\nvar priorityHashText = function (priority) {\r\n    if (typeof priority === 'number')\r\n        return 'number:' + doubleToIEEE754String(priority);\r\n    else\r\n        return 'string:' + priority;\r\n};\r\n/**\r\n * Validates that a priority snapshot Node is valid.\r\n *\r\n * @param {!Node} priorityNode\r\n */\r\nvar validatePriorityNode = function (priorityNode) {\r\n    if (priorityNode.isLeafNode()) {\r\n        var val = priorityNode.val();\r\n        util.assert(typeof val === 'string' ||\r\n            typeof val === 'number' ||\r\n            (typeof val === 'object' && util.contains(val, '.sv')), 'Priority must be a string or number.');\r\n    }\r\n    else {\r\n        util.assert(priorityNode === MAX_NODE || priorityNode.isEmpty(), 'priority of unexpected type.');\r\n    }\r\n    // Don't call getPriority() on MAX_NODE to avoid hitting assertion.\r\n    util.assert(priorityNode === MAX_NODE || priorityNode.getPriority().isEmpty(), \"Priority nodes can't have a priority of their own.\");\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar __childrenNodeConstructor;\r\n/**\r\n * LeafNode is a class for storing leaf nodes in a DataSnapshot.  It\r\n * implements Node and stores the value of the node (a string,\r\n * number, or boolean) accessible via getValue().\r\n */\r\nvar LeafNode = /** @class */ (function () {\r\n    /**\r\n     * @implements {Node}\r\n     * @param {!(string|number|boolean|Object)} value_ The value to store in this leaf node.\r\n     *                                         The object type is possible in the event of a deferred value\r\n     * @param {!Node=} priorityNode_ The priority of this node.\r\n     */\r\n    function LeafNode(value_, priorityNode_) {\r\n        if (priorityNode_ === void 0) { priorityNode_ = LeafNode.__childrenNodeConstructor.EMPTY_NODE; }\r\n        this.value_ = value_;\r\n        this.priorityNode_ = priorityNode_;\r\n        this.lazyHash_ = null;\r\n        util.assert(this.value_ !== undefined && this.value_ !== null, \"LeafNode shouldn't be created with null/undefined value.\");\r\n        validatePriorityNode(this.priorityNode_);\r\n    }\r\n    Object.defineProperty(LeafNode, \"__childrenNodeConstructor\", {\r\n        get: function () {\r\n            return __childrenNodeConstructor;\r\n        },\r\n        set: function (val) {\r\n            __childrenNodeConstructor = val;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.isLeafNode = function () {\r\n        return true;\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.getPriority = function () {\r\n        return this.priorityNode_;\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.updatePriority = function (newPriorityNode) {\r\n        return new LeafNode(this.value_, newPriorityNode);\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.getImmediateChild = function (childName) {\r\n        // Hack to treat priority as a regular child\r\n        if (childName === '.priority') {\r\n            return this.priorityNode_;\r\n        }\r\n        else {\r\n            return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n        }\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.getChild = function (path) {\r\n        if (path.isEmpty()) {\r\n            return this;\r\n        }\r\n        else if (path.getFront() === '.priority') {\r\n            return this.priorityNode_;\r\n        }\r\n        else {\r\n            return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LeafNode.prototype.hasChild = function () {\r\n        return false;\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.getPredecessorChildName = function (childName, childNode) {\r\n        return null;\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.updateImmediateChild = function (childName, newChildNode) {\r\n        if (childName === '.priority') {\r\n            return this.updatePriority(newChildNode);\r\n        }\r\n        else if (newChildNode.isEmpty() && childName !== '.priority') {\r\n            return this;\r\n        }\r\n        else {\r\n            return LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(childName, newChildNode).updatePriority(this.priorityNode_);\r\n        }\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.updateChild = function (path, newChildNode) {\r\n        var front = path.getFront();\r\n        if (front === null) {\r\n            return newChildNode;\r\n        }\r\n        else if (newChildNode.isEmpty() && front !== '.priority') {\r\n            return this;\r\n        }\r\n        else {\r\n            util.assert(front !== '.priority' || path.getLength() === 1, '.priority must be the last token in a path');\r\n            return this.updateImmediateChild(front, LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateChild(path.popFront(), newChildNode));\r\n        }\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.isEmpty = function () {\r\n        return false;\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.numChildren = function () {\r\n        return 0;\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.forEachChild = function (index, action) {\r\n        return false;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LeafNode.prototype.val = function (exportFormat) {\r\n        if (exportFormat && !this.getPriority().isEmpty())\r\n            return {\r\n                '.value': this.getValue(),\r\n                '.priority': this.getPriority().val()\r\n            };\r\n        else\r\n            return this.getValue();\r\n    };\r\n    /** @inheritDoc */\r\n    LeafNode.prototype.hash = function () {\r\n        if (this.lazyHash_ === null) {\r\n            var toHash = '';\r\n            if (!this.priorityNode_.isEmpty())\r\n                toHash +=\r\n                    'priority:' +\r\n                        priorityHashText(this.priorityNode_.val()) +\r\n                        ':';\r\n            var type = typeof this.value_;\r\n            toHash += type + ':';\r\n            if (type === 'number') {\r\n                toHash += doubleToIEEE754String(this.value_);\r\n            }\r\n            else {\r\n                toHash += this.value_;\r\n            }\r\n            this.lazyHash_ = sha1(toHash);\r\n        }\r\n        return this.lazyHash_;\r\n    };\r\n    /**\r\n     * Returns the value of the leaf node.\r\n     * @return {Object|string|number|boolean} The value of the node.\r\n     */\r\n    LeafNode.prototype.getValue = function () {\r\n        return this.value_;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LeafNode.prototype.compareTo = function (other) {\r\n        if (other === LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n            return 1;\r\n        }\r\n        else if (other instanceof LeafNode.__childrenNodeConstructor) {\r\n            return -1;\r\n        }\r\n        else {\r\n            util.assert(other.isLeafNode(), 'Unknown node type');\r\n            return this.compareToLeafNode_(other);\r\n        }\r\n    };\r\n    /**\r\n     * Comparison specifically for two leaf nodes\r\n     * @param {!LeafNode} otherLeaf\r\n     * @return {!number}\r\n     * @private\r\n     */\r\n    LeafNode.prototype.compareToLeafNode_ = function (otherLeaf) {\r\n        var otherLeafType = typeof otherLeaf.value_;\r\n        var thisLeafType = typeof this.value_;\r\n        var otherIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(otherLeafType);\r\n        var thisIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(thisLeafType);\r\n        util.assert(otherIndex >= 0, 'Unknown leaf type: ' + otherLeafType);\r\n        util.assert(thisIndex >= 0, 'Unknown leaf type: ' + thisLeafType);\r\n        if (otherIndex === thisIndex) {\r\n            // Same type, compare values\r\n            if (thisLeafType === 'object') {\r\n                // Deferred value nodes are all equal, but we should also never get to this point...\r\n                return 0;\r\n            }\r\n            else {\r\n                // Note that this works because true > false, all others are number or string comparisons\r\n                if (this.value_ < otherLeaf.value_) {\r\n                    return -1;\r\n                }\r\n                else if (this.value_ === otherLeaf.value_) {\r\n                    return 0;\r\n                }\r\n                else {\r\n                    return 1;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            return thisIndex - otherIndex;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LeafNode.prototype.withIndex = function () {\r\n        return this;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LeafNode.prototype.isIndexed = function () {\r\n        return true;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LeafNode.prototype.equals = function (other) {\r\n        /**\r\n         * @inheritDoc\r\n         */\r\n        if (other === this) {\r\n            return true;\r\n        }\r\n        else if (other.isLeafNode()) {\r\n            var otherLeaf = other;\r\n            return (this.value_ === otherLeaf.value_ &&\r\n                this.priorityNode_.equals(otherLeaf.priorityNode_));\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    };\r\n    /**\r\n     * The sort order for comparing leaf nodes of different types. If two leaf nodes have\r\n     * the same type, the comparison falls back to their value\r\n     * @type {Array.<!string>}\r\n     * @const\r\n     */\r\n    LeafNode.VALUE_TYPE_ORDER = ['object', 'boolean', 'number', 'string'];\r\n    return LeafNode;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar nodeFromJSON;\r\nvar MAX_NODE$1;\r\nfunction setNodeFromJSON(val) {\r\n    nodeFromJSON = val;\r\n}\r\nfunction setMaxNode$1(val) {\r\n    MAX_NODE$1 = val;\r\n}\r\n/**\r\n * @constructor\r\n * @extends {Index}\r\n * @private\r\n */\r\nvar PriorityIndex = /** @class */ (function (_super) {\r\n    tslib_1.__extends(PriorityIndex, _super);\r\n    function PriorityIndex() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PriorityIndex.prototype.compare = function (a, b) {\r\n        var aPriority = a.node.getPriority();\r\n        var bPriority = b.node.getPriority();\r\n        var indexCmp = aPriority.compareTo(bPriority);\r\n        if (indexCmp === 0) {\r\n            return nameCompare(a.name, b.name);\r\n        }\r\n        else {\r\n            return indexCmp;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PriorityIndex.prototype.isDefinedOn = function (node) {\r\n        return !node.getPriority().isEmpty();\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PriorityIndex.prototype.indexedValueChanged = function (oldNode, newNode) {\r\n        return !oldNode.getPriority().equals(newNode.getPriority());\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PriorityIndex.prototype.minPost = function () {\r\n        return NamedNode.MIN;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PriorityIndex.prototype.maxPost = function () {\r\n        return new NamedNode(MAX_NAME, new LeafNode('[PRIORITY-POST]', MAX_NODE$1));\r\n    };\r\n    /**\r\n     * @param {*} indexValue\r\n     * @param {string} name\r\n     * @return {!NamedNode}\r\n     */\r\n    PriorityIndex.prototype.makePost = function (indexValue, name) {\r\n        var priorityNode = nodeFromJSON(indexValue);\r\n        return new NamedNode(name, new LeafNode('[PRIORITY-POST]', priorityNode));\r\n    };\r\n    /**\r\n     * @return {!string} String representation for inclusion in a query spec\r\n     */\r\n    PriorityIndex.prototype.toString = function () {\r\n        return '.priority';\r\n    };\r\n    return PriorityIndex;\r\n}(Index));\r\nvar PRIORITY_INDEX = new PriorityIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An iterator over an LLRBNode.\r\n */\r\nvar SortedMapIterator = /** @class */ (function () {\r\n    /**\r\n     * @template K, V, T\r\n     * @param {LLRBNode|LLRBEmptyNode} node Node to iterate.\r\n     * @param {?K} startKey\r\n     * @param {function(K, K): number} comparator\r\n     * @param {boolean} isReverse_ Whether or not to iterate in reverse\r\n     * @param {(function(K, V):T)=} resultGenerator_\r\n     */\r\n    function SortedMapIterator(node, startKey, comparator, isReverse_, resultGenerator_) {\r\n        if (resultGenerator_ === void 0) { resultGenerator_ = null; }\r\n        this.isReverse_ = isReverse_;\r\n        this.resultGenerator_ = resultGenerator_;\r\n        /** @private\r\n         * @type {Array.<!LLRBNode>}\r\n         */\r\n        this.nodeStack_ = [];\r\n        var cmp = 1;\r\n        while (!node.isEmpty()) {\r\n            node = node;\r\n            cmp = startKey ? comparator(node.key, startKey) : 1;\r\n            // flip the comparison if we're going in reverse\r\n            if (isReverse_)\r\n                cmp *= -1;\r\n            if (cmp < 0) {\r\n                // This node is less than our start key. ignore it\r\n                if (this.isReverse_) {\r\n                    node = node.left;\r\n                }\r\n                else {\r\n                    node = node.right;\r\n                }\r\n            }\r\n            else if (cmp === 0) {\r\n                // This node is exactly equal to our start key. Push it on the stack, but stop iterating;\r\n                this.nodeStack_.push(node);\r\n                break;\r\n            }\r\n            else {\r\n                // This node is greater than our start key, add it to the stack and move to the next one\r\n                this.nodeStack_.push(node);\r\n                if (this.isReverse_) {\r\n                    node = node.right;\r\n                }\r\n                else {\r\n                    node = node.left;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    SortedMapIterator.prototype.getNext = function () {\r\n        if (this.nodeStack_.length === 0)\r\n            return null;\r\n        var node = this.nodeStack_.pop();\r\n        var result;\r\n        if (this.resultGenerator_)\r\n            result = this.resultGenerator_(node.key, node.value);\r\n        else\r\n            result = { key: node.key, value: node.value };\r\n        if (this.isReverse_) {\r\n            node = node.left;\r\n            while (!node.isEmpty()) {\r\n                this.nodeStack_.push(node);\r\n                node = node.right;\r\n            }\r\n        }\r\n        else {\r\n            node = node.right;\r\n            while (!node.isEmpty()) {\r\n                this.nodeStack_.push(node);\r\n                node = node.left;\r\n            }\r\n        }\r\n        return result;\r\n    };\r\n    SortedMapIterator.prototype.hasNext = function () {\r\n        return this.nodeStack_.length > 0;\r\n    };\r\n    SortedMapIterator.prototype.peek = function () {\r\n        if (this.nodeStack_.length === 0)\r\n            return null;\r\n        var node = this.nodeStack_[this.nodeStack_.length - 1];\r\n        if (this.resultGenerator_) {\r\n            return this.resultGenerator_(node.key, node.value);\r\n        }\r\n        else {\r\n            return { key: node.key, value: node.value };\r\n        }\r\n    };\r\n    return SortedMapIterator;\r\n}());\r\n/**\r\n * Represents a node in a Left-leaning Red-Black tree.\r\n */\r\nvar LLRBNode = /** @class */ (function () {\r\n    /**\r\n     * @template K, V\r\n     * @param {!K} key Key associated with this node.\r\n     * @param {!V} value Value associated with this node.\r\n     * @param {?boolean} color Whether this node is red.\r\n     * @param {?(LLRBNode|LLRBEmptyNode)=} left Left child.\r\n     * @param {?(LLRBNode|LLRBEmptyNode)=} right Right child.\r\n     */\r\n    function LLRBNode(key, value, color, left, right) {\r\n        this.key = key;\r\n        this.value = value;\r\n        this.color = color != null ? color : LLRBNode.RED;\r\n        this.left =\r\n            left != null ? left : SortedMap.EMPTY_NODE;\r\n        this.right =\r\n            right != null ? right : SortedMap.EMPTY_NODE;\r\n    }\r\n    /**\r\n     * Returns a copy of the current node, optionally replacing pieces of it.\r\n     *\r\n     * @param {?K} key New key for the node, or null.\r\n     * @param {?V} value New value for the node, or null.\r\n     * @param {?boolean} color New color for the node, or null.\r\n     * @param {?LLRBNode|LLRBEmptyNode} left New left child for the node, or null.\r\n     * @param {?LLRBNode|LLRBEmptyNode} right New right child for the node, or null.\r\n     * @return {!LLRBNode} The node copy.\r\n     */\r\n    LLRBNode.prototype.copy = function (key, value, color, left, right) {\r\n        return new LLRBNode(key != null ? key : this.key, value != null ? value : this.value, color != null ? color : this.color, left != null ? left : this.left, right != null ? right : this.right);\r\n    };\r\n    /**\r\n     * @return {number} The total number of nodes in the tree.\r\n     */\r\n    LLRBNode.prototype.count = function () {\r\n        return this.left.count() + 1 + this.right.count();\r\n    };\r\n    /**\r\n     * @return {boolean} True if the tree is empty.\r\n     */\r\n    LLRBNode.prototype.isEmpty = function () {\r\n        return false;\r\n    };\r\n    /**\r\n     * Traverses the tree in key order and calls the specified action function\r\n     * for each node.\r\n     *\r\n     * @param {function(!K, !V):*} action Callback function to be called for each\r\n     *   node.  If it returns true, traversal is aborted.\r\n     * @return {*} The first truthy value returned by action, or the last falsey\r\n     *   value returned by action\r\n     */\r\n    LLRBNode.prototype.inorderTraversal = function (action) {\r\n        return (this.left.inorderTraversal(action) ||\r\n            action(this.key, this.value) ||\r\n            this.right.inorderTraversal(action));\r\n    };\r\n    /**\r\n     * Traverses the tree in reverse key order and calls the specified action function\r\n     * for each node.\r\n     *\r\n     * @param {function(!Object, !Object)} action Callback function to be called for each\r\n     * node.  If it returns true, traversal is aborted.\r\n     * @return {*} True if traversal was aborted.\r\n     */\r\n    LLRBNode.prototype.reverseTraversal = function (action) {\r\n        return (this.right.reverseTraversal(action) ||\r\n            action(this.key, this.value) ||\r\n            this.left.reverseTraversal(action));\r\n    };\r\n    /**\r\n     * @return {!Object} The minimum node in the tree.\r\n     * @private\r\n     */\r\n    LLRBNode.prototype.min_ = function () {\r\n        if (this.left.isEmpty()) {\r\n            return this;\r\n        }\r\n        else {\r\n            return this.left.min_();\r\n        }\r\n    };\r\n    /**\r\n     * @return {!K} The maximum key in the tree.\r\n     */\r\n    LLRBNode.prototype.minKey = function () {\r\n        return this.min_().key;\r\n    };\r\n    /**\r\n     * @return {!K} The maximum key in the tree.\r\n     */\r\n    LLRBNode.prototype.maxKey = function () {\r\n        if (this.right.isEmpty()) {\r\n            return this.key;\r\n        }\r\n        else {\r\n            return this.right.maxKey();\r\n        }\r\n    };\r\n    /**\r\n     *\r\n     * @param {!Object} key Key to insert.\r\n     * @param {!Object} value Value to insert.\r\n     * @param {Comparator} comparator Comparator.\r\n     * @return {!LLRBNode} New tree, with the key/value added.\r\n     */\r\n    LLRBNode.prototype.insert = function (key, value, comparator) {\r\n        var cmp, n;\r\n        n = this;\r\n        cmp = comparator(key, n.key);\r\n        if (cmp < 0) {\r\n            n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\r\n        }\r\n        else if (cmp === 0) {\r\n            n = n.copy(null, value, null, null, null);\r\n        }\r\n        else {\r\n            n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));\r\n        }\r\n        return n.fixUp_();\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {!LLRBNode|LLRBEmptyNode} New tree, with the minimum key removed.\r\n     */\r\n    LLRBNode.prototype.removeMin_ = function () {\r\n        if (this.left.isEmpty()) {\r\n            return SortedMap.EMPTY_NODE;\r\n        }\r\n        var n = this;\r\n        if (!n.left.isRed_() && !n.left.left.isRed_())\r\n            n = n.moveRedLeft_();\r\n        n = n.copy(null, null, null, n.left.removeMin_(), null);\r\n        return n.fixUp_();\r\n    };\r\n    /**\r\n     * @param {!Object} key The key of the item to remove.\r\n     * @param {Comparator} comparator Comparator.\r\n     * @return {!LLRBNode|LLRBEmptyNode} New tree, with the specified item removed.\r\n     */\r\n    LLRBNode.prototype.remove = function (key, comparator) {\r\n        var n, smallest;\r\n        n = this;\r\n        if (comparator(key, n.key) < 0) {\r\n            if (!n.left.isEmpty() && !n.left.isRed_() && !n.left.left.isRed_()) {\r\n                n = n.moveRedLeft_();\r\n            }\r\n            n = n.copy(null, null, null, n.left.remove(key, comparator), null);\r\n        }\r\n        else {\r\n            if (n.left.isRed_())\r\n                n = n.rotateRight_();\r\n            if (!n.right.isEmpty() && !n.right.isRed_() && !n.right.left.isRed_()) {\r\n                n = n.moveRedRight_();\r\n            }\r\n            if (comparator(key, n.key) === 0) {\r\n                if (n.right.isEmpty()) {\r\n                    return SortedMap.EMPTY_NODE;\r\n                }\r\n                else {\r\n                    smallest = n.right.min_();\r\n                    n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin_());\r\n                }\r\n            }\r\n            n = n.copy(null, null, null, null, n.right.remove(key, comparator));\r\n        }\r\n        return n.fixUp_();\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {boolean} Whether this is a RED node.\r\n     */\r\n    LLRBNode.prototype.isRed_ = function () {\r\n        return this.color;\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {!LLRBNode} New tree after performing any needed rotations.\r\n     */\r\n    LLRBNode.prototype.fixUp_ = function () {\r\n        var n = this;\r\n        if (n.right.isRed_() && !n.left.isRed_())\r\n            n = n.rotateLeft_();\r\n        if (n.left.isRed_() && n.left.left.isRed_())\r\n            n = n.rotateRight_();\r\n        if (n.left.isRed_() && n.right.isRed_())\r\n            n = n.colorFlip_();\r\n        return n;\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {!LLRBNode} New tree, after moveRedLeft.\r\n     */\r\n    LLRBNode.prototype.moveRedLeft_ = function () {\r\n        var n = this.colorFlip_();\r\n        if (n.right.left.isRed_()) {\r\n            n = n.copy(null, null, null, null, n.right.rotateRight_());\r\n            n = n.rotateLeft_();\r\n            n = n.colorFlip_();\r\n        }\r\n        return n;\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {!LLRBNode} New tree, after moveRedRight.\r\n     */\r\n    LLRBNode.prototype.moveRedRight_ = function () {\r\n        var n = this.colorFlip_();\r\n        if (n.left.left.isRed_()) {\r\n            n = n.rotateRight_();\r\n            n = n.colorFlip_();\r\n        }\r\n        return n;\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {!LLRBNode} New tree, after rotateLeft.\r\n     */\r\n    LLRBNode.prototype.rotateLeft_ = function () {\r\n        var nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\r\n        return this.right.copy(null, null, this.color, nl, null);\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {!LLRBNode} New tree, after rotateRight.\r\n     */\r\n    LLRBNode.prototype.rotateRight_ = function () {\r\n        var nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\r\n        return this.left.copy(null, null, this.color, null, nr);\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {!LLRBNode} New tree, after colorFlip.\r\n     */\r\n    LLRBNode.prototype.colorFlip_ = function () {\r\n        var left = this.left.copy(null, null, !this.left.color, null, null);\r\n        var right = this.right.copy(null, null, !this.right.color, null, null);\r\n        return this.copy(null, null, !this.color, left, right);\r\n    };\r\n    /**\r\n     * For testing.\r\n     *\r\n     * @private\r\n     * @return {boolean} True if all is well.\r\n     */\r\n    LLRBNode.prototype.checkMaxDepth_ = function () {\r\n        var blackDepth = this.check_();\r\n        return Math.pow(2.0, blackDepth) <= this.count() + 1;\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {number} Not sure what this returns exactly. :-).\r\n     */\r\n    LLRBNode.prototype.check_ = function () {\r\n        var blackDepth;\r\n        if (this.isRed_() && this.left.isRed_()) {\r\n            throw new Error('Red node has red child(' + this.key + ',' + this.value + ')');\r\n        }\r\n        if (this.right.isRed_()) {\r\n            throw new Error('Right child of (' + this.key + ',' + this.value + ') is red');\r\n        }\r\n        blackDepth = this.left.check_();\r\n        if (blackDepth !== this.right.check_()) {\r\n            throw new Error('Black depths differ');\r\n        }\r\n        else {\r\n            return blackDepth + (this.isRed_() ? 0 : 1);\r\n        }\r\n    };\r\n    LLRBNode.RED = true;\r\n    LLRBNode.BLACK = false;\r\n    return LLRBNode;\r\n}());\r\n/**\r\n * Represents an empty node (a leaf node in the Red-Black Tree).\r\n */\r\nvar LLRBEmptyNode = /** @class */ (function () {\r\n    function LLRBEmptyNode() {\r\n    }\r\n    /**\r\n     * Returns a copy of the current node.\r\n     *\r\n     * @return {!LLRBEmptyNode} The node copy.\r\n     */\r\n    LLRBEmptyNode.prototype.copy = function (key, value, color, left, right) {\r\n        return this;\r\n    };\r\n    /**\r\n     * Returns a copy of the tree, with the specified key/value added.\r\n     *\r\n     * @param {!K} key Key to be added.\r\n     * @param {!V} value Value to be added.\r\n     * @param {Comparator} comparator Comparator.\r\n     * @return {!LLRBNode} New tree, with item added.\r\n     */\r\n    LLRBEmptyNode.prototype.insert = function (key, value, comparator) {\r\n        return new LLRBNode(key, value, null);\r\n    };\r\n    /**\r\n     * Returns a copy of the tree, with the specified key removed.\r\n     *\r\n     * @param {!K} key The key to remove.\r\n     * @param {Comparator} comparator Comparator.\r\n     * @return {!LLRBEmptyNode} New tree, with item removed.\r\n     */\r\n    LLRBEmptyNode.prototype.remove = function (key, comparator) {\r\n        return this;\r\n    };\r\n    /**\r\n     * @return {number} The total number of nodes in the tree.\r\n     */\r\n    LLRBEmptyNode.prototype.count = function () {\r\n        return 0;\r\n    };\r\n    /**\r\n     * @return {boolean} True if the tree is empty.\r\n     */\r\n    LLRBEmptyNode.prototype.isEmpty = function () {\r\n        return true;\r\n    };\r\n    /**\r\n     * Traverses the tree in key order and calls the specified action function\r\n     * for each node.\r\n     *\r\n     * @param {function(!K, !V):*} action Callback function to be called for each\r\n     * node.  If it returns true, traversal is aborted.\r\n     * @return {boolean} True if traversal was aborted.\r\n     */\r\n    LLRBEmptyNode.prototype.inorderTraversal = function (action) {\r\n        return false;\r\n    };\r\n    /**\r\n     * Traverses the tree in reverse key order and calls the specified action function\r\n     * for each node.\r\n     *\r\n     * @param {function(!K, !V)} action Callback function to be called for each\r\n     * node.  If it returns true, traversal is aborted.\r\n     * @return {boolean} True if traversal was aborted.\r\n     */\r\n    LLRBEmptyNode.prototype.reverseTraversal = function (action) {\r\n        return false;\r\n    };\r\n    /**\r\n     * @return {null}\r\n     */\r\n    LLRBEmptyNode.prototype.minKey = function () {\r\n        return null;\r\n    };\r\n    /**\r\n     * @return {null}\r\n     */\r\n    LLRBEmptyNode.prototype.maxKey = function () {\r\n        return null;\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {number} Not sure what this returns exactly. :-).\r\n     */\r\n    LLRBEmptyNode.prototype.check_ = function () {\r\n        return 0;\r\n    };\r\n    /**\r\n     * @private\r\n     * @return {boolean} Whether this node is red.\r\n     */\r\n    LLRBEmptyNode.prototype.isRed_ = function () {\r\n        return false;\r\n    };\r\n    return LLRBEmptyNode;\r\n}());\r\n/**\r\n * An immutable sorted map implementation, based on a Left-leaning Red-Black\r\n * tree.\r\n */\r\nvar SortedMap = /** @class */ (function () {\r\n    /**\r\n     * @template K, V\r\n     * @param {function(K, K):number} comparator_ Key comparator.\r\n     * @param {LLRBNode=} root_ (Optional) Root node for the map.\r\n     */\r\n    function SortedMap(comparator_, root_) {\r\n        if (root_ === void 0) { root_ = SortedMap.EMPTY_NODE; }\r\n        this.comparator_ = comparator_;\r\n        this.root_ = root_;\r\n    }\r\n    /**\r\n     * Returns a copy of the map, with the specified key/value added or replaced.\r\n     * (TODO: We should perhaps rename this method to 'put')\r\n     *\r\n     * @param {!K} key Key to be added.\r\n     * @param {!V} value Value to be added.\r\n     * @return {!SortedMap.<K, V>} New map, with item added.\r\n     */\r\n    SortedMap.prototype.insert = function (key, value) {\r\n        return new SortedMap(this.comparator_, this.root_\r\n            .insert(key, value, this.comparator_)\r\n            .copy(null, null, LLRBNode.BLACK, null, null));\r\n    };\r\n    /**\r\n     * Returns a copy of the map, with the specified key removed.\r\n     *\r\n     * @param {!K} key The key to remove.\r\n     * @return {!SortedMap.<K, V>} New map, with item removed.\r\n     */\r\n    SortedMap.prototype.remove = function (key) {\r\n        return new SortedMap(this.comparator_, this.root_\r\n            .remove(key, this.comparator_)\r\n            .copy(null, null, LLRBNode.BLACK, null, null));\r\n    };\r\n    /**\r\n     * Returns the value of the node with the given key, or null.\r\n     *\r\n     * @param {!K} key The key to look up.\r\n     * @return {?V} The value of the node with the given key, or null if the\r\n     * key doesn't exist.\r\n     */\r\n    SortedMap.prototype.get = function (key) {\r\n        var cmp;\r\n        var node = this.root_;\r\n        while (!node.isEmpty()) {\r\n            cmp = this.comparator_(key, node.key);\r\n            if (cmp === 0) {\r\n                return node.value;\r\n            }\r\n            else if (cmp < 0) {\r\n                node = node.left;\r\n            }\r\n            else if (cmp > 0) {\r\n                node = node.right;\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    /**\r\n     * Returns the key of the item *before* the specified key, or null if key is the first item.\r\n     * @param {K} key The key to find the predecessor of\r\n     * @return {?K} The predecessor key.\r\n     */\r\n    SortedMap.prototype.getPredecessorKey = function (key) {\r\n        var cmp, node = this.root_, rightParent = null;\r\n        while (!node.isEmpty()) {\r\n            cmp = this.comparator_(key, node.key);\r\n            if (cmp === 0) {\r\n                if (!node.left.isEmpty()) {\r\n                    node = node.left;\r\n                    while (!node.right.isEmpty())\r\n                        node = node.right;\r\n                    return node.key;\r\n                }\r\n                else if (rightParent) {\r\n                    return rightParent.key;\r\n                }\r\n                else {\r\n                    return null; // first item.\r\n                }\r\n            }\r\n            else if (cmp < 0) {\r\n                node = node.left;\r\n            }\r\n            else if (cmp > 0) {\r\n                rightParent = node;\r\n                node = node.right;\r\n            }\r\n        }\r\n        throw new Error('Attempted to find predecessor key for a nonexistent key.  What gives?');\r\n    };\r\n    /**\r\n     * @return {boolean} True if the map is empty.\r\n     */\r\n    SortedMap.prototype.isEmpty = function () {\r\n        return this.root_.isEmpty();\r\n    };\r\n    /**\r\n     * @return {number} The total number of nodes in the map.\r\n     */\r\n    SortedMap.prototype.count = function () {\r\n        return this.root_.count();\r\n    };\r\n    /**\r\n     * @return {?K} The minimum key in the map.\r\n     */\r\n    SortedMap.prototype.minKey = function () {\r\n        return this.root_.minKey();\r\n    };\r\n    /**\r\n     * @return {?K} The maximum key in the map.\r\n     */\r\n    SortedMap.prototype.maxKey = function () {\r\n        return this.root_.maxKey();\r\n    };\r\n    /**\r\n     * Traverses the map in key order and calls the specified action function\r\n     * for each key/value pair.\r\n     *\r\n     * @param {function(!K, !V):*} action Callback function to be called\r\n     * for each key/value pair.  If action returns true, traversal is aborted.\r\n     * @return {*} The first truthy value returned by action, or the last falsey\r\n     *   value returned by action\r\n     */\r\n    SortedMap.prototype.inorderTraversal = function (action) {\r\n        return this.root_.inorderTraversal(action);\r\n    };\r\n    /**\r\n     * Traverses the map in reverse key order and calls the specified action function\r\n     * for each key/value pair.\r\n     *\r\n     * @param {function(!Object, !Object)} action Callback function to be called\r\n     * for each key/value pair.  If action returns true, traversal is aborted.\r\n     * @return {*} True if the traversal was aborted.\r\n     */\r\n    SortedMap.prototype.reverseTraversal = function (action) {\r\n        return this.root_.reverseTraversal(action);\r\n    };\r\n    /**\r\n     * Returns an iterator over the SortedMap.\r\n     * @template T\r\n     * @param {(function(K, V):T)=} resultGenerator\r\n     * @return {SortedMapIterator.<K, V, T>} The iterator.\r\n     */\r\n    SortedMap.prototype.getIterator = function (resultGenerator) {\r\n        return new SortedMapIterator(this.root_, null, this.comparator_, false, resultGenerator);\r\n    };\r\n    SortedMap.prototype.getIteratorFrom = function (key, resultGenerator) {\r\n        return new SortedMapIterator(this.root_, key, this.comparator_, false, resultGenerator);\r\n    };\r\n    SortedMap.prototype.getReverseIteratorFrom = function (key, resultGenerator) {\r\n        return new SortedMapIterator(this.root_, key, this.comparator_, true, resultGenerator);\r\n    };\r\n    SortedMap.prototype.getReverseIterator = function (resultGenerator) {\r\n        return new SortedMapIterator(this.root_, null, this.comparator_, true, resultGenerator);\r\n    };\r\n    /**\r\n     * Always use the same empty node, to reduce memory.\r\n     * @const\r\n     */\r\n    SortedMap.EMPTY_NODE = new LLRBEmptyNode();\r\n    return SortedMap;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar LOG_2 = Math.log(2);\r\n/**\r\n * @constructor\r\n */\r\nvar Base12Num = /** @class */ (function () {\r\n    /**\r\n     * @param {number} length\r\n     */\r\n    function Base12Num(length) {\r\n        var logBase2 = function (num) {\r\n            return parseInt((Math.log(num) / LOG_2), 10);\r\n        };\r\n        var bitMask = function (bits) { return parseInt(Array(bits + 1).join('1'), 2); };\r\n        this.count = logBase2(length + 1);\r\n        this.current_ = this.count - 1;\r\n        var mask = bitMask(this.count);\r\n        this.bits_ = (length + 1) & mask;\r\n    }\r\n    /**\r\n     * @return {boolean}\r\n     */\r\n    Base12Num.prototype.nextBitIsOne = function () {\r\n        //noinspection JSBitwiseOperatorUsage\r\n        var result = !(this.bits_ & (0x1 << this.current_));\r\n        this.current_--;\r\n        return result;\r\n    };\r\n    return Base12Num;\r\n}());\r\n/**\r\n * Takes a list of child nodes and constructs a SortedSet using the given comparison\r\n * function\r\n *\r\n * Uses the algorithm described in the paper linked here:\r\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458\r\n *\r\n * @template K, V\r\n * @param {Array.<!NamedNode>} childList Unsorted list of children\r\n * @param {function(!NamedNode, !NamedNode):number} cmp The comparison method to be used\r\n * @param {(function(NamedNode):K)=} keyFn An optional function to extract K from a node wrapper, if K's\r\n *                                                        type is not NamedNode\r\n * @param {(function(K, K):number)=} mapSortFn An optional override for comparator used by the generated sorted map\r\n * @return {SortedMap.<K, V>}\r\n */\r\nvar buildChildSet = function (childList, cmp, keyFn, mapSortFn) {\r\n    childList.sort(cmp);\r\n    var buildBalancedTree = function (low, high) {\r\n        var length = high - low;\r\n        var namedNode;\r\n        var key;\r\n        if (length == 0) {\r\n            return null;\r\n        }\r\n        else if (length == 1) {\r\n            namedNode = childList[low];\r\n            key = keyFn ? keyFn(namedNode) : namedNode;\r\n            return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, null, null);\r\n        }\r\n        else {\r\n            var middle = parseInt((length / 2), 10) + low;\r\n            var left = buildBalancedTree(low, middle);\r\n            var right = buildBalancedTree(middle + 1, high);\r\n            namedNode = childList[middle];\r\n            key = keyFn ? keyFn(namedNode) : namedNode;\r\n            return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, left, right);\r\n        }\r\n    };\r\n    var buildFrom12Array = function (base12) {\r\n        var node = null;\r\n        var root = null;\r\n        var index = childList.length;\r\n        var buildPennant = function (chunkSize, color) {\r\n            var low = index - chunkSize;\r\n            var high = index;\r\n            index -= chunkSize;\r\n            var childTree = buildBalancedTree(low + 1, high);\r\n            var namedNode = childList[low];\r\n            var key = keyFn ? keyFn(namedNode) : namedNode;\r\n            attachPennant(new LLRBNode(key, namedNode.node, color, null, childTree));\r\n        };\r\n        var attachPennant = function (pennant) {\r\n            if (node) {\r\n                node.left = pennant;\r\n                node = pennant;\r\n            }\r\n            else {\r\n                root = pennant;\r\n                node = pennant;\r\n            }\r\n        };\r\n        for (var i = 0; i < base12.count; ++i) {\r\n            var isOne = base12.nextBitIsOne();\r\n            // The number of nodes taken in each slice is 2^(arr.length - (i + 1))\r\n            var chunkSize = Math.pow(2, base12.count - (i + 1));\r\n            if (isOne) {\r\n                buildPennant(chunkSize, LLRBNode.BLACK);\r\n            }\r\n            else {\r\n                // current == 2\r\n                buildPennant(chunkSize, LLRBNode.BLACK);\r\n                buildPennant(chunkSize, LLRBNode.RED);\r\n            }\r\n        }\r\n        return root;\r\n    };\r\n    var base12 = new Base12Num(childList.length);\r\n    var root = buildFrom12Array(base12);\r\n    return new SortedMap(mapSortFn || cmp, root);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar _defaultIndexMap;\r\nvar fallbackObject = {};\r\n/**\r\n *\r\n * @param {Object.<string, FallbackType|SortedMap.<NamedNode, Node>>} indexes\r\n * @param {Object.<string, Index>} indexSet\r\n * @constructor\r\n */\r\nvar IndexMap = /** @class */ (function () {\r\n    function IndexMap(indexes_, indexSet_) {\r\n        this.indexes_ = indexes_;\r\n        this.indexSet_ = indexSet_;\r\n    }\r\n    Object.defineProperty(IndexMap, \"Default\", {\r\n        /**\r\n         * The default IndexMap for nodes without a priority\r\n         * @type {!IndexMap}\r\n         * @const\r\n         */\r\n        get: function () {\r\n            util.assert(fallbackObject && PRIORITY_INDEX, 'ChildrenNode.ts has not been loaded');\r\n            _defaultIndexMap =\r\n                _defaultIndexMap ||\r\n                    new IndexMap({ '.priority': fallbackObject }, { '.priority': PRIORITY_INDEX });\r\n            return _defaultIndexMap;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     *\r\n     * @param {!string} indexKey\r\n     * @return {?SortedMap.<NamedNode, Node>}\r\n     */\r\n    IndexMap.prototype.get = function (indexKey) {\r\n        var sortedMap = util.safeGet(this.indexes_, indexKey);\r\n        if (!sortedMap)\r\n            throw new Error('No index defined for ' + indexKey);\r\n        if (sortedMap === fallbackObject) {\r\n            // The index exists, but it falls back to just name comparison. Return null so that the calling code uses the\r\n            // regular child map\r\n            return null;\r\n        }\r\n        else {\r\n            return sortedMap;\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Index} indexDefinition\r\n     * @return {boolean}\r\n     */\r\n    IndexMap.prototype.hasIndex = function (indexDefinition) {\r\n        return util.contains(this.indexSet_, indexDefinition.toString());\r\n    };\r\n    /**\r\n     * @param {!Index} indexDefinition\r\n     * @param {!SortedMap.<string, !Node>} existingChildren\r\n     * @return {!IndexMap}\r\n     */\r\n    IndexMap.prototype.addIndex = function (indexDefinition, existingChildren) {\r\n        util.assert(indexDefinition !== KEY_INDEX, \"KeyIndex always exists and isn't meant to be added to the IndexMap.\");\r\n        var childList = [];\r\n        var sawIndexedValue = false;\r\n        var iter = existingChildren.getIterator(NamedNode.Wrap);\r\n        var next = iter.getNext();\r\n        while (next) {\r\n            sawIndexedValue =\r\n                sawIndexedValue || indexDefinition.isDefinedOn(next.node);\r\n            childList.push(next);\r\n            next = iter.getNext();\r\n        }\r\n        var newIndex;\r\n        if (sawIndexedValue) {\r\n            newIndex = buildChildSet(childList, indexDefinition.getCompare());\r\n        }\r\n        else {\r\n            newIndex = fallbackObject;\r\n        }\r\n        var indexName = indexDefinition.toString();\r\n        var newIndexSet = util.clone(this.indexSet_);\r\n        newIndexSet[indexName] = indexDefinition;\r\n        var newIndexes = util.clone(this.indexes_);\r\n        newIndexes[indexName] = newIndex;\r\n        return new IndexMap(newIndexes, newIndexSet);\r\n    };\r\n    /**\r\n     * Ensure that this node is properly tracked in any indexes that we're maintaining\r\n     * @param {!NamedNode} namedNode\r\n     * @param {!SortedMap.<string, !Node>} existingChildren\r\n     * @return {!IndexMap}\r\n     */\r\n    IndexMap.prototype.addToIndexes = function (namedNode, existingChildren) {\r\n        var _this = this;\r\n        var newIndexes = util.map(this.indexes_, function (indexedChildren, indexName) {\r\n            var index = util.safeGet(_this.indexSet_, indexName);\r\n            util.assert(index, 'Missing index implementation for ' + indexName);\r\n            if (indexedChildren === fallbackObject) {\r\n                // Check to see if we need to index everything\r\n                if (index.isDefinedOn(namedNode.node)) {\r\n                    // We need to build this index\r\n                    var childList = [];\r\n                    var iter = existingChildren.getIterator(NamedNode.Wrap);\r\n                    var next = iter.getNext();\r\n                    while (next) {\r\n                        if (next.name != namedNode.name) {\r\n                            childList.push(next);\r\n                        }\r\n                        next = iter.getNext();\r\n                    }\r\n                    childList.push(namedNode);\r\n                    return buildChildSet(childList, index.getCompare());\r\n                }\r\n                else {\r\n                    // No change, this remains a fallback\r\n                    return fallbackObject;\r\n                }\r\n            }\r\n            else {\r\n                var existingSnap = existingChildren.get(namedNode.name);\r\n                var newChildren = indexedChildren;\r\n                if (existingSnap) {\r\n                    newChildren = newChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n                }\r\n                return newChildren.insert(namedNode, namedNode.node);\r\n            }\r\n        });\r\n        return new IndexMap(newIndexes, this.indexSet_);\r\n    };\r\n    /**\r\n     * Create a new IndexMap instance with the given value removed\r\n     * @param {!NamedNode} namedNode\r\n     * @param {!SortedMap.<string, !Node>} existingChildren\r\n     * @return {!IndexMap}\r\n     */\r\n    IndexMap.prototype.removeFromIndexes = function (namedNode, existingChildren) {\r\n        var newIndexes = util.map(this.indexes_, function (indexedChildren) {\r\n            if (indexedChildren === fallbackObject) {\r\n                // This is the fallback. Just return it, nothing to do in this case\r\n                return indexedChildren;\r\n            }\r\n            else {\r\n                var existingSnap = existingChildren.get(namedNode.name);\r\n                if (existingSnap) {\r\n                    return indexedChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n                }\r\n                else {\r\n                    // No record of this child\r\n                    return indexedChildren;\r\n                }\r\n            }\r\n        });\r\n        return new IndexMap(newIndexes, this.indexSet_);\r\n    };\r\n    return IndexMap;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction NAME_ONLY_COMPARATOR(left, right) {\r\n    return nameCompare(left.name, right.name);\r\n}\r\nfunction NAME_COMPARATOR(left, right) {\r\n    return nameCompare(left, right);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// TODO: For memory savings, don't store priorityNode_ if it's empty.\r\nvar EMPTY_NODE;\r\n/**\r\n * ChildrenNode is a class for storing internal nodes in a DataSnapshot\r\n * (i.e. nodes with children).  It implements Node and stores the\r\n * list of children in the children property, sorted by child name.\r\n *\r\n * @constructor\r\n * @implements {Node}\r\n */\r\nvar ChildrenNode = /** @class */ (function () {\r\n    /**\r\n     *\r\n     * @param {!SortedMap.<string, !Node>} children_ List of children\r\n     * of this node..\r\n     * @param {?Node} priorityNode_ The priority of this node (as a snapshot node).\r\n     * @param {!IndexMap} indexMap_\r\n     */\r\n    function ChildrenNode(children_, priorityNode_, indexMap_) {\r\n        this.children_ = children_;\r\n        this.priorityNode_ = priorityNode_;\r\n        this.indexMap_ = indexMap_;\r\n        this.lazyHash_ = null;\r\n        /**\r\n         * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use\r\n         * EMPTY_NODE as the priority of EMPTY_NODE.  We might want to consider making EMPTY_NODE its own\r\n         * class instead of an empty ChildrenNode.\r\n         */\r\n        if (this.priorityNode_) {\r\n            validatePriorityNode(this.priorityNode_);\r\n        }\r\n        if (this.children_.isEmpty()) {\r\n            util.assert(!this.priorityNode_ || this.priorityNode_.isEmpty(), 'An empty node cannot have a priority');\r\n        }\r\n    }\r\n    Object.defineProperty(ChildrenNode, \"EMPTY_NODE\", {\r\n        get: function () {\r\n            return (EMPTY_NODE ||\r\n                (EMPTY_NODE = new ChildrenNode(new SortedMap(NAME_COMPARATOR), null, IndexMap.Default)));\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.isLeafNode = function () {\r\n        return false;\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.getPriority = function () {\r\n        return this.priorityNode_ || EMPTY_NODE;\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.updatePriority = function (newPriorityNode) {\r\n        if (this.children_.isEmpty()) {\r\n            // Don't allow priorities on empty nodes\r\n            return this;\r\n        }\r\n        else {\r\n            return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);\r\n        }\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.getImmediateChild = function (childName) {\r\n        // Hack to treat priority as a regular child\r\n        if (childName === '.priority') {\r\n            return this.getPriority();\r\n        }\r\n        else {\r\n            var child = this.children_.get(childName);\r\n            return child === null ? EMPTY_NODE : child;\r\n        }\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.getChild = function (path) {\r\n        var front = path.getFront();\r\n        if (front === null)\r\n            return this;\r\n        return this.getImmediateChild(front).getChild(path.popFront());\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.hasChild = function (childName) {\r\n        return this.children_.get(childName) !== null;\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.updateImmediateChild = function (childName, newChildNode) {\r\n        util.assert(newChildNode, 'We should always be passing snapshot nodes');\r\n        if (childName === '.priority') {\r\n            return this.updatePriority(newChildNode);\r\n        }\r\n        else {\r\n            var namedNode = new NamedNode(childName, newChildNode);\r\n            var newChildren = void 0, newIndexMap = void 0, newPriority = void 0;\r\n            if (newChildNode.isEmpty()) {\r\n                newChildren = this.children_.remove(childName);\r\n                newIndexMap = this.indexMap_.removeFromIndexes(namedNode, this.children_);\r\n            }\r\n            else {\r\n                newChildren = this.children_.insert(childName, newChildNode);\r\n                newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);\r\n            }\r\n            newPriority = newChildren.isEmpty() ? EMPTY_NODE : this.priorityNode_;\r\n            return new ChildrenNode(newChildren, newPriority, newIndexMap);\r\n        }\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.updateChild = function (path, newChildNode) {\r\n        var front = path.getFront();\r\n        if (front === null) {\r\n            return newChildNode;\r\n        }\r\n        else {\r\n            util.assert(path.getFront() !== '.priority' || path.getLength() === 1, '.priority must be the last token in a path');\r\n            var newImmediateChild = this.getImmediateChild(front).updateChild(path.popFront(), newChildNode);\r\n            return this.updateImmediateChild(front, newImmediateChild);\r\n        }\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.isEmpty = function () {\r\n        return this.children_.isEmpty();\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.numChildren = function () {\r\n        return this.children_.count();\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.val = function (exportFormat) {\r\n        if (this.isEmpty())\r\n            return null;\r\n        var obj = {};\r\n        var numKeys = 0, maxKey = 0, allIntegerKeys = true;\r\n        this.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n            obj[key] = childNode.val(exportFormat);\r\n            numKeys++;\r\n            if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {\r\n                maxKey = Math.max(maxKey, Number(key));\r\n            }\r\n            else {\r\n                allIntegerKeys = false;\r\n            }\r\n        });\r\n        if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {\r\n            // convert to array.\r\n            var array = [];\r\n            for (var key in obj)\r\n                array[key] = obj[key];\r\n            return array;\r\n        }\r\n        else {\r\n            if (exportFormat && !this.getPriority().isEmpty()) {\r\n                obj['.priority'] = this.getPriority().val();\r\n            }\r\n            return obj;\r\n        }\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.hash = function () {\r\n        if (this.lazyHash_ === null) {\r\n            var toHash_1 = '';\r\n            if (!this.getPriority().isEmpty())\r\n                toHash_1 +=\r\n                    'priority:' +\r\n                        priorityHashText(this.getPriority().val()) +\r\n                        ':';\r\n            this.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n                var childHash = childNode.hash();\r\n                if (childHash !== '')\r\n                    toHash_1 += ':' + key + ':' + childHash;\r\n            });\r\n            this.lazyHash_ = toHash_1 === '' ? '' : sha1(toHash_1);\r\n        }\r\n        return this.lazyHash_;\r\n    };\r\n    /** @inheritDoc */\r\n    ChildrenNode.prototype.getPredecessorChildName = function (childName, childNode, index) {\r\n        var idx = this.resolveIndex_(index);\r\n        if (idx) {\r\n            var predecessor = idx.getPredecessorKey(new NamedNode(childName, childNode));\r\n            return predecessor ? predecessor.name : null;\r\n        }\r\n        else {\r\n            return this.children_.getPredecessorKey(childName);\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Index} indexDefinition\r\n     * @return {?string}\r\n     */\r\n    ChildrenNode.prototype.getFirstChildName = function (indexDefinition) {\r\n        var idx = this.resolveIndex_(indexDefinition);\r\n        if (idx) {\r\n            var minKey = idx.minKey();\r\n            return minKey && minKey.name;\r\n        }\r\n        else {\r\n            return this.children_.minKey();\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Index} indexDefinition\r\n     * @return {?NamedNode}\r\n     */\r\n    ChildrenNode.prototype.getFirstChild = function (indexDefinition) {\r\n        var minKey = this.getFirstChildName(indexDefinition);\r\n        if (minKey) {\r\n            return new NamedNode(minKey, this.children_.get(minKey));\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    };\r\n    /**\r\n     * Given an index, return the key name of the largest value we have, according to that index\r\n     * @param {!Index} indexDefinition\r\n     * @return {?string}\r\n     */\r\n    ChildrenNode.prototype.getLastChildName = function (indexDefinition) {\r\n        var idx = this.resolveIndex_(indexDefinition);\r\n        if (idx) {\r\n            var maxKey = idx.maxKey();\r\n            return maxKey && maxKey.name;\r\n        }\r\n        else {\r\n            return this.children_.maxKey();\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Index} indexDefinition\r\n     * @return {?NamedNode}\r\n     */\r\n    ChildrenNode.prototype.getLastChild = function (indexDefinition) {\r\n        var maxKey = this.getLastChildName(indexDefinition);\r\n        if (maxKey) {\r\n            return new NamedNode(maxKey, this.children_.get(maxKey));\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildrenNode.prototype.forEachChild = function (index, action) {\r\n        var idx = this.resolveIndex_(index);\r\n        if (idx) {\r\n            return idx.inorderTraversal(function (wrappedNode) {\r\n                return action(wrappedNode.name, wrappedNode.node);\r\n            });\r\n        }\r\n        else {\r\n            return this.children_.inorderTraversal(action);\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Index} indexDefinition\r\n     * @return {SortedMapIterator}\r\n     */\r\n    ChildrenNode.prototype.getIterator = function (indexDefinition) {\r\n        return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);\r\n    };\r\n    /**\r\n     *\r\n     * @param {!NamedNode} startPost\r\n     * @param {!Index} indexDefinition\r\n     * @return {!SortedMapIterator}\r\n     */\r\n    ChildrenNode.prototype.getIteratorFrom = function (startPost, indexDefinition) {\r\n        var idx = this.resolveIndex_(indexDefinition);\r\n        if (idx) {\r\n            return idx.getIteratorFrom(startPost, function (key) { return key; });\r\n        }\r\n        else {\r\n            var iterator = this.children_.getIteratorFrom(startPost.name, NamedNode.Wrap);\r\n            var next = iterator.peek();\r\n            while (next != null && indexDefinition.compare(next, startPost) < 0) {\r\n                iterator.getNext();\r\n                next = iterator.peek();\r\n            }\r\n            return iterator;\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Index} indexDefinition\r\n     * @return {!SortedMapIterator}\r\n     */\r\n    ChildrenNode.prototype.getReverseIterator = function (indexDefinition) {\r\n        return this.getReverseIteratorFrom(indexDefinition.maxPost(), indexDefinition);\r\n    };\r\n    /**\r\n     * @param {!NamedNode} endPost\r\n     * @param {!Index} indexDefinition\r\n     * @return {!SortedMapIterator}\r\n     */\r\n    ChildrenNode.prototype.getReverseIteratorFrom = function (endPost, indexDefinition) {\r\n        var idx = this.resolveIndex_(indexDefinition);\r\n        if (idx) {\r\n            return idx.getReverseIteratorFrom(endPost, function (key) {\r\n                return key;\r\n            });\r\n        }\r\n        else {\r\n            var iterator = this.children_.getReverseIteratorFrom(endPost.name, NamedNode.Wrap);\r\n            var next = iterator.peek();\r\n            while (next != null && indexDefinition.compare(next, endPost) > 0) {\r\n                iterator.getNext();\r\n                next = iterator.peek();\r\n            }\r\n            return iterator;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildrenNode.prototype.compareTo = function (other) {\r\n        if (this.isEmpty()) {\r\n            if (other.isEmpty()) {\r\n                return 0;\r\n            }\r\n            else {\r\n                return -1;\r\n            }\r\n        }\r\n        else if (other.isLeafNode() || other.isEmpty()) {\r\n            return 1;\r\n        }\r\n        else if (other === MAX_NODE$2) {\r\n            return -1;\r\n        }\r\n        else {\r\n            // Must be another node with children.\r\n            return 0;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildrenNode.prototype.withIndex = function (indexDefinition) {\r\n        if (indexDefinition === KEY_INDEX ||\r\n            this.indexMap_.hasIndex(indexDefinition)) {\r\n            return this;\r\n        }\r\n        else {\r\n            var newIndexMap = this.indexMap_.addIndex(indexDefinition, this.children_);\r\n            return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildrenNode.prototype.isIndexed = function (index) {\r\n        return index === KEY_INDEX || this.indexMap_.hasIndex(index);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildrenNode.prototype.equals = function (other) {\r\n        if (other === this) {\r\n            return true;\r\n        }\r\n        else if (other.isLeafNode()) {\r\n            return false;\r\n        }\r\n        else {\r\n            var otherChildrenNode = other;\r\n            if (!this.getPriority().equals(otherChildrenNode.getPriority())) {\r\n                return false;\r\n            }\r\n            else if (this.children_.count() === otherChildrenNode.children_.count()) {\r\n                var thisIter = this.getIterator(PRIORITY_INDEX);\r\n                var otherIter = otherChildrenNode.getIterator(PRIORITY_INDEX);\r\n                var thisCurrent = thisIter.getNext();\r\n                var otherCurrent = otherIter.getNext();\r\n                while (thisCurrent && otherCurrent) {\r\n                    if (thisCurrent.name !== otherCurrent.name ||\r\n                        !thisCurrent.node.equals(otherCurrent.node)) {\r\n                        return false;\r\n                    }\r\n                    thisCurrent = thisIter.getNext();\r\n                    otherCurrent = otherIter.getNext();\r\n                }\r\n                return thisCurrent === null && otherCurrent === null;\r\n            }\r\n            else {\r\n                return false;\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used\r\n     * instead.\r\n     *\r\n     * @private\r\n     * @param {!Index} indexDefinition\r\n     * @return {?SortedMap.<NamedNode, Node>}\r\n     */\r\n    ChildrenNode.prototype.resolveIndex_ = function (indexDefinition) {\r\n        if (indexDefinition === KEY_INDEX) {\r\n            return null;\r\n        }\r\n        else {\r\n            return this.indexMap_.get(indexDefinition.toString());\r\n        }\r\n    };\r\n    /**\r\n     * @private\r\n     * @type {RegExp}\r\n     */\r\n    ChildrenNode.INTEGER_REGEXP_ = /^(0|[1-9]\\d*)$/;\r\n    return ChildrenNode;\r\n}());\r\n/**\r\n * @constructor\r\n * @extends {ChildrenNode}\r\n * @private\r\n */\r\nvar MaxNode = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MaxNode, _super);\r\n    function MaxNode() {\r\n        return _super.call(this, new SortedMap(NAME_COMPARATOR), ChildrenNode.EMPTY_NODE, IndexMap.Default) || this;\r\n    }\r\n    MaxNode.prototype.compareTo = function (other) {\r\n        if (other === this) {\r\n            return 0;\r\n        }\r\n        else {\r\n            return 1;\r\n        }\r\n    };\r\n    MaxNode.prototype.equals = function (other) {\r\n        // Not that we every compare it, but MAX_NODE is only ever equal to itself\r\n        return other === this;\r\n    };\r\n    MaxNode.prototype.getPriority = function () {\r\n        return this;\r\n    };\r\n    MaxNode.prototype.getImmediateChild = function (childName) {\r\n        return ChildrenNode.EMPTY_NODE;\r\n    };\r\n    MaxNode.prototype.isEmpty = function () {\r\n        return false;\r\n    };\r\n    return MaxNode;\r\n}(ChildrenNode));\r\n/**\r\n * Marker that will sort higher than any other snapshot.\r\n * @type {!MAX_NODE}\r\n * @const\r\n */\r\nvar MAX_NODE$2 = new MaxNode();\r\nObject.defineProperties(NamedNode, {\r\n    MIN: {\r\n        value: new NamedNode(MIN_NAME, ChildrenNode.EMPTY_NODE)\r\n    },\r\n    MAX: {\r\n        value: new NamedNode(MAX_NAME, MAX_NODE$2)\r\n    }\r\n});\r\n/**\r\n * Reference Extensions\r\n */\r\nKeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;\r\nLeafNode.__childrenNodeConstructor = ChildrenNode;\r\nsetMaxNode(MAX_NODE$2);\r\nsetMaxNode$1(MAX_NODE$2);\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar USE_HINZE = true;\r\n/**\r\n * Constructs a snapshot node representing the passed JSON and returns it.\r\n * @param {*} json JSON to create a node for.\r\n * @param {?string|?number=} priority Optional priority to use.  This will be ignored if the\r\n * passed JSON contains a .priority property.\r\n * @return {!Node}\r\n */\r\nfunction nodeFromJSON$1(json, priority) {\r\n    if (priority === void 0) { priority = null; }\r\n    if (json === null) {\r\n        return ChildrenNode.EMPTY_NODE;\r\n    }\r\n    if (typeof json === 'object' && '.priority' in json) {\r\n        priority = json['.priority'];\r\n    }\r\n    util.assert(priority === null ||\r\n        typeof priority === 'string' ||\r\n        typeof priority === 'number' ||\r\n        (typeof priority === 'object' && '.sv' in priority), 'Invalid priority type found: ' + typeof priority);\r\n    if (typeof json === 'object' && '.value' in json && json['.value'] !== null) {\r\n        json = json['.value'];\r\n    }\r\n    // Valid leaf nodes include non-objects or server-value wrapper objects\r\n    if (typeof json !== 'object' || '.sv' in json) {\r\n        var jsonLeaf = json;\r\n        return new LeafNode(jsonLeaf, nodeFromJSON$1(priority));\r\n    }\r\n    if (!(json instanceof Array) && USE_HINZE) {\r\n        var children_1 = [];\r\n        var childrenHavePriority_1 = false;\r\n        var hinzeJsonObj_1 = json;\r\n        util.forEach(hinzeJsonObj_1, function (key, child) {\r\n            if (typeof key !== 'string' || key.substring(0, 1) !== '.') {\r\n                // Ignore metadata nodes\r\n                var childNode = nodeFromJSON$1(hinzeJsonObj_1[key]);\r\n                if (!childNode.isEmpty()) {\r\n                    childrenHavePriority_1 =\r\n                        childrenHavePriority_1 || !childNode.getPriority().isEmpty();\r\n                    children_1.push(new NamedNode(key, childNode));\r\n                }\r\n            }\r\n        });\r\n        if (children_1.length == 0) {\r\n            return ChildrenNode.EMPTY_NODE;\r\n        }\r\n        var childSet = buildChildSet(children_1, NAME_ONLY_COMPARATOR, function (namedNode) { return namedNode.name; }, NAME_COMPARATOR);\r\n        if (childrenHavePriority_1) {\r\n            var sortedChildSet = buildChildSet(children_1, PRIORITY_INDEX.getCompare());\r\n            return new ChildrenNode(childSet, nodeFromJSON$1(priority), new IndexMap({ '.priority': sortedChildSet }, { '.priority': PRIORITY_INDEX }));\r\n        }\r\n        else {\r\n            return new ChildrenNode(childSet, nodeFromJSON$1(priority), IndexMap.Default);\r\n        }\r\n    }\r\n    else {\r\n        var node_1 = ChildrenNode.EMPTY_NODE;\r\n        var jsonObj_1 = json;\r\n        util.forEach(jsonObj_1, function (key, childData) {\r\n            if (util.contains(jsonObj_1, key)) {\r\n                if (key.substring(0, 1) !== '.') {\r\n                    // ignore metadata nodes.\r\n                    var childNode = nodeFromJSON$1(childData);\r\n                    if (childNode.isLeafNode() || !childNode.isEmpty())\r\n                        node_1 = node_1.updateImmediateChild(key, childNode);\r\n                }\r\n            }\r\n        });\r\n        return node_1.updatePriority(nodeFromJSON$1(priority));\r\n    }\r\n}\r\nsetNodeFromJSON(nodeFromJSON$1);\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @constructor\r\n * @extends {Index}\r\n * @private\r\n */\r\nvar ValueIndex = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ValueIndex, _super);\r\n    function ValueIndex() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueIndex.prototype.compare = function (a, b) {\r\n        var indexCmp = a.node.compareTo(b.node);\r\n        if (indexCmp === 0) {\r\n            return nameCompare(a.name, b.name);\r\n        }\r\n        else {\r\n            return indexCmp;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueIndex.prototype.isDefinedOn = function (node) {\r\n        return true;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueIndex.prototype.indexedValueChanged = function (oldNode, newNode) {\r\n        return !oldNode.equals(newNode);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueIndex.prototype.minPost = function () {\r\n        return NamedNode.MIN;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueIndex.prototype.maxPost = function () {\r\n        return NamedNode.MAX;\r\n    };\r\n    /**\r\n     * @param {*} indexValue\r\n     * @param {string} name\r\n     * @return {!NamedNode}\r\n     */\r\n    ValueIndex.prototype.makePost = function (indexValue, name) {\r\n        var valueNode = nodeFromJSON$1(indexValue);\r\n        return new NamedNode(name, valueNode);\r\n    };\r\n    /**\r\n     * @return {!string} String representation for inclusion in a query spec\r\n     */\r\n    ValueIndex.prototype.toString = function () {\r\n        return '.value';\r\n    };\r\n    return ValueIndex;\r\n}(Index));\r\nvar VALUE_INDEX = new ValueIndex();\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param {!Path} indexPath\r\n * @constructor\r\n * @extends {Index}\r\n */\r\nvar PathIndex = /** @class */ (function (_super) {\r\n    tslib_1.__extends(PathIndex, _super);\r\n    function PathIndex(indexPath_) {\r\n        var _this = _super.call(this) || this;\r\n        _this.indexPath_ = indexPath_;\r\n        util.assert(!indexPath_.isEmpty() && indexPath_.getFront() !== '.priority', \"Can't create PathIndex with empty path or .priority key\");\r\n        return _this;\r\n    }\r\n    /**\r\n     * @param {!Node} snap\r\n     * @return {!Node}\r\n     * @protected\r\n     */\r\n    PathIndex.prototype.extractChild = function (snap) {\r\n        return snap.getChild(this.indexPath_);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PathIndex.prototype.isDefinedOn = function (node) {\r\n        return !node.getChild(this.indexPath_).isEmpty();\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PathIndex.prototype.compare = function (a, b) {\r\n        var aChild = this.extractChild(a.node);\r\n        var bChild = this.extractChild(b.node);\r\n        var indexCmp = aChild.compareTo(bChild);\r\n        if (indexCmp === 0) {\r\n            return nameCompare(a.name, b.name);\r\n        }\r\n        else {\r\n            return indexCmp;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PathIndex.prototype.makePost = function (indexValue, name) {\r\n        var valueNode = nodeFromJSON$1(indexValue);\r\n        var node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, valueNode);\r\n        return new NamedNode(name, node);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PathIndex.prototype.maxPost = function () {\r\n        var node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, MAX_NODE$2);\r\n        return new NamedNode(MAX_NAME, node);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PathIndex.prototype.toString = function () {\r\n        return this.indexPath_.slice().join('/');\r\n    };\r\n    return PathIndex;\r\n}(Index));\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Class representing a firebase data snapshot.  It wraps a SnapshotNode and\r\n * surfaces the public methods (val, forEach, etc.) we want to expose.\r\n */\r\nvar DataSnapshot = /** @class */ (function () {\r\n    /**\r\n     * @param {!Node} node_ A SnapshotNode to wrap.\r\n     * @param {!Reference} ref_ The ref of the location this snapshot came from.\r\n     * @param {!Index} index_ The iteration order for this snapshot\r\n     */\r\n    function DataSnapshot(node_, ref_, index_) {\r\n        this.node_ = node_;\r\n        this.ref_ = ref_;\r\n        this.index_ = index_;\r\n    }\r\n    /**\r\n     * Retrieves the snapshot contents as JSON.  Returns null if the snapshot is\r\n     * empty.\r\n     *\r\n     * @return {*} JSON representation of the DataSnapshot contents, or null if empty.\r\n     */\r\n    DataSnapshot.prototype.val = function () {\r\n        util.validateArgCount('DataSnapshot.val', 0, 0, arguments.length);\r\n        return this.node_.val();\r\n    };\r\n    /**\r\n     * Returns the snapshot contents as JSON, including priorities of node.  Suitable for exporting\r\n     * the entire node contents.\r\n     * @return {*} JSON representation of the DataSnapshot contents, or null if empty.\r\n     */\r\n    DataSnapshot.prototype.exportVal = function () {\r\n        util.validateArgCount('DataSnapshot.exportVal', 0, 0, arguments.length);\r\n        return this.node_.val(true);\r\n    };\r\n    // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n    // for end-users\r\n    DataSnapshot.prototype.toJSON = function () {\r\n        // Optional spacer argument is unnecessary because we're depending on recursion rather than stringifying the content\r\n        util.validateArgCount('DataSnapshot.toJSON', 0, 1, arguments.length);\r\n        return this.exportVal();\r\n    };\r\n    /**\r\n     * Returns whether the snapshot contains a non-null value.\r\n     *\r\n     * @return {boolean} Whether the snapshot contains a non-null value, or is empty.\r\n     */\r\n    DataSnapshot.prototype.exists = function () {\r\n        util.validateArgCount('DataSnapshot.exists', 0, 0, arguments.length);\r\n        return !this.node_.isEmpty();\r\n    };\r\n    /**\r\n     * Returns a DataSnapshot of the specified child node's contents.\r\n     *\r\n     * @param {!string} childPathString Path to a child.\r\n     * @return {!DataSnapshot} DataSnapshot for child node.\r\n     */\r\n    DataSnapshot.prototype.child = function (childPathString) {\r\n        util.validateArgCount('DataSnapshot.child', 0, 1, arguments.length);\r\n        // Ensure the childPath is a string (can be a number)\r\n        childPathString = String(childPathString);\r\n        validatePathString('DataSnapshot.child', 1, childPathString, false);\r\n        var childPath = new Path(childPathString);\r\n        var childRef = this.ref_.child(childPath);\r\n        return new DataSnapshot(this.node_.getChild(childPath), childRef, PRIORITY_INDEX);\r\n    };\r\n    /**\r\n     * Returns whether the snapshot contains a child at the specified path.\r\n     *\r\n     * @param {!string} childPathString Path to a child.\r\n     * @return {boolean} Whether the child exists.\r\n     */\r\n    DataSnapshot.prototype.hasChild = function (childPathString) {\r\n        util.validateArgCount('DataSnapshot.hasChild', 1, 1, arguments.length);\r\n        validatePathString('DataSnapshot.hasChild', 1, childPathString, false);\r\n        var childPath = new Path(childPathString);\r\n        return !this.node_.getChild(childPath).isEmpty();\r\n    };\r\n    /**\r\n     * Returns the priority of the object, or null if no priority was set.\r\n     *\r\n     * @return {string|number|null} The priority.\r\n     */\r\n    DataSnapshot.prototype.getPriority = function () {\r\n        util.validateArgCount('DataSnapshot.getPriority', 0, 0, arguments.length);\r\n        // typecast here because we never return deferred values or internal priorities (MAX_PRIORITY)\r\n        return this.node_.getPriority().val();\r\n    };\r\n    /**\r\n     * Iterates through child nodes and calls the specified action for each one.\r\n     *\r\n     * @param {function(!DataSnapshot)} action Callback function to be called\r\n     * for each child.\r\n     * @return {boolean} True if forEach was canceled by action returning true for\r\n     * one of the child nodes.\r\n     */\r\n    DataSnapshot.prototype.forEach = function (action) {\r\n        var _this = this;\r\n        util.validateArgCount('DataSnapshot.forEach', 1, 1, arguments.length);\r\n        util.validateCallback('DataSnapshot.forEach', 1, action, false);\r\n        if (this.node_.isLeafNode())\r\n            return false;\r\n        var childrenNode = this.node_;\r\n        // Sanitize the return value to a boolean. ChildrenNode.forEachChild has a weird return type...\r\n        return !!childrenNode.forEachChild(this.index_, function (key, node) {\r\n            return action(new DataSnapshot(node, _this.ref_.child(key), PRIORITY_INDEX));\r\n        });\r\n    };\r\n    /**\r\n     * Returns whether this DataSnapshot has children.\r\n     * @return {boolean} True if the DataSnapshot contains 1 or more child nodes.\r\n     */\r\n    DataSnapshot.prototype.hasChildren = function () {\r\n        util.validateArgCount('DataSnapshot.hasChildren', 0, 0, arguments.length);\r\n        if (this.node_.isLeafNode())\r\n            return false;\r\n        else\r\n            return !this.node_.isEmpty();\r\n    };\r\n    Object.defineProperty(DataSnapshot.prototype, \"key\", {\r\n        get: function () {\r\n            return this.ref_.getKey();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Returns the number of children for this DataSnapshot.\r\n     * @return {number} The number of children that this DataSnapshot contains.\r\n     */\r\n    DataSnapshot.prototype.numChildren = function () {\r\n        util.validateArgCount('DataSnapshot.numChildren', 0, 0, arguments.length);\r\n        return this.node_.numChildren();\r\n    };\r\n    /**\r\n     * @return {Reference} The Firebase reference for the location this snapshot's data came from.\r\n     */\r\n    DataSnapshot.prototype.getRef = function () {\r\n        util.validateArgCount('DataSnapshot.ref', 0, 0, arguments.length);\r\n        return this.ref_;\r\n    };\r\n    Object.defineProperty(DataSnapshot.prototype, \"ref\", {\r\n        get: function () {\r\n            return this.getRef();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return DataSnapshot;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Encapsulates the data needed to raise an event\r\n * @implements {Event}\r\n */\r\nvar DataEvent = /** @class */ (function () {\r\n    /**\r\n     * @param {!string} eventType One of: value, child_added, child_changed, child_moved, child_removed\r\n     * @param {!EventRegistration} eventRegistration The function to call to with the event data. User provided\r\n     * @param {!DataSnapshot} snapshot The data backing the event\r\n     * @param {?string=} prevName Optional, the name of the previous child for child_* events.\r\n     */\r\n    function DataEvent(eventType, eventRegistration, snapshot, prevName) {\r\n        this.eventType = eventType;\r\n        this.eventRegistration = eventRegistration;\r\n        this.snapshot = snapshot;\r\n        this.prevName = prevName;\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    DataEvent.prototype.getPath = function () {\r\n        var ref = this.snapshot.getRef();\r\n        if (this.eventType === 'value') {\r\n            return ref.path;\r\n        }\r\n        else {\r\n            return ref.getParent().path;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    DataEvent.prototype.getEventType = function () {\r\n        return this.eventType;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    DataEvent.prototype.getEventRunner = function () {\r\n        return this.eventRegistration.getEventRunner(this);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    DataEvent.prototype.toString = function () {\r\n        return (this.getPath().toString() +\r\n            ':' +\r\n            this.eventType +\r\n            ':' +\r\n            util.stringify(this.snapshot.exportVal()));\r\n    };\r\n    return DataEvent;\r\n}());\r\nvar CancelEvent = /** @class */ (function () {\r\n    /**\r\n     * @param {EventRegistration} eventRegistration\r\n     * @param {Error} error\r\n     * @param {!Path} path\r\n     */\r\n    function CancelEvent(eventRegistration, error, path) {\r\n        this.eventRegistration = eventRegistration;\r\n        this.error = error;\r\n        this.path = path;\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    CancelEvent.prototype.getPath = function () {\r\n        return this.path;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    CancelEvent.prototype.getEventType = function () {\r\n        return 'cancel';\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    CancelEvent.prototype.getEventRunner = function () {\r\n        return this.eventRegistration.getEventRunner(this);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    CancelEvent.prototype.toString = function () {\r\n        return this.path.toString() + ':cancel';\r\n    };\r\n    return CancelEvent;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Represents registration for 'value' events.\r\n */\r\nvar ValueEventRegistration = /** @class */ (function () {\r\n    /**\r\n     * @param {?function(!DataSnapshot)} callback_\r\n     * @param {?function(Error)} cancelCallback_\r\n     * @param {?Object} context_\r\n     */\r\n    function ValueEventRegistration(callback_, cancelCallback_, context_) {\r\n        this.callback_ = callback_;\r\n        this.cancelCallback_ = cancelCallback_;\r\n        this.context_ = context_;\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueEventRegistration.prototype.respondsTo = function (eventType) {\r\n        return eventType === 'value';\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueEventRegistration.prototype.createEvent = function (change, query) {\r\n        var index = query.getQueryParams().getIndex();\r\n        return new DataEvent('value', this, new DataSnapshot(change.snapshotNode, query.getRef(), index));\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueEventRegistration.prototype.getEventRunner = function (eventData) {\r\n        var ctx = this.context_;\r\n        if (eventData.getEventType() === 'cancel') {\r\n            util.assert(this.cancelCallback_, 'Raising a cancel event on a listener with no cancel callback');\r\n            var cancelCB_1 = this.cancelCallback_;\r\n            return function () {\r\n                // We know that error exists, we checked above that this is a cancel event\r\n                cancelCB_1.call(ctx, eventData.error);\r\n            };\r\n        }\r\n        else {\r\n            var cb_1 = this.callback_;\r\n            return function () {\r\n                cb_1.call(ctx, eventData.snapshot);\r\n            };\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueEventRegistration.prototype.createCancelEvent = function (error, path) {\r\n        if (this.cancelCallback_) {\r\n            return new CancelEvent(this, error, path);\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueEventRegistration.prototype.matches = function (other) {\r\n        if (!(other instanceof ValueEventRegistration)) {\r\n            return false;\r\n        }\r\n        else if (!other.callback_ || !this.callback_) {\r\n            // If no callback specified, we consider it to match any callback.\r\n            return true;\r\n        }\r\n        else {\r\n            return (other.callback_ === this.callback_ && other.context_ === this.context_);\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ValueEventRegistration.prototype.hasAnyCallback = function () {\r\n        return this.callback_ !== null;\r\n    };\r\n    return ValueEventRegistration;\r\n}());\r\n/**\r\n * Represents the registration of 1 or more child_xxx events.\r\n *\r\n * Currently, it is always exactly 1 child_xxx event, but the idea is we might let you\r\n * register a group of callbacks together in the future.\r\n *\r\n * @constructor\r\n * @implements {EventRegistration}\r\n */\r\nvar ChildEventRegistration = /** @class */ (function () {\r\n    /**\r\n     * @param {?Object.<string, function(!DataSnapshot, ?string=)>} callbacks_\r\n     * @param {?function(Error)} cancelCallback_\r\n     * @param {Object=} context_\r\n     */\r\n    function ChildEventRegistration(callbacks_, cancelCallback_, context_) {\r\n        this.callbacks_ = callbacks_;\r\n        this.cancelCallback_ = cancelCallback_;\r\n        this.context_ = context_;\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildEventRegistration.prototype.respondsTo = function (eventType) {\r\n        var eventToCheck = eventType === 'children_added' ? 'child_added' : eventType;\r\n        eventToCheck =\r\n            eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;\r\n        return util.contains(this.callbacks_, eventToCheck);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildEventRegistration.prototype.createCancelEvent = function (error, path) {\r\n        if (this.cancelCallback_) {\r\n            return new CancelEvent(this, error, path);\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildEventRegistration.prototype.createEvent = function (change, query) {\r\n        util.assert(change.childName != null, 'Child events should have a childName.');\r\n        var ref = query.getRef().child(/** @type {!string} */ (change.childName));\r\n        var index = query.getQueryParams().getIndex();\r\n        return new DataEvent(change.type, this, new DataSnapshot(change.snapshotNode, ref, index), change.prevName);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildEventRegistration.prototype.getEventRunner = function (eventData) {\r\n        var ctx = this.context_;\r\n        if (eventData.getEventType() === 'cancel') {\r\n            util.assert(this.cancelCallback_, 'Raising a cancel event on a listener with no cancel callback');\r\n            var cancelCB_2 = this.cancelCallback_;\r\n            return function () {\r\n                // We know that error exists, we checked above that this is a cancel event\r\n                cancelCB_2.call(ctx, eventData.error);\r\n            };\r\n        }\r\n        else {\r\n            var cb_2 = this.callbacks_[eventData.eventType];\r\n            return function () {\r\n                cb_2.call(ctx, eventData.snapshot, eventData.prevName);\r\n            };\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildEventRegistration.prototype.matches = function (other) {\r\n        if (other instanceof ChildEventRegistration) {\r\n            if (!this.callbacks_ || !other.callbacks_) {\r\n                return true;\r\n            }\r\n            else if (this.context_ === other.context_) {\r\n                var otherCount = util.getCount(other.callbacks_);\r\n                var thisCount = util.getCount(this.callbacks_);\r\n                if (otherCount === thisCount) {\r\n                    // If count is 1, do an exact match on eventType, if either is defined but null, it's a match.\r\n                    //  If event types don't match, not a match\r\n                    // If count is not 1, exact match across all\r\n                    if (otherCount === 1) {\r\n                        var otherKey /** @type {!string} */ = util.getAnyKey(other.callbacks_);\r\n                        var thisKey /** @type {!string} */ = util.getAnyKey(this.callbacks_);\r\n                        return (thisKey === otherKey &&\r\n                            (!other.callbacks_[otherKey] ||\r\n                                !this.callbacks_[thisKey] ||\r\n                                other.callbacks_[otherKey] === this.callbacks_[thisKey]));\r\n                    }\r\n                    else {\r\n                        // Exact match on each key.\r\n                        return util.every(this.callbacks_, function (eventType, cb) { return other.callbacks_[eventType] === cb; });\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    ChildEventRegistration.prototype.hasAnyCallback = function () {\r\n        return this.callbacks_ !== null;\r\n    };\r\n    return ChildEventRegistration;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar __referenceConstructor;\r\n/**\r\n * A Query represents a filter to be applied to a firebase location.  This object purely represents the\r\n * query expression (and exposes our public API to build the query).  The actual query logic is in ViewBase.js.\r\n *\r\n * Since every Firebase reference is a query, Firebase inherits from this object.\r\n */\r\nvar Query = /** @class */ (function () {\r\n    function Query(repo, path, queryParams_, orderByCalled_) {\r\n        this.repo = repo;\r\n        this.path = path;\r\n        this.queryParams_ = queryParams_;\r\n        this.orderByCalled_ = orderByCalled_;\r\n    }\r\n    Object.defineProperty(Query, \"__referenceConstructor\", {\r\n        get: function () {\r\n            util.assert(__referenceConstructor, 'Reference.ts has not been loaded');\r\n            return __referenceConstructor;\r\n        },\r\n        set: function (val) {\r\n            __referenceConstructor = val;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Validates start/end values for queries.\r\n     * @param {!QueryParams} params\r\n     * @private\r\n     */\r\n    Query.validateQueryEndpoints_ = function (params) {\r\n        var startNode = null;\r\n        var endNode = null;\r\n        if (params.hasStart()) {\r\n            startNode = params.getIndexStartValue();\r\n        }\r\n        if (params.hasEnd()) {\r\n            endNode = params.getIndexEndValue();\r\n        }\r\n        if (params.getIndex() === KEY_INDEX) {\r\n            var tooManyArgsError = 'Query: When ordering by key, you may only pass one argument to ' +\r\n                'startAt(), endAt(), or equalTo().';\r\n            var wrongArgTypeError = 'Query: When ordering by key, the argument passed to startAt(), endAt(),' +\r\n                'or equalTo() must be a string.';\r\n            if (params.hasStart()) {\r\n                var startName = params.getIndexStartName();\r\n                if (startName != MIN_NAME) {\r\n                    throw new Error(tooManyArgsError);\r\n                }\r\n                else if (typeof startNode !== 'string') {\r\n                    throw new Error(wrongArgTypeError);\r\n                }\r\n            }\r\n            if (params.hasEnd()) {\r\n                var endName = params.getIndexEndName();\r\n                if (endName != MAX_NAME) {\r\n                    throw new Error(tooManyArgsError);\r\n                }\r\n                else if (typeof endNode !== 'string') {\r\n                    throw new Error(wrongArgTypeError);\r\n                }\r\n            }\r\n        }\r\n        else if (params.getIndex() === PRIORITY_INDEX) {\r\n            if ((startNode != null && !isValidPriority(startNode)) ||\r\n                (endNode != null && !isValidPriority(endNode))) {\r\n                throw new Error('Query: When ordering by priority, the first argument passed to startAt(), ' +\r\n                    'endAt(), or equalTo() must be a valid priority value (null, a number, or a string).');\r\n            }\r\n        }\r\n        else {\r\n            util.assert(params.getIndex() instanceof PathIndex ||\r\n                params.getIndex() === VALUE_INDEX, 'unknown index type.');\r\n            if ((startNode != null && typeof startNode === 'object') ||\r\n                (endNode != null && typeof endNode === 'object')) {\r\n                throw new Error('Query: First argument passed to startAt(), endAt(), or equalTo() cannot be ' +\r\n                    'an object.');\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Validates that limit* has been called with the correct combination of parameters\r\n     * @param {!QueryParams} params\r\n     * @private\r\n     */\r\n    Query.validateLimit_ = function (params) {\r\n        if (params.hasStart() &&\r\n            params.hasEnd() &&\r\n            params.hasLimit() &&\r\n            !params.hasAnchoredLimit()) {\r\n            throw new Error(\"Query: Can't combine startAt(), endAt(), and limit(). Use limitToFirst() or limitToLast() instead.\");\r\n        }\r\n    };\r\n    /**\r\n     * Validates that no other order by call has been made\r\n     * @param {!string} fnName\r\n     * @private\r\n     */\r\n    Query.prototype.validateNoPreviousOrderByCall_ = function (fnName) {\r\n        if (this.orderByCalled_ === true) {\r\n            throw new Error(fnName + \": You can't combine multiple orderBy calls.\");\r\n        }\r\n    };\r\n    /**\r\n     * @return {!QueryParams}\r\n     */\r\n    Query.prototype.getQueryParams = function () {\r\n        return this.queryParams_;\r\n    };\r\n    /**\r\n     * @return {!Reference}\r\n     */\r\n    Query.prototype.getRef = function () {\r\n        util.validateArgCount('Query.ref', 0, 0, arguments.length);\r\n        // This is a slight hack. We cannot goog.require('fb.api.Firebase'), since Firebase requires fb.api.Query.\r\n        // However, we will always export 'Firebase' to the global namespace, so it's guaranteed to exist by the time this\r\n        // method gets called.\r\n        return new Query.__referenceConstructor(this.repo, this.path);\r\n    };\r\n    /**\r\n     * @param {!string} eventType\r\n     * @param {!function(DataSnapshot, string=)} callback\r\n     * @param {(function(Error)|Object)=} cancelCallbackOrContext\r\n     * @param {Object=} context\r\n     * @return {!function(DataSnapshot, string=)}\r\n     */\r\n    Query.prototype.on = function (eventType, callback, cancelCallbackOrContext, context) {\r\n        util.validateArgCount('Query.on', 2, 4, arguments.length);\r\n        validateEventType('Query.on', 1, eventType, false);\r\n        util.validateCallback('Query.on', 2, callback, false);\r\n        var ret = Query.getCancelAndContextArgs_('Query.on', cancelCallbackOrContext, context);\r\n        if (eventType === 'value') {\r\n            this.onValueEvent(callback, ret.cancel, ret.context);\r\n        }\r\n        else {\r\n            var callbacks = {};\r\n            callbacks[eventType] = callback;\r\n            this.onChildEvent(callbacks, ret.cancel, ret.context);\r\n        }\r\n        return callback;\r\n    };\r\n    /**\r\n     * @param {!function(!DataSnapshot)} callback\r\n     * @param {?function(Error)} cancelCallback\r\n     * @param {?Object} context\r\n     * @protected\r\n     */\r\n    Query.prototype.onValueEvent = function (callback, cancelCallback, context) {\r\n        var container = new ValueEventRegistration(callback, cancelCallback || null, context || null);\r\n        this.repo.addEventCallbackForQuery(this, container);\r\n    };\r\n    /**\r\n     * @param {!Object.<string, !function(!DataSnapshot, ?string)>} callbacks\r\n     * @param {?function(Error)} cancelCallback\r\n     * @param {?Object} context\r\n     * @protected\r\n     */\r\n    Query.prototype.onChildEvent = function (callbacks, cancelCallback, context) {\r\n        var container = new ChildEventRegistration(callbacks, cancelCallback, context);\r\n        this.repo.addEventCallbackForQuery(this, container);\r\n    };\r\n    /**\r\n     * @param {string=} eventType\r\n     * @param {(function(!DataSnapshot, ?string=))=} callback\r\n     * @param {Object=} context\r\n     */\r\n    Query.prototype.off = function (eventType, callback, context) {\r\n        util.validateArgCount('Query.off', 0, 3, arguments.length);\r\n        validateEventType('Query.off', 1, eventType, true);\r\n        util.validateCallback('Query.off', 2, callback, true);\r\n        util.validateContextObject('Query.off', 3, context, true);\r\n        var container = null;\r\n        var callbacks = null;\r\n        if (eventType === 'value') {\r\n            var valueCallback = callback || null;\r\n            container = new ValueEventRegistration(valueCallback, null, context || null);\r\n        }\r\n        else if (eventType) {\r\n            if (callback) {\r\n                callbacks = {};\r\n                callbacks[eventType] = callback;\r\n            }\r\n            container = new ChildEventRegistration(callbacks, null, context || null);\r\n        }\r\n        this.repo.removeEventCallbackForQuery(this, container);\r\n    };\r\n    /**\r\n     * Attaches a listener, waits for the first event, and then removes the listener\r\n     * @param {!string} eventType\r\n     * @param {!function(!DataSnapshot, string=)} userCallback\r\n     * @param cancelOrContext\r\n     * @param context\r\n     * @return {!firebase.Promise}\r\n     */\r\n    Query.prototype.once = function (eventType, userCallback, cancelOrContext, context) {\r\n        var _this = this;\r\n        util.validateArgCount('Query.once', 1, 4, arguments.length);\r\n        validateEventType('Query.once', 1, eventType, false);\r\n        util.validateCallback('Query.once', 2, userCallback, true);\r\n        var ret = Query.getCancelAndContextArgs_('Query.once', cancelOrContext, context);\r\n        // TODO: Implement this more efficiently (in particular, use 'get' wire protocol for 'value' event)\r\n        // TODO: consider actually wiring the callbacks into the promise. We cannot do this without a breaking change\r\n        // because the API currently expects callbacks will be called synchronously if the data is cached, but this is\r\n        // against the Promise specification.\r\n        var firstCall = true;\r\n        var deferred = new util.Deferred();\r\n        // A dummy error handler in case a user wasn't expecting promises\r\n        deferred.promise.catch(function () { });\r\n        var onceCallback = function (snapshot) {\r\n            // NOTE: Even though we unsubscribe, we may get called multiple times if a single action (e.g. set() with JSON)\r\n            // triggers multiple events (e.g. child_added or child_changed).\r\n            if (firstCall) {\r\n                firstCall = false;\r\n                _this.off(eventType, onceCallback);\r\n                if (userCallback) {\r\n                    userCallback.bind(ret.context)(snapshot);\r\n                }\r\n                deferred.resolve(snapshot);\r\n            }\r\n        };\r\n        this.on(eventType, onceCallback, \r\n        /*cancel=*/ function (err) {\r\n            _this.off(eventType, onceCallback);\r\n            if (ret.cancel)\r\n                ret.cancel.bind(ret.context)(err);\r\n            deferred.reject(err);\r\n        });\r\n        return deferred.promise;\r\n    };\r\n    /**\r\n     * Set a limit and anchor it to the start of the window.\r\n     * @param {!number} limit\r\n     * @return {!Query}\r\n     */\r\n    Query.prototype.limitToFirst = function (limit) {\r\n        util.validateArgCount('Query.limitToFirst', 1, 1, arguments.length);\r\n        if (typeof limit !== 'number' ||\r\n            Math.floor(limit) !== limit ||\r\n            limit <= 0) {\r\n            throw new Error('Query.limitToFirst: First argument must be a positive integer.');\r\n        }\r\n        if (this.queryParams_.hasLimit()) {\r\n            throw new Error('Query.limitToFirst: Limit was already set (by another call to limit, ' +\r\n                'limitToFirst, or limitToLast).');\r\n        }\r\n        return new Query(this.repo, this.path, this.queryParams_.limitToFirst(limit), this.orderByCalled_);\r\n    };\r\n    /**\r\n     * Set a limit and anchor it to the end of the window.\r\n     * @param {!number} limit\r\n     * @return {!Query}\r\n     */\r\n    Query.prototype.limitToLast = function (limit) {\r\n        util.validateArgCount('Query.limitToLast', 1, 1, arguments.length);\r\n        if (typeof limit !== 'number' ||\r\n            Math.floor(limit) !== limit ||\r\n            limit <= 0) {\r\n            throw new Error('Query.limitToLast: First argument must be a positive integer.');\r\n        }\r\n        if (this.queryParams_.hasLimit()) {\r\n            throw new Error('Query.limitToLast: Limit was already set (by another call to limit, ' +\r\n                'limitToFirst, or limitToLast).');\r\n        }\r\n        return new Query(this.repo, this.path, this.queryParams_.limitToLast(limit), this.orderByCalled_);\r\n    };\r\n    /**\r\n     * Given a child path, return a new query ordered by the specified grandchild path.\r\n     * @param {!string} path\r\n     * @return {!Query}\r\n     */\r\n    Query.prototype.orderByChild = function (path) {\r\n        util.validateArgCount('Query.orderByChild', 1, 1, arguments.length);\r\n        if (path === '$key') {\r\n            throw new Error('Query.orderByChild: \"$key\" is invalid.  Use Query.orderByKey() instead.');\r\n        }\r\n        else if (path === '$priority') {\r\n            throw new Error('Query.orderByChild: \"$priority\" is invalid.  Use Query.orderByPriority() instead.');\r\n        }\r\n        else if (path === '$value') {\r\n            throw new Error('Query.orderByChild: \"$value\" is invalid.  Use Query.orderByValue() instead.');\r\n        }\r\n        validatePathString('Query.orderByChild', 1, path, false);\r\n        this.validateNoPreviousOrderByCall_('Query.orderByChild');\r\n        var parsedPath = new Path(path);\r\n        if (parsedPath.isEmpty()) {\r\n            throw new Error('Query.orderByChild: cannot pass in empty path.  Use Query.orderByValue() instead.');\r\n        }\r\n        var index = new PathIndex(parsedPath);\r\n        var newParams = this.queryParams_.orderBy(index);\r\n        Query.validateQueryEndpoints_(newParams);\r\n        return new Query(this.repo, this.path, newParams, /*orderByCalled=*/ true);\r\n    };\r\n    /**\r\n     * Return a new query ordered by the KeyIndex\r\n     * @return {!Query}\r\n     */\r\n    Query.prototype.orderByKey = function () {\r\n        util.validateArgCount('Query.orderByKey', 0, 0, arguments.length);\r\n        this.validateNoPreviousOrderByCall_('Query.orderByKey');\r\n        var newParams = this.queryParams_.orderBy(KEY_INDEX);\r\n        Query.validateQueryEndpoints_(newParams);\r\n        return new Query(this.repo, this.path, newParams, /*orderByCalled=*/ true);\r\n    };\r\n    /**\r\n     * Return a new query ordered by the PriorityIndex\r\n     * @return {!Query}\r\n     */\r\n    Query.prototype.orderByPriority = function () {\r\n        util.validateArgCount('Query.orderByPriority', 0, 0, arguments.length);\r\n        this.validateNoPreviousOrderByCall_('Query.orderByPriority');\r\n        var newParams = this.queryParams_.orderBy(PRIORITY_INDEX);\r\n        Query.validateQueryEndpoints_(newParams);\r\n        return new Query(this.repo, this.path, newParams, /*orderByCalled=*/ true);\r\n    };\r\n    /**\r\n     * Return a new query ordered by the ValueIndex\r\n     * @return {!Query}\r\n     */\r\n    Query.prototype.orderByValue = function () {\r\n        util.validateArgCount('Query.orderByValue', 0, 0, arguments.length);\r\n        this.validateNoPreviousOrderByCall_('Query.orderByValue');\r\n        var newParams = this.queryParams_.orderBy(VALUE_INDEX);\r\n        Query.validateQueryEndpoints_(newParams);\r\n        return new Query(this.repo, this.path, newParams, /*orderByCalled=*/ true);\r\n    };\r\n    /**\r\n     * @param {number|string|boolean|null} value\r\n     * @param {?string=} name\r\n     * @return {!Query}\r\n     */\r\n    Query.prototype.startAt = function (value, name) {\r\n        if (value === void 0) { value = null; }\r\n        util.validateArgCount('Query.startAt', 0, 2, arguments.length);\r\n        validateFirebaseDataArg('Query.startAt', 1, value, this.path, true);\r\n        validateKey('Query.startAt', 2, name, true);\r\n        var newParams = this.queryParams_.startAt(value, name);\r\n        Query.validateLimit_(newParams);\r\n        Query.validateQueryEndpoints_(newParams);\r\n        if (this.queryParams_.hasStart()) {\r\n            throw new Error('Query.startAt: Starting point was already set (by another call to startAt ' +\r\n                'or equalTo).');\r\n        }\r\n        // Calling with no params tells us to start at the beginning.\r\n        if (value === undefined) {\r\n            value = null;\r\n            name = null;\r\n        }\r\n        return new Query(this.repo, this.path, newParams, this.orderByCalled_);\r\n    };\r\n    /**\r\n     * @param {number|string|boolean|null} value\r\n     * @param {?string=} name\r\n     * @return {!Query}\r\n     */\r\n    Query.prototype.endAt = function (value, name) {\r\n        if (value === void 0) { value = null; }\r\n        util.validateArgCount('Query.endAt', 0, 2, arguments.length);\r\n        validateFirebaseDataArg('Query.endAt', 1, value, this.path, true);\r\n        validateKey('Query.endAt', 2, name, true);\r\n        var newParams = this.queryParams_.endAt(value, name);\r\n        Query.validateLimit_(newParams);\r\n        Query.validateQueryEndpoints_(newParams);\r\n        if (this.queryParams_.hasEnd()) {\r\n            throw new Error('Query.endAt: Ending point was already set (by another call to endAt or ' +\r\n                'equalTo).');\r\n        }\r\n        return new Query(this.repo, this.path, newParams, this.orderByCalled_);\r\n    };\r\n    /**\r\n     * Load the selection of children with exactly the specified value, and, optionally,\r\n     * the specified name.\r\n     * @param {number|string|boolean|null} value\r\n     * @param {string=} name\r\n     * @return {!Query}\r\n     */\r\n    Query.prototype.equalTo = function (value, name) {\r\n        util.validateArgCount('Query.equalTo', 1, 2, arguments.length);\r\n        validateFirebaseDataArg('Query.equalTo', 1, value, this.path, false);\r\n        validateKey('Query.equalTo', 2, name, true);\r\n        if (this.queryParams_.hasStart()) {\r\n            throw new Error('Query.equalTo: Starting point was already set (by another call to startAt or ' +\r\n                'equalTo).');\r\n        }\r\n        if (this.queryParams_.hasEnd()) {\r\n            throw new Error('Query.equalTo: Ending point was already set (by another call to endAt or ' +\r\n                'equalTo).');\r\n        }\r\n        return this.startAt(value, name).endAt(value, name);\r\n    };\r\n    /**\r\n     * @return {!string} URL for this location.\r\n     */\r\n    Query.prototype.toString = function () {\r\n        util.validateArgCount('Query.toString', 0, 0, arguments.length);\r\n        return this.repo.toString() + this.path.toUrlEncodedString();\r\n    };\r\n    // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n    // for end-users.\r\n    Query.prototype.toJSON = function () {\r\n        // An optional spacer argument is unnecessary for a string.\r\n        util.validateArgCount('Query.toJSON', 0, 1, arguments.length);\r\n        return this.toString();\r\n    };\r\n    /**\r\n     * An object representation of the query parameters used by this Query.\r\n     * @return {!Object}\r\n     */\r\n    Query.prototype.queryObject = function () {\r\n        return this.queryParams_.getQueryObject();\r\n    };\r\n    /**\r\n     * @return {!string}\r\n     */\r\n    Query.prototype.queryIdentifier = function () {\r\n        var obj = this.queryObject();\r\n        var id = ObjectToUniqueKey(obj);\r\n        return id === '{}' ? 'default' : id;\r\n    };\r\n    /**\r\n     * Return true if this query and the provided query are equivalent; otherwise, return false.\r\n     * @param {Query} other\r\n     * @return {boolean}\r\n     */\r\n    Query.prototype.isEqual = function (other) {\r\n        util.validateArgCount('Query.isEqual', 1, 1, arguments.length);\r\n        if (!(other instanceof Query)) {\r\n            var error = 'Query.isEqual failed: First argument must be an instance of firebase.database.Query.';\r\n            throw new Error(error);\r\n        }\r\n        var sameRepo = this.repo === other.repo;\r\n        var samePath = this.path.equals(other.path);\r\n        var sameQueryIdentifier = this.queryIdentifier() === other.queryIdentifier();\r\n        return sameRepo && samePath && sameQueryIdentifier;\r\n    };\r\n    /**\r\n     * Helper used by .on and .once to extract the context and or cancel arguments.\r\n     * @param {!string} fnName The function name (on or once)\r\n     * @param {(function(Error)|Object)=} cancelOrContext\r\n     * @param {Object=} context\r\n     * @return {{cancel: ?function(Error), context: ?Object}}\r\n     * @private\r\n     */\r\n    Query.getCancelAndContextArgs_ = function (fnName, cancelOrContext, context) {\r\n        var ret = { cancel: null, context: null };\r\n        if (cancelOrContext && context) {\r\n            ret.cancel = cancelOrContext;\r\n            util.validateCallback(fnName, 3, ret.cancel, true);\r\n            ret.context = context;\r\n            util.validateContextObject(fnName, 4, ret.context, true);\r\n        }\r\n        else if (cancelOrContext) {\r\n            // we have either a cancel callback or a context.\r\n            if (typeof cancelOrContext === 'object' && cancelOrContext !== null) {\r\n                // it's a context!\r\n                ret.context = cancelOrContext;\r\n            }\r\n            else if (typeof cancelOrContext === 'function') {\r\n                ret.cancel = cancelOrContext;\r\n            }\r\n            else {\r\n                throw new Error(util.errorPrefix(fnName, 3, true) +\r\n                    ' must either be a cancel callback or a context object.');\r\n            }\r\n        }\r\n        return ret;\r\n    };\r\n    Object.defineProperty(Query.prototype, \"ref\", {\r\n        get: function () {\r\n            return this.getRef();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return Query;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Implements a set with a count of elements.\r\n *\r\n * @template K, V\r\n */\r\nvar CountedSet = /** @class */ (function () {\r\n    function CountedSet() {\r\n        this.set = {};\r\n    }\r\n    /**\r\n     * @param {!K} item\r\n     * @param {V} val\r\n     */\r\n    CountedSet.prototype.add = function (item, val) {\r\n        this.set[item] = val !== null ? val : true;\r\n    };\r\n    /**\r\n     * @param {!K} key\r\n     * @return {boolean}\r\n     */\r\n    CountedSet.prototype.contains = function (key) {\r\n        return util.contains(this.set, key);\r\n    };\r\n    /**\r\n     * @param {!K} item\r\n     * @return {V}\r\n     */\r\n    CountedSet.prototype.get = function (item) {\r\n        return this.contains(item) ? this.set[item] : undefined;\r\n    };\r\n    /**\r\n     * @param {!K} item\r\n     */\r\n    CountedSet.prototype.remove = function (item) {\r\n        delete this.set[item];\r\n    };\r\n    /**\r\n     * Deletes everything in the set\r\n     */\r\n    CountedSet.prototype.clear = function () {\r\n        this.set = {};\r\n    };\r\n    /**\r\n     * True if there's nothing in the set\r\n     * @return {boolean}\r\n     */\r\n    CountedSet.prototype.isEmpty = function () {\r\n        return util.isEmpty(this.set);\r\n    };\r\n    /**\r\n     * @return {number} The number of items in the set\r\n     */\r\n    CountedSet.prototype.count = function () {\r\n        return util.getCount(this.set);\r\n    };\r\n    /**\r\n     * Run a function on each k,v pair in the set\r\n     * @param {function(K, V)} fn\r\n     */\r\n    CountedSet.prototype.each = function (fn) {\r\n        util.forEach(this.set, function (k, v) { return fn(k, v); });\r\n    };\r\n    /**\r\n     * Mostly for debugging\r\n     * @return {Array.<K>} The keys present in this CountedSet\r\n     */\r\n    CountedSet.prototype.keys = function () {\r\n        var keys = [];\r\n        util.forEach(this.set, function (k) {\r\n            keys.push(k);\r\n        });\r\n        return keys;\r\n    };\r\n    return CountedSet;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Helper class to store a sparse set of snapshots.\r\n *\r\n * @constructor\r\n */\r\nvar SparseSnapshotTree = /** @class */ (function () {\r\n    function SparseSnapshotTree() {\r\n        /**\r\n         * @private\r\n         * @type {Node}\r\n         */\r\n        this.value_ = null;\r\n        /**\r\n         * @private\r\n         * @type {CountedSet}\r\n         */\r\n        this.children_ = null;\r\n    }\r\n    /**\r\n     * Gets the node stored at the given path if one exists.\r\n     *\r\n     * @param {!Path} path Path to look up snapshot for.\r\n     * @return {?Node} The retrieved node, or null.\r\n     */\r\n    SparseSnapshotTree.prototype.find = function (path) {\r\n        if (this.value_ != null) {\r\n            return this.value_.getChild(path);\r\n        }\r\n        else if (!path.isEmpty() && this.children_ != null) {\r\n            var childKey = path.getFront();\r\n            path = path.popFront();\r\n            if (this.children_.contains(childKey)) {\r\n                var childTree = this.children_.get(childKey);\r\n                return childTree.find(path);\r\n            }\r\n            else {\r\n                return null;\r\n            }\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    };\r\n    /**\r\n     * Stores the given node at the specified path. If there is already a node\r\n     * at a shallower path, it merges the new data into that snapshot node.\r\n     *\r\n     * @param {!Path} path Path to look up snapshot for.\r\n     * @param {!Node} data The new data, or null.\r\n     */\r\n    SparseSnapshotTree.prototype.remember = function (path, data) {\r\n        if (path.isEmpty()) {\r\n            this.value_ = data;\r\n            this.children_ = null;\r\n        }\r\n        else if (this.value_ !== null) {\r\n            this.value_ = this.value_.updateChild(path, data);\r\n        }\r\n        else {\r\n            if (this.children_ == null) {\r\n                this.children_ = new CountedSet();\r\n            }\r\n            var childKey = path.getFront();\r\n            if (!this.children_.contains(childKey)) {\r\n                this.children_.add(childKey, new SparseSnapshotTree());\r\n            }\r\n            var child = this.children_.get(childKey);\r\n            path = path.popFront();\r\n            child.remember(path, data);\r\n        }\r\n    };\r\n    /**\r\n     * Purge the data at path from the cache.\r\n     *\r\n     * @param {!Path} path Path to look up snapshot for.\r\n     * @return {boolean} True if this node should now be removed.\r\n     */\r\n    SparseSnapshotTree.prototype.forget = function (path) {\r\n        if (path.isEmpty()) {\r\n            this.value_ = null;\r\n            this.children_ = null;\r\n            return true;\r\n        }\r\n        else {\r\n            if (this.value_ !== null) {\r\n                if (this.value_.isLeafNode()) {\r\n                    // We're trying to forget a node that doesn't exist\r\n                    return false;\r\n                }\r\n                else {\r\n                    var value = this.value_;\r\n                    this.value_ = null;\r\n                    var self_1 = this;\r\n                    value.forEachChild(PRIORITY_INDEX, function (key, tree) {\r\n                        self_1.remember(new Path(key), tree);\r\n                    });\r\n                    return this.forget(path);\r\n                }\r\n            }\r\n            else if (this.children_ !== null) {\r\n                var childKey = path.getFront();\r\n                path = path.popFront();\r\n                if (this.children_.contains(childKey)) {\r\n                    var safeToRemove = this.children_.get(childKey).forget(path);\r\n                    if (safeToRemove) {\r\n                        this.children_.remove(childKey);\r\n                    }\r\n                }\r\n                if (this.children_.isEmpty()) {\r\n                    this.children_ = null;\r\n                    return true;\r\n                }\r\n                else {\r\n                    return false;\r\n                }\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Recursively iterates through all of the stored tree and calls the\r\n     * callback on each one.\r\n     *\r\n     * @param {!Path} prefixPath Path to look up node for.\r\n     * @param {!Function} func The function to invoke for each tree.\r\n     */\r\n    SparseSnapshotTree.prototype.forEachTree = function (prefixPath, func) {\r\n        if (this.value_ !== null) {\r\n            func(prefixPath, this.value_);\r\n        }\r\n        else {\r\n            this.forEachChild(function (key, tree) {\r\n                var path = new Path(prefixPath.toString() + '/' + key);\r\n                tree.forEachTree(path, func);\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     * Iterates through each immediate child and triggers the callback.\r\n     *\r\n     * @param {!Function} func The function to invoke for each child.\r\n     */\r\n    SparseSnapshotTree.prototype.forEachChild = function (func) {\r\n        if (this.children_ !== null) {\r\n            this.children_.each(function (key, tree) {\r\n                func(key, tree);\r\n            });\r\n        }\r\n    };\r\n    return SparseSnapshotTree;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Generate placeholders for deferred values.\r\n * @param {?Object} values\r\n * @return {!Object}\r\n */\r\nvar generateWithValues = function (values) {\r\n    values = values || {};\r\n    values['timestamp'] = values['timestamp'] || new Date().getTime();\r\n    return values;\r\n};\r\n/**\r\n * Value to use when firing local events. When writing server values, fire\r\n * local events with an approximate value, otherwise return value as-is.\r\n * @param {(Object|string|number|boolean)} value\r\n * @param {!Object} serverValues\r\n * @return {!(string|number|boolean)}\r\n */\r\nvar resolveDeferredValue = function (value, serverValues) {\r\n    if (!value || typeof value !== 'object') {\r\n        return value;\r\n    }\r\n    else {\r\n        util.assert('.sv' in value, 'Unexpected leaf node or priority contents');\r\n        return serverValues[value['.sv']];\r\n    }\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the tree with the\r\n * specified generated replacement values.\r\n * @param {!SparseSnapshotTree} tree\r\n * @param {!Object} serverValues\r\n * @return {!SparseSnapshotTree}\r\n */\r\nvar resolveDeferredValueTree = function (tree, serverValues) {\r\n    var resolvedTree = new SparseSnapshotTree();\r\n    tree.forEachTree(new Path(''), function (path, node) {\r\n        resolvedTree.remember(path, resolveDeferredValueSnapshot(node, serverValues));\r\n    });\r\n    return resolvedTree;\r\n};\r\n/**\r\n * Recursively replace all deferred values and priorities in the node with the\r\n * specified generated replacement values.  If there are no server values in the node,\r\n * it'll be returned as-is.\r\n * @param {!Node} node\r\n * @param {!Object} serverValues\r\n * @return {!Node}\r\n */\r\nvar resolveDeferredValueSnapshot = function (node, serverValues) {\r\n    var rawPri = node.getPriority().val();\r\n    var priority = resolveDeferredValue(rawPri, serverValues);\r\n    var newNode;\r\n    if (node.isLeafNode()) {\r\n        var leafNode = node;\r\n        var value = resolveDeferredValue(leafNode.getValue(), serverValues);\r\n        if (value !== leafNode.getValue() ||\r\n            priority !== leafNode.getPriority().val()) {\r\n            return new LeafNode(value, nodeFromJSON$1(priority));\r\n        }\r\n        else {\r\n            return node;\r\n        }\r\n    }\r\n    else {\r\n        var childrenNode = node;\r\n        newNode = childrenNode;\r\n        if (priority !== childrenNode.getPriority().val()) {\r\n            newNode = newNode.updatePriority(new LeafNode(priority));\r\n        }\r\n        childrenNode.forEachChild(PRIORITY_INDEX, function (childName, childNode) {\r\n            var newChildNode = resolveDeferredValueSnapshot(childNode, serverValues);\r\n            if (newChildNode !== childNode) {\r\n                newNode = newNode.updateImmediateChild(childName, newChildNode);\r\n            }\r\n        });\r\n        return newNode;\r\n    }\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n *\r\n * @enum\r\n */\r\nvar OperationType;\r\n(function (OperationType) {\r\n    OperationType[OperationType[\"OVERWRITE\"] = 0] = \"OVERWRITE\";\r\n    OperationType[OperationType[\"MERGE\"] = 1] = \"MERGE\";\r\n    OperationType[OperationType[\"ACK_USER_WRITE\"] = 2] = \"ACK_USER_WRITE\";\r\n    OperationType[OperationType[\"LISTEN_COMPLETE\"] = 3] = \"LISTEN_COMPLETE\";\r\n})(OperationType || (OperationType = {}));\r\n/**\r\n * @param {boolean} fromUser\r\n * @param {boolean} fromServer\r\n * @param {?string} queryId\r\n * @param {boolean} tagged\r\n * @constructor\r\n */\r\nvar OperationSource = /** @class */ (function () {\r\n    function OperationSource(fromUser, fromServer, queryId, tagged) {\r\n        this.fromUser = fromUser;\r\n        this.fromServer = fromServer;\r\n        this.queryId = queryId;\r\n        this.tagged = tagged;\r\n        util.assert(!tagged || fromServer, 'Tagged queries must be from server.');\r\n    }\r\n    /**\r\n     * @const\r\n     * @type {!OperationSource}\r\n     */\r\n    OperationSource.User = new OperationSource(\r\n    /*fromUser=*/ true, false, null, \r\n    /*tagged=*/ false);\r\n    /**\r\n     * @const\r\n     * @type {!OperationSource}\r\n     */\r\n    OperationSource.Server = new OperationSource(false, \r\n    /*fromServer=*/ true, null, \r\n    /*tagged=*/ false);\r\n    /**\r\n     * @param {string} queryId\r\n     * @return {!OperationSource}\r\n     */\r\n    OperationSource.forServerTaggedQuery = function (queryId) {\r\n        return new OperationSource(false, \r\n        /*fromServer=*/ true, queryId, \r\n        /*tagged=*/ true);\r\n    };\r\n    return OperationSource;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar AckUserWrite = /** @class */ (function () {\r\n    /**\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!ImmutableTree<!boolean>} affectedTree A tree containing true for each affected path. Affected paths can't overlap.\r\n     * @param {!boolean} revert\r\n     */\r\n    function AckUserWrite(\r\n    /**@inheritDoc */ path, \r\n    /**@inheritDoc */ affectedTree, \r\n    /**@inheritDoc */ revert) {\r\n        this.path = path;\r\n        this.affectedTree = affectedTree;\r\n        this.revert = revert;\r\n        /** @inheritDoc */\r\n        this.type = OperationType.ACK_USER_WRITE;\r\n        /** @inheritDoc */\r\n        this.source = OperationSource.User;\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    AckUserWrite.prototype.operationForChild = function (childName) {\r\n        if (!this.path.isEmpty()) {\r\n            util.assert(this.path.getFront() === childName, 'operationForChild called for unrelated child.');\r\n            return new AckUserWrite(this.path.popFront(), this.affectedTree, this.revert);\r\n        }\r\n        else if (this.affectedTree.value != null) {\r\n            util.assert(this.affectedTree.children.isEmpty(), 'affectedTree should not have overlapping affected paths.');\r\n            // All child locations are affected as well; just return same operation.\r\n            return this;\r\n        }\r\n        else {\r\n            var childTree = this.affectedTree.subtree(new Path(childName));\r\n            return new AckUserWrite(Path.Empty, childTree, this.revert);\r\n        }\r\n    };\r\n    return AckUserWrite;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar emptyChildrenSingleton;\r\n/**\r\n * Singleton empty children collection.\r\n *\r\n * @const\r\n * @type {!SortedMap.<string, !ImmutableTree.<?>>}\r\n */\r\nvar EmptyChildren = function () {\r\n    if (!emptyChildrenSingleton) {\r\n        emptyChildrenSingleton = new SortedMap(stringCompare);\r\n    }\r\n    return emptyChildrenSingleton;\r\n};\r\n/**\r\n * A tree with immutable elements.\r\n */\r\nvar ImmutableTree = /** @class */ (function () {\r\n    /**\r\n     * @template T\r\n     * @param {?T} value\r\n     * @param {SortedMap.<string, !ImmutableTree.<T>>=} children\r\n     */\r\n    function ImmutableTree(value, children) {\r\n        if (children === void 0) { children = EmptyChildren(); }\r\n        this.value = value;\r\n        this.children = children;\r\n    }\r\n    /**\r\n     * @template T\r\n     * @param {!Object.<string, !T>} obj\r\n     * @return {!ImmutableTree.<!T>}\r\n     */\r\n    ImmutableTree.fromObject = function (obj) {\r\n        var tree = ImmutableTree.Empty;\r\n        util.forEach(obj, function (childPath, childSnap) {\r\n            tree = tree.set(new Path(childPath), childSnap);\r\n        });\r\n        return tree;\r\n    };\r\n    /**\r\n     * True if the value is empty and there are no children\r\n     * @return {boolean}\r\n     */\r\n    ImmutableTree.prototype.isEmpty = function () {\r\n        return this.value === null && this.children.isEmpty();\r\n    };\r\n    /**\r\n     * Given a path and predicate, return the first node and the path to that node\r\n     * where the predicate returns true.\r\n     *\r\n     * TODO Do a perf test -- If we're creating a bunch of {path: value:} objects\r\n     * on the way back out, it may be better to pass down a pathSoFar obj.\r\n     *\r\n     * @param {!Path} relativePath The remainder of the path\r\n     * @param {function(T):boolean} predicate The predicate to satisfy to return a\r\n     *   node\r\n     * @return {?{path:!Path, value:!T}}\r\n     */\r\n    ImmutableTree.prototype.findRootMostMatchingPathAndValue = function (relativePath, predicate) {\r\n        if (this.value != null && predicate(this.value)) {\r\n            return { path: Path.Empty, value: this.value };\r\n        }\r\n        else {\r\n            if (relativePath.isEmpty()) {\r\n                return null;\r\n            }\r\n            else {\r\n                var front = relativePath.getFront();\r\n                var child = this.children.get(front);\r\n                if (child !== null) {\r\n                    var childExistingPathAndValue = child.findRootMostMatchingPathAndValue(relativePath.popFront(), predicate);\r\n                    if (childExistingPathAndValue != null) {\r\n                        var fullPath = new Path(front).child(childExistingPathAndValue.path);\r\n                        return { path: fullPath, value: childExistingPathAndValue.value };\r\n                    }\r\n                    else {\r\n                        return null;\r\n                    }\r\n                }\r\n                else {\r\n                    return null;\r\n                }\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Find, if it exists, the shortest subpath of the given path that points a defined\r\n     * value in the tree\r\n     * @param {!Path} relativePath\r\n     * @return {?{path: !Path, value: !T}}\r\n     */\r\n    ImmutableTree.prototype.findRootMostValueAndPath = function (relativePath) {\r\n        return this.findRootMostMatchingPathAndValue(relativePath, function () { return true; });\r\n    };\r\n    /**\r\n     * @param {!Path} relativePath\r\n     * @return {!ImmutableTree.<T>} The subtree at the given path\r\n     */\r\n    ImmutableTree.prototype.subtree = function (relativePath) {\r\n        if (relativePath.isEmpty()) {\r\n            return this;\r\n        }\r\n        else {\r\n            var front = relativePath.getFront();\r\n            var childTree = this.children.get(front);\r\n            if (childTree !== null) {\r\n                return childTree.subtree(relativePath.popFront());\r\n            }\r\n            else {\r\n                return ImmutableTree.Empty;\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Sets a value at the specified path.\r\n     *\r\n     * @param {!Path} relativePath Path to set value at.\r\n     * @param {?T} toSet Value to set.\r\n     * @return {!ImmutableTree.<T>} Resulting tree.\r\n     */\r\n    ImmutableTree.prototype.set = function (relativePath, toSet) {\r\n        if (relativePath.isEmpty()) {\r\n            return new ImmutableTree(toSet, this.children);\r\n        }\r\n        else {\r\n            var front = relativePath.getFront();\r\n            var child = this.children.get(front) || ImmutableTree.Empty;\r\n            var newChild = child.set(relativePath.popFront(), toSet);\r\n            var newChildren = this.children.insert(front, newChild);\r\n            return new ImmutableTree(this.value, newChildren);\r\n        }\r\n    };\r\n    /**\r\n     * Removes the value at the specified path.\r\n     *\r\n     * @param {!Path} relativePath Path to value to remove.\r\n     * @return {!ImmutableTree.<T>} Resulting tree.\r\n     */\r\n    ImmutableTree.prototype.remove = function (relativePath) {\r\n        if (relativePath.isEmpty()) {\r\n            if (this.children.isEmpty()) {\r\n                return ImmutableTree.Empty;\r\n            }\r\n            else {\r\n                return new ImmutableTree(null, this.children);\r\n            }\r\n        }\r\n        else {\r\n            var front = relativePath.getFront();\r\n            var child = this.children.get(front);\r\n            if (child) {\r\n                var newChild = child.remove(relativePath.popFront());\r\n                var newChildren = void 0;\r\n                if (newChild.isEmpty()) {\r\n                    newChildren = this.children.remove(front);\r\n                }\r\n                else {\r\n                    newChildren = this.children.insert(front, newChild);\r\n                }\r\n                if (this.value === null && newChildren.isEmpty()) {\r\n                    return ImmutableTree.Empty;\r\n                }\r\n                else {\r\n                    return new ImmutableTree(this.value, newChildren);\r\n                }\r\n            }\r\n            else {\r\n                return this;\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Gets a value from the tree.\r\n     *\r\n     * @param {!Path} relativePath Path to get value for.\r\n     * @return {?T} Value at path, or null.\r\n     */\r\n    ImmutableTree.prototype.get = function (relativePath) {\r\n        if (relativePath.isEmpty()) {\r\n            return this.value;\r\n        }\r\n        else {\r\n            var front = relativePath.getFront();\r\n            var child = this.children.get(front);\r\n            if (child) {\r\n                return child.get(relativePath.popFront());\r\n            }\r\n            else {\r\n                return null;\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Replace the subtree at the specified path with the given new tree.\r\n     *\r\n     * @param {!Path} relativePath Path to replace subtree for.\r\n     * @param {!ImmutableTree} newTree New tree.\r\n     * @return {!ImmutableTree} Resulting tree.\r\n     */\r\n    ImmutableTree.prototype.setTree = function (relativePath, newTree) {\r\n        if (relativePath.isEmpty()) {\r\n            return newTree;\r\n        }\r\n        else {\r\n            var front = relativePath.getFront();\r\n            var child = this.children.get(front) || ImmutableTree.Empty;\r\n            var newChild = child.setTree(relativePath.popFront(), newTree);\r\n            var newChildren = void 0;\r\n            if (newChild.isEmpty()) {\r\n                newChildren = this.children.remove(front);\r\n            }\r\n            else {\r\n                newChildren = this.children.insert(front, newChild);\r\n            }\r\n            return new ImmutableTree(this.value, newChildren);\r\n        }\r\n    };\r\n    /**\r\n     * Performs a depth first fold on this tree. Transforms a tree into a single\r\n     * value, given a function that operates on the path to a node, an optional\r\n     * current value, and a map of child names to folded subtrees\r\n     * @template V\r\n     * @param {function(Path, ?T, Object.<string, V>):V} fn\r\n     * @return {V}\r\n     */\r\n    ImmutableTree.prototype.fold = function (fn) {\r\n        return this.fold_(Path.Empty, fn);\r\n    };\r\n    /**\r\n     * Recursive helper for public-facing fold() method\r\n     * @template V\r\n     * @param {!Path} pathSoFar\r\n     * @param {function(Path, ?T, Object.<string, V>):V} fn\r\n     * @return {V}\r\n     * @private\r\n     */\r\n    ImmutableTree.prototype.fold_ = function (pathSoFar, fn) {\r\n        var accum = {};\r\n        this.children.inorderTraversal(function (childKey, childTree) {\r\n            accum[childKey] = childTree.fold_(pathSoFar.child(childKey), fn);\r\n        });\r\n        return fn(pathSoFar, this.value, accum);\r\n    };\r\n    /**\r\n     * Find the first matching value on the given path. Return the result of applying f to it.\r\n     * @template V\r\n     * @param {!Path} path\r\n     * @param {!function(!Path, !T):?V} f\r\n     * @return {?V}\r\n     */\r\n    ImmutableTree.prototype.findOnPath = function (path, f) {\r\n        return this.findOnPath_(path, Path.Empty, f);\r\n    };\r\n    ImmutableTree.prototype.findOnPath_ = function (pathToFollow, pathSoFar, f) {\r\n        var result = this.value ? f(pathSoFar, this.value) : false;\r\n        if (result) {\r\n            return result;\r\n        }\r\n        else {\r\n            if (pathToFollow.isEmpty()) {\r\n                return null;\r\n            }\r\n            else {\r\n                var front = pathToFollow.getFront();\r\n                var nextChild = this.children.get(front);\r\n                if (nextChild) {\r\n                    return nextChild.findOnPath_(pathToFollow.popFront(), pathSoFar.child(front), f);\r\n                }\r\n                else {\r\n                    return null;\r\n                }\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!function(!Path, !T)} f\r\n     * @returns {!ImmutableTree.<T>}\r\n     */\r\n    ImmutableTree.prototype.foreachOnPath = function (path, f) {\r\n        return this.foreachOnPath_(path, Path.Empty, f);\r\n    };\r\n    ImmutableTree.prototype.foreachOnPath_ = function (pathToFollow, currentRelativePath, f) {\r\n        if (pathToFollow.isEmpty()) {\r\n            return this;\r\n        }\r\n        else {\r\n            if (this.value) {\r\n                f(currentRelativePath, this.value);\r\n            }\r\n            var front = pathToFollow.getFront();\r\n            var nextChild = this.children.get(front);\r\n            if (nextChild) {\r\n                return nextChild.foreachOnPath_(pathToFollow.popFront(), currentRelativePath.child(front), f);\r\n            }\r\n            else {\r\n                return ImmutableTree.Empty;\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Calls the given function for each node in the tree that has a value.\r\n     *\r\n     * @param {function(!Path, !T)} f A function to be called with\r\n     *   the path from the root of the tree to a node, and the value at that node.\r\n     *   Called in depth-first order.\r\n     */\r\n    ImmutableTree.prototype.foreach = function (f) {\r\n        this.foreach_(Path.Empty, f);\r\n    };\r\n    ImmutableTree.prototype.foreach_ = function (currentRelativePath, f) {\r\n        this.children.inorderTraversal(function (childName, childTree) {\r\n            childTree.foreach_(currentRelativePath.child(childName), f);\r\n        });\r\n        if (this.value) {\r\n            f(currentRelativePath, this.value);\r\n        }\r\n    };\r\n    /**\r\n     *\r\n     * @param {function(string, !T)} f\r\n     */\r\n    ImmutableTree.prototype.foreachChild = function (f) {\r\n        this.children.inorderTraversal(function (childName, childTree) {\r\n            if (childTree.value) {\r\n                f(childName, childTree.value);\r\n            }\r\n        });\r\n    };\r\n    ImmutableTree.Empty = new ImmutableTree(null);\r\n    return ImmutableTree;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param {!OperationSource} source\r\n * @param {!Path} path\r\n * @constructor\r\n * @implements {Operation}\r\n */\r\nvar ListenComplete = /** @class */ (function () {\r\n    function ListenComplete(source, path) {\r\n        this.source = source;\r\n        this.path = path;\r\n        /** @inheritDoc */\r\n        this.type = OperationType.LISTEN_COMPLETE;\r\n    }\r\n    ListenComplete.prototype.operationForChild = function (childName) {\r\n        if (this.path.isEmpty()) {\r\n            return new ListenComplete(this.source, Path.Empty);\r\n        }\r\n        else {\r\n            return new ListenComplete(this.source, this.path.popFront());\r\n        }\r\n    };\r\n    return ListenComplete;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param {!OperationSource} source\r\n * @param {!Path} path\r\n * @param {!Node} snap\r\n * @constructor\r\n * @implements {Operation}\r\n */\r\nvar Overwrite = /** @class */ (function () {\r\n    function Overwrite(source, path, snap) {\r\n        this.source = source;\r\n        this.path = path;\r\n        this.snap = snap;\r\n        /** @inheritDoc */\r\n        this.type = OperationType.OVERWRITE;\r\n    }\r\n    Overwrite.prototype.operationForChild = function (childName) {\r\n        if (this.path.isEmpty()) {\r\n            return new Overwrite(this.source, Path.Empty, this.snap.getImmediateChild(childName));\r\n        }\r\n        else {\r\n            return new Overwrite(this.source, this.path.popFront(), this.snap);\r\n        }\r\n    };\r\n    return Overwrite;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param {!OperationSource} source\r\n * @param {!Path} path\r\n * @param {!ImmutableTree.<!Node>} children\r\n * @constructor\r\n * @implements {Operation}\r\n */\r\nvar Merge = /** @class */ (function () {\r\n    function Merge(\r\n    /**@inheritDoc */ source, \r\n    /**@inheritDoc */ path, \r\n    /**@inheritDoc */ children) {\r\n        this.source = source;\r\n        this.path = path;\r\n        this.children = children;\r\n        /** @inheritDoc */\r\n        this.type = OperationType.MERGE;\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    Merge.prototype.operationForChild = function (childName) {\r\n        if (this.path.isEmpty()) {\r\n            var childTree = this.children.subtree(new Path(childName));\r\n            if (childTree.isEmpty()) {\r\n                // This child is unaffected\r\n                return null;\r\n            }\r\n            else if (childTree.value) {\r\n                // We have a snapshot for the child in question.  This becomes an overwrite of the child.\r\n                return new Overwrite(this.source, Path.Empty, childTree.value);\r\n            }\r\n            else {\r\n                // This is a merge at a deeper level\r\n                return new Merge(this.source, Path.Empty, childTree);\r\n            }\r\n        }\r\n        else {\r\n            util.assert(this.path.getFront() === childName, \"Can't get a merge for a child not on the path of the operation\");\r\n            return new Merge(this.source, this.path.popFront(), this.children);\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    Merge.prototype.toString = function () {\r\n        return ('Operation(' +\r\n            this.path +\r\n            ': ' +\r\n            this.source.toString() +\r\n            ' merge: ' +\r\n            this.children.toString() +\r\n            ')');\r\n    };\r\n    return Merge;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A cache node only stores complete children. Additionally it holds a flag whether the node can be considered fully\r\n * initialized in the sense that we know at one point in time this represented a valid state of the world, e.g.\r\n * initialized with data from the server, or a complete overwrite by the client. The filtered flag also tracks\r\n * whether a node potentially had children removed due to a filter.\r\n */\r\nvar CacheNode = /** @class */ (function () {\r\n    /**\r\n     * @param {!Node} node_\r\n     * @param {boolean} fullyInitialized_\r\n     * @param {boolean} filtered_\r\n     */\r\n    function CacheNode(node_, fullyInitialized_, filtered_) {\r\n        this.node_ = node_;\r\n        this.fullyInitialized_ = fullyInitialized_;\r\n        this.filtered_ = filtered_;\r\n    }\r\n    /**\r\n     * Returns whether this node was fully initialized with either server data or a complete overwrite by the client\r\n     * @return {boolean}\r\n     */\r\n    CacheNode.prototype.isFullyInitialized = function () {\r\n        return this.fullyInitialized_;\r\n    };\r\n    /**\r\n     * Returns whether this node is potentially missing children due to a filter applied to the node\r\n     * @return {boolean}\r\n     */\r\n    CacheNode.prototype.isFiltered = function () {\r\n        return this.filtered_;\r\n    };\r\n    /**\r\n     * @param {!Path} path\r\n     * @return {boolean}\r\n     */\r\n    CacheNode.prototype.isCompleteForPath = function (path) {\r\n        if (path.isEmpty()) {\r\n            return this.isFullyInitialized() && !this.filtered_;\r\n        }\r\n        var childKey = path.getFront();\r\n        return this.isCompleteForChild(childKey);\r\n    };\r\n    /**\r\n     * @param {!string} key\r\n     * @return {boolean}\r\n     */\r\n    CacheNode.prototype.isCompleteForChild = function (key) {\r\n        return ((this.isFullyInitialized() && !this.filtered_) || this.node_.hasChild(key));\r\n    };\r\n    /**\r\n     * @return {!Node}\r\n     */\r\n    CacheNode.prototype.getNode = function () {\r\n        return this.node_;\r\n    };\r\n    return CacheNode;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Stores the data we have cached for a view.\r\n *\r\n * serverSnap is the cached server data, eventSnap is the cached event data (server data plus any local writes).\r\n *\r\n * @constructor\r\n */\r\nvar ViewCache = /** @class */ (function () {\r\n    /**\r\n     *\r\n     * @param {!CacheNode} eventCache_\r\n     * @param {!CacheNode} serverCache_\r\n     */\r\n    function ViewCache(eventCache_, serverCache_) {\r\n        this.eventCache_ = eventCache_;\r\n        this.serverCache_ = serverCache_;\r\n    }\r\n    /**\r\n     * @param {!Node} eventSnap\r\n     * @param {boolean} complete\r\n     * @param {boolean} filtered\r\n     * @return {!ViewCache}\r\n     */\r\n    ViewCache.prototype.updateEventSnap = function (eventSnap, complete, filtered) {\r\n        return new ViewCache(new CacheNode(eventSnap, complete, filtered), this.serverCache_);\r\n    };\r\n    /**\r\n     * @param {!Node} serverSnap\r\n     * @param {boolean} complete\r\n     * @param {boolean} filtered\r\n     * @return {!ViewCache}\r\n     */\r\n    ViewCache.prototype.updateServerSnap = function (serverSnap, complete, filtered) {\r\n        return new ViewCache(this.eventCache_, new CacheNode(serverSnap, complete, filtered));\r\n    };\r\n    /**\r\n     * @return {!CacheNode}\r\n     */\r\n    ViewCache.prototype.getEventCache = function () {\r\n        return this.eventCache_;\r\n    };\r\n    /**\r\n     * @return {?Node}\r\n     */\r\n    ViewCache.prototype.getCompleteEventSnap = function () {\r\n        return this.eventCache_.isFullyInitialized()\r\n            ? this.eventCache_.getNode()\r\n            : null;\r\n    };\r\n    /**\r\n     * @return {!CacheNode}\r\n     */\r\n    ViewCache.prototype.getServerCache = function () {\r\n        return this.serverCache_;\r\n    };\r\n    /**\r\n     * @return {?Node}\r\n     */\r\n    ViewCache.prototype.getCompleteServerSnap = function () {\r\n        return this.serverCache_.isFullyInitialized()\r\n            ? this.serverCache_.getNode()\r\n            : null;\r\n    };\r\n    /**\r\n     * @const\r\n     * @type {ViewCache}\r\n     */\r\n    ViewCache.Empty = new ViewCache(new CacheNode(ChildrenNode.EMPTY_NODE, \r\n    /*fullyInitialized=*/ false, \r\n    /*filtered=*/ false), new CacheNode(ChildrenNode.EMPTY_NODE, \r\n    /*fullyInitialized=*/ false, \r\n    /*filtered=*/ false));\r\n    return ViewCache;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @constructor\r\n * @struct\r\n * @param {!string} type The event type\r\n * @param {!Node} snapshotNode The data\r\n * @param {string=} childName The name for this child, if it's a child event\r\n * @param {Node=} oldSnap Used for intermediate processing of child changed events\r\n * @param {string=} prevName The name for the previous child, if applicable\r\n */\r\nvar Change = /** @class */ (function () {\r\n    function Change(type, snapshotNode, childName, oldSnap, prevName) {\r\n        this.type = type;\r\n        this.snapshotNode = snapshotNode;\r\n        this.childName = childName;\r\n        this.oldSnap = oldSnap;\r\n        this.prevName = prevName;\r\n    }\r\n    /**\r\n     * @param {!Node} snapshot\r\n     * @return {!Change}\r\n     */\r\n    Change.valueChange = function (snapshot) {\r\n        return new Change(Change.VALUE, snapshot);\r\n    };\r\n    /**\r\n     * @param {string} childKey\r\n     * @param {!Node} snapshot\r\n     * @return {!Change}\r\n     */\r\n    Change.childAddedChange = function (childKey, snapshot) {\r\n        return new Change(Change.CHILD_ADDED, snapshot, childKey);\r\n    };\r\n    /**\r\n     * @param {string} childKey\r\n     * @param {!Node} snapshot\r\n     * @return {!Change}\r\n     */\r\n    Change.childRemovedChange = function (childKey, snapshot) {\r\n        return new Change(Change.CHILD_REMOVED, snapshot, childKey);\r\n    };\r\n    /**\r\n     * @param {string} childKey\r\n     * @param {!Node} newSnapshot\r\n     * @param {!Node} oldSnapshot\r\n     * @return {!Change}\r\n     */\r\n    Change.childChangedChange = function (childKey, newSnapshot, oldSnapshot) {\r\n        return new Change(Change.CHILD_CHANGED, newSnapshot, childKey, oldSnapshot);\r\n    };\r\n    /**\r\n     * @param {string} childKey\r\n     * @param {!Node} snapshot\r\n     * @return {!Change}\r\n     */\r\n    Change.childMovedChange = function (childKey, snapshot) {\r\n        return new Change(Change.CHILD_MOVED, snapshot, childKey);\r\n    };\r\n    //event types\r\n    /** Event type for a child added */\r\n    Change.CHILD_ADDED = 'child_added';\r\n    /** Event type for a child removed */\r\n    Change.CHILD_REMOVED = 'child_removed';\r\n    /** Event type for a child changed */\r\n    Change.CHILD_CHANGED = 'child_changed';\r\n    /** Event type for a child moved */\r\n    Change.CHILD_MOVED = 'child_moved';\r\n    /** Event type for a value change */\r\n    Change.VALUE = 'value';\r\n    return Change;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Doesn't really filter nodes but applies an index to the node and keeps track of any changes\r\n *\r\n * @constructor\r\n * @implements {NodeFilter}\r\n * @param {!Index} index\r\n */\r\nvar IndexedFilter = /** @class */ (function () {\r\n    function IndexedFilter(index_) {\r\n        this.index_ = index_;\r\n    }\r\n    IndexedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n        util.assert(snap.isIndexed(this.index_), 'A node must be indexed if only a child is updated');\r\n        var oldChild = snap.getImmediateChild(key);\r\n        // Check if anything actually changed.\r\n        if (oldChild.getChild(affectedPath).equals(newChild.getChild(affectedPath))) {\r\n            // There's an edge case where a child can enter or leave the view because affectedPath was set to null.\r\n            // In this case, affectedPath will appear null in both the old and new snapshots.  So we need\r\n            // to avoid treating these cases as \"nothing changed.\"\r\n            if (oldChild.isEmpty() == newChild.isEmpty()) {\r\n                // Nothing changed.\r\n                // This assert should be valid, but it's expensive (can dominate perf testing) so don't actually do it.\r\n                //assert(oldChild.equals(newChild), 'Old and new snapshots should be equal.');\r\n                return snap;\r\n            }\r\n        }\r\n        if (optChangeAccumulator != null) {\r\n            if (newChild.isEmpty()) {\r\n                if (snap.hasChild(key)) {\r\n                    optChangeAccumulator.trackChildChange(Change.childRemovedChange(key, oldChild));\r\n                }\r\n                else {\r\n                    util.assert(snap.isLeafNode(), 'A child remove without an old child only makes sense on a leaf node');\r\n                }\r\n            }\r\n            else if (oldChild.isEmpty()) {\r\n                optChangeAccumulator.trackChildChange(Change.childAddedChange(key, newChild));\r\n            }\r\n            else {\r\n                optChangeAccumulator.trackChildChange(Change.childChangedChange(key, newChild, oldChild));\r\n            }\r\n        }\r\n        if (snap.isLeafNode() && newChild.isEmpty()) {\r\n            return snap;\r\n        }\r\n        else {\r\n            // Make sure the node is indexed\r\n            return snap.updateImmediateChild(key, newChild).withIndex(this.index_);\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    IndexedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {\r\n        if (optChangeAccumulator != null) {\r\n            if (!oldSnap.isLeafNode()) {\r\n                oldSnap.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n                    if (!newSnap.hasChild(key)) {\r\n                        optChangeAccumulator.trackChildChange(Change.childRemovedChange(key, childNode));\r\n                    }\r\n                });\r\n            }\r\n            if (!newSnap.isLeafNode()) {\r\n                newSnap.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n                    if (oldSnap.hasChild(key)) {\r\n                        var oldChild = oldSnap.getImmediateChild(key);\r\n                        if (!oldChild.equals(childNode)) {\r\n                            optChangeAccumulator.trackChildChange(Change.childChangedChange(key, childNode, oldChild));\r\n                        }\r\n                    }\r\n                    else {\r\n                        optChangeAccumulator.trackChildChange(Change.childAddedChange(key, childNode));\r\n                    }\r\n                });\r\n            }\r\n        }\r\n        return newSnap.withIndex(this.index_);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    IndexedFilter.prototype.updatePriority = function (oldSnap, newPriority) {\r\n        if (oldSnap.isEmpty()) {\r\n            return ChildrenNode.EMPTY_NODE;\r\n        }\r\n        else {\r\n            return oldSnap.updatePriority(newPriority);\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    IndexedFilter.prototype.filtersNodes = function () {\r\n        return false;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    IndexedFilter.prototype.getIndexedFilter = function () {\r\n        return this;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    IndexedFilter.prototype.getIndex = function () {\r\n        return this.index_;\r\n    };\r\n    return IndexedFilter;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @constructor\r\n */\r\nvar ChildChangeAccumulator = /** @class */ (function () {\r\n    function ChildChangeAccumulator() {\r\n        this.changeMap_ = {};\r\n    }\r\n    /**\r\n     * @param {!Change} change\r\n     */\r\n    ChildChangeAccumulator.prototype.trackChildChange = function (change) {\r\n        var type = change.type;\r\n        var childKey /** @type {!string} */ = change.childName;\r\n        util.assert(type == Change.CHILD_ADDED ||\r\n            type == Change.CHILD_CHANGED ||\r\n            type == Change.CHILD_REMOVED, 'Only child changes supported for tracking');\r\n        util.assert(childKey !== '.priority', 'Only non-priority child changes can be tracked.');\r\n        var oldChange = util.safeGet(this.changeMap_, childKey);\r\n        if (oldChange) {\r\n            var oldType = oldChange.type;\r\n            if (type == Change.CHILD_ADDED && oldType == Change.CHILD_REMOVED) {\r\n                this.changeMap_[childKey] = Change.childChangedChange(childKey, change.snapshotNode, oldChange.snapshotNode);\r\n            }\r\n            else if (type == Change.CHILD_REMOVED &&\r\n                oldType == Change.CHILD_ADDED) {\r\n                delete this.changeMap_[childKey];\r\n            }\r\n            else if (type == Change.CHILD_REMOVED &&\r\n                oldType == Change.CHILD_CHANGED) {\r\n                this.changeMap_[childKey] = Change.childRemovedChange(childKey, oldChange.oldSnap);\r\n            }\r\n            else if (type == Change.CHILD_CHANGED &&\r\n                oldType == Change.CHILD_ADDED) {\r\n                this.changeMap_[childKey] = Change.childAddedChange(childKey, change.snapshotNode);\r\n            }\r\n            else if (type == Change.CHILD_CHANGED &&\r\n                oldType == Change.CHILD_CHANGED) {\r\n                this.changeMap_[childKey] = Change.childChangedChange(childKey, change.snapshotNode, oldChange.oldSnap);\r\n            }\r\n            else {\r\n                throw util.assertionError('Illegal combination of changes: ' +\r\n                    change +\r\n                    ' occurred after ' +\r\n                    oldChange);\r\n            }\r\n        }\r\n        else {\r\n            this.changeMap_[childKey] = change;\r\n        }\r\n    };\r\n    /**\r\n     * @return {!Array.<!Change>}\r\n     */\r\n    ChildChangeAccumulator.prototype.getChanges = function () {\r\n        return util.getValues(this.changeMap_);\r\n    };\r\n    return ChildChangeAccumulator;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of CompleteChildSource that never returns any additional children\r\n *\r\n * @private\r\n * @constructor\r\n * @implements CompleteChildSource\r\n */\r\nvar NoCompleteChildSource_ = /** @class */ (function () {\r\n    function NoCompleteChildSource_() {\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    NoCompleteChildSource_.prototype.getCompleteChild = function (childKey) {\r\n        return null;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    NoCompleteChildSource_.prototype.getChildAfterChild = function (index, child, reverse) {\r\n        return null;\r\n    };\r\n    return NoCompleteChildSource_;\r\n}());\r\n/**\r\n * Singleton instance.\r\n * @const\r\n * @type {!CompleteChildSource}\r\n */\r\nvar NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();\r\n/**\r\n * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or\r\n * old event caches available to calculate complete children.\r\n *\r\n *\r\n * @implements CompleteChildSource\r\n */\r\nvar WriteTreeCompleteChildSource = /** @class */ (function () {\r\n    /**\r\n     * @param {!WriteTreeRef} writes_\r\n     * @param {!ViewCache} viewCache_\r\n     * @param {?Node} optCompleteServerCache_\r\n     */\r\n    function WriteTreeCompleteChildSource(writes_, viewCache_, optCompleteServerCache_) {\r\n        if (optCompleteServerCache_ === void 0) { optCompleteServerCache_ = null; }\r\n        this.writes_ = writes_;\r\n        this.viewCache_ = viewCache_;\r\n        this.optCompleteServerCache_ = optCompleteServerCache_;\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    WriteTreeCompleteChildSource.prototype.getCompleteChild = function (childKey) {\r\n        var node = this.viewCache_.getEventCache();\r\n        if (node.isCompleteForChild(childKey)) {\r\n            return node.getNode().getImmediateChild(childKey);\r\n        }\r\n        else {\r\n            var serverNode = this.optCompleteServerCache_ != null\r\n                ? new CacheNode(this.optCompleteServerCache_, true, false)\r\n                : this.viewCache_.getServerCache();\r\n            return this.writes_.calcCompleteChild(childKey, serverNode);\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    WriteTreeCompleteChildSource.prototype.getChildAfterChild = function (index, child, reverse) {\r\n        var completeServerData = this.optCompleteServerCache_ != null\r\n            ? this.optCompleteServerCache_\r\n            : this.viewCache_.getCompleteServerSnap();\r\n        var nodes = this.writes_.calcIndexedSlice(completeServerData, child, 1, reverse, index);\r\n        if (nodes.length === 0) {\r\n            return null;\r\n        }\r\n        else {\r\n            return nodes[0];\r\n        }\r\n    };\r\n    return WriteTreeCompleteChildSource;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @constructor\r\n * @struct\r\n */\r\nvar ProcessorResult = /** @class */ (function () {\r\n    /**\r\n     * @param {!ViewCache} viewCache\r\n     * @param {!Array.<!Change>} changes\r\n     */\r\n    function ProcessorResult(viewCache, changes) {\r\n        this.viewCache = viewCache;\r\n        this.changes = changes;\r\n    }\r\n    return ProcessorResult;\r\n}());\r\n/**\r\n * @constructor\r\n */\r\nvar ViewProcessor = /** @class */ (function () {\r\n    /**\r\n     * @param {!NodeFilter} filter_\r\n     */\r\n    function ViewProcessor(filter_) {\r\n        this.filter_ = filter_;\r\n    }\r\n    /**\r\n     * @param {!ViewCache} viewCache\r\n     */\r\n    ViewProcessor.prototype.assertIndexed = function (viewCache) {\r\n        util.assert(viewCache\r\n            .getEventCache()\r\n            .getNode()\r\n            .isIndexed(this.filter_.getIndex()), 'Event snap not indexed');\r\n        util.assert(viewCache\r\n            .getServerCache()\r\n            .getNode()\r\n            .isIndexed(this.filter_.getIndex()), 'Server snap not indexed');\r\n    };\r\n    /**\r\n     * @param {!ViewCache} oldViewCache\r\n     * @param {!Operation} operation\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {?Node} completeCache\r\n     * @return {!ProcessorResult}\r\n     */\r\n    ViewProcessor.prototype.applyOperation = function (oldViewCache, operation, writesCache, completeCache) {\r\n        var accumulator = new ChildChangeAccumulator();\r\n        var newViewCache, filterServerNode;\r\n        if (operation.type === OperationType.OVERWRITE) {\r\n            var overwrite = operation;\r\n            if (overwrite.source.fromUser) {\r\n                newViewCache = this.applyUserOverwrite_(oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, accumulator);\r\n            }\r\n            else {\r\n                util.assert(overwrite.source.fromServer, 'Unknown source.');\r\n                // We filter the node if it's a tagged update or the node has been previously filtered  and the\r\n                // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered\r\n                // again\r\n                filterServerNode =\r\n                    overwrite.source.tagged ||\r\n                        (oldViewCache.getServerCache().isFiltered() &&\r\n                            !overwrite.path.isEmpty());\r\n                newViewCache = this.applyServerOverwrite_(oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, filterServerNode, accumulator);\r\n            }\r\n        }\r\n        else if (operation.type === OperationType.MERGE) {\r\n            var merge = operation;\r\n            if (merge.source.fromUser) {\r\n                newViewCache = this.applyUserMerge_(oldViewCache, merge.path, merge.children, writesCache, completeCache, accumulator);\r\n            }\r\n            else {\r\n                util.assert(merge.source.fromServer, 'Unknown source.');\r\n                // We filter the node if it's a tagged update or the node has been previously filtered\r\n                filterServerNode =\r\n                    merge.source.tagged || oldViewCache.getServerCache().isFiltered();\r\n                newViewCache = this.applyServerMerge_(oldViewCache, merge.path, merge.children, writesCache, completeCache, filterServerNode, accumulator);\r\n            }\r\n        }\r\n        else if (operation.type === OperationType.ACK_USER_WRITE) {\r\n            var ackUserWrite = operation;\r\n            if (!ackUserWrite.revert) {\r\n                newViewCache = this.ackUserWrite_(oldViewCache, ackUserWrite.path, ackUserWrite.affectedTree, writesCache, completeCache, accumulator);\r\n            }\r\n            else {\r\n                newViewCache = this.revertUserWrite_(oldViewCache, ackUserWrite.path, writesCache, completeCache, accumulator);\r\n            }\r\n        }\r\n        else if (operation.type === OperationType.LISTEN_COMPLETE) {\r\n            newViewCache = this.listenComplete_(oldViewCache, operation.path, writesCache, accumulator);\r\n        }\r\n        else {\r\n            throw util.assertionError('Unknown operation type: ' + operation.type);\r\n        }\r\n        var changes = accumulator.getChanges();\r\n        ViewProcessor.maybeAddValueEvent_(oldViewCache, newViewCache, changes);\r\n        return new ProcessorResult(newViewCache, changes);\r\n    };\r\n    /**\r\n     * @param {!ViewCache} oldViewCache\r\n     * @param {!ViewCache} newViewCache\r\n     * @param {!Array.<!Change>} accumulator\r\n     * @private\r\n     */\r\n    ViewProcessor.maybeAddValueEvent_ = function (oldViewCache, newViewCache, accumulator) {\r\n        var eventSnap = newViewCache.getEventCache();\r\n        if (eventSnap.isFullyInitialized()) {\r\n            var isLeafOrEmpty = eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();\r\n            var oldCompleteSnap = oldViewCache.getCompleteEventSnap();\r\n            if (accumulator.length > 0 ||\r\n                !oldViewCache.getEventCache().isFullyInitialized() ||\r\n                (isLeafOrEmpty &&\r\n                    !eventSnap\r\n                        .getNode()\r\n                        .equals(/** @type {!Node} */ (oldCompleteSnap))) ||\r\n                !eventSnap\r\n                    .getNode()\r\n                    .getPriority()\r\n                    .equals(oldCompleteSnap.getPriority())) {\r\n                accumulator.push(Change.valueChange(\r\n                /** @type {!Node} */ newViewCache.getCompleteEventSnap()));\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * @param {!ViewCache} viewCache\r\n     * @param {!Path} changePath\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {!CompleteChildSource} source\r\n     * @param {!ChildChangeAccumulator} accumulator\r\n     * @return {!ViewCache}\r\n     * @private\r\n     */\r\n    ViewProcessor.prototype.generateEventCacheAfterServerEvent_ = function (viewCache, changePath, writesCache, source, accumulator) {\r\n        var oldEventSnap = viewCache.getEventCache();\r\n        if (writesCache.shadowingWrite(changePath) != null) {\r\n            // we have a shadowing write, ignore changes\r\n            return viewCache;\r\n        }\r\n        else {\r\n            var newEventCache = void 0, serverNode = void 0;\r\n            if (changePath.isEmpty()) {\r\n                // TODO: figure out how this plays with \"sliding ack windows\"\r\n                util.assert(viewCache.getServerCache().isFullyInitialized(), 'If change path is empty, we must have complete server data');\r\n                if (viewCache.getServerCache().isFiltered()) {\r\n                    // We need to special case this, because we need to only apply writes to complete children, or\r\n                    // we might end up raising events for incomplete children. If the server data is filtered deep\r\n                    // writes cannot be guaranteed to be complete\r\n                    var serverCache = viewCache.getCompleteServerSnap();\r\n                    var completeChildren = serverCache instanceof ChildrenNode\r\n                        ? serverCache\r\n                        : ChildrenNode.EMPTY_NODE;\r\n                    var completeEventChildren = writesCache.calcCompleteEventChildren(completeChildren);\r\n                    newEventCache = this.filter_.updateFullNode(viewCache.getEventCache().getNode(), completeEventChildren, accumulator);\r\n                }\r\n                else {\r\n                    var completeNode = writesCache.calcCompleteEventCache(viewCache.getCompleteServerSnap());\r\n                    newEventCache = this.filter_.updateFullNode(viewCache.getEventCache().getNode(), completeNode, accumulator);\r\n                }\r\n            }\r\n            else {\r\n                var childKey = changePath.getFront();\r\n                if (childKey == '.priority') {\r\n                    util.assert(changePath.getLength() == 1, \"Can't have a priority with additional path components\");\r\n                    var oldEventNode = oldEventSnap.getNode();\r\n                    serverNode = viewCache.getServerCache().getNode();\r\n                    // we might have overwrites for this priority\r\n                    var updatedPriority = writesCache.calcEventCacheAfterServerOverwrite(changePath, oldEventNode, serverNode);\r\n                    if (updatedPriority != null) {\r\n                        newEventCache = this.filter_.updatePriority(oldEventNode, updatedPriority);\r\n                    }\r\n                    else {\r\n                        // priority didn't change, keep old node\r\n                        newEventCache = oldEventSnap.getNode();\r\n                    }\r\n                }\r\n                else {\r\n                    var childChangePath = changePath.popFront();\r\n                    // update child\r\n                    var newEventChild = void 0;\r\n                    if (oldEventSnap.isCompleteForChild(childKey)) {\r\n                        serverNode = viewCache.getServerCache().getNode();\r\n                        var eventChildUpdate = writesCache.calcEventCacheAfterServerOverwrite(changePath, oldEventSnap.getNode(), serverNode);\r\n                        if (eventChildUpdate != null) {\r\n                            newEventChild = oldEventSnap\r\n                                .getNode()\r\n                                .getImmediateChild(childKey)\r\n                                .updateChild(childChangePath, eventChildUpdate);\r\n                        }\r\n                        else {\r\n                            // Nothing changed, just keep the old child\r\n                            newEventChild = oldEventSnap\r\n                                .getNode()\r\n                                .getImmediateChild(childKey);\r\n                        }\r\n                    }\r\n                    else {\r\n                        newEventChild = writesCache.calcCompleteChild(childKey, viewCache.getServerCache());\r\n                    }\r\n                    if (newEventChild != null) {\r\n                        newEventCache = this.filter_.updateChild(oldEventSnap.getNode(), childKey, newEventChild, childChangePath, source, accumulator);\r\n                    }\r\n                    else {\r\n                        // no complete child available or no change\r\n                        newEventCache = oldEventSnap.getNode();\r\n                    }\r\n                }\r\n            }\r\n            return viewCache.updateEventSnap(newEventCache, oldEventSnap.isFullyInitialized() || changePath.isEmpty(), this.filter_.filtersNodes());\r\n        }\r\n    };\r\n    /**\r\n     * @param {!ViewCache} oldViewCache\r\n     * @param {!Path} changePath\r\n     * @param {!Node} changedSnap\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {?Node} completeCache\r\n     * @param {boolean} filterServerNode\r\n     * @param {!ChildChangeAccumulator} accumulator\r\n     * @return {!ViewCache}\r\n     * @private\r\n     */\r\n    ViewProcessor.prototype.applyServerOverwrite_ = function (oldViewCache, changePath, changedSnap, writesCache, completeCache, filterServerNode, accumulator) {\r\n        var oldServerSnap = oldViewCache.getServerCache();\r\n        var newServerCache;\r\n        var serverFilter = filterServerNode\r\n            ? this.filter_\r\n            : this.filter_.getIndexedFilter();\r\n        if (changePath.isEmpty()) {\r\n            newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), changedSnap, null);\r\n        }\r\n        else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {\r\n            // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update\r\n            var newServerNode = oldServerSnap\r\n                .getNode()\r\n                .updateChild(changePath, changedSnap);\r\n            newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), newServerNode, null);\r\n        }\r\n        else {\r\n            var childKey = changePath.getFront();\r\n            if (!oldServerSnap.isCompleteForPath(changePath) &&\r\n                changePath.getLength() > 1) {\r\n                // We don't update incomplete nodes with updates intended for other listeners\r\n                return oldViewCache;\r\n            }\r\n            var childChangePath = changePath.popFront();\r\n            var childNode = oldServerSnap.getNode().getImmediateChild(childKey);\r\n            var newChildNode = childNode.updateChild(childChangePath, changedSnap);\r\n            if (childKey == '.priority') {\r\n                newServerCache = serverFilter.updatePriority(oldServerSnap.getNode(), newChildNode);\r\n            }\r\n            else {\r\n                newServerCache = serverFilter.updateChild(oldServerSnap.getNode(), childKey, newChildNode, childChangePath, NO_COMPLETE_CHILD_SOURCE, null);\r\n            }\r\n        }\r\n        var newViewCache = oldViewCache.updateServerSnap(newServerCache, oldServerSnap.isFullyInitialized() || changePath.isEmpty(), serverFilter.filtersNodes());\r\n        var source = new WriteTreeCompleteChildSource(writesCache, newViewCache, completeCache);\r\n        return this.generateEventCacheAfterServerEvent_(newViewCache, changePath, writesCache, source, accumulator);\r\n    };\r\n    /**\r\n     * @param {!ViewCache} oldViewCache\r\n     * @param {!Path} changePath\r\n     * @param {!Node} changedSnap\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {?Node} completeCache\r\n     * @param {!ChildChangeAccumulator} accumulator\r\n     * @return {!ViewCache}\r\n     * @private\r\n     */\r\n    ViewProcessor.prototype.applyUserOverwrite_ = function (oldViewCache, changePath, changedSnap, writesCache, completeCache, accumulator) {\r\n        var oldEventSnap = oldViewCache.getEventCache();\r\n        var newViewCache, newEventCache;\r\n        var source = new WriteTreeCompleteChildSource(writesCache, oldViewCache, completeCache);\r\n        if (changePath.isEmpty()) {\r\n            newEventCache = this.filter_.updateFullNode(oldViewCache.getEventCache().getNode(), changedSnap, accumulator);\r\n            newViewCache = oldViewCache.updateEventSnap(newEventCache, true, this.filter_.filtersNodes());\r\n        }\r\n        else {\r\n            var childKey = changePath.getFront();\r\n            if (childKey === '.priority') {\r\n                newEventCache = this.filter_.updatePriority(oldViewCache.getEventCache().getNode(), changedSnap);\r\n                newViewCache = oldViewCache.updateEventSnap(newEventCache, oldEventSnap.isFullyInitialized(), oldEventSnap.isFiltered());\r\n            }\r\n            else {\r\n                var childChangePath = changePath.popFront();\r\n                var oldChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n                var newChild = void 0;\r\n                if (childChangePath.isEmpty()) {\r\n                    // Child overwrite, we can replace the child\r\n                    newChild = changedSnap;\r\n                }\r\n                else {\r\n                    var childNode = source.getCompleteChild(childKey);\r\n                    if (childNode != null) {\r\n                        if (childChangePath.getBack() === '.priority' &&\r\n                            childNode.getChild(childChangePath.parent()).isEmpty()) {\r\n                            // This is a priority update on an empty node. If this node exists on the server, the\r\n                            // server will send down the priority in the update, so ignore for now\r\n                            newChild = childNode;\r\n                        }\r\n                        else {\r\n                            newChild = childNode.updateChild(childChangePath, changedSnap);\r\n                        }\r\n                    }\r\n                    else {\r\n                        // There is no complete child node available\r\n                        newChild = ChildrenNode.EMPTY_NODE;\r\n                    }\r\n                }\r\n                if (!oldChild.equals(newChild)) {\r\n                    var newEventSnap = this.filter_.updateChild(oldEventSnap.getNode(), childKey, newChild, childChangePath, source, accumulator);\r\n                    newViewCache = oldViewCache.updateEventSnap(newEventSnap, oldEventSnap.isFullyInitialized(), this.filter_.filtersNodes());\r\n                }\r\n                else {\r\n                    newViewCache = oldViewCache;\r\n                }\r\n            }\r\n        }\r\n        return newViewCache;\r\n    };\r\n    /**\r\n     * @param {!ViewCache} viewCache\r\n     * @param {string} childKey\r\n     * @return {boolean}\r\n     * @private\r\n     */\r\n    ViewProcessor.cacheHasChild_ = function (viewCache, childKey) {\r\n        return viewCache.getEventCache().isCompleteForChild(childKey);\r\n    };\r\n    /**\r\n     * @param {!ViewCache} viewCache\r\n     * @param {!Path} path\r\n     * @param {ImmutableTree.<!Node>} changedChildren\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {?Node} serverCache\r\n     * @param {!ChildChangeAccumulator} accumulator\r\n     * @return {!ViewCache}\r\n     * @private\r\n     */\r\n    ViewProcessor.prototype.applyUserMerge_ = function (viewCache, path, changedChildren, writesCache, serverCache, accumulator) {\r\n        var _this = this;\r\n        // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n        // window leaving room for new items.  It's important we process these changes first, so we\r\n        // iterate the changes twice, first processing any that affect items currently in view.\r\n        // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n        // and event snap.  I'm not sure if this will result in edge cases when a child is in one but\r\n        // not the other.\r\n        var curViewCache = viewCache;\r\n        changedChildren.foreach(function (relativePath, childNode) {\r\n            var writePath = path.child(relativePath);\r\n            if (ViewProcessor.cacheHasChild_(viewCache, writePath.getFront())) {\r\n                curViewCache = _this.applyUserOverwrite_(curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n            }\r\n        });\r\n        changedChildren.foreach(function (relativePath, childNode) {\r\n            var writePath = path.child(relativePath);\r\n            if (!ViewProcessor.cacheHasChild_(viewCache, writePath.getFront())) {\r\n                curViewCache = _this.applyUserOverwrite_(curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n            }\r\n        });\r\n        return curViewCache;\r\n    };\r\n    /**\r\n     * @param {!Node} node\r\n     * @param {ImmutableTree.<!Node>} merge\r\n     * @return {!Node}\r\n     * @private\r\n     */\r\n    ViewProcessor.prototype.applyMerge_ = function (node, merge) {\r\n        merge.foreach(function (relativePath, childNode) {\r\n            node = node.updateChild(relativePath, childNode);\r\n        });\r\n        return node;\r\n    };\r\n    /**\r\n     * @param {!ViewCache} viewCache\r\n     * @param {!Path} path\r\n     * @param {!ImmutableTree.<!Node>} changedChildren\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {?Node} serverCache\r\n     * @param {boolean} filterServerNode\r\n     * @param {!ChildChangeAccumulator} accumulator\r\n     * @return {!ViewCache}\r\n     * @private\r\n     */\r\n    ViewProcessor.prototype.applyServerMerge_ = function (viewCache, path, changedChildren, writesCache, serverCache, filterServerNode, accumulator) {\r\n        var _this = this;\r\n        // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and\r\n        // wait for the complete data update coming soon.\r\n        if (viewCache\r\n            .getServerCache()\r\n            .getNode()\r\n            .isEmpty() &&\r\n            !viewCache.getServerCache().isFullyInitialized()) {\r\n            return viewCache;\r\n        }\r\n        // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n        // window leaving room for new items.  It's important we process these changes first, so we\r\n        // iterate the changes twice, first processing any that affect items currently in view.\r\n        // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n        // and event snap.  I'm not sure if this will result in edge cases when a child is in one but\r\n        // not the other.\r\n        var curViewCache = viewCache;\r\n        var viewMergeTree;\r\n        if (path.isEmpty()) {\r\n            viewMergeTree = changedChildren;\r\n        }\r\n        else {\r\n            viewMergeTree = ImmutableTree.Empty.setTree(path, changedChildren);\r\n        }\r\n        var serverNode = viewCache.getServerCache().getNode();\r\n        viewMergeTree.children.inorderTraversal(function (childKey, childTree) {\r\n            if (serverNode.hasChild(childKey)) {\r\n                var serverChild = viewCache\r\n                    .getServerCache()\r\n                    .getNode()\r\n                    .getImmediateChild(childKey);\r\n                var newChild = _this.applyMerge_(serverChild, childTree);\r\n                curViewCache = _this.applyServerOverwrite_(curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n            }\r\n        });\r\n        viewMergeTree.children.inorderTraversal(function (childKey, childMergeTree) {\r\n            var isUnknownDeepMerge = !viewCache.getServerCache().isCompleteForChild(childKey) &&\r\n                childMergeTree.value == null;\r\n            if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {\r\n                var serverChild = viewCache\r\n                    .getServerCache()\r\n                    .getNode()\r\n                    .getImmediateChild(childKey);\r\n                var newChild = _this.applyMerge_(serverChild, childMergeTree);\r\n                curViewCache = _this.applyServerOverwrite_(curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n            }\r\n        });\r\n        return curViewCache;\r\n    };\r\n    /**\r\n     * @param {!ViewCache} viewCache\r\n     * @param {!Path} ackPath\r\n     * @param {!ImmutableTree<!boolean>} affectedTree\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {?Node} completeCache\r\n     * @param {!ChildChangeAccumulator} accumulator\r\n     * @return {!ViewCache}\r\n     * @private\r\n     */\r\n    ViewProcessor.prototype.ackUserWrite_ = function (viewCache, ackPath, affectedTree, writesCache, completeCache, accumulator) {\r\n        if (writesCache.shadowingWrite(ackPath) != null) {\r\n            return viewCache;\r\n        }\r\n        // Only filter server node if it is currently filtered\r\n        var filterServerNode = viewCache.getServerCache().isFiltered();\r\n        // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update\r\n        // now that it won't be shadowed.\r\n        var serverCache = viewCache.getServerCache();\r\n        if (affectedTree.value != null) {\r\n            // This is an overwrite.\r\n            if ((ackPath.isEmpty() && serverCache.isFullyInitialized()) ||\r\n                serverCache.isCompleteForPath(ackPath)) {\r\n                return this.applyServerOverwrite_(viewCache, ackPath, serverCache.getNode().getChild(ackPath), writesCache, completeCache, filterServerNode, accumulator);\r\n            }\r\n            else if (ackPath.isEmpty()) {\r\n                // This is a goofy edge case where we are acking data at this location but don't have full data.  We\r\n                // should just re-apply whatever we have in our cache as a merge.\r\n                var changedChildren_1 = ImmutableTree.Empty;\r\n                serverCache.getNode().forEachChild(KEY_INDEX, function (name, node) {\r\n                    changedChildren_1 = changedChildren_1.set(new Path(name), node);\r\n                });\r\n                return this.applyServerMerge_(viewCache, ackPath, changedChildren_1, writesCache, completeCache, filterServerNode, accumulator);\r\n            }\r\n            else {\r\n                return viewCache;\r\n            }\r\n        }\r\n        else {\r\n            // This is a merge.\r\n            var changedChildren_2 = ImmutableTree.Empty;\r\n            affectedTree.foreach(function (mergePath, value) {\r\n                var serverCachePath = ackPath.child(mergePath);\r\n                if (serverCache.isCompleteForPath(serverCachePath)) {\r\n                    changedChildren_2 = changedChildren_2.set(mergePath, serverCache.getNode().getChild(serverCachePath));\r\n                }\r\n            });\r\n            return this.applyServerMerge_(viewCache, ackPath, changedChildren_2, writesCache, completeCache, filterServerNode, accumulator);\r\n        }\r\n    };\r\n    /**\r\n     * @param {!ViewCache} viewCache\r\n     * @param {!Path} path\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {!ChildChangeAccumulator} accumulator\r\n     * @return {!ViewCache}\r\n     * @private\r\n     */\r\n    ViewProcessor.prototype.listenComplete_ = function (viewCache, path, writesCache, accumulator) {\r\n        var oldServerNode = viewCache.getServerCache();\r\n        var newViewCache = viewCache.updateServerSnap(oldServerNode.getNode(), oldServerNode.isFullyInitialized() || path.isEmpty(), oldServerNode.isFiltered());\r\n        return this.generateEventCacheAfterServerEvent_(newViewCache, path, writesCache, NO_COMPLETE_CHILD_SOURCE, accumulator);\r\n    };\r\n    /**\r\n     * @param {!ViewCache} viewCache\r\n     * @param {!Path} path\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {?Node} completeServerCache\r\n     * @param {!ChildChangeAccumulator} accumulator\r\n     * @return {!ViewCache}\r\n     * @private\r\n     */\r\n    ViewProcessor.prototype.revertUserWrite_ = function (viewCache, path, writesCache, completeServerCache, accumulator) {\r\n        var complete;\r\n        if (writesCache.shadowingWrite(path) != null) {\r\n            return viewCache;\r\n        }\r\n        else {\r\n            var source = new WriteTreeCompleteChildSource(writesCache, viewCache, completeServerCache);\r\n            var oldEventCache = viewCache.getEventCache().getNode();\r\n            var newEventCache = void 0;\r\n            if (path.isEmpty() || path.getFront() === '.priority') {\r\n                var newNode = void 0;\r\n                if (viewCache.getServerCache().isFullyInitialized()) {\r\n                    newNode = writesCache.calcCompleteEventCache(viewCache.getCompleteServerSnap());\r\n                }\r\n                else {\r\n                    var serverChildren = viewCache.getServerCache().getNode();\r\n                    util.assert(serverChildren instanceof ChildrenNode, 'serverChildren would be complete if leaf node');\r\n                    newNode = writesCache.calcCompleteEventChildren(serverChildren);\r\n                }\r\n                newNode = newNode;\r\n                newEventCache = this.filter_.updateFullNode(oldEventCache, newNode, accumulator);\r\n            }\r\n            else {\r\n                var childKey = path.getFront();\r\n                var newChild = writesCache.calcCompleteChild(childKey, viewCache.getServerCache());\r\n                if (newChild == null &&\r\n                    viewCache.getServerCache().isCompleteForChild(childKey)) {\r\n                    newChild = oldEventCache.getImmediateChild(childKey);\r\n                }\r\n                if (newChild != null) {\r\n                    newEventCache = this.filter_.updateChild(oldEventCache, childKey, newChild, path.popFront(), source, accumulator);\r\n                }\r\n                else if (viewCache\r\n                    .getEventCache()\r\n                    .getNode()\r\n                    .hasChild(childKey)) {\r\n                    // No complete child available, delete the existing one, if any\r\n                    newEventCache = this.filter_.updateChild(oldEventCache, childKey, ChildrenNode.EMPTY_NODE, path.popFront(), source, accumulator);\r\n                }\r\n                else {\r\n                    newEventCache = oldEventCache;\r\n                }\r\n                if (newEventCache.isEmpty() &&\r\n                    viewCache.getServerCache().isFullyInitialized()) {\r\n                    // We might have reverted all child writes. Maybe the old event was a leaf node\r\n                    complete = writesCache.calcCompleteEventCache(viewCache.getCompleteServerSnap());\r\n                    if (complete.isLeafNode()) {\r\n                        newEventCache = this.filter_.updateFullNode(newEventCache, complete, accumulator);\r\n                    }\r\n                }\r\n            }\r\n            complete =\r\n                viewCache.getServerCache().isFullyInitialized() ||\r\n                    writesCache.shadowingWrite(Path.Empty) != null;\r\n            return viewCache.updateEventSnap(newEventCache, complete, this.filter_.filtersNodes());\r\n        }\r\n    };\r\n    return ViewProcessor;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An EventGenerator is used to convert \"raw\" changes (Change) as computed by the\r\n * CacheDiffer into actual events (Event) that can be raised.  See generateEventsForChanges()\r\n * for details.\r\n *\r\n * @constructor\r\n */\r\nvar EventGenerator = /** @class */ (function () {\r\n    /**\r\n     *\r\n     * @param {!Query} query_\r\n     */\r\n    function EventGenerator(query_) {\r\n        this.query_ = query_;\r\n        /**\r\n         * @private\r\n         * @type {!Index}\r\n         */\r\n        this.index_ = this.query_.getQueryParams().getIndex();\r\n    }\r\n    /**\r\n     * Given a set of raw changes (no moved events and prevName not specified yet), and a set of\r\n     * EventRegistrations that should be notified of these changes, generate the actual events to be raised.\r\n     *\r\n     * Notes:\r\n     *  - child_moved events will be synthesized at this time for any child_changed events that affect\r\n     *    our index.\r\n     *  - prevName will be calculated based on the index ordering.\r\n     *\r\n     * @param {!Array.<!Change>} changes\r\n     * @param {!Node} eventCache\r\n     * @param {!Array.<!EventRegistration>} eventRegistrations\r\n     * @return {!Array.<!Event>}\r\n     */\r\n    EventGenerator.prototype.generateEventsForChanges = function (changes, eventCache, eventRegistrations) {\r\n        var _this = this;\r\n        var events = [];\r\n        var moves = [];\r\n        changes.forEach(function (change) {\r\n            if (change.type === Change.CHILD_CHANGED &&\r\n                _this.index_.indexedValueChanged(change.oldSnap, change.snapshotNode)) {\r\n                moves.push(Change.childMovedChange(change.childName, change.snapshotNode));\r\n            }\r\n        });\r\n        this.generateEventsForType_(events, Change.CHILD_REMOVED, changes, eventRegistrations, eventCache);\r\n        this.generateEventsForType_(events, Change.CHILD_ADDED, changes, eventRegistrations, eventCache);\r\n        this.generateEventsForType_(events, Change.CHILD_MOVED, moves, eventRegistrations, eventCache);\r\n        this.generateEventsForType_(events, Change.CHILD_CHANGED, changes, eventRegistrations, eventCache);\r\n        this.generateEventsForType_(events, Change.VALUE, changes, eventRegistrations, eventCache);\r\n        return events;\r\n    };\r\n    /**\r\n     * Given changes of a single change type, generate the corresponding events.\r\n     *\r\n     * @param {!Array.<!Event>} events\r\n     * @param {!string} eventType\r\n     * @param {!Array.<!Change>} changes\r\n     * @param {!Array.<!EventRegistration>} registrations\r\n     * @param {!Node} eventCache\r\n     * @private\r\n     */\r\n    EventGenerator.prototype.generateEventsForType_ = function (events, eventType, changes, registrations, eventCache) {\r\n        var _this = this;\r\n        var filteredChanges = changes.filter(function (change) { return change.type === eventType; });\r\n        filteredChanges.sort(this.compareChanges_.bind(this));\r\n        filteredChanges.forEach(function (change) {\r\n            var materializedChange = _this.materializeSingleChange_(change, eventCache);\r\n            registrations.forEach(function (registration) {\r\n                if (registration.respondsTo(change.type)) {\r\n                    events.push(registration.createEvent(materializedChange, _this.query_));\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * @param {!Change} change\r\n     * @param {!Node} eventCache\r\n     * @return {!Change}\r\n     * @private\r\n     */\r\n    EventGenerator.prototype.materializeSingleChange_ = function (change, eventCache) {\r\n        if (change.type === 'value' || change.type === 'child_removed') {\r\n            return change;\r\n        }\r\n        else {\r\n            change.prevName = eventCache.getPredecessorChildName(\r\n            /** @type {!string} */\r\n            change.childName, change.snapshotNode, this.index_);\r\n            return change;\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Change} a\r\n     * @param {!Change} b\r\n     * @return {number}\r\n     * @private\r\n     */\r\n    EventGenerator.prototype.compareChanges_ = function (a, b) {\r\n        if (a.childName == null || b.childName == null) {\r\n            throw util.assertionError('Should only compare child_ events.');\r\n        }\r\n        var aWrapped = new NamedNode(a.childName, a.snapshotNode);\r\n        var bWrapped = new NamedNode(b.childName, b.snapshotNode);\r\n        return this.index_.compare(aWrapped, bWrapped);\r\n    };\r\n    return EventGenerator;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A view represents a specific location and query that has 1 or more event registrations.\r\n *\r\n * It does several things:\r\n *  - Maintains the list of event registrations for this location/query.\r\n *  - Maintains a cache of the data visible for this location/query.\r\n *  - Applies new operations (via applyOperation), updates the cache, and based on the event\r\n *    registrations returns the set of events to be raised.\r\n * @constructor\r\n */\r\nvar View = /** @class */ (function () {\r\n    /**\r\n     *\r\n     * @param {!Query} query_\r\n     * @param {!ViewCache} initialViewCache\r\n     */\r\n    function View(query_, initialViewCache) {\r\n        this.query_ = query_;\r\n        this.eventRegistrations_ = [];\r\n        var params = this.query_.getQueryParams();\r\n        var indexFilter = new IndexedFilter(params.getIndex());\r\n        var filter = params.getNodeFilter();\r\n        /**\r\n         * @type {ViewProcessor}\r\n         * @private\r\n         */\r\n        this.processor_ = new ViewProcessor(filter);\r\n        var initialServerCache = initialViewCache.getServerCache();\r\n        var initialEventCache = initialViewCache.getEventCache();\r\n        // Don't filter server node with other filter than index, wait for tagged listen\r\n        var serverSnap = indexFilter.updateFullNode(ChildrenNode.EMPTY_NODE, initialServerCache.getNode(), null);\r\n        var eventSnap = filter.updateFullNode(ChildrenNode.EMPTY_NODE, initialEventCache.getNode(), null);\r\n        var newServerCache = new CacheNode(serverSnap, initialServerCache.isFullyInitialized(), indexFilter.filtersNodes());\r\n        var newEventCache = new CacheNode(eventSnap, initialEventCache.isFullyInitialized(), filter.filtersNodes());\r\n        /**\r\n         * @type {!ViewCache}\r\n         * @private\r\n         */\r\n        this.viewCache_ = new ViewCache(newEventCache, newServerCache);\r\n        /**\r\n         * @type {!EventGenerator}\r\n         * @private\r\n         */\r\n        this.eventGenerator_ = new EventGenerator(this.query_);\r\n    }\r\n    /**\r\n     * @return {!Query}\r\n     */\r\n    View.prototype.getQuery = function () {\r\n        return this.query_;\r\n    };\r\n    /**\r\n     * @return {?Node}\r\n     */\r\n    View.prototype.getServerCache = function () {\r\n        return this.viewCache_.getServerCache().getNode();\r\n    };\r\n    /**\r\n     * @param {!Path} path\r\n     * @return {?Node}\r\n     */\r\n    View.prototype.getCompleteServerCache = function (path) {\r\n        var cache = this.viewCache_.getCompleteServerSnap();\r\n        if (cache) {\r\n            // If this isn't a \"loadsAllData\" view, then cache isn't actually a complete cache and\r\n            // we need to see if it contains the child we're interested in.\r\n            if (this.query_.getQueryParams().loadsAllData() ||\r\n                (!path.isEmpty() && !cache.getImmediateChild(path.getFront()).isEmpty())) {\r\n                return cache.getChild(path);\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    /**\r\n     * @return {boolean}\r\n     */\r\n    View.prototype.isEmpty = function () {\r\n        return this.eventRegistrations_.length === 0;\r\n    };\r\n    /**\r\n     * @param {!EventRegistration} eventRegistration\r\n     */\r\n    View.prototype.addEventRegistration = function (eventRegistration) {\r\n        this.eventRegistrations_.push(eventRegistration);\r\n    };\r\n    /**\r\n     * @param {?EventRegistration} eventRegistration If null, remove all callbacks.\r\n     * @param {Error=} cancelError If a cancelError is provided, appropriate cancel events will be returned.\r\n     * @return {!Array.<!Event>} Cancel events, if cancelError was provided.\r\n     */\r\n    View.prototype.removeEventRegistration = function (eventRegistration, cancelError) {\r\n        var cancelEvents = [];\r\n        if (cancelError) {\r\n            util.assert(eventRegistration == null, 'A cancel should cancel all event registrations.');\r\n            var path_1 = this.query_.path;\r\n            this.eventRegistrations_.forEach(function (registration) {\r\n                cancelError /** @type {!Error} */ = cancelError;\r\n                var maybeEvent = registration.createCancelEvent(cancelError, path_1);\r\n                if (maybeEvent) {\r\n                    cancelEvents.push(maybeEvent);\r\n                }\r\n            });\r\n        }\r\n        if (eventRegistration) {\r\n            var remaining = [];\r\n            for (var i = 0; i < this.eventRegistrations_.length; ++i) {\r\n                var existing = this.eventRegistrations_[i];\r\n                if (!existing.matches(eventRegistration)) {\r\n                    remaining.push(existing);\r\n                }\r\n                else if (eventRegistration.hasAnyCallback()) {\r\n                    // We're removing just this one\r\n                    remaining = remaining.concat(this.eventRegistrations_.slice(i + 1));\r\n                    break;\r\n                }\r\n            }\r\n            this.eventRegistrations_ = remaining;\r\n        }\r\n        else {\r\n            this.eventRegistrations_ = [];\r\n        }\r\n        return cancelEvents;\r\n    };\r\n    /**\r\n     * Applies the given Operation, updates our cache, and returns the appropriate events.\r\n     *\r\n     * @param {!Operation} operation\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {?Node} completeServerCache\r\n     * @return {!Array.<!Event>}\r\n     */\r\n    View.prototype.applyOperation = function (operation, writesCache, completeServerCache) {\r\n        if (operation.type === OperationType.MERGE &&\r\n            operation.source.queryId !== null) {\r\n            util.assert(this.viewCache_.getCompleteServerSnap(), 'We should always have a full cache before handling merges');\r\n            util.assert(this.viewCache_.getCompleteEventSnap(), 'Missing event cache, even though we have a server cache');\r\n        }\r\n        var oldViewCache = this.viewCache_;\r\n        var result = this.processor_.applyOperation(oldViewCache, operation, writesCache, completeServerCache);\r\n        this.processor_.assertIndexed(result.viewCache);\r\n        util.assert(result.viewCache.getServerCache().isFullyInitialized() ||\r\n            !oldViewCache.getServerCache().isFullyInitialized(), 'Once a server snap is complete, it should never go back');\r\n        this.viewCache_ = result.viewCache;\r\n        return this.generateEventsForChanges_(result.changes, result.viewCache.getEventCache().getNode(), null);\r\n    };\r\n    /**\r\n     * @param {!EventRegistration} registration\r\n     * @return {!Array.<!Event>}\r\n     */\r\n    View.prototype.getInitialEvents = function (registration) {\r\n        var eventSnap = this.viewCache_.getEventCache();\r\n        var initialChanges = [];\r\n        if (!eventSnap.getNode().isLeafNode()) {\r\n            var eventNode = eventSnap.getNode();\r\n            eventNode.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n                initialChanges.push(Change.childAddedChange(key, childNode));\r\n            });\r\n        }\r\n        if (eventSnap.isFullyInitialized()) {\r\n            initialChanges.push(Change.valueChange(eventSnap.getNode()));\r\n        }\r\n        return this.generateEventsForChanges_(initialChanges, eventSnap.getNode(), registration);\r\n    };\r\n    /**\r\n     * @private\r\n     * @param {!Array.<!Change>} changes\r\n     * @param {!Node} eventCache\r\n     * @param {EventRegistration=} eventRegistration\r\n     * @return {!Array.<!Event>}\r\n     */\r\n    View.prototype.generateEventsForChanges_ = function (changes, eventCache, eventRegistration) {\r\n        var registrations = eventRegistration\r\n            ? [eventRegistration]\r\n            : this.eventRegistrations_;\r\n        return this.eventGenerator_.generateEventsForChanges(changes, eventCache, registrations);\r\n    };\r\n    return View;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar __referenceConstructor$1;\r\n/**\r\n * SyncPoint represents a single location in a SyncTree with 1 or more event registrations, meaning we need to\r\n * maintain 1 or more Views at this location to cache server data and raise appropriate events for server changes\r\n * and user writes (set, transaction, update).\r\n *\r\n * It's responsible for:\r\n *  - Maintaining the set of 1 or more views necessary at this location (a SyncPoint with 0 views should be removed).\r\n *  - Proxying user / server operations to the views as appropriate (i.e. applyServerOverwrite,\r\n *    applyUserOverwrite, etc.)\r\n */\r\nvar SyncPoint = /** @class */ (function () {\r\n    function SyncPoint() {\r\n        /**\r\n         * The Views being tracked at this location in the tree, stored as a map where the key is a\r\n         * queryId and the value is the View for that query.\r\n         *\r\n         * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more is an odd use case).\r\n         *\r\n         * @type {!Object.<!string, !View>}\r\n         * @private\r\n         */\r\n        this.views_ = {};\r\n    }\r\n    Object.defineProperty(SyncPoint, \"__referenceConstructor\", {\r\n        get: function () {\r\n            util.assert(__referenceConstructor$1, 'Reference.ts has not been loaded');\r\n            return __referenceConstructor$1;\r\n        },\r\n        set: function (val) {\r\n            util.assert(!__referenceConstructor$1, '__referenceConstructor has already been defined');\r\n            __referenceConstructor$1 = val;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @return {boolean}\r\n     */\r\n    SyncPoint.prototype.isEmpty = function () {\r\n        return util.isEmpty(this.views_);\r\n    };\r\n    /**\r\n     *\r\n     * @param {!Operation} operation\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {?Node} optCompleteServerCache\r\n     * @return {!Array.<!Event>}\r\n     */\r\n    SyncPoint.prototype.applyOperation = function (operation, writesCache, optCompleteServerCache) {\r\n        var queryId = operation.source.queryId;\r\n        if (queryId !== null) {\r\n            var view = util.safeGet(this.views_, queryId);\r\n            util.assert(view != null, 'SyncTree gave us an op for an invalid query.');\r\n            return view.applyOperation(operation, writesCache, optCompleteServerCache);\r\n        }\r\n        else {\r\n            var events_1 = [];\r\n            util.forEach(this.views_, function (key, view) {\r\n                events_1 = events_1.concat(view.applyOperation(operation, writesCache, optCompleteServerCache));\r\n            });\r\n            return events_1;\r\n        }\r\n    };\r\n    /**\r\n     * Add an event callback for the specified query.\r\n     *\r\n     * @param {!Query} query\r\n     * @param {!EventRegistration} eventRegistration\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @param {?Node} serverCache Complete server cache, if we have it.\r\n     * @param {boolean} serverCacheComplete\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncPoint.prototype.addEventRegistration = function (query, eventRegistration, writesCache, serverCache, serverCacheComplete) {\r\n        var queryId = query.queryIdentifier();\r\n        var view = util.safeGet(this.views_, queryId);\r\n        if (!view) {\r\n            // TODO: make writesCache take flag for complete server node\r\n            var eventCache = writesCache.calcCompleteEventCache(serverCacheComplete ? serverCache : null);\r\n            var eventCacheComplete = false;\r\n            if (eventCache) {\r\n                eventCacheComplete = true;\r\n            }\r\n            else if (serverCache instanceof ChildrenNode) {\r\n                eventCache = writesCache.calcCompleteEventChildren(serverCache);\r\n                eventCacheComplete = false;\r\n            }\r\n            else {\r\n                eventCache = ChildrenNode.EMPTY_NODE;\r\n                eventCacheComplete = false;\r\n            }\r\n            var viewCache = new ViewCache(new CacheNode(\r\n            /** @type {!Node} */ (eventCache), eventCacheComplete, false), new CacheNode(\r\n            /** @type {!Node} */ (serverCache), serverCacheComplete, false));\r\n            view = new View(query, viewCache);\r\n            this.views_[queryId] = view;\r\n        }\r\n        // This is guaranteed to exist now, we just created anything that was missing\r\n        view.addEventRegistration(eventRegistration);\r\n        return view.getInitialEvents(eventRegistration);\r\n    };\r\n    /**\r\n     * Remove event callback(s).  Return cancelEvents if a cancelError is specified.\r\n     *\r\n     * If query is the default query, we'll check all views for the specified eventRegistration.\r\n     * If eventRegistration is null, we'll remove all callbacks for the specified view(s).\r\n     *\r\n     * @param {!Query} query\r\n     * @param {?EventRegistration} eventRegistration If null, remove all callbacks.\r\n     * @param {Error=} cancelError If a cancelError is provided, appropriate cancel events will be returned.\r\n     * @return {{removed:!Array.<!Query>, events:!Array.<!Event>}} removed queries and any cancel events\r\n     */\r\n    SyncPoint.prototype.removeEventRegistration = function (query, eventRegistration, cancelError) {\r\n        var queryId = query.queryIdentifier();\r\n        var removed = [];\r\n        var cancelEvents = [];\r\n        var hadCompleteView = this.hasCompleteView();\r\n        if (queryId === 'default') {\r\n            // When you do ref.off(...), we search all views for the registration to remove.\r\n            var self_1 = this;\r\n            util.forEach(this.views_, function (viewQueryId, view) {\r\n                cancelEvents = cancelEvents.concat(view.removeEventRegistration(eventRegistration, cancelError));\r\n                if (view.isEmpty()) {\r\n                    delete self_1.views_[viewQueryId];\r\n                    // We'll deal with complete views later.\r\n                    if (!view\r\n                        .getQuery()\r\n                        .getQueryParams()\r\n                        .loadsAllData()) {\r\n                        removed.push(view.getQuery());\r\n                    }\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            // remove the callback from the specific view.\r\n            var view = util.safeGet(this.views_, queryId);\r\n            if (view) {\r\n                cancelEvents = cancelEvents.concat(view.removeEventRegistration(eventRegistration, cancelError));\r\n                if (view.isEmpty()) {\r\n                    delete this.views_[queryId];\r\n                    // We'll deal with complete views later.\r\n                    if (!view\r\n                        .getQuery()\r\n                        .getQueryParams()\r\n                        .loadsAllData()) {\r\n                        removed.push(view.getQuery());\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (hadCompleteView && !this.hasCompleteView()) {\r\n            // We removed our last complete view.\r\n            removed.push(new SyncPoint.__referenceConstructor(query.repo, query.path));\r\n        }\r\n        return { removed: removed, events: cancelEvents };\r\n    };\r\n    /**\r\n     * @return {!Array.<!View>}\r\n     */\r\n    SyncPoint.prototype.getQueryViews = function () {\r\n        var _this = this;\r\n        var values = Object.keys(this.views_).map(function (key) { return _this.views_[key]; });\r\n        return values.filter(function (view) {\r\n            return !view\r\n                .getQuery()\r\n                .getQueryParams()\r\n                .loadsAllData();\r\n        });\r\n    };\r\n    /**\r\n     *\r\n     * @param {!Path} path The path to the desired complete snapshot\r\n     * @return {?Node} A complete cache, if it exists\r\n     */\r\n    SyncPoint.prototype.getCompleteServerCache = function (path) {\r\n        var serverCache = null;\r\n        util.forEach(this.views_, function (key, view) {\r\n            serverCache = serverCache || view.getCompleteServerCache(path);\r\n        });\r\n        return serverCache;\r\n    };\r\n    /**\r\n     * @param {!Query} query\r\n     * @return {?View}\r\n     */\r\n    SyncPoint.prototype.viewForQuery = function (query) {\r\n        var params = query.getQueryParams();\r\n        if (params.loadsAllData()) {\r\n            return this.getCompleteView();\r\n        }\r\n        else {\r\n            var queryId = query.queryIdentifier();\r\n            return util.safeGet(this.views_, queryId);\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Query} query\r\n     * @return {boolean}\r\n     */\r\n    SyncPoint.prototype.viewExistsForQuery = function (query) {\r\n        return this.viewForQuery(query) != null;\r\n    };\r\n    /**\r\n     * @return {boolean}\r\n     */\r\n    SyncPoint.prototype.hasCompleteView = function () {\r\n        return this.getCompleteView() != null;\r\n    };\r\n    /**\r\n     * @return {?View}\r\n     */\r\n    SyncPoint.prototype.getCompleteView = function () {\r\n        var completeView = util.findValue(this.views_, function (view) {\r\n            return view\r\n                .getQuery()\r\n                .getQueryParams()\r\n                .loadsAllData();\r\n        });\r\n        return completeView || null;\r\n    };\r\n    return SyncPoint;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with\r\n * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write\r\n * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write\r\n * to reflect the write added.\r\n *\r\n * @constructor\r\n * @param {!ImmutableTree.<!Node>} writeTree\r\n */\r\nvar CompoundWrite = /** @class */ (function () {\r\n    function CompoundWrite(writeTree_) {\r\n        this.writeTree_ = writeTree_;\r\n    }\r\n    /**\r\n     * @param {!Path} path\r\n     * @param {!Node} node\r\n     * @return {!CompoundWrite}\r\n     */\r\n    CompoundWrite.prototype.addWrite = function (path, node) {\r\n        if (path.isEmpty()) {\r\n            return new CompoundWrite(new ImmutableTree(node));\r\n        }\r\n        else {\r\n            var rootmost = this.writeTree_.findRootMostValueAndPath(path);\r\n            if (rootmost != null) {\r\n                var rootMostPath = rootmost.path;\r\n                var value = rootmost.value;\r\n                var relativePath = Path.relativePath(rootMostPath, path);\r\n                value = value.updateChild(relativePath, node);\r\n                return new CompoundWrite(this.writeTree_.set(rootMostPath, value));\r\n            }\r\n            else {\r\n                var subtree = new ImmutableTree(node);\r\n                var newWriteTree = this.writeTree_.setTree(path, subtree);\r\n                return new CompoundWrite(newWriteTree);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Path} path\r\n     * @param {!Object.<string, !Node>} updates\r\n     * @return {!CompoundWrite}\r\n     */\r\n    CompoundWrite.prototype.addWrites = function (path, updates) {\r\n        var newWrite = this;\r\n        util.forEach(updates, function (childKey, node) {\r\n            newWrite = newWrite.addWrite(path.child(childKey), node);\r\n        });\r\n        return newWrite;\r\n    };\r\n    /**\r\n     * Will remove a write at the given path and deeper paths. This will <em>not</em> modify a write at a higher\r\n     * location, which must be removed by calling this method with that path.\r\n     *\r\n     * @param {!Path} path The path at which a write and all deeper writes should be removed\r\n     * @return {!CompoundWrite} The new CompoundWrite with the removed path\r\n     */\r\n    CompoundWrite.prototype.removeWrite = function (path) {\r\n        if (path.isEmpty()) {\r\n            return CompoundWrite.Empty;\r\n        }\r\n        else {\r\n            var newWriteTree = this.writeTree_.setTree(path, ImmutableTree.Empty);\r\n            return new CompoundWrite(newWriteTree);\r\n        }\r\n    };\r\n    /**\r\n     * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be\r\n     * considered \"complete\".\r\n     *\r\n     * @param {!Path} path The path to check for\r\n     * @return {boolean} Whether there is a complete write at that path\r\n     */\r\n    CompoundWrite.prototype.hasCompleteWrite = function (path) {\r\n        return this.getCompleteNode(path) != null;\r\n    };\r\n    /**\r\n     * Returns a node for a path if and only if the node is a \"complete\" overwrite at that path. This will not aggregate\r\n     * writes from deeper paths, but will return child nodes from a more shallow path.\r\n     *\r\n     * @param {!Path} path The path to get a complete write\r\n     * @return {?Node} The node if complete at that path, or null otherwise.\r\n     */\r\n    CompoundWrite.prototype.getCompleteNode = function (path) {\r\n        var rootmost = this.writeTree_.findRootMostValueAndPath(path);\r\n        if (rootmost != null) {\r\n            return this.writeTree_\r\n                .get(rootmost.path)\r\n                .getChild(Path.relativePath(rootmost.path, path));\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    };\r\n    /**\r\n     * Returns all children that are guaranteed to be a complete overwrite.\r\n     *\r\n     * @return {!Array.<NamedNode>} A list of all complete children.\r\n     */\r\n    CompoundWrite.prototype.getCompleteChildren = function () {\r\n        var children = [];\r\n        var node = this.writeTree_.value;\r\n        if (node != null) {\r\n            // If it's a leaf node, it has no children; so nothing to do.\r\n            if (!node.isLeafNode()) {\r\n                node.forEachChild(PRIORITY_INDEX, function (childName, childNode) {\r\n                    children.push(new NamedNode(childName, childNode));\r\n                });\r\n            }\r\n        }\r\n        else {\r\n            this.writeTree_.children.inorderTraversal(function (childName, childTree) {\r\n                if (childTree.value != null) {\r\n                    children.push(new NamedNode(childName, childTree.value));\r\n                }\r\n            });\r\n        }\r\n        return children;\r\n    };\r\n    /**\r\n     * @param {!Path} path\r\n     * @return {!CompoundWrite}\r\n     */\r\n    CompoundWrite.prototype.childCompoundWrite = function (path) {\r\n        if (path.isEmpty()) {\r\n            return this;\r\n        }\r\n        else {\r\n            var shadowingNode = this.getCompleteNode(path);\r\n            if (shadowingNode != null) {\r\n                return new CompoundWrite(new ImmutableTree(shadowingNode));\r\n            }\r\n            else {\r\n                return new CompoundWrite(this.writeTree_.subtree(path));\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.\r\n     * @return {boolean} Whether this CompoundWrite is empty\r\n     */\r\n    CompoundWrite.prototype.isEmpty = function () {\r\n        return this.writeTree_.isEmpty();\r\n    };\r\n    /**\r\n     * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the\r\n     * node\r\n     * @param {!Node} node The node to apply this CompoundWrite to\r\n     * @return {!Node} The node with all writes applied\r\n     */\r\n    CompoundWrite.prototype.apply = function (node) {\r\n        return CompoundWrite.applySubtreeWrite_(Path.Empty, this.writeTree_, node);\r\n    };\r\n    /**\r\n     * @type {!CompoundWrite}\r\n     */\r\n    CompoundWrite.Empty = new CompoundWrite(new ImmutableTree(null));\r\n    /**\r\n     * @param {!Path} relativePath\r\n     * @param {!ImmutableTree.<!Node>} writeTree\r\n     * @param {!Node} node\r\n     * @return {!Node}\r\n     * @private\r\n     */\r\n    CompoundWrite.applySubtreeWrite_ = function (relativePath, writeTree, node) {\r\n        if (writeTree.value != null) {\r\n            // Since there a write is always a leaf, we're done here\r\n            return node.updateChild(relativePath, writeTree.value);\r\n        }\r\n        else {\r\n            var priorityWrite_1 = null;\r\n            writeTree.children.inorderTraversal(function (childKey, childTree) {\r\n                if (childKey === '.priority') {\r\n                    // Apply priorities at the end so we don't update priorities for either empty nodes or forget\r\n                    // to apply priorities to empty nodes that are later filled\r\n                    util.assert(childTree.value !== null, 'Priority writes must always be leaf nodes');\r\n                    priorityWrite_1 = childTree.value;\r\n                }\r\n                else {\r\n                    node = CompoundWrite.applySubtreeWrite_(relativePath.child(childKey), childTree, node);\r\n                }\r\n            });\r\n            // If there was a priority write, we only apply it if the node is not empty\r\n            if (!node.getChild(relativePath).isEmpty() && priorityWrite_1 !== null) {\r\n                node = node.updateChild(relativePath.child('.priority'), priorityWrite_1);\r\n            }\r\n            return node;\r\n        }\r\n    };\r\n    return CompoundWrite;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * WriteTree tracks all pending user-initiated writes and has methods to calculate the result of merging them\r\n * with underlying server data (to create \"event cache\" data).  Pending writes are added with addOverwrite()\r\n * and addMerge(), and removed with removeWrite().\r\n *\r\n * @constructor\r\n */\r\nvar WriteTree = /** @class */ (function () {\r\n    function WriteTree() {\r\n        /**\r\n         * A tree tracking the result of applying all visible writes.  This does not include transactions with\r\n         * applyLocally=false or writes that are completely shadowed by other writes.\r\n         *\r\n         * @type {!CompoundWrite}\r\n         * @private\r\n         */\r\n        this.visibleWrites_ = CompoundWrite.Empty;\r\n        /**\r\n         * A list of all pending writes, regardless of visibility and shadowed-ness.  Used to calculate arbitrary\r\n         * sets of the changed data, such as hidden writes (from transactions) or changes with certain writes excluded (also\r\n         * used by transactions).\r\n         *\r\n         * @type {!Array.<!WriteRecord>}\r\n         * @private\r\n         */\r\n        this.allWrites_ = [];\r\n        this.lastWriteId_ = -1;\r\n    }\r\n    /**\r\n     * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.\r\n     *\r\n     * @param {!Path} path\r\n     * @return {!WriteTreeRef}\r\n     */\r\n    WriteTree.prototype.childWrites = function (path) {\r\n        return new WriteTreeRef(path, this);\r\n    };\r\n    /**\r\n     * Record a new overwrite from user code.\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!Node} snap\r\n     * @param {!number} writeId\r\n     * @param {boolean=} visible This is set to false by some transactions. It should be excluded from event caches\r\n     */\r\n    WriteTree.prototype.addOverwrite = function (path, snap, writeId, visible) {\r\n        util.assert(writeId > this.lastWriteId_, 'Stacking an older write on top of newer ones');\r\n        if (visible === undefined) {\r\n            visible = true;\r\n        }\r\n        this.allWrites_.push({\r\n            path: path,\r\n            snap: snap,\r\n            writeId: writeId,\r\n            visible: visible\r\n        });\r\n        if (visible) {\r\n            this.visibleWrites_ = this.visibleWrites_.addWrite(path, snap);\r\n        }\r\n        this.lastWriteId_ = writeId;\r\n    };\r\n    /**\r\n     * Record a new merge from user code.\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!Object.<string, !Node>} changedChildren\r\n     * @param {!number} writeId\r\n     */\r\n    WriteTree.prototype.addMerge = function (path, changedChildren, writeId) {\r\n        util.assert(writeId > this.lastWriteId_, 'Stacking an older merge on top of newer ones');\r\n        this.allWrites_.push({\r\n            path: path,\r\n            children: changedChildren,\r\n            writeId: writeId,\r\n            visible: true\r\n        });\r\n        this.visibleWrites_ = this.visibleWrites_.addWrites(path, changedChildren);\r\n        this.lastWriteId_ = writeId;\r\n    };\r\n    /**\r\n     * @param {!number} writeId\r\n     * @return {?WriteRecord}\r\n     */\r\n    WriteTree.prototype.getWrite = function (writeId) {\r\n        for (var i = 0; i < this.allWrites_.length; i++) {\r\n            var record = this.allWrites_[i];\r\n            if (record.writeId === writeId) {\r\n                return record;\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    /**\r\n     * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates\r\n     * the tree if necessary.  We return true if it may have been visible, meaning views need to reevaluate.\r\n     *\r\n     * @param {!number} writeId\r\n     * @return {boolean} true if the write may have been visible (meaning we'll need to reevaluate / raise\r\n     * events as a result).\r\n     */\r\n    WriteTree.prototype.removeWrite = function (writeId) {\r\n        // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied\r\n        // out of order.\r\n        //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;\r\n        //assert(validClear, \"Either we don't have this write, or it's the first one in the queue\");\r\n        var _this = this;\r\n        var idx = this.allWrites_.findIndex(function (s) {\r\n            return s.writeId === writeId;\r\n        });\r\n        util.assert(idx >= 0, 'removeWrite called with nonexistent writeId.');\r\n        var writeToRemove = this.allWrites_[idx];\r\n        this.allWrites_.splice(idx, 1);\r\n        var removedWriteWasVisible = writeToRemove.visible;\r\n        var removedWriteOverlapsWithOtherWrites = false;\r\n        var i = this.allWrites_.length - 1;\r\n        while (removedWriteWasVisible && i >= 0) {\r\n            var currentWrite = this.allWrites_[i];\r\n            if (currentWrite.visible) {\r\n                if (i >= idx &&\r\n                    this.recordContainsPath_(currentWrite, writeToRemove.path)) {\r\n                    // The removed write was completely shadowed by a subsequent write.\r\n                    removedWriteWasVisible = false;\r\n                }\r\n                else if (writeToRemove.path.contains(currentWrite.path)) {\r\n                    // Either we're covering some writes or they're covering part of us (depending on which came first).\r\n                    removedWriteOverlapsWithOtherWrites = true;\r\n                }\r\n            }\r\n            i--;\r\n        }\r\n        if (!removedWriteWasVisible) {\r\n            return false;\r\n        }\r\n        else if (removedWriteOverlapsWithOtherWrites) {\r\n            // There's some shadowing going on. Just rebuild the visible writes from scratch.\r\n            this.resetTree_();\r\n            return true;\r\n        }\r\n        else {\r\n            // There's no shadowing.  We can safely just remove the write(s) from visibleWrites.\r\n            if (writeToRemove.snap) {\r\n                this.visibleWrites_ = this.visibleWrites_.removeWrite(writeToRemove.path);\r\n            }\r\n            else {\r\n                var children = writeToRemove.children;\r\n                util.forEach(children, function (childName) {\r\n                    _this.visibleWrites_ = _this.visibleWrites_.removeWrite(writeToRemove.path.child(childName));\r\n                });\r\n            }\r\n            return true;\r\n        }\r\n    };\r\n    /**\r\n     * Return a complete snapshot for the given path if there's visible write data at that path, else null.\r\n     * No server data is considered.\r\n     *\r\n     * @param {!Path} path\r\n     * @return {?Node}\r\n     */\r\n    WriteTree.prototype.getCompleteWriteData = function (path) {\r\n        return this.visibleWrites_.getCompleteNode(path);\r\n    };\r\n    /**\r\n     * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden\r\n     * writes), attempt to calculate a complete snapshot for the given path\r\n     *\r\n     * @param {!Path} treePath\r\n     * @param {?Node} completeServerCache\r\n     * @param {Array.<number>=} writeIdsToExclude An optional set to be excluded\r\n     * @param {boolean=} includeHiddenWrites Defaults to false, whether or not to layer on writes with visible set to false\r\n     * @return {?Node}\r\n     */\r\n    WriteTree.prototype.calcCompleteEventCache = function (treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n        if (!writeIdsToExclude && !includeHiddenWrites) {\r\n            var shadowingNode = this.visibleWrites_.getCompleteNode(treePath);\r\n            if (shadowingNode != null) {\r\n                return shadowingNode;\r\n            }\r\n            else {\r\n                var subMerge = this.visibleWrites_.childCompoundWrite(treePath);\r\n                if (subMerge.isEmpty()) {\r\n                    return completeServerCache;\r\n                }\r\n                else if (completeServerCache == null &&\r\n                    !subMerge.hasCompleteWrite(Path.Empty)) {\r\n                    // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow\r\n                    return null;\r\n                }\r\n                else {\r\n                    var layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n                    return subMerge.apply(layeredCache);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            var merge = this.visibleWrites_.childCompoundWrite(treePath);\r\n            if (!includeHiddenWrites && merge.isEmpty()) {\r\n                return completeServerCache;\r\n            }\r\n            else {\r\n                // If the server cache is null, and we don't have a complete cache, we need to return null\r\n                if (!includeHiddenWrites &&\r\n                    completeServerCache == null &&\r\n                    !merge.hasCompleteWrite(Path.Empty)) {\r\n                    return null;\r\n                }\r\n                else {\r\n                    var filter = function (write) {\r\n                        return ((write.visible || includeHiddenWrites) &&\r\n                            (!writeIdsToExclude ||\r\n                                !~writeIdsToExclude.indexOf(write.writeId)) &&\r\n                            (write.path.contains(treePath) || treePath.contains(write.path)));\r\n                    };\r\n                    var mergeAtPath = WriteTree.layerTree_(this.allWrites_, filter, treePath);\r\n                    var layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n                    return mergeAtPath.apply(layeredCache);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * With optional, underlying server data, attempt to return a children node of children that we have complete data for.\r\n     * Used when creating new views, to pre-fill their complete event children snapshot.\r\n     *\r\n     * @param {!Path} treePath\r\n     * @param {?ChildrenNode} completeServerChildren\r\n     * @return {!ChildrenNode}\r\n     */\r\n    WriteTree.prototype.calcCompleteEventChildren = function (treePath, completeServerChildren) {\r\n        var completeChildren = ChildrenNode.EMPTY_NODE;\r\n        var topLevelSet = this.visibleWrites_.getCompleteNode(treePath);\r\n        if (topLevelSet) {\r\n            if (!topLevelSet.isLeafNode()) {\r\n                // we're shadowing everything. Return the children.\r\n                topLevelSet.forEachChild(PRIORITY_INDEX, function (childName, childSnap) {\r\n                    completeChildren = completeChildren.updateImmediateChild(childName, childSnap);\r\n                });\r\n            }\r\n            return completeChildren;\r\n        }\r\n        else if (completeServerChildren) {\r\n            // Layer any children we have on top of this\r\n            // We know we don't have a top-level set, so just enumerate existing children\r\n            var merge_1 = this.visibleWrites_.childCompoundWrite(treePath);\r\n            completeServerChildren.forEachChild(PRIORITY_INDEX, function (childName, childNode) {\r\n                var node = merge_1\r\n                    .childCompoundWrite(new Path(childName))\r\n                    .apply(childNode);\r\n                completeChildren = completeChildren.updateImmediateChild(childName, node);\r\n            });\r\n            // Add any complete children we have from the set\r\n            merge_1.getCompleteChildren().forEach(function (namedNode) {\r\n                completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n            });\r\n            return completeChildren;\r\n        }\r\n        else {\r\n            // We don't have anything to layer on top of. Layer on any children we have\r\n            // Note that we can return an empty snap if we have a defined delete\r\n            var merge = this.visibleWrites_.childCompoundWrite(treePath);\r\n            merge.getCompleteChildren().forEach(function (namedNode) {\r\n                completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n            });\r\n            return completeChildren;\r\n        }\r\n    };\r\n    /**\r\n     * Given that the underlying server data has updated, determine what, if anything, needs to be\r\n     * applied to the event cache.\r\n     *\r\n     * Possibilities:\r\n     *\r\n     * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n     *\r\n     * 2. Some write is completely shadowing. No events to be raised\r\n     *\r\n     * 3. Is partially shadowed. Events\r\n     *\r\n     * Either existingEventSnap or existingServerSnap must exist\r\n     *\r\n     * @param {!Path} treePath\r\n     * @param {!Path} childPath\r\n     * @param {?Node} existingEventSnap\r\n     * @param {?Node} existingServerSnap\r\n     * @return {?Node}\r\n     */\r\n    WriteTree.prototype.calcEventCacheAfterServerOverwrite = function (treePath, childPath, existingEventSnap, existingServerSnap) {\r\n        util.assert(existingEventSnap || existingServerSnap, 'Either existingEventSnap or existingServerSnap must exist');\r\n        var path = treePath.child(childPath);\r\n        if (this.visibleWrites_.hasCompleteWrite(path)) {\r\n            // At this point we can probably guarantee that we're in case 2, meaning no events\r\n            // May need to check visibility while doing the findRootMostValueAndPath call\r\n            return null;\r\n        }\r\n        else {\r\n            // No complete shadowing. We're either partially shadowing or not shadowing at all.\r\n            var childMerge = this.visibleWrites_.childCompoundWrite(path);\r\n            if (childMerge.isEmpty()) {\r\n                // We're not shadowing at all. Case 1\r\n                return existingServerSnap.getChild(childPath);\r\n            }\r\n            else {\r\n                // This could be more efficient if the serverNode + updates doesn't change the eventSnap\r\n                // However this is tricky to find out, since user updates don't necessary change the server\r\n                // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server\r\n                // adds nodes, but doesn't change any existing writes. It is therefore not enough to\r\n                // only check if the updates change the serverNode.\r\n                // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?\r\n                return childMerge.apply(existingServerSnap.getChild(childPath));\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n     * complete child for this ChildKey.\r\n     *\r\n     * @param {!Path} treePath\r\n     * @param {!string} childKey\r\n     * @param {!CacheNode} existingServerSnap\r\n     * @return {?Node}\r\n     */\r\n    WriteTree.prototype.calcCompleteChild = function (treePath, childKey, existingServerSnap) {\r\n        var path = treePath.child(childKey);\r\n        var shadowingNode = this.visibleWrites_.getCompleteNode(path);\r\n        if (shadowingNode != null) {\r\n            return shadowingNode;\r\n        }\r\n        else {\r\n            if (existingServerSnap.isCompleteForChild(childKey)) {\r\n                var childMerge = this.visibleWrites_.childCompoundWrite(path);\r\n                return childMerge.apply(existingServerSnap.getNode().getImmediateChild(childKey));\r\n            }\r\n            else {\r\n                return null;\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n     * a higher path, this will return the child of that write relative to the write and this path.\r\n     * Returns null if there is no write at this path.\r\n     *\r\n     * @param {!Path} path\r\n     * @return {?Node}\r\n     */\r\n    WriteTree.prototype.shadowingWrite = function (path) {\r\n        return this.visibleWrites_.getCompleteNode(path);\r\n    };\r\n    /**\r\n     * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n     * the window, but may now be in the window.\r\n     *\r\n     * @param {!Path} treePath\r\n     * @param {?Node} completeServerData\r\n     * @param {!NamedNode} startPost\r\n     * @param {!number} count\r\n     * @param {boolean} reverse\r\n     * @param {!Index} index\r\n     * @return {!Array.<!NamedNode>}\r\n     */\r\n    WriteTree.prototype.calcIndexedSlice = function (treePath, completeServerData, startPost, count, reverse, index) {\r\n        var toIterate;\r\n        var merge = this.visibleWrites_.childCompoundWrite(treePath);\r\n        var shadowingNode = merge.getCompleteNode(Path.Empty);\r\n        if (shadowingNode != null) {\r\n            toIterate = shadowingNode;\r\n        }\r\n        else if (completeServerData != null) {\r\n            toIterate = merge.apply(completeServerData);\r\n        }\r\n        else {\r\n            // no children to iterate on\r\n            return [];\r\n        }\r\n        toIterate = toIterate.withIndex(index);\r\n        if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {\r\n            var nodes = [];\r\n            var cmp = index.getCompare();\r\n            var iter = reverse\r\n                ? toIterate.getReverseIteratorFrom(startPost, index)\r\n                : toIterate.getIteratorFrom(startPost, index);\r\n            var next = iter.getNext();\r\n            while (next && nodes.length < count) {\r\n                if (cmp(next, startPost) !== 0) {\r\n                    nodes.push(next);\r\n                }\r\n                next = iter.getNext();\r\n            }\r\n            return nodes;\r\n        }\r\n        else {\r\n            return [];\r\n        }\r\n    };\r\n    /**\r\n     * @param {!WriteRecord} writeRecord\r\n     * @param {!Path} path\r\n     * @return {boolean}\r\n     * @private\r\n     */\r\n    WriteTree.prototype.recordContainsPath_ = function (writeRecord, path) {\r\n        if (writeRecord.snap) {\r\n            return writeRecord.path.contains(path);\r\n        }\r\n        else {\r\n            // findKey can return undefined, so use !! to coerce to boolean\r\n            return !!util.findKey(writeRecord.children, function (childSnap, childName) {\r\n                return writeRecord.path.child(childName).contains(path);\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots\r\n     * @private\r\n     */\r\n    WriteTree.prototype.resetTree_ = function () {\r\n        this.visibleWrites_ = WriteTree.layerTree_(this.allWrites_, WriteTree.DefaultFilter_, Path.Empty);\r\n        if (this.allWrites_.length > 0) {\r\n            this.lastWriteId_ = this.allWrites_[this.allWrites_.length - 1].writeId;\r\n        }\r\n        else {\r\n            this.lastWriteId_ = -1;\r\n        }\r\n    };\r\n    /**\r\n     * The default filter used when constructing the tree. Keep everything that's visible.\r\n     *\r\n     * @param {!WriteRecord} write\r\n     * @return {boolean}\r\n     * @private\r\n     */\r\n    WriteTree.DefaultFilter_ = function (write) {\r\n        return write.visible;\r\n    };\r\n    /**\r\n     * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of\r\n     * event data at that path.\r\n     *\r\n     * @param {!Array.<!WriteRecord>} writes\r\n     * @param {!function(!WriteRecord):boolean} filter\r\n     * @param {!Path} treeRoot\r\n     * @return {!CompoundWrite}\r\n     * @private\r\n     */\r\n    WriteTree.layerTree_ = function (writes, filter, treeRoot) {\r\n        var compoundWrite = CompoundWrite.Empty;\r\n        for (var i = 0; i < writes.length; ++i) {\r\n            var write = writes[i];\r\n            // Theory, a later set will either:\r\n            // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction\r\n            // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction\r\n            if (filter(write)) {\r\n                var writePath = write.path;\r\n                var relativePath = void 0;\r\n                if (write.snap) {\r\n                    if (treeRoot.contains(writePath)) {\r\n                        relativePath = Path.relativePath(treeRoot, writePath);\r\n                        compoundWrite = compoundWrite.addWrite(relativePath, write.snap);\r\n                    }\r\n                    else if (writePath.contains(treeRoot)) {\r\n                        relativePath = Path.relativePath(writePath, treeRoot);\r\n                        compoundWrite = compoundWrite.addWrite(Path.Empty, write.snap.getChild(relativePath));\r\n                    }\r\n                }\r\n                else if (write.children) {\r\n                    if (treeRoot.contains(writePath)) {\r\n                        relativePath = Path.relativePath(treeRoot, writePath);\r\n                        compoundWrite = compoundWrite.addWrites(relativePath, write.children);\r\n                    }\r\n                    else if (writePath.contains(treeRoot)) {\r\n                        relativePath = Path.relativePath(writePath, treeRoot);\r\n                        if (relativePath.isEmpty()) {\r\n                            compoundWrite = compoundWrite.addWrites(Path.Empty, write.children);\r\n                        }\r\n                        else {\r\n                            var child = util.safeGet(write.children, relativePath.getFront());\r\n                            if (child) {\r\n                                // There exists a child in this node that matches the root path\r\n                                var deepNode = child.getChild(relativePath.popFront());\r\n                                compoundWrite = compoundWrite.addWrite(Path.Empty, deepNode);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n                else {\r\n                    throw util.assertionError('WriteRecord should have .snap or .children');\r\n                }\r\n            }\r\n        }\r\n        return compoundWrite;\r\n    };\r\n    return WriteTree;\r\n}());\r\n/**\r\n * A WriteTreeRef wraps a WriteTree and a path, for convenient access to a particular subtree.  All of the methods\r\n * just proxy to the underlying WriteTree.\r\n *\r\n * @constructor\r\n */\r\nvar WriteTreeRef = /** @class */ (function () {\r\n    /**\r\n     * @param {!Path} path\r\n     * @param {!WriteTree} writeTree\r\n     */\r\n    function WriteTreeRef(path, writeTree) {\r\n        this.treePath_ = path;\r\n        this.writeTree_ = writeTree;\r\n    }\r\n    /**\r\n     * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used\r\n     * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node\r\n     * can lead to a more expensive calculation.\r\n     *\r\n     * @param {?Node} completeServerCache\r\n     * @param {Array.<number>=} writeIdsToExclude Optional writes to exclude.\r\n     * @param {boolean=} includeHiddenWrites Defaults to false, whether or not to layer on writes with visible set to false\r\n     * @return {?Node}\r\n     */\r\n    WriteTreeRef.prototype.calcCompleteEventCache = function (completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n        return this.writeTree_.calcCompleteEventCache(this.treePath_, completeServerCache, writeIdsToExclude, includeHiddenWrites);\r\n    };\r\n    /**\r\n     * If possible, returns a children node containing all of the complete children we have data for. The returned data is a\r\n     * mix of the given server data and write data.\r\n     *\r\n     * @param {?ChildrenNode} completeServerChildren\r\n     * @return {!ChildrenNode}\r\n     */\r\n    WriteTreeRef.prototype.calcCompleteEventChildren = function (completeServerChildren) {\r\n        return this.writeTree_.calcCompleteEventChildren(this.treePath_, completeServerChildren);\r\n    };\r\n    /**\r\n     * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,\r\n     * if anything, needs to be applied to the event cache.\r\n     *\r\n     * Possibilities:\r\n     *\r\n     * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n     *\r\n     * 2. Some write is completely shadowing. No events to be raised\r\n     *\r\n     * 3. Is partially shadowed. Events should be raised\r\n     *\r\n     * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert\r\n     *\r\n     * @param {!Path} path\r\n     * @param {?Node} existingEventSnap\r\n     * @param {?Node} existingServerSnap\r\n     * @return {?Node}\r\n     */\r\n    WriteTreeRef.prototype.calcEventCacheAfterServerOverwrite = function (path, existingEventSnap, existingServerSnap) {\r\n        return this.writeTree_.calcEventCacheAfterServerOverwrite(this.treePath_, path, existingEventSnap, existingServerSnap);\r\n    };\r\n    /**\r\n     * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n     * a higher path, this will return the child of that write relative to the write and this path.\r\n     * Returns null if there is no write at this path.\r\n     *\r\n     * @param {!Path} path\r\n     * @return {?Node}\r\n     */\r\n    WriteTreeRef.prototype.shadowingWrite = function (path) {\r\n        return this.writeTree_.shadowingWrite(this.treePath_.child(path));\r\n    };\r\n    /**\r\n     * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n     * the window, but may now be in the window\r\n     *\r\n     * @param {?Node} completeServerData\r\n     * @param {!NamedNode} startPost\r\n     * @param {!number} count\r\n     * @param {boolean} reverse\r\n     * @param {!Index} index\r\n     * @return {!Array.<!NamedNode>}\r\n     */\r\n    WriteTreeRef.prototype.calcIndexedSlice = function (completeServerData, startPost, count, reverse, index) {\r\n        return this.writeTree_.calcIndexedSlice(this.treePath_, completeServerData, startPost, count, reverse, index);\r\n    };\r\n    /**\r\n     * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n     * complete child for this ChildKey.\r\n     *\r\n     * @param {!string} childKey\r\n     * @param {!CacheNode} existingServerCache\r\n     * @return {?Node}\r\n     */\r\n    WriteTreeRef.prototype.calcCompleteChild = function (childKey, existingServerCache) {\r\n        return this.writeTree_.calcCompleteChild(this.treePath_, childKey, existingServerCache);\r\n    };\r\n    /**\r\n     * Return a WriteTreeRef for a child.\r\n     *\r\n     * @param {string} childName\r\n     * @return {!WriteTreeRef}\r\n     */\r\n    WriteTreeRef.prototype.child = function (childName) {\r\n        return new WriteTreeRef(this.treePath_.child(childName), this.writeTree_);\r\n    };\r\n    return WriteTreeRef;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * SyncTree is the central class for managing event callback registration, data caching, views\r\n * (query processing), and event generation.  There are typically two SyncTree instances for\r\n * each Repo, one for the normal Firebase data, and one for the .info data.\r\n *\r\n * It has a number of responsibilities, including:\r\n *  - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).\r\n *  - Applying and caching data changes for user set(), transaction(), and update() calls\r\n *    (applyUserOverwrite(), applyUserMerge()).\r\n *  - Applying and caching data changes for server data changes (applyServerOverwrite(),\r\n *    applyServerMerge()).\r\n *  - Generating user-facing events for server and user changes (all of the apply* methods\r\n *    return the set of events that need to be raised as a result).\r\n *  - Maintaining the appropriate set of server listens to ensure we are always subscribed\r\n *    to the correct set of paths and queries to satisfy the current set of user event\r\n *    callbacks (listens are started/stopped using the provided listenProvider).\r\n *\r\n * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual\r\n * events are returned to the caller rather than raised synchronously.\r\n *\r\n * @constructor\r\n */\r\nvar SyncTree = /** @class */ (function () {\r\n    /**\r\n     * @param {!ListenProvider} listenProvider_ Used by SyncTree to start / stop listening\r\n     *   to server data.\r\n     */\r\n    function SyncTree(listenProvider_) {\r\n        this.listenProvider_ = listenProvider_;\r\n        /**\r\n         * Tree of SyncPoints.  There's a SyncPoint at any location that has 1 or more views.\r\n         * @type {!ImmutableTree.<!SyncPoint>}\r\n         * @private\r\n         */\r\n        this.syncPointTree_ = ImmutableTree.Empty;\r\n        /**\r\n         * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).\r\n         * @type {!WriteTree}\r\n         * @private\r\n         */\r\n        this.pendingWriteTree_ = new WriteTree();\r\n        this.tagToQueryMap_ = {};\r\n        this.queryToTagMap_ = {};\r\n    }\r\n    /**\r\n     * Apply the data changes for a user-generated set() or transaction() call.\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!Node} newData\r\n     * @param {number} writeId\r\n     * @param {boolean=} visible\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncTree.prototype.applyUserOverwrite = function (path, newData, writeId, visible) {\r\n        // Record pending write.\r\n        this.pendingWriteTree_.addOverwrite(path, newData, writeId, visible);\r\n        if (!visible) {\r\n            return [];\r\n        }\r\n        else {\r\n            return this.applyOperationToSyncPoints_(new Overwrite(OperationSource.User, path, newData));\r\n        }\r\n    };\r\n    /**\r\n     * Apply the data from a user-generated update() call\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!Object.<string, !Node>} changedChildren\r\n     * @param {!number} writeId\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncTree.prototype.applyUserMerge = function (path, changedChildren, writeId) {\r\n        // Record pending merge.\r\n        this.pendingWriteTree_.addMerge(path, changedChildren, writeId);\r\n        var changeTree = ImmutableTree.fromObject(changedChildren);\r\n        return this.applyOperationToSyncPoints_(new Merge(OperationSource.User, path, changeTree));\r\n    };\r\n    /**\r\n     * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().\r\n     *\r\n     * @param {!number} writeId\r\n     * @param {boolean=} revert True if the given write failed and needs to be reverted\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncTree.prototype.ackUserWrite = function (writeId, revert) {\r\n        if (revert === void 0) { revert = false; }\r\n        var write = this.pendingWriteTree_.getWrite(writeId);\r\n        var needToReevaluate = this.pendingWriteTree_.removeWrite(writeId);\r\n        if (!needToReevaluate) {\r\n            return [];\r\n        }\r\n        else {\r\n            var affectedTree_1 = ImmutableTree.Empty;\r\n            if (write.snap != null) {\r\n                // overwrite\r\n                affectedTree_1 = affectedTree_1.set(Path.Empty, true);\r\n            }\r\n            else {\r\n                util.forEach(write.children, function (pathString, node) {\r\n                    affectedTree_1 = affectedTree_1.set(new Path(pathString), node);\r\n                });\r\n            }\r\n            return this.applyOperationToSyncPoints_(new AckUserWrite(write.path, affectedTree_1, revert));\r\n        }\r\n    };\r\n    /**\r\n     * Apply new server data for the specified path..\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!Node} newData\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncTree.prototype.applyServerOverwrite = function (path, newData) {\r\n        return this.applyOperationToSyncPoints_(new Overwrite(OperationSource.Server, path, newData));\r\n    };\r\n    /**\r\n     * Apply new server data to be merged in at the specified path.\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!Object.<string, !Node>} changedChildren\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncTree.prototype.applyServerMerge = function (path, changedChildren) {\r\n        var changeTree = ImmutableTree.fromObject(changedChildren);\r\n        return this.applyOperationToSyncPoints_(new Merge(OperationSource.Server, path, changeTree));\r\n    };\r\n    /**\r\n     * Apply a listen complete for a query\r\n     *\r\n     * @param {!Path} path\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncTree.prototype.applyListenComplete = function (path) {\r\n        return this.applyOperationToSyncPoints_(new ListenComplete(OperationSource.Server, path));\r\n    };\r\n    /**\r\n     * Apply new server data for the specified tagged query.\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!Node} snap\r\n     * @param {!number} tag\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncTree.prototype.applyTaggedQueryOverwrite = function (path, snap, tag) {\r\n        var queryKey = this.queryKeyForTag_(tag);\r\n        if (queryKey != null) {\r\n            var r = SyncTree.parseQueryKey_(queryKey);\r\n            var queryPath = r.path, queryId = r.queryId;\r\n            var relativePath = Path.relativePath(queryPath, path);\r\n            var op = new Overwrite(OperationSource.forServerTaggedQuery(queryId), relativePath, snap);\r\n            return this.applyTaggedOperation_(queryPath, op);\r\n        }\r\n        else {\r\n            // Query must have been removed already\r\n            return [];\r\n        }\r\n    };\r\n    /**\r\n     * Apply server data to be merged in for the specified tagged query.\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!Object.<string, !Node>} changedChildren\r\n     * @param {!number} tag\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncTree.prototype.applyTaggedQueryMerge = function (path, changedChildren, tag) {\r\n        var queryKey = this.queryKeyForTag_(tag);\r\n        if (queryKey) {\r\n            var r = SyncTree.parseQueryKey_(queryKey);\r\n            var queryPath = r.path, queryId = r.queryId;\r\n            var relativePath = Path.relativePath(queryPath, path);\r\n            var changeTree = ImmutableTree.fromObject(changedChildren);\r\n            var op = new Merge(OperationSource.forServerTaggedQuery(queryId), relativePath, changeTree);\r\n            return this.applyTaggedOperation_(queryPath, op);\r\n        }\r\n        else {\r\n            // We've already removed the query. No big deal, ignore the update\r\n            return [];\r\n        }\r\n    };\r\n    /**\r\n     * Apply a listen complete for a tagged query\r\n     *\r\n     * @param {!Path} path\r\n     * @param {!number} tag\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncTree.prototype.applyTaggedListenComplete = function (path, tag) {\r\n        var queryKey = this.queryKeyForTag_(tag);\r\n        if (queryKey) {\r\n            var r = SyncTree.parseQueryKey_(queryKey);\r\n            var queryPath = r.path, queryId = r.queryId;\r\n            var relativePath = Path.relativePath(queryPath, path);\r\n            var op = new ListenComplete(OperationSource.forServerTaggedQuery(queryId), relativePath);\r\n            return this.applyTaggedOperation_(queryPath, op);\r\n        }\r\n        else {\r\n            // We've already removed the query. No big deal, ignore the update\r\n            return [];\r\n        }\r\n    };\r\n    /**\r\n     * Add an event callback for the specified query.\r\n     *\r\n     * @param {!Query} query\r\n     * @param {!EventRegistration} eventRegistration\r\n     * @return {!Array.<!Event>} Events to raise.\r\n     */\r\n    SyncTree.prototype.addEventRegistration = function (query, eventRegistration) {\r\n        var path = query.path;\r\n        var serverCache = null;\r\n        var foundAncestorDefaultView = false;\r\n        // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n        // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n        this.syncPointTree_.foreachOnPath(path, function (pathToSyncPoint, sp) {\r\n            var relativePath = Path.relativePath(pathToSyncPoint, path);\r\n            serverCache = serverCache || sp.getCompleteServerCache(relativePath);\r\n            foundAncestorDefaultView =\r\n                foundAncestorDefaultView || sp.hasCompleteView();\r\n        });\r\n        var syncPoint = this.syncPointTree_.get(path);\r\n        if (!syncPoint) {\r\n            syncPoint = new SyncPoint();\r\n            this.syncPointTree_ = this.syncPointTree_.set(path, syncPoint);\r\n        }\r\n        else {\r\n            foundAncestorDefaultView =\r\n                foundAncestorDefaultView || syncPoint.hasCompleteView();\r\n            serverCache = serverCache || syncPoint.getCompleteServerCache(Path.Empty);\r\n        }\r\n        var serverCacheComplete;\r\n        if (serverCache != null) {\r\n            serverCacheComplete = true;\r\n        }\r\n        else {\r\n            serverCacheComplete = false;\r\n            serverCache = ChildrenNode.EMPTY_NODE;\r\n            var subtree = this.syncPointTree_.subtree(path);\r\n            subtree.foreachChild(function (childName, childSyncPoint) {\r\n                var completeCache = childSyncPoint.getCompleteServerCache(Path.Empty);\r\n                if (completeCache) {\r\n                    serverCache = serverCache.updateImmediateChild(childName, completeCache);\r\n                }\r\n            });\r\n        }\r\n        var viewAlreadyExists = syncPoint.viewExistsForQuery(query);\r\n        if (!viewAlreadyExists && !query.getQueryParams().loadsAllData()) {\r\n            // We need to track a tag for this query\r\n            var queryKey = SyncTree.makeQueryKey_(query);\r\n            util.assert(!(queryKey in this.queryToTagMap_), 'View does not exist, but we have a tag');\r\n            var tag = SyncTree.getNextQueryTag_();\r\n            this.queryToTagMap_[queryKey] = tag;\r\n            // Coerce to string to avoid sparse arrays.\r\n            this.tagToQueryMap_['_' + tag] = queryKey;\r\n        }\r\n        var writesCache = this.pendingWriteTree_.childWrites(path);\r\n        var events = syncPoint.addEventRegistration(query, eventRegistration, writesCache, serverCache, serverCacheComplete);\r\n        if (!viewAlreadyExists && !foundAncestorDefaultView) {\r\n            var view /** @type !View */ = syncPoint.viewForQuery(query);\r\n            events = events.concat(this.setupListener_(query, view));\r\n        }\r\n        return events;\r\n    };\r\n    /**\r\n     * Remove event callback(s).\r\n     *\r\n     * If query is the default query, we'll check all queries for the specified eventRegistration.\r\n     * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.\r\n     *\r\n     * @param {!Query} query\r\n     * @param {?EventRegistration} eventRegistration If null, all callbacks are removed.\r\n     * @param {Error=} cancelError If a cancelError is provided, appropriate cancel events will be returned.\r\n     * @return {!Array.<!Event>} Cancel events, if cancelError was provided.\r\n     */\r\n    SyncTree.prototype.removeEventRegistration = function (query, eventRegistration, cancelError) {\r\n        var _this = this;\r\n        // Find the syncPoint first. Then deal with whether or not it has matching listeners\r\n        var path = query.path;\r\n        var maybeSyncPoint = this.syncPointTree_.get(path);\r\n        var cancelEvents = [];\r\n        // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without\r\n        // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and\r\n        // not loadsAllData().\r\n        if (maybeSyncPoint &&\r\n            (query.queryIdentifier() === 'default' ||\r\n                maybeSyncPoint.viewExistsForQuery(query))) {\r\n            /**\r\n             * @type {{removed: !Array.<!Query>, events: !Array.<!Event>}}\r\n             */\r\n            var removedAndEvents = maybeSyncPoint.removeEventRegistration(query, eventRegistration, cancelError);\r\n            if (maybeSyncPoint.isEmpty()) {\r\n                this.syncPointTree_ = this.syncPointTree_.remove(path);\r\n            }\r\n            var removed = removedAndEvents.removed;\r\n            cancelEvents = removedAndEvents.events;\r\n            // We may have just removed one of many listeners and can short-circuit this whole process\r\n            // We may also not have removed a default listener, in which case all of the descendant listeners should already be\r\n            // properly set up.\r\n            //\r\n            // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of\r\n            // queryId === 'default'\r\n            var removingDefault = -1 !==\r\n                removed.findIndex(function (query) {\r\n                    return query.getQueryParams().loadsAllData();\r\n                });\r\n            var covered = this.syncPointTree_.findOnPath(path, function (relativePath, parentSyncPoint) {\r\n                return parentSyncPoint.hasCompleteView();\r\n            });\r\n            if (removingDefault && !covered) {\r\n                var subtree = this.syncPointTree_.subtree(path);\r\n                // There are potentially child listeners. Determine what if any listens we need to send before executing the\r\n                // removal\r\n                if (!subtree.isEmpty()) {\r\n                    // We need to fold over our subtree and collect the listeners to send\r\n                    var newViews = this.collectDistinctViewsForSubTree_(subtree);\r\n                    // Ok, we've collected all the listens we need. Set them up.\r\n                    for (var i = 0; i < newViews.length; ++i) {\r\n                        var view = newViews[i], newQuery = view.getQuery();\r\n                        var listener = this.createListenerForView_(view);\r\n                        this.listenProvider_.startListening(SyncTree.queryForListening_(newQuery), this.tagForQuery_(newQuery), listener.hashFn, listener.onComplete);\r\n                    }\r\n                }\r\n            }\r\n            // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query\r\n            // The above block has us covered in terms of making sure we're set up on listens lower in the tree.\r\n            // Also, note that if we have a cancelError, it's already been removed at the provider level.\r\n            if (!covered && removed.length > 0 && !cancelError) {\r\n                // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one\r\n                // default. Otherwise, we need to iterate through and cancel each individual query\r\n                if (removingDefault) {\r\n                    // We don't tag default listeners\r\n                    var defaultTag = null;\r\n                    this.listenProvider_.stopListening(SyncTree.queryForListening_(query), defaultTag);\r\n                }\r\n                else {\r\n                    removed.forEach(function (queryToRemove) {\r\n                        var tagToRemove = _this.queryToTagMap_[SyncTree.makeQueryKey_(queryToRemove)];\r\n                        _this.listenProvider_.stopListening(SyncTree.queryForListening_(queryToRemove), tagToRemove);\r\n                    });\r\n                }\r\n            }\r\n            // Now, clear all of the tags we're tracking for the removed listens\r\n            this.removeTags_(removed);\r\n        }\r\n        return cancelEvents;\r\n    };\r\n    /**\r\n     * Returns a complete cache, if we have one, of the data at a particular path. The location must have a listener above\r\n     * it, but as this is only used by transaction code, that should always be the case anyways.\r\n     *\r\n     * Note: this method will *include* hidden writes from transaction with applyLocally set to false.\r\n     * @param {!Path} path The path to the data we want\r\n     * @param {Array.<number>=} writeIdsToExclude A specific set to be excluded\r\n     * @return {?Node}\r\n     */\r\n    SyncTree.prototype.calcCompleteEventCache = function (path, writeIdsToExclude) {\r\n        var includeHiddenSets = true;\r\n        var writeTree = this.pendingWriteTree_;\r\n        var serverCache = this.syncPointTree_.findOnPath(path, function (pathSoFar, syncPoint) {\r\n            var relativePath = Path.relativePath(pathSoFar, path);\r\n            var serverCache = syncPoint.getCompleteServerCache(relativePath);\r\n            if (serverCache) {\r\n                return serverCache;\r\n            }\r\n        });\r\n        return writeTree.calcCompleteEventCache(path, serverCache, writeIdsToExclude, includeHiddenSets);\r\n    };\r\n    /**\r\n     * This collapses multiple unfiltered views into a single view, since we only need a single\r\n     * listener for them.\r\n     *\r\n     * @param {!ImmutableTree.<!SyncPoint>} subtree\r\n     * @return {!Array.<!View>}\r\n     * @private\r\n     */\r\n    SyncTree.prototype.collectDistinctViewsForSubTree_ = function (subtree) {\r\n        return subtree.fold(function (relativePath, maybeChildSyncPoint, childMap) {\r\n            if (maybeChildSyncPoint && maybeChildSyncPoint.hasCompleteView()) {\r\n                var completeView = maybeChildSyncPoint.getCompleteView();\r\n                return [completeView];\r\n            }\r\n            else {\r\n                // No complete view here, flatten any deeper listens into an array\r\n                var views_1 = [];\r\n                if (maybeChildSyncPoint) {\r\n                    views_1 = maybeChildSyncPoint.getQueryViews();\r\n                }\r\n                util.forEach(childMap, function (key, childViews) {\r\n                    views_1 = views_1.concat(childViews);\r\n                });\r\n                return views_1;\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * @param {!Array.<!Query>} queries\r\n     * @private\r\n     */\r\n    SyncTree.prototype.removeTags_ = function (queries) {\r\n        for (var j = 0; j < queries.length; ++j) {\r\n            var removedQuery = queries[j];\r\n            if (!removedQuery.getQueryParams().loadsAllData()) {\r\n                // We should have a tag for this\r\n                var removedQueryKey = SyncTree.makeQueryKey_(removedQuery);\r\n                var removedQueryTag = this.queryToTagMap_[removedQueryKey];\r\n                delete this.queryToTagMap_[removedQueryKey];\r\n                delete this.tagToQueryMap_['_' + removedQueryTag];\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Normalizes a query to a query we send the server for listening\r\n     * @param {!Query} query\r\n     * @return {!Query} The normalized query\r\n     * @private\r\n     */\r\n    SyncTree.queryForListening_ = function (query) {\r\n        if (query.getQueryParams().loadsAllData() &&\r\n            !query.getQueryParams().isDefault()) {\r\n            // We treat queries that load all data as default queries\r\n            // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits\r\n            // from Query\r\n            return /** @type {!Query} */ query.getRef();\r\n        }\r\n        else {\r\n            return query;\r\n        }\r\n    };\r\n    /**\r\n     * For a given new listen, manage the de-duplication of outstanding subscriptions.\r\n     *\r\n     * @param {!Query} query\r\n     * @param {!View} view\r\n     * @return {!Array.<!Event>} This method can return events to support synchronous data sources\r\n     * @private\r\n     */\r\n    SyncTree.prototype.setupListener_ = function (query, view) {\r\n        var path = query.path;\r\n        var tag = this.tagForQuery_(query);\r\n        var listener = this.createListenerForView_(view);\r\n        var events = this.listenProvider_.startListening(SyncTree.queryForListening_(query), tag, listener.hashFn, listener.onComplete);\r\n        var subtree = this.syncPointTree_.subtree(path);\r\n        // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we\r\n        // may need to shadow other listens as well.\r\n        if (tag) {\r\n            util.assert(!subtree.value.hasCompleteView(), \"If we're adding a query, it shouldn't be shadowed\");\r\n        }\r\n        else {\r\n            // Shadow everything at or below this location, this is a default listener.\r\n            var queriesToStop = subtree.fold(function (relativePath, maybeChildSyncPoint, childMap) {\r\n                if (!relativePath.isEmpty() &&\r\n                    maybeChildSyncPoint &&\r\n                    maybeChildSyncPoint.hasCompleteView()) {\r\n                    return [maybeChildSyncPoint.getCompleteView().getQuery()];\r\n                }\r\n                else {\r\n                    // No default listener here, flatten any deeper queries into an array\r\n                    var queries_1 = [];\r\n                    if (maybeChildSyncPoint) {\r\n                        queries_1 = queries_1.concat(maybeChildSyncPoint.getQueryViews().map(function (view) { return view.getQuery(); }));\r\n                    }\r\n                    util.forEach(childMap, function (key, childQueries) {\r\n                        queries_1 = queries_1.concat(childQueries);\r\n                    });\r\n                    return queries_1;\r\n                }\r\n            });\r\n            for (var i = 0; i < queriesToStop.length; ++i) {\r\n                var queryToStop = queriesToStop[i];\r\n                this.listenProvider_.stopListening(SyncTree.queryForListening_(queryToStop), this.tagForQuery_(queryToStop));\r\n            }\r\n        }\r\n        return events;\r\n    };\r\n    /**\r\n     *\r\n     * @param {!View} view\r\n     * @return {{hashFn: function(), onComplete: function(!string, *)}}\r\n     * @private\r\n     */\r\n    SyncTree.prototype.createListenerForView_ = function (view) {\r\n        var _this = this;\r\n        var query = view.getQuery();\r\n        var tag = this.tagForQuery_(query);\r\n        return {\r\n            hashFn: function () {\r\n                var cache = view.getServerCache() || ChildrenNode.EMPTY_NODE;\r\n                return cache.hash();\r\n            },\r\n            onComplete: function (status) {\r\n                if (status === 'ok') {\r\n                    if (tag) {\r\n                        return _this.applyTaggedListenComplete(query.path, tag);\r\n                    }\r\n                    else {\r\n                        return _this.applyListenComplete(query.path);\r\n                    }\r\n                }\r\n                else {\r\n                    // If a listen failed, kill all of the listeners here, not just the one that triggered the error.\r\n                    // Note that this may need to be scoped to just this listener if we change permissions on filtered children\r\n                    var error = errorForServerCode(status, query);\r\n                    return _this.removeEventRegistration(query, \r\n                    /*eventRegistration*/ null, error);\r\n                }\r\n            }\r\n        };\r\n    };\r\n    /**\r\n     * Given a query, computes a \"queryKey\" suitable for use in our queryToTagMap_.\r\n     * @private\r\n     * @param {!Query} query\r\n     * @return {string}\r\n     */\r\n    SyncTree.makeQueryKey_ = function (query) {\r\n        return query.path.toString() + '$' + query.queryIdentifier();\r\n    };\r\n    /**\r\n     * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.\r\n     * @private\r\n     * @param {!string} queryKey\r\n     * @return {{queryId: !string, path: !Path}}\r\n     */\r\n    SyncTree.parseQueryKey_ = function (queryKey) {\r\n        var splitIndex = queryKey.indexOf('$');\r\n        util.assert(splitIndex !== -1 && splitIndex < queryKey.length - 1, 'Bad queryKey.');\r\n        return {\r\n            queryId: queryKey.substr(splitIndex + 1),\r\n            path: new Path(queryKey.substr(0, splitIndex))\r\n        };\r\n    };\r\n    /**\r\n     * Return the query associated with the given tag, if we have one\r\n     * @param {!number} tag\r\n     * @return {?string}\r\n     * @private\r\n     */\r\n    SyncTree.prototype.queryKeyForTag_ = function (tag) {\r\n        return this.tagToQueryMap_['_' + tag];\r\n    };\r\n    /**\r\n     * Return the tag associated with the given query.\r\n     * @param {!Query} query\r\n     * @return {?number}\r\n     * @private\r\n     */\r\n    SyncTree.prototype.tagForQuery_ = function (query) {\r\n        var queryKey = SyncTree.makeQueryKey_(query);\r\n        return util.safeGet(this.queryToTagMap_, queryKey);\r\n    };\r\n    /**\r\n     * Static accessor for query tags.\r\n     * @return {number}\r\n     * @private\r\n     */\r\n    SyncTree.getNextQueryTag_ = function () {\r\n        return SyncTree.nextQueryTag_++;\r\n    };\r\n    /**\r\n     * A helper method to apply tagged operations\r\n     *\r\n     * @param {!Path} queryPath\r\n     * @param {!Operation} operation\r\n     * @return {!Array.<!Event>}\r\n     * @private\r\n     */\r\n    SyncTree.prototype.applyTaggedOperation_ = function (queryPath, operation) {\r\n        var syncPoint = this.syncPointTree_.get(queryPath);\r\n        util.assert(syncPoint, \"Missing sync point for query tag that we're tracking\");\r\n        var writesCache = this.pendingWriteTree_.childWrites(queryPath);\r\n        return syncPoint.applyOperation(operation, writesCache, \r\n        /*serverCache=*/ null);\r\n    };\r\n    /**\r\n     * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.\r\n     *\r\n     * NOTES:\r\n     * - Descendant SyncPoints will be visited first (since we raise events depth-first).\r\n  \n     * - We call applyOperation() on each SyncPoint passing three things:\r\n     *   1. A version of the Operation that has been made relative to the SyncPoint location.\r\n     *   2. A WriteTreeRef of any writes we have cached at the SyncPoint location.\r\n     *   3. A snapshot Node with cached server data, if we have it.\r\n  \n     * - We concatenate all of the events returned by each SyncPoint and return the result.\r\n     *\r\n     * @param {!Operation} operation\r\n     * @return {!Array.<!Event>}\r\n     * @private\r\n     */\r\n    SyncTree.prototype.applyOperationToSyncPoints_ = function (operation) {\r\n        return this.applyOperationHelper_(operation, this.syncPointTree_, \r\n        /*serverCache=*/ null, this.pendingWriteTree_.childWrites(Path.Empty));\r\n    };\r\n    /**\r\n     * Recursive helper for applyOperationToSyncPoints_\r\n     *\r\n     * @private\r\n     * @param {!Operation} operation\r\n     * @param {ImmutableTree.<!SyncPoint>} syncPointTree\r\n     * @param {?Node} serverCache\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @return {!Array.<!Event>}\r\n     */\r\n    SyncTree.prototype.applyOperationHelper_ = function (operation, syncPointTree, serverCache, writesCache) {\r\n        if (operation.path.isEmpty()) {\r\n            return this.applyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache);\r\n        }\r\n        else {\r\n            var syncPoint = syncPointTree.get(Path.Empty);\r\n            // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n            if (serverCache == null && syncPoint != null) {\r\n                serverCache = syncPoint.getCompleteServerCache(Path.Empty);\r\n            }\r\n            var events = [];\r\n            var childName = operation.path.getFront();\r\n            var childOperation = operation.operationForChild(childName);\r\n            var childTree = syncPointTree.children.get(childName);\r\n            if (childTree && childOperation) {\r\n                var childServerCache = serverCache\r\n                    ? serverCache.getImmediateChild(childName)\r\n                    : null;\r\n                var childWritesCache = writesCache.child(childName);\r\n                events = events.concat(this.applyOperationHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n            }\r\n            if (syncPoint) {\r\n                events = events.concat(syncPoint.applyOperation(operation, writesCache, serverCache));\r\n            }\r\n            return events;\r\n        }\r\n    };\r\n    /**\r\n     * Recursive helper for applyOperationToSyncPoints_\r\n     *\r\n     * @private\r\n     * @param {!Operation} operation\r\n     * @param {ImmutableTree.<!SyncPoint>} syncPointTree\r\n     * @param {?Node} serverCache\r\n     * @param {!WriteTreeRef} writesCache\r\n     * @return {!Array.<!Event>}\r\n     */\r\n    SyncTree.prototype.applyOperationDescendantsHelper_ = function (operation, syncPointTree, serverCache, writesCache) {\r\n        var _this = this;\r\n        var syncPoint = syncPointTree.get(Path.Empty);\r\n        // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n        if (serverCache == null && syncPoint != null) {\r\n            serverCache = syncPoint.getCompleteServerCache(Path.Empty);\r\n        }\r\n        var events = [];\r\n        syncPointTree.children.inorderTraversal(function (childName, childTree) {\r\n            var childServerCache = serverCache\r\n                ? serverCache.getImmediateChild(childName)\r\n                : null;\r\n            var childWritesCache = writesCache.child(childName);\r\n            var childOperation = operation.operationForChild(childName);\r\n            if (childOperation) {\r\n                events = events.concat(_this.applyOperationDescendantsHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n            }\r\n        });\r\n        if (syncPoint) {\r\n            events = events.concat(syncPoint.applyOperation(operation, writesCache, serverCache));\r\n        }\r\n        return events;\r\n    };\r\n    /**\r\n     * Static tracker for next query tag.\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    SyncTree.nextQueryTag_ = 1;\r\n    return SyncTree;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Mutable object which basically just stores a reference to the \"latest\" immutable snapshot.\r\n *\r\n * @constructor\r\n */\r\nvar SnapshotHolder = /** @class */ (function () {\r\n    function SnapshotHolder() {\r\n        this.rootNode_ = ChildrenNode.EMPTY_NODE;\r\n    }\r\n    SnapshotHolder.prototype.getNode = function (path) {\r\n        return this.rootNode_.getChild(path);\r\n    };\r\n    SnapshotHolder.prototype.updateSnapshot = function (path, newSnapshotNode) {\r\n        this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);\r\n    };\r\n    return SnapshotHolder;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Abstraction around FirebaseApp's token fetching capabilities.\r\n */\r\nvar AuthTokenProvider = /** @class */ (function () {\r\n    /**\r\n     * @param {!FirebaseApp} app_\r\n     */\r\n    function AuthTokenProvider(app_) {\r\n        this.app_ = app_;\r\n    }\r\n    /**\r\n     * @param {boolean} forceRefresh\r\n     * @return {!Promise<FirebaseAuthTokenData>}\r\n     */\r\n    AuthTokenProvider.prototype.getToken = function (forceRefresh) {\r\n        return this.app_['INTERNAL']['getToken'](forceRefresh).then(null, \r\n        // .catch\r\n        function (error) {\r\n            // TODO: Need to figure out all the cases this is raised and whether\r\n            // this makes sense.\r\n            if (error && error.code === 'auth/token-not-initialized') {\r\n                log('Got auth/token-not-initialized error.  Treating as null token.');\r\n                return null;\r\n            }\r\n            else {\r\n                return Promise.reject(error);\r\n            }\r\n        });\r\n    };\r\n    AuthTokenProvider.prototype.addTokenChangeListener = function (listener) {\r\n        // TODO: We might want to wrap the listener and call it with no args to\r\n        // avoid a leaky abstraction, but that makes removing the listener harder.\r\n        this.app_['INTERNAL']['addAuthTokenListener'](listener);\r\n    };\r\n    AuthTokenProvider.prototype.removeTokenChangeListener = function (listener) {\r\n        this.app_['INTERNAL']['removeAuthTokenListener'](listener);\r\n    };\r\n    AuthTokenProvider.prototype.notifyForInvalidToken = function () {\r\n        var errorMessage = 'Provided authentication credentials for the app named \"' +\r\n            this.app_.name +\r\n            '\" are invalid. This usually indicates your app was not ' +\r\n            'initialized correctly. ';\r\n        if ('credential' in this.app_.options) {\r\n            errorMessage +=\r\n                'Make sure the \"credential\" property provided to initializeApp() ' +\r\n                    'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n                    'project.';\r\n        }\r\n        else if ('serviceAccount' in this.app_.options) {\r\n            errorMessage +=\r\n                'Make sure the \"serviceAccount\" property provided to initializeApp() ' +\r\n                    'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n                    'project.';\r\n        }\r\n        else {\r\n            errorMessage +=\r\n                'Make sure the \"apiKey\" and \"databaseURL\" properties provided to ' +\r\n                    'initializeApp() match the values provided for your app at ' +\r\n                    'https://console.firebase.google.com/.';\r\n        }\r\n        warn(errorMessage);\r\n    };\r\n    return AuthTokenProvider;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Tracks a collection of stats.\r\n *\r\n * @constructor\r\n */\r\nvar StatsCollection = /** @class */ (function () {\r\n    function StatsCollection() {\r\n        this.counters_ = {};\r\n    }\r\n    StatsCollection.prototype.incrementCounter = function (name, amount) {\r\n        if (amount === void 0) { amount = 1; }\r\n        if (!util.contains(this.counters_, name))\r\n            this.counters_[name] = 0;\r\n        this.counters_[name] += amount;\r\n    };\r\n    StatsCollection.prototype.get = function () {\r\n        return util.deepCopy(this.counters_);\r\n    };\r\n    return StatsCollection;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar StatsManager = /** @class */ (function () {\r\n    function StatsManager() {\r\n    }\r\n    StatsManager.getCollection = function (repoInfo) {\r\n        var hashString = repoInfo.toString();\r\n        if (!this.collections_[hashString]) {\r\n            this.collections_[hashString] = new StatsCollection();\r\n        }\r\n        return this.collections_[hashString];\r\n    };\r\n    StatsManager.getOrCreateReporter = function (repoInfo, creatorFunction) {\r\n        var hashString = repoInfo.toString();\r\n        if (!this.reporters_[hashString]) {\r\n            this.reporters_[hashString] = creatorFunction();\r\n        }\r\n        return this.reporters_[hashString];\r\n    };\r\n    StatsManager.collections_ = {};\r\n    StatsManager.reporters_ = {};\r\n    return StatsManager;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns the delta from the previous call to get stats.\r\n *\r\n * @param collection_ The collection to \"listen\" to.\r\n * @constructor\r\n */\r\nvar StatsListener = /** @class */ (function () {\r\n    function StatsListener(collection_) {\r\n        this.collection_ = collection_;\r\n        this.last_ = null;\r\n    }\r\n    StatsListener.prototype.get = function () {\r\n        var newStats = this.collection_.get();\r\n        var delta = util.clone(newStats);\r\n        if (this.last_) {\r\n            util.forEach(this.last_, function (stat, value) {\r\n                delta[stat] = delta[stat] - value;\r\n            });\r\n        }\r\n        this.last_ = newStats;\r\n        return delta;\r\n    };\r\n    return StatsListener;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably\r\n// happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10\r\n// seconds to try to ensure the Firebase connection is established / settled.\r\nvar FIRST_STATS_MIN_TIME = 10 * 1000;\r\nvar FIRST_STATS_MAX_TIME = 30 * 1000;\r\n// We'll continue to report stats on average every 5 minutes.\r\nvar REPORT_STATS_INTERVAL = 5 * 60 * 1000;\r\n/**\r\n * @constructor\r\n */\r\nvar StatsReporter = /** @class */ (function () {\r\n    /**\r\n     * @param collection\r\n     * @param server_\r\n     */\r\n    function StatsReporter(collection, server_) {\r\n        this.server_ = server_;\r\n        this.statsToReport_ = {};\r\n        this.statsListener_ = new StatsListener(collection);\r\n        var timeout = FIRST_STATS_MIN_TIME +\r\n            (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();\r\n        setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));\r\n    }\r\n    StatsReporter.prototype.includeStat = function (stat) {\r\n        this.statsToReport_[stat] = true;\r\n    };\r\n    StatsReporter.prototype.reportStats_ = function () {\r\n        var _this = this;\r\n        var stats = this.statsListener_.get();\r\n        var reportedStats = {};\r\n        var haveStatsToReport = false;\r\n        util.forEach(stats, function (stat, value) {\r\n            if (value > 0 && util.contains(_this.statsToReport_, stat)) {\r\n                reportedStats[stat] = value;\r\n                haveStatsToReport = true;\r\n            }\r\n        });\r\n        if (haveStatsToReport) {\r\n            this.server_.reportStats(reportedStats);\r\n        }\r\n        // queue our next run.\r\n        setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL));\r\n    };\r\n    return StatsReporter;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The event queue serves a few purposes:\r\n * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more\r\n *    events being queued.\r\n * 2. raiseQueuedEvents() handles being called reentrantly nicely.  That is, if in the course of raising events,\r\n *    raiseQueuedEvents() is called again, the \"inner\" call will pick up raising events where the \"outer\" call\r\n *    left off, ensuring that the events are still raised synchronously and in order.\r\n * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued\r\n *    events are raised synchronously.\r\n *\r\n * NOTE: This can all go away if/when we move to async events.\r\n *\r\n * @constructor\r\n */\r\nvar EventQueue = /** @class */ (function () {\r\n    function EventQueue() {\r\n        /**\r\n         * @private\r\n         * @type {!Array.<EventList>}\r\n         */\r\n        this.eventLists_ = [];\r\n        /**\r\n         * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.\r\n         * @private\r\n         * @type {!number}\r\n         */\r\n        this.recursionDepth_ = 0;\r\n    }\r\n    /**\r\n     * @param {!Array.<Event>} eventDataList The new events to queue.\r\n     */\r\n    EventQueue.prototype.queueEvents = function (eventDataList) {\r\n        // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.\r\n        var currList = null;\r\n        for (var i = 0; i < eventDataList.length; i++) {\r\n            var eventData = eventDataList[i];\r\n            var eventPath = eventData.getPath();\r\n            if (currList !== null && !eventPath.equals(currList.getPath())) {\r\n                this.eventLists_.push(currList);\r\n                currList = null;\r\n            }\r\n            if (currList === null) {\r\n                currList = new EventList(eventPath);\r\n            }\r\n            currList.add(eventData);\r\n        }\r\n        if (currList) {\r\n            this.eventLists_.push(currList);\r\n        }\r\n    };\r\n    /**\r\n     * Queues the specified events and synchronously raises all events (including previously queued ones)\r\n     * for the specified path.\r\n     *\r\n     * It is assumed that the new events are all for the specified path.\r\n     *\r\n     * @param {!Path} path The path to raise events for.\r\n     * @param {!Array.<Event>} eventDataList The new events to raise.\r\n     */\r\n    EventQueue.prototype.raiseEventsAtPath = function (path, eventDataList) {\r\n        this.queueEvents(eventDataList);\r\n        this.raiseQueuedEventsMatchingPredicate_(function (eventPath) {\r\n            return eventPath.equals(path);\r\n        });\r\n    };\r\n    /**\r\n     * Queues the specified events and synchronously raises all events (including previously queued ones) for\r\n     * locations related to the specified change path (i.e. all ancestors and descendants).\r\n     *\r\n     * It is assumed that the new events are all related (ancestor or descendant) to the specified path.\r\n     *\r\n     * @param {!Path} changedPath The path to raise events for.\r\n     * @param {!Array.<!Event>} eventDataList The events to raise\r\n     */\r\n    EventQueue.prototype.raiseEventsForChangedPath = function (changedPath, eventDataList) {\r\n        this.queueEvents(eventDataList);\r\n        this.raiseQueuedEventsMatchingPredicate_(function (eventPath) {\r\n            return eventPath.contains(changedPath) || changedPath.contains(eventPath);\r\n        });\r\n    };\r\n    /**\r\n     * @param {!function(!Path):boolean} predicate\r\n     * @private\r\n     */\r\n    EventQueue.prototype.raiseQueuedEventsMatchingPredicate_ = function (predicate) {\r\n        this.recursionDepth_++;\r\n        var sentAll = true;\r\n        for (var i = 0; i < this.eventLists_.length; i++) {\r\n            var eventList = this.eventLists_[i];\r\n            if (eventList) {\r\n                var eventPath = eventList.getPath();\r\n                if (predicate(eventPath)) {\r\n                    this.eventLists_[i].raise();\r\n                    this.eventLists_[i] = null;\r\n                }\r\n                else {\r\n                    sentAll = false;\r\n                }\r\n            }\r\n        }\r\n        if (sentAll) {\r\n            this.eventLists_ = [];\r\n        }\r\n        this.recursionDepth_--;\r\n    };\r\n    return EventQueue;\r\n}());\r\n/**\r\n * @param {!Path} path\r\n * @constructor\r\n */\r\nvar EventList = /** @class */ (function () {\r\n    function EventList(path_) {\r\n        this.path_ = path_;\r\n        /**\r\n         * @type {!Array.<Event>}\r\n         * @private\r\n         */\r\n        this.events_ = [];\r\n    }\r\n    /**\r\n     * @param {!Event} eventData\r\n     */\r\n    EventList.prototype.add = function (eventData) {\r\n        this.events_.push(eventData);\r\n    };\r\n    /**\r\n     * Iterates through the list and raises each event\r\n     */\r\n    EventList.prototype.raise = function () {\r\n        for (var i = 0; i < this.events_.length; i++) {\r\n            var eventData = this.events_[i];\r\n            if (eventData !== null) {\r\n                this.events_[i] = null;\r\n                var eventFn = eventData.getEventRunner();\r\n                if (logger) {\r\n                    log('event: ' + eventData.toString());\r\n                }\r\n                exceptionGuard(eventFn);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * @return {!Path}\r\n     */\r\n    EventList.prototype.getPath = function () {\r\n        return this.path_;\r\n    };\r\n    return EventList;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Base class to be used if you want to emit events. Call the constructor with\r\n * the set of allowed event names.\r\n */\r\nvar EventEmitter = /** @class */ (function () {\r\n    /**\r\n     * @param {!Array.<string>} allowedEvents_\r\n     */\r\n    function EventEmitter(allowedEvents_) {\r\n        this.allowedEvents_ = allowedEvents_;\r\n        this.listeners_ = {};\r\n        util.assert(Array.isArray(allowedEvents_) && allowedEvents_.length > 0, 'Requires a non-empty array');\r\n    }\r\n    /**\r\n     * To be called by derived classes to trigger events.\r\n     * @param {!string} eventType\r\n     * @param {...*} var_args\r\n     */\r\n    EventEmitter.prototype.trigger = function (eventType) {\r\n        var var_args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            var_args[_i - 1] = arguments[_i];\r\n        }\r\n        if (Array.isArray(this.listeners_[eventType])) {\r\n            // Clone the list, since callbacks could add/remove listeners.\r\n            var listeners = this.listeners_[eventType].slice();\r\n            for (var i = 0; i < listeners.length; i++) {\r\n                listeners[i].callback.apply(listeners[i].context, var_args);\r\n            }\r\n        }\r\n    };\r\n    EventEmitter.prototype.on = function (eventType, callback, context) {\r\n        this.validateEventType_(eventType);\r\n        this.listeners_[eventType] = this.listeners_[eventType] || [];\r\n        this.listeners_[eventType].push({ callback: callback, context: context });\r\n        var eventData = this.getInitialEvent(eventType);\r\n        if (eventData) {\r\n            callback.apply(context, eventData);\r\n        }\r\n    };\r\n    EventEmitter.prototype.off = function (eventType, callback, context) {\r\n        this.validateEventType_(eventType);\r\n        var listeners = this.listeners_[eventType] || [];\r\n        for (var i = 0; i < listeners.length; i++) {\r\n            if (listeners[i].callback === callback &&\r\n                (!context || context === listeners[i].context)) {\r\n                listeners.splice(i, 1);\r\n                return;\r\n            }\r\n        }\r\n    };\r\n    EventEmitter.prototype.validateEventType_ = function (eventType) {\r\n        util.assert(this.allowedEvents_.find(function (et) {\r\n            return et === eventType;\r\n        }), 'Unknown event: ' + eventType);\r\n    };\r\n    return EventEmitter;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @extends {EventEmitter}\r\n */\r\nvar VisibilityMonitor = /** @class */ (function (_super) {\r\n    tslib_1.__extends(VisibilityMonitor, _super);\r\n    function VisibilityMonitor() {\r\n        var _this = _super.call(this, ['visible']) || this;\r\n        var hidden;\r\n        var visibilityChange;\r\n        if (typeof document !== 'undefined' &&\r\n            typeof document.addEventListener !== 'undefined') {\r\n            if (typeof document['hidden'] !== 'undefined') {\r\n                // Opera 12.10 and Firefox 18 and later support\r\n                visibilityChange = 'visibilitychange';\r\n                hidden = 'hidden';\r\n            }\r\n            else if (typeof document['mozHidden'] !== 'undefined') {\r\n                visibilityChange = 'mozvisibilitychange';\r\n                hidden = 'mozHidden';\r\n            }\r\n            else if (typeof document['msHidden'] !== 'undefined') {\r\n                visibilityChange = 'msvisibilitychange';\r\n                hidden = 'msHidden';\r\n            }\r\n            else if (typeof document['webkitHidden'] !== 'undefined') {\r\n                visibilityChange = 'webkitvisibilitychange';\r\n                hidden = 'webkitHidden';\r\n            }\r\n        }\r\n        // Initially, we always assume we are visible. This ensures that in browsers\r\n        // without page visibility support or in cases where we are never visible\r\n        // (e.g. chrome extension), we act as if we are visible, i.e. don't delay\r\n        // reconnects\r\n        _this.visible_ = true;\r\n        if (visibilityChange) {\r\n            document.addEventListener(visibilityChange, function () {\r\n                var visible = !document[hidden];\r\n                if (visible !== _this.visible_) {\r\n                    _this.visible_ = visible;\r\n                    _this.trigger('visible', visible);\r\n                }\r\n            }, false);\r\n        }\r\n        return _this;\r\n    }\r\n    VisibilityMonitor.getInstance = function () {\r\n        return new VisibilityMonitor();\r\n    };\r\n    /**\r\n     * @param {!string} eventType\r\n     * @return {Array.<boolean>}\r\n     */\r\n    VisibilityMonitor.prototype.getInitialEvent = function (eventType) {\r\n        util.assert(eventType === 'visible', 'Unknown event type: ' + eventType);\r\n        return [this.visible_];\r\n    };\r\n    return VisibilityMonitor;\r\n}(EventEmitter));\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Monitors online state (as reported by window.online/offline events).\r\n *\r\n * The expectation is that this could have many false positives (thinks we are online\r\n * when we're not), but no false negatives.  So we can safely use it to determine when\r\n * we definitely cannot reach the internet.\r\n *\r\n * @extends {EventEmitter}\r\n */\r\nvar OnlineMonitor = /** @class */ (function (_super) {\r\n    tslib_1.__extends(OnlineMonitor, _super);\r\n    function OnlineMonitor() {\r\n        var _this = _super.call(this, ['online']) || this;\r\n        _this.online_ = true;\r\n        // We've had repeated complaints that Cordova apps can get stuck \"offline\", e.g.\r\n        // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810\r\n        // It would seem that the 'online' event does not always fire consistently. So we disable it\r\n        // for Cordova.\r\n        if (typeof window !== 'undefined' &&\r\n            typeof window.addEventListener !== 'undefined' &&\r\n            !util.isMobileCordova()) {\r\n            window.addEventListener('online', function () {\r\n                if (!_this.online_) {\r\n                    _this.online_ = true;\r\n                    _this.trigger('online', true);\r\n                }\r\n            }, false);\r\n            window.addEventListener('offline', function () {\r\n                if (_this.online_) {\r\n                    _this.online_ = false;\r\n                    _this.trigger('online', false);\r\n                }\r\n            }, false);\r\n        }\r\n        return _this;\r\n    }\r\n    OnlineMonitor.getInstance = function () {\r\n        return new OnlineMonitor();\r\n    };\r\n    /**\r\n     * @param {!string} eventType\r\n     * @return {Array.<boolean>}\r\n     */\r\n    OnlineMonitor.prototype.getInitialEvent = function (eventType) {\r\n        util.assert(eventType === 'online', 'Unknown event type: ' + eventType);\r\n        return [this.online_];\r\n    };\r\n    /**\r\n     * @return {boolean}\r\n     */\r\n    OnlineMonitor.prototype.currentlyOnline = function () {\r\n        return this.online_;\r\n    };\r\n    return OnlineMonitor;\r\n}(EventEmitter));\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class ensures the packets from the server arrive in order\r\n * This class takes data from the server and ensures it gets passed into the callbacks in order.\r\n * @constructor\r\n */\r\nvar PacketReceiver = /** @class */ (function () {\r\n    /**\r\n     * @param onMessage_\r\n     */\r\n    function PacketReceiver(onMessage_) {\r\n        this.onMessage_ = onMessage_;\r\n        this.pendingResponses = [];\r\n        this.currentResponseNum = 0;\r\n        this.closeAfterResponse = -1;\r\n        this.onClose = null;\r\n    }\r\n    PacketReceiver.prototype.closeAfter = function (responseNum, callback) {\r\n        this.closeAfterResponse = responseNum;\r\n        this.onClose = callback;\r\n        if (this.closeAfterResponse < this.currentResponseNum) {\r\n            this.onClose();\r\n            this.onClose = null;\r\n        }\r\n    };\r\n    /**\r\n     * Each message from the server comes with a response number, and an array of data. The responseNumber\r\n     * allows us to ensure that we process them in the right order, since we can't be guaranteed that all\r\n     * browsers will respond in the same order as the requests we sent\r\n     * @param {number} requestNum\r\n     * @param {Array} data\r\n     */\r\n    PacketReceiver.prototype.handleResponse = function (requestNum, data) {\r\n        var _this = this;\r\n        this.pendingResponses[requestNum] = data;\r\n        var _loop_1 = function () {\r\n            var toProcess = this_1.pendingResponses[this_1.currentResponseNum];\r\n            delete this_1.pendingResponses[this_1.currentResponseNum];\r\n            var _loop_2 = function (i) {\r\n                if (toProcess[i]) {\r\n                    exceptionGuard(function () {\r\n                        _this.onMessage_(toProcess[i]);\r\n                    });\r\n                }\r\n            };\r\n            for (var i = 0; i < toProcess.length; ++i) {\r\n                _loop_2(i);\r\n            }\r\n            if (this_1.currentResponseNum === this_1.closeAfterResponse) {\r\n                if (this_1.onClose) {\r\n                    this_1.onClose();\r\n                    this_1.onClose = null;\r\n                }\r\n                return \"break\";\r\n            }\r\n            this_1.currentResponseNum++;\r\n        };\r\n        var this_1 = this;\r\n        while (this.pendingResponses[this.currentResponseNum]) {\r\n            var state_1 = _loop_1();\r\n            if (state_1 === \"break\")\r\n                break;\r\n        }\r\n    };\r\n    return PacketReceiver;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// URL query parameters associated with longpolling\r\nvar FIREBASE_LONGPOLL_START_PARAM = 'start';\r\nvar FIREBASE_LONGPOLL_CLOSE_COMMAND = 'close';\r\nvar FIREBASE_LONGPOLL_COMMAND_CB_NAME = 'pLPCommand';\r\nvar FIREBASE_LONGPOLL_DATA_CB_NAME = 'pRTLPCB';\r\nvar FIREBASE_LONGPOLL_ID_PARAM = 'id';\r\nvar FIREBASE_LONGPOLL_PW_PARAM = 'pw';\r\nvar FIREBASE_LONGPOLL_SERIAL_PARAM = 'ser';\r\nvar FIREBASE_LONGPOLL_CALLBACK_ID_PARAM = 'cb';\r\nvar FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM = 'seg';\r\nvar FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET = 'ts';\r\nvar FIREBASE_LONGPOLL_DATA_PARAM = 'd';\r\nvar FIREBASE_LONGPOLL_DISCONN_FRAME_PARAM = 'disconn';\r\nvar FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM = 'dframe';\r\n//Data size constants.\r\n//TODO: Perf: the maximum length actually differs from browser to browser.\r\n// We should check what browser we're on and set accordingly.\r\nvar MAX_URL_DATA_SIZE = 1870;\r\nvar SEG_HEADER_SIZE = 30; //ie: &seg=8299234&ts=982389123&d=\r\nvar MAX_PAYLOAD_SIZE = MAX_URL_DATA_SIZE - SEG_HEADER_SIZE;\r\n/**\r\n * Keepalive period\r\n * send a fresh request at minimum every 25 seconds. Opera has a maximum request\r\n * length of 30 seconds that we can't exceed.\r\n * @const\r\n * @type {number}\r\n */\r\nvar KEEPALIVE_REQUEST_INTERVAL = 25000;\r\n/**\r\n * How long to wait before aborting a long-polling connection attempt.\r\n * @const\r\n * @type {number}\r\n */\r\nvar LP_CONNECT_TIMEOUT = 30000;\r\n/**\r\n * This class manages a single long-polling connection.\r\n *\r\n * @constructor\r\n * @implements {Transport}\r\n */\r\nvar BrowserPollConnection = /** @class */ (function () {\r\n    /**\r\n     * @param {string} connId An identifier for this connection, used for logging\r\n     * @param {RepoInfo} repoInfo The info for the endpoint to send data to.\r\n     * @param {string=} transportSessionId Optional transportSessionid if we are reconnecting for an existing\r\n     *                                         transport session\r\n     * @param {string=}  lastSessionId Optional lastSessionId if the PersistentConnection has already created a\r\n     *                                     connection previously\r\n     */\r\n    function BrowserPollConnection(connId, repoInfo, transportSessionId, lastSessionId) {\r\n        this.connId = connId;\r\n        this.repoInfo = repoInfo;\r\n        this.transportSessionId = transportSessionId;\r\n        this.lastSessionId = lastSessionId;\r\n        this.bytesSent = 0;\r\n        this.bytesReceived = 0;\r\n        this.everConnected_ = false;\r\n        this.log_ = logWrapper(connId);\r\n        this.stats_ = StatsManager.getCollection(repoInfo);\r\n        this.urlFn = function (params) {\r\n            return repoInfo.connectionURL(LONG_POLLING, params);\r\n        };\r\n    }\r\n    /**\r\n     *\r\n     * @param {function(Object)} onMessage Callback when messages arrive\r\n     * @param {function()} onDisconnect Callback with connection lost.\r\n     */\r\n    BrowserPollConnection.prototype.open = function (onMessage, onDisconnect) {\r\n        var _this = this;\r\n        this.curSegmentNum = 0;\r\n        this.onDisconnect_ = onDisconnect;\r\n        this.myPacketOrderer = new PacketReceiver(onMessage);\r\n        this.isClosed_ = false;\r\n        this.connectTimeoutTimer_ = setTimeout(function () {\r\n            _this.log_('Timed out trying to connect.');\r\n            // Make sure we clear the host cache\r\n            _this.onClosed_();\r\n            _this.connectTimeoutTimer_ = null;\r\n        }, Math.floor(LP_CONNECT_TIMEOUT));\r\n        // Ensure we delay the creation of the iframe until the DOM is loaded.\r\n        executeWhenDOMReady(function () {\r\n            if (_this.isClosed_)\r\n                return;\r\n            //Set up a callback that gets triggered once a connection is set up.\r\n            _this.scriptTagHolder = new FirebaseIFrameScriptHolder(function () {\r\n                var args = [];\r\n                for (var _i = 0; _i < arguments.length; _i++) {\r\n                    args[_i] = arguments[_i];\r\n                }\r\n                var command = args[0], arg1 = args[1], arg2 = args[2];\r\n                _this.incrementIncomingBytes_(args);\r\n                if (!_this.scriptTagHolder)\r\n                    return; // we closed the connection.\r\n                if (_this.connectTimeoutTimer_) {\r\n                    clearTimeout(_this.connectTimeoutTimer_);\r\n                    _this.connectTimeoutTimer_ = null;\r\n                }\r\n                _this.everConnected_ = true;\r\n                if (command == FIREBASE_LONGPOLL_START_PARAM) {\r\n                    _this.id = arg1;\r\n                    _this.password = arg2;\r\n                }\r\n                else if (command === FIREBASE_LONGPOLL_CLOSE_COMMAND) {\r\n                    // Don't clear the host cache. We got a response from the server, so we know it's reachable\r\n                    if (arg1) {\r\n                        // We aren't expecting any more data (other than what the server's already in the process of sending us\r\n                        // through our already open polls), so don't send any more.\r\n                        _this.scriptTagHolder.sendNewPolls = false;\r\n                        // arg1 in this case is the last response number sent by the server. We should try to receive\r\n                        // all of the responses up to this one before closing\r\n                        _this.myPacketOrderer.closeAfter(arg1, function () {\r\n                            _this.onClosed_();\r\n                        });\r\n                    }\r\n                    else {\r\n                        _this.onClosed_();\r\n                    }\r\n                }\r\n                else {\r\n                    throw new Error('Unrecognized command received: ' + command);\r\n                }\r\n            }, function () {\r\n                var args = [];\r\n                for (var _i = 0; _i < arguments.length; _i++) {\r\n                    args[_i] = arguments[_i];\r\n                }\r\n                var pN = args[0], data = args[1];\r\n                _this.incrementIncomingBytes_(args);\r\n                _this.myPacketOrderer.handleResponse(pN, data);\r\n            }, function () {\r\n                _this.onClosed_();\r\n            }, _this.urlFn);\r\n            //Send the initial request to connect. The serial number is simply to keep the browser from pulling previous results\r\n            //from cache.\r\n            var urlParams = {};\r\n            urlParams[FIREBASE_LONGPOLL_START_PARAM] = 't';\r\n            urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = Math.floor(Math.random() * 100000000);\r\n            if (_this.scriptTagHolder.uniqueCallbackIdentifier)\r\n                urlParams[FIREBASE_LONGPOLL_CALLBACK_ID_PARAM] = _this.scriptTagHolder.uniqueCallbackIdentifier;\r\n            urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n            if (_this.transportSessionId) {\r\n                urlParams[TRANSPORT_SESSION_PARAM] = _this.transportSessionId;\r\n            }\r\n            if (_this.lastSessionId) {\r\n                urlParams[LAST_SESSION_PARAM] = _this.lastSessionId;\r\n            }\r\n            if (!util.isNodeSdk() &&\r\n                typeof location !== 'undefined' &&\r\n                location.href &&\r\n                location.href.indexOf(FORGE_DOMAIN) !== -1) {\r\n                urlParams[REFERER_PARAM] = FORGE_REF;\r\n            }\r\n            var connectURL = _this.urlFn(urlParams);\r\n            _this.log_('Connecting via long-poll to ' + connectURL);\r\n            _this.scriptTagHolder.addTag(connectURL, function () {\r\n                /* do nothing */\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Call this when a handshake has completed successfully and we want to consider the connection established\r\n     */\r\n    BrowserPollConnection.prototype.start = function () {\r\n        this.scriptTagHolder.startLongPoll(this.id, this.password);\r\n        this.addDisconnectPingFrame(this.id, this.password);\r\n    };\r\n    /**\r\n     * Forces long polling to be considered as a potential transport\r\n     */\r\n    BrowserPollConnection.forceAllow = function () {\r\n        BrowserPollConnection.forceAllow_ = true;\r\n    };\r\n    /**\r\n     * Forces longpolling to not be considered as a potential transport\r\n     */\r\n    BrowserPollConnection.forceDisallow = function () {\r\n        BrowserPollConnection.forceDisallow_ = true;\r\n    };\r\n    // Static method, use string literal so it can be accessed in a generic way\r\n    BrowserPollConnection.isAvailable = function () {\r\n        // NOTE: In React-Native there's normally no 'document', but if you debug a React-Native app in\r\n        // the Chrome debugger, 'document' is defined, but document.createElement is null (2015/06/08).\r\n        return (BrowserPollConnection.forceAllow_ ||\r\n            (!BrowserPollConnection.forceDisallow_ &&\r\n                typeof document !== 'undefined' &&\r\n                document.createElement != null &&\r\n                !isChromeExtensionContentScript() &&\r\n                !isWindowsStoreApp() &&\r\n                !util.isNodeSdk()));\r\n    };\r\n    /**\r\n     * No-op for polling\r\n     */\r\n    BrowserPollConnection.prototype.markConnectionHealthy = function () { };\r\n    /**\r\n     * Stops polling and cleans up the iframe\r\n     * @private\r\n     */\r\n    BrowserPollConnection.prototype.shutdown_ = function () {\r\n        this.isClosed_ = true;\r\n        if (this.scriptTagHolder) {\r\n            this.scriptTagHolder.close();\r\n            this.scriptTagHolder = null;\r\n        }\r\n        //remove the disconnect frame, which will trigger an XHR call to the server to tell it we're leaving.\r\n        if (this.myDisconnFrame) {\r\n            document.body.removeChild(this.myDisconnFrame);\r\n            this.myDisconnFrame = null;\r\n        }\r\n        if (this.connectTimeoutTimer_) {\r\n            clearTimeout(this.connectTimeoutTimer_);\r\n            this.connectTimeoutTimer_ = null;\r\n        }\r\n    };\r\n    /**\r\n     * Triggered when this transport is closed\r\n     * @private\r\n     */\r\n    BrowserPollConnection.prototype.onClosed_ = function () {\r\n        if (!this.isClosed_) {\r\n            this.log_('Longpoll is closing itself');\r\n            this.shutdown_();\r\n            if (this.onDisconnect_) {\r\n                this.onDisconnect_(this.everConnected_);\r\n                this.onDisconnect_ = null;\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * External-facing close handler. RealTime has requested we shut down. Kill our connection and tell the server\r\n     * that we've left.\r\n     */\r\n    BrowserPollConnection.prototype.close = function () {\r\n        if (!this.isClosed_) {\r\n            this.log_('Longpoll is being closed.');\r\n            this.shutdown_();\r\n        }\r\n    };\r\n    /**\r\n     * Send the JSON object down to the server. It will need to be stringified, base64 encoded, and then\r\n     * broken into chunks (since URLs have a small maximum length).\r\n     * @param {!Object} data The JSON data to transmit.\r\n     */\r\n    BrowserPollConnection.prototype.send = function (data) {\r\n        var dataStr = util.stringify(data);\r\n        this.bytesSent += dataStr.length;\r\n        this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n        //first, lets get the base64-encoded data\r\n        var base64data = util.base64Encode(dataStr);\r\n        //We can only fit a certain amount in each URL, so we need to split this request\r\n        //up into multiple pieces if it doesn't fit in one request.\r\n        var dataSegs = splitStringBySize(base64data, MAX_PAYLOAD_SIZE);\r\n        //Enqueue each segment for transmission. We assign each chunk a sequential ID and a total number\r\n        //of segments so that we can reassemble the packet on the server.\r\n        for (var i = 0; i < dataSegs.length; i++) {\r\n            this.scriptTagHolder.enqueueSegment(this.curSegmentNum, dataSegs.length, dataSegs[i]);\r\n            this.curSegmentNum++;\r\n        }\r\n    };\r\n    /**\r\n     * This is how we notify the server that we're leaving.\r\n     * We aren't able to send requests with DHTML on a window close event, but we can\r\n     * trigger XHR requests in some browsers (everything but Opera basically).\r\n     * @param {!string} id\r\n     * @param {!string} pw\r\n     */\r\n    BrowserPollConnection.prototype.addDisconnectPingFrame = function (id, pw) {\r\n        if (util.isNodeSdk())\r\n            return;\r\n        this.myDisconnFrame = document.createElement('iframe');\r\n        var urlParams = {};\r\n        urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM] = 't';\r\n        urlParams[FIREBASE_LONGPOLL_ID_PARAM] = id;\r\n        urlParams[FIREBASE_LONGPOLL_PW_PARAM] = pw;\r\n        this.myDisconnFrame.src = this.urlFn(urlParams);\r\n        this.myDisconnFrame.style.display = 'none';\r\n        document.body.appendChild(this.myDisconnFrame);\r\n    };\r\n    /**\r\n     * Used to track the bytes received by this client\r\n     * @param {*} args\r\n     * @private\r\n     */\r\n    BrowserPollConnection.prototype.incrementIncomingBytes_ = function (args) {\r\n        // TODO: This is an annoying perf hit just to track the number of incoming bytes.  Maybe it should be opt-in.\r\n        var bytesReceived = util.stringify(args).length;\r\n        this.bytesReceived += bytesReceived;\r\n        this.stats_.incrementCounter('bytes_received', bytesReceived);\r\n    };\r\n    return BrowserPollConnection;\r\n}());\r\n/*********************************************************************************************\r\n * A wrapper around an iframe that is used as a long-polling script holder.\r\n * @constructor\r\n *********************************************************************************************/\r\nvar FirebaseIFrameScriptHolder = /** @class */ (function () {\r\n    /**\r\n     * @param commandCB - The callback to be called when control commands are recevied from the server.\r\n     * @param onMessageCB - The callback to be triggered when responses arrive from the server.\r\n     * @param onDisconnect - The callback to be triggered when this tag holder is closed\r\n     * @param urlFn - A function that provides the URL of the endpoint to send data to.\r\n     */\r\n    function FirebaseIFrameScriptHolder(commandCB, onMessageCB, onDisconnect, urlFn) {\r\n        this.onDisconnect = onDisconnect;\r\n        this.urlFn = urlFn;\r\n        //We maintain a count of all of the outstanding requests, because if we have too many active at once it can cause\r\n        //problems in some browsers.\r\n        /**\r\n         * @type {CountedSet.<number, number>}\r\n         */\r\n        this.outstandingRequests = new CountedSet();\r\n        //A queue of the pending segments waiting for transmission to the server.\r\n        this.pendingSegs = [];\r\n        //A serial number. We use this for two things:\r\n        // 1) A way to ensure the browser doesn't cache responses to polls\r\n        // 2) A way to make the server aware when long-polls arrive in a different order than we started them. The\r\n        //    server needs to release both polls in this case or it will cause problems in Opera since Opera can only execute\r\n        //    JSONP code in the order it was added to the iframe.\r\n        this.currentSerial = Math.floor(Math.random() * 100000000);\r\n        // This gets set to false when we're \"closing down\" the connection (e.g. we're switching transports but there's still\r\n        // incoming data from the server that we're waiting for).\r\n        this.sendNewPolls = true;\r\n        if (!util.isNodeSdk()) {\r\n            //Each script holder registers a couple of uniquely named callbacks with the window. These are called from the\r\n            //iframes where we put the long-polling script tags. We have two callbacks:\r\n            //   1) Command Callback - Triggered for control issues, like starting a connection.\r\n            //   2) Message Callback - Triggered when new data arrives.\r\n            this.uniqueCallbackIdentifier = LUIDGenerator();\r\n            window[FIREBASE_LONGPOLL_COMMAND_CB_NAME + this.uniqueCallbackIdentifier] = commandCB;\r\n            window[FIREBASE_LONGPOLL_DATA_CB_NAME + this.uniqueCallbackIdentifier] = onMessageCB;\r\n            //Create an iframe for us to add script tags to.\r\n            this.myIFrame = FirebaseIFrameScriptHolder.createIFrame_();\r\n            // Set the iframe's contents.\r\n            var script = '';\r\n            // if we set a javascript url, it's IE and we need to set the document domain. The javascript url is sufficient\r\n            // for ie9, but ie8 needs to do it again in the document itself.\r\n            if (this.myIFrame.src &&\r\n                this.myIFrame.src.substr(0, 'javascript:'.length) === 'javascript:') {\r\n                var currentDomain = document.domain;\r\n                script = '<script>document.domain=\"' + currentDomain + '\";</script>';\r\n            }\r\n            var iframeContents = '<html><body>' + script + '</body></html>';\r\n            try {\r\n                this.myIFrame.doc.open();\r\n                this.myIFrame.doc.write(iframeContents);\r\n                this.myIFrame.doc.close();\r\n            }\r\n            catch (e) {\r\n                log('frame writing exception');\r\n                if (e.stack) {\r\n                    log(e.stack);\r\n                }\r\n                log(e);\r\n            }\r\n        }\r\n        else {\r\n            this.commandCB = commandCB;\r\n            this.onMessageCB = onMessageCB;\r\n        }\r\n    }\r\n    /**\r\n     * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\r\n     * actually use.\r\n     * @private\r\n     * @return {Element}\r\n     */\r\n    FirebaseIFrameScriptHolder.createIFrame_ = function () {\r\n        var iframe = document.createElement('iframe');\r\n        iframe.style.display = 'none';\r\n        // This is necessary in order to initialize the document inside the iframe\r\n        if (document.body) {\r\n            document.body.appendChild(iframe);\r\n            try {\r\n                // If document.domain has been modified in IE, this will throw an error, and we need to set the\r\n                // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\r\n                // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\r\n                var a = iframe.contentWindow.document;\r\n                if (!a) {\r\n                    // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\r\n                    log('No IE domain setting required');\r\n                }\r\n            }\r\n            catch (e) {\r\n                var domain = document.domain;\r\n                iframe.src =\r\n                    \"javascript:void((function(){document.open();document.domain='\" +\r\n                        domain +\r\n                        \"';document.close();})())\";\r\n            }\r\n        }\r\n        else {\r\n            // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\r\n            // never gets hit.\r\n            throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\r\n        }\r\n        // Get the document of the iframe in a browser-specific way.\r\n        if (iframe.contentDocument) {\r\n            iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\r\n        }\r\n        else if (iframe.contentWindow) {\r\n            iframe.doc = iframe.contentWindow.document; // Internet Explorer\r\n        }\r\n        else if (iframe.document) {\r\n            iframe.doc = iframe.document; //others?\r\n        }\r\n        return iframe;\r\n    };\r\n    /**\r\n     * Cancel all outstanding queries and remove the frame.\r\n     */\r\n    FirebaseIFrameScriptHolder.prototype.close = function () {\r\n        var _this = this;\r\n        //Mark this iframe as dead, so no new requests are sent.\r\n        this.alive = false;\r\n        if (this.myIFrame) {\r\n            //We have to actually remove all of the html inside this iframe before removing it from the\r\n            //window, or IE will continue loading and executing the script tags we've already added, which\r\n            //can lead to some errors being thrown. Setting innerHTML seems to be the easiest way to do this.\r\n            this.myIFrame.doc.body.innerHTML = '';\r\n            setTimeout(function () {\r\n                if (_this.myIFrame !== null) {\r\n                    document.body.removeChild(_this.myIFrame);\r\n                    _this.myIFrame = null;\r\n                }\r\n            }, Math.floor(0));\r\n        }\r\n        if (util.isNodeSdk() && this.myID) {\r\n            var urlParams = {};\r\n            urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_PARAM] = 't';\r\n            urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n            urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n            var theURL = this.urlFn(urlParams);\r\n            FirebaseIFrameScriptHolder.nodeRestRequest(theURL);\r\n        }\r\n        // Protect from being called recursively.\r\n        var onDisconnect = this.onDisconnect;\r\n        if (onDisconnect) {\r\n            this.onDisconnect = null;\r\n            onDisconnect();\r\n        }\r\n    };\r\n    /**\r\n     * Actually start the long-polling session by adding the first script tag(s) to the iframe.\r\n     * @param {!string} id - The ID of this connection\r\n     * @param {!string} pw - The password for this connection\r\n     */\r\n    FirebaseIFrameScriptHolder.prototype.startLongPoll = function (id, pw) {\r\n        this.myID = id;\r\n        this.myPW = pw;\r\n        this.alive = true;\r\n        //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\r\n        while (this.newRequest_()) { }\r\n    };\r\n    /**\r\n     * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\r\n     * too many outstanding requests and we are still alive.\r\n     *\r\n     * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\r\n     * needed.\r\n     */\r\n    FirebaseIFrameScriptHolder.prototype.newRequest_ = function () {\r\n        // We keep one outstanding request open all the time to receive data, but if we need to send data\r\n        // (pendingSegs.length > 0) then we create a new request to send the data.  The server will automatically\r\n        // close the old request.\r\n        if (this.alive &&\r\n            this.sendNewPolls &&\r\n            this.outstandingRequests.count() < (this.pendingSegs.length > 0 ? 2 : 1)) {\r\n            //construct our url\r\n            this.currentSerial++;\r\n            var urlParams = {};\r\n            urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n            urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n            urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\r\n            var theURL = this.urlFn(urlParams);\r\n            //Now add as much data as we can.\r\n            var curDataString = '';\r\n            var i = 0;\r\n            while (this.pendingSegs.length > 0) {\r\n                //first, lets see if the next segment will fit.\r\n                var nextSeg = this.pendingSegs[0];\r\n                if (nextSeg.d.length + SEG_HEADER_SIZE + curDataString.length <=\r\n                    MAX_URL_DATA_SIZE) {\r\n                    //great, the segment will fit. Lets append it.\r\n                    var theSeg = this.pendingSegs.shift();\r\n                    curDataString =\r\n                        curDataString +\r\n                            '&' +\r\n                            FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\r\n                            i +\r\n                            '=' +\r\n                            theSeg.seg +\r\n                            '&' +\r\n                            FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\r\n                            i +\r\n                            '=' +\r\n                            theSeg.ts +\r\n                            '&' +\r\n                            FIREBASE_LONGPOLL_DATA_PARAM +\r\n                            i +\r\n                            '=' +\r\n                            theSeg.d;\r\n                    i++;\r\n                }\r\n                else {\r\n                    break;\r\n                }\r\n            }\r\n            theURL = theURL + curDataString;\r\n            this.addLongPollTag_(theURL, this.currentSerial);\r\n            return true;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    };\r\n    /**\r\n     * Queue a packet for transmission to the server.\r\n     * @param segnum - A sequential id for this packet segment used for reassembly\r\n     * @param totalsegs - The total number of segments in this packet\r\n     * @param data - The data for this segment.\r\n     */\r\n    FirebaseIFrameScriptHolder.prototype.enqueueSegment = function (segnum, totalsegs, data) {\r\n        //add this to the queue of segments to send.\r\n        this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\r\n        //send the data immediately if there isn't already data being transmitted, unless\r\n        //startLongPoll hasn't been called yet.\r\n        if (this.alive) {\r\n            this.newRequest_();\r\n        }\r\n    };\r\n    /**\r\n     * Add a script tag for a regular long-poll request.\r\n     * @param {!string} url - The URL of the script tag.\r\n     * @param {!number} serial - The serial number of the request.\r\n     * @private\r\n     */\r\n    FirebaseIFrameScriptHolder.prototype.addLongPollTag_ = function (url, serial) {\r\n        var _this = this;\r\n        //remember that we sent this request.\r\n        this.outstandingRequests.add(serial, 1);\r\n        var doNewRequest = function () {\r\n            _this.outstandingRequests.remove(serial);\r\n            _this.newRequest_();\r\n        };\r\n        // If this request doesn't return on its own accord (by the server sending us some data), we'll\r\n        // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\r\n        var keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));\r\n        var readyStateCB = function () {\r\n            // Request completed.  Cancel the keepalive.\r\n            clearTimeout(keepaliveTimeout);\r\n            // Trigger a new request so we can continue receiving data.\r\n            doNewRequest();\r\n        };\r\n        this.addTag(url, readyStateCB);\r\n    };\r\n    /**\r\n     * Add an arbitrary script tag to the iframe.\r\n     * @param {!string} url - The URL for the script tag source.\r\n     * @param {!function()} loadCB - A callback to be triggered once the script has loaded.\r\n     */\r\n    FirebaseIFrameScriptHolder.prototype.addTag = function (url, loadCB) {\r\n        var _this = this;\r\n        if (util.isNodeSdk()) {\r\n            this.doNodeLongPoll(url, loadCB);\r\n        }\r\n        else {\r\n            setTimeout(function () {\r\n                try {\r\n                    // if we're already closed, don't add this poll\r\n                    if (!_this.sendNewPolls)\r\n                        return;\r\n                    var newScript_1 = _this.myIFrame.doc.createElement('script');\r\n                    newScript_1.type = 'text/javascript';\r\n                    newScript_1.async = true;\r\n                    newScript_1.src = url;\r\n                    newScript_1.onload = newScript_1.onreadystatechange = function () {\r\n                        var rstate = newScript_1.readyState;\r\n                        if (!rstate || rstate === 'loaded' || rstate === 'complete') {\r\n                            newScript_1.onload = newScript_1.onreadystatechange = null;\r\n                            if (newScript_1.parentNode) {\r\n                                newScript_1.parentNode.removeChild(newScript_1);\r\n                            }\r\n                            loadCB();\r\n                        }\r\n                    };\r\n                    newScript_1.onerror = function () {\r\n                        log('Long-poll script failed to load: ' + url);\r\n                        _this.sendNewPolls = false;\r\n                        _this.close();\r\n                    };\r\n                    _this.myIFrame.doc.body.appendChild(newScript_1);\r\n                }\r\n                catch (e) {\r\n                    // TODO: we should make this error visible somehow\r\n                }\r\n            }, Math.floor(1));\r\n        }\r\n    };\r\n    return FirebaseIFrameScriptHolder;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar WEBSOCKET_MAX_FRAME_SIZE = 16384;\r\nvar WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\r\nvar WebSocketImpl = null;\r\nif (typeof MozWebSocket !== 'undefined') {\r\n    WebSocketImpl = MozWebSocket;\r\n}\r\nelse if (typeof WebSocket !== 'undefined') {\r\n    WebSocketImpl = WebSocket;\r\n}\r\n/**\r\n * Create a new websocket connection with the given callbacks.\r\n * @constructor\r\n * @implements {Transport}\r\n */\r\nvar WebSocketConnection = /** @class */ (function () {\r\n    /**\r\n     * @param {string} connId identifier for this transport\r\n     * @param {RepoInfo} repoInfo The info for the websocket endpoint.\r\n     * @param {string=} transportSessionId Optional transportSessionId if this is connecting to an existing transport\r\n     *                                         session\r\n     * @param {string=} lastSessionId Optional lastSessionId if there was a previous connection\r\n     */\r\n    function WebSocketConnection(connId, repoInfo, transportSessionId, lastSessionId) {\r\n        this.connId = connId;\r\n        this.keepaliveTimer = null;\r\n        this.frames = null;\r\n        this.totalFrames = 0;\r\n        this.bytesSent = 0;\r\n        this.bytesReceived = 0;\r\n        this.log_ = logWrapper(this.connId);\r\n        this.stats_ = StatsManager.getCollection(repoInfo);\r\n        this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId);\r\n    }\r\n    /**\r\n     * @param {RepoInfo} repoInfo The info for the websocket endpoint.\r\n     * @param {string=} transportSessionId Optional transportSessionId if this is connecting to an existing transport\r\n     *                                         session\r\n     * @param {string=} lastSessionId Optional lastSessionId if there was a previous connection\r\n     * @return {string} connection url\r\n     * @private\r\n     */\r\n    WebSocketConnection.connectionURL_ = function (repoInfo, transportSessionId, lastSessionId) {\r\n        var urlParams = {};\r\n        urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n        if (!util.isNodeSdk() &&\r\n            typeof location !== 'undefined' &&\r\n            location.href &&\r\n            location.href.indexOf(FORGE_DOMAIN) !== -1) {\r\n            urlParams[REFERER_PARAM] = FORGE_REF;\r\n        }\r\n        if (transportSessionId) {\r\n            urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;\r\n        }\r\n        if (lastSessionId) {\r\n            urlParams[LAST_SESSION_PARAM] = lastSessionId;\r\n        }\r\n        return repoInfo.connectionURL(WEBSOCKET, urlParams);\r\n    };\r\n    /**\r\n     *\r\n     * @param onMessage Callback when messages arrive\r\n     * @param onDisconnect Callback with connection lost.\r\n     */\r\n    WebSocketConnection.prototype.open = function (onMessage, onDisconnect) {\r\n        var _this = this;\r\n        this.onDisconnect = onDisconnect;\r\n        this.onMessage = onMessage;\r\n        this.log_('Websocket connecting to ' + this.connURL);\r\n        this.everConnected_ = false;\r\n        // Assume failure until proven otherwise.\r\n        PersistentStorage.set('previous_websocket_failure', true);\r\n        try {\r\n            if (util.isNodeSdk()) {\r\n                var device = util.CONSTANTS.NODE_ADMIN ? 'AdminNode' : 'Node';\r\n                // UA Format: Firebase/<wire_protocol>/<sdk_version>/<platform>/<device>\r\n                var options = {\r\n                    headers: {\r\n                        'User-Agent': \"Firebase/\" + PROTOCOL_VERSION + \"/\" + firebase.SDK_VERSION + \"/\" + process.platform + \"/\" + device\r\n                    }\r\n                };\r\n                // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\r\n                var env = process['env'];\r\n                var proxy = this.connURL.indexOf('wss://') == 0\r\n                    ? env['HTTPS_PROXY'] || env['https_proxy']\r\n                    : env['HTTP_PROXY'] || env['http_proxy'];\r\n                if (proxy) {\r\n                    options['proxy'] = { origin: proxy };\r\n                }\r\n                this.mySock = new WebSocketImpl(this.connURL, [], options);\r\n            }\r\n            else {\r\n                this.mySock = new WebSocketImpl(this.connURL);\r\n            }\r\n        }\r\n        catch (e) {\r\n            this.log_('Error instantiating WebSocket.');\r\n            var error = e.message || e.data;\r\n            if (error) {\r\n                this.log_(error);\r\n            }\r\n            this.onClosed_();\r\n            return;\r\n        }\r\n        this.mySock.onopen = function () {\r\n            _this.log_('Websocket connected.');\r\n            _this.everConnected_ = true;\r\n        };\r\n        this.mySock.onclose = function () {\r\n            _this.log_('Websocket connection was disconnected.');\r\n            _this.mySock = null;\r\n            _this.onClosed_();\r\n        };\r\n        this.mySock.onmessage = function (m) {\r\n            _this.handleIncomingFrame(m);\r\n        };\r\n        this.mySock.onerror = function (e) {\r\n            _this.log_('WebSocket error.  Closing connection.');\r\n            var error = e.message || e.data;\r\n            if (error) {\r\n                _this.log_(error);\r\n            }\r\n            _this.onClosed_();\r\n        };\r\n    };\r\n    /**\r\n     * No-op for websockets, we don't need to do anything once the connection is confirmed as open\r\n     */\r\n    WebSocketConnection.prototype.start = function () { };\r\n    WebSocketConnection.forceDisallow = function () {\r\n        WebSocketConnection.forceDisallow_ = true;\r\n    };\r\n    WebSocketConnection.isAvailable = function () {\r\n        var isOldAndroid = false;\r\n        if (typeof navigator !== 'undefined' && navigator.userAgent) {\r\n            var oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\r\n            var oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\r\n            if (oldAndroidMatch && oldAndroidMatch.length > 1) {\r\n                if (parseFloat(oldAndroidMatch[1]) < 4.4) {\r\n                    isOldAndroid = true;\r\n                }\r\n            }\r\n        }\r\n        return (!isOldAndroid &&\r\n            WebSocketImpl !== null &&\r\n            !WebSocketConnection.forceDisallow_);\r\n    };\r\n    /**\r\n     * Returns true if we previously failed to connect with this transport.\r\n     * @return {boolean}\r\n     */\r\n    WebSocketConnection.previouslyFailed = function () {\r\n        // If our persistent storage is actually only in-memory storage,\r\n        // we default to assuming that it previously failed to be safe.\r\n        return (PersistentStorage.isInMemoryStorage ||\r\n            PersistentStorage.get('previous_websocket_failure') === true);\r\n    };\r\n    WebSocketConnection.prototype.markConnectionHealthy = function () {\r\n        PersistentStorage.remove('previous_websocket_failure');\r\n    };\r\n    WebSocketConnection.prototype.appendFrame_ = function (data) {\r\n        this.frames.push(data);\r\n        if (this.frames.length == this.totalFrames) {\r\n            var fullMess = this.frames.join('');\r\n            this.frames = null;\r\n            var jsonMess = util.jsonEval(fullMess);\r\n            //handle the message\r\n            this.onMessage(jsonMess);\r\n        }\r\n    };\r\n    /**\r\n     * @param {number} frameCount The number of frames we are expecting from the server\r\n     * @private\r\n     */\r\n    WebSocketConnection.prototype.handleNewFrameCount_ = function (frameCount) {\r\n        this.totalFrames = frameCount;\r\n        this.frames = [];\r\n    };\r\n    /**\r\n     * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\r\n     * @param {!String} data\r\n     * @return {?String} Any remaining data to be process, or null if there is none\r\n     * @private\r\n     */\r\n    WebSocketConnection.prototype.extractFrameCount_ = function (data) {\r\n        util.assert(this.frames === null, 'We already have a frame buffer');\r\n        // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\r\n        // currently.  So allowing larger frame counts (length <= 6).  See https://app.asana.com/0/search/8688598998380/8237608042508\r\n        if (data.length <= 6) {\r\n            var frameCount = Number(data);\r\n            if (!isNaN(frameCount)) {\r\n                this.handleNewFrameCount_(frameCount);\r\n                return null;\r\n            }\r\n        }\r\n        this.handleNewFrameCount_(1);\r\n        return data;\r\n    };\r\n    /**\r\n     * Process a websocket frame that has arrived from the server.\r\n     * @param mess The frame data\r\n     */\r\n    WebSocketConnection.prototype.handleIncomingFrame = function (mess) {\r\n        if (this.mySock === null)\r\n            return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\r\n        var data = mess['data'];\r\n        this.bytesReceived += data.length;\r\n        this.stats_.incrementCounter('bytes_received', data.length);\r\n        this.resetKeepAlive();\r\n        if (this.frames !== null) {\r\n            // we're buffering\r\n            this.appendFrame_(data);\r\n        }\r\n        else {\r\n            // try to parse out a frame count, otherwise, assume 1 and process it\r\n            var remainingData = this.extractFrameCount_(data);\r\n            if (remainingData !== null) {\r\n                this.appendFrame_(remainingData);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Send a message to the server\r\n     * @param {Object} data The JSON object to transmit\r\n     */\r\n    WebSocketConnection.prototype.send = function (data) {\r\n        this.resetKeepAlive();\r\n        var dataStr = util.stringify(data);\r\n        this.bytesSent += dataStr.length;\r\n        this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n        //We can only fit a certain amount in each websocket frame, so we need to split this request\r\n        //up into multiple pieces if it doesn't fit in one request.\r\n        var dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\r\n        //Send the length header\r\n        if (dataSegs.length > 1) {\r\n            this.sendString_(String(dataSegs.length));\r\n        }\r\n        //Send the actual data in segments.\r\n        for (var i = 0; i < dataSegs.length; i++) {\r\n            this.sendString_(dataSegs[i]);\r\n        }\r\n    };\r\n    WebSocketConnection.prototype.shutdown_ = function () {\r\n        this.isClosed_ = true;\r\n        if (this.keepaliveTimer) {\r\n            clearInterval(this.keepaliveTimer);\r\n            this.keepaliveTimer = null;\r\n        }\r\n        if (this.mySock) {\r\n            this.mySock.close();\r\n            this.mySock = null;\r\n        }\r\n    };\r\n    WebSocketConnection.prototype.onClosed_ = function () {\r\n        if (!this.isClosed_) {\r\n            this.log_('WebSocket is closing itself');\r\n            this.shutdown_();\r\n            // since this is an internal close, trigger the close listener\r\n            if (this.onDisconnect) {\r\n                this.onDisconnect(this.everConnected_);\r\n                this.onDisconnect = null;\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * External-facing close handler.\r\n     * Close the websocket and kill the connection.\r\n     */\r\n    WebSocketConnection.prototype.close = function () {\r\n        if (!this.isClosed_) {\r\n            this.log_('WebSocket is being closed');\r\n            this.shutdown_();\r\n        }\r\n    };\r\n    /**\r\n     * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\r\n     * the last activity.\r\n     */\r\n    WebSocketConnection.prototype.resetKeepAlive = function () {\r\n        var _this = this;\r\n        clearInterval(this.keepaliveTimer);\r\n        this.keepaliveTimer = setInterval(function () {\r\n            //If there has been no websocket activity for a while, send a no-op\r\n            if (_this.mySock) {\r\n                _this.sendString_('0');\r\n            }\r\n            _this.resetKeepAlive();\r\n        }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));\r\n    };\r\n    /**\r\n     * Send a string over the websocket.\r\n     *\r\n     * @param {string} str String to send.\r\n     * @private\r\n     */\r\n    WebSocketConnection.prototype.sendString_ = function (str) {\r\n        // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\r\n        // calls for some unknown reason.  We treat these as an error and disconnect.\r\n        // See https://app.asana.com/0/58926111402292/68021340250410\r\n        try {\r\n            this.mySock.send(str);\r\n        }\r\n        catch (e) {\r\n            this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');\r\n            setTimeout(this.onClosed_.bind(this), 0);\r\n        }\r\n    };\r\n    /**\r\n     * Number of response before we consider the connection \"healthy.\"\r\n     * @type {number}\r\n     */\r\n    WebSocketConnection.responsesRequiredToBeHealthy = 2;\r\n    /**\r\n     * Time to wait for the connection te become healthy before giving up.\r\n     * @type {number}\r\n     */\r\n    WebSocketConnection.healthyTimeout = 30000;\r\n    return WebSocketConnection;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Currently simplistic, this class manages what transport a Connection should use at various stages of its\r\n * lifecycle.\r\n *\r\n * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\r\n * they are available.\r\n * @constructor\r\n */\r\nvar TransportManager = /** @class */ (function () {\r\n    /**\r\n     * @param {!RepoInfo} repoInfo Metadata around the namespace we're connecting to\r\n     */\r\n    function TransportManager(repoInfo) {\r\n        this.initTransports_(repoInfo);\r\n    }\r\n    Object.defineProperty(TransportManager, \"ALL_TRANSPORTS\", {\r\n        /**\r\n         * @const\r\n         * @type {!Array.<function(new:Transport, string, RepoInfo, string=)>}\r\n         */\r\n        get: function () {\r\n            return [BrowserPollConnection, WebSocketConnection];\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * @param {!RepoInfo} repoInfo\r\n     * @private\r\n     */\r\n    TransportManager.prototype.initTransports_ = function (repoInfo) {\r\n        var isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();\r\n        var isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();\r\n        if (repoInfo.webSocketOnly) {\r\n            if (!isWebSocketsAvailable)\r\n                warn(\"wss:// URL used, but browser isn't known to support websockets.  Trying anyway.\");\r\n            isSkipPollConnection = true;\r\n        }\r\n        if (isSkipPollConnection) {\r\n            this.transports_ = [WebSocketConnection];\r\n        }\r\n        else {\r\n            var transports_1 = (this.transports_ = []);\r\n            each(TransportManager.ALL_TRANSPORTS, function (i, transport) {\r\n                if (transport && transport['isAvailable']()) {\r\n                    transports_1.push(transport);\r\n                }\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     * @return {function(new:Transport, !string, !RepoInfo, string=, string=)} The constructor for the\r\n     * initial transport to use\r\n     */\r\n    TransportManager.prototype.initialTransport = function () {\r\n        if (this.transports_.length > 0) {\r\n            return this.transports_[0];\r\n        }\r\n        else {\r\n            throw new Error('No transports available');\r\n        }\r\n    };\r\n    /**\r\n     * @return {?function(new:Transport, function(),function(), string=)} The constructor for the next\r\n     * transport, or null\r\n     */\r\n    TransportManager.prototype.upgradeTransport = function () {\r\n        if (this.transports_.length > 1) {\r\n            return this.transports_[1];\r\n        }\r\n        else {\r\n            return null;\r\n        }\r\n    };\r\n    return TransportManager;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Abort upgrade attempt if it takes longer than 60s.\r\nvar UPGRADE_TIMEOUT = 60000;\r\n// For some transports (WebSockets), we need to \"validate\" the transport by exchanging a few requests and responses.\r\n// If we haven't sent enough requests within 5s, we'll start sending noop ping requests.\r\nvar DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000;\r\n// If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)\r\n// then we may not be able to exchange our ping/pong requests within the healthy timeout.  So if we reach the timeout\r\n// but we've sent/received enough bytes, we don't cancel the connection.\r\nvar BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;\r\nvar BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;\r\nvar MESSAGE_TYPE = 't';\r\nvar MESSAGE_DATA = 'd';\r\nvar CONTROL_SHUTDOWN = 's';\r\nvar CONTROL_RESET = 'r';\r\nvar CONTROL_ERROR = 'e';\r\nvar CONTROL_PONG = 'o';\r\nvar SWITCH_ACK = 'a';\r\nvar END_TRANSMISSION = 'n';\r\nvar PING = 'p';\r\nvar SERVER_HELLO = 'h';\r\n/**\r\n * Creates a new real-time connection to the server using whichever method works\r\n * best in the current browser.\r\n *\r\n * @constructor\r\n */\r\nvar Connection = /** @class */ (function () {\r\n    /**\r\n     * @param {!string} id - an id for this connection\r\n     * @param {!RepoInfo} repoInfo_ - the info for the endpoint to connect to\r\n     * @param {function(Object)} onMessage_ - the callback to be triggered when a server-push message arrives\r\n     * @param {function(number, string)} onReady_ - the callback to be triggered when this connection is ready to send messages.\r\n     * @param {function()} onDisconnect_ - the callback to be triggered when a connection was lost\r\n     * @param {function(string)} onKill_ - the callback to be triggered when this connection has permanently shut down.\r\n     * @param {string=} lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server\r\n     */\r\n    function Connection(id, repoInfo_, onMessage_, onReady_, onDisconnect_, onKill_, lastSessionId) {\r\n        this.id = id;\r\n        this.repoInfo_ = repoInfo_;\r\n        this.onMessage_ = onMessage_;\r\n        this.onReady_ = onReady_;\r\n        this.onDisconnect_ = onDisconnect_;\r\n        this.onKill_ = onKill_;\r\n        this.lastSessionId = lastSessionId;\r\n        this.connectionCount = 0;\r\n        this.pendingDataMessages = [];\r\n        this.state_ = 0 /* CONNECTING */;\r\n        this.log_ = logWrapper('c:' + this.id + ':');\r\n        this.transportManager_ = new TransportManager(repoInfo_);\r\n        this.log_('Connection created');\r\n        this.start_();\r\n    }\r\n    /**\r\n     * Starts a connection attempt\r\n     * @private\r\n     */\r\n    Connection.prototype.start_ = function () {\r\n        var _this = this;\r\n        var conn = this.transportManager_.initialTransport();\r\n        this.conn_ = new conn(this.nextTransportId_(), this.repoInfo_, undefined, this.lastSessionId);\r\n        // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n        // can consider the transport healthy.\r\n        this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;\r\n        var onMessageReceived = this.connReceiver_(this.conn_);\r\n        var onConnectionLost = this.disconnReceiver_(this.conn_);\r\n        this.tx_ = this.conn_;\r\n        this.rx_ = this.conn_;\r\n        this.secondaryConn_ = null;\r\n        this.isHealthy_ = false;\r\n        /*\r\n         * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.\r\n         * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.\r\n         * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should\r\n         * still have the context of your originating frame.\r\n         */\r\n        setTimeout(function () {\r\n            // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it\r\n            _this.conn_ && _this.conn_.open(onMessageReceived, onConnectionLost);\r\n        }, Math.floor(0));\r\n        var healthyTimeout_ms = conn['healthyTimeout'] || 0;\r\n        if (healthyTimeout_ms > 0) {\r\n            this.healthyTimeout_ = setTimeoutNonBlocking(function () {\r\n                _this.healthyTimeout_ = null;\r\n                if (!_this.isHealthy_) {\r\n                    if (_this.conn_ &&\r\n                        _this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE) {\r\n                        _this.log_('Connection exceeded healthy timeout but has received ' +\r\n                            _this.conn_.bytesReceived +\r\n                            ' bytes.  Marking connection healthy.');\r\n                        _this.isHealthy_ = true;\r\n                        _this.conn_.markConnectionHealthy();\r\n                    }\r\n                    else if (_this.conn_ &&\r\n                        _this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE) {\r\n                        _this.log_('Connection exceeded healthy timeout but has sent ' +\r\n                            _this.conn_.bytesSent +\r\n                            ' bytes.  Leaving connection alive.');\r\n                        // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to\r\n                        // the server.\r\n                    }\r\n                    else {\r\n                        _this.log_('Closing unhealthy connection after timeout.');\r\n                        _this.close();\r\n                    }\r\n                }\r\n            }, Math.floor(healthyTimeout_ms));\r\n        }\r\n    };\r\n    /**\r\n     * @return {!string}\r\n     * @private\r\n     */\r\n    Connection.prototype.nextTransportId_ = function () {\r\n        return 'c:' + this.id + ':' + this.connectionCount++;\r\n    };\r\n    Connection.prototype.disconnReceiver_ = function (conn) {\r\n        var _this = this;\r\n        return function (everConnected) {\r\n            if (conn === _this.conn_) {\r\n                _this.onConnectionLost_(everConnected);\r\n            }\r\n            else if (conn === _this.secondaryConn_) {\r\n                _this.log_('Secondary connection lost.');\r\n                _this.onSecondaryConnectionLost_();\r\n            }\r\n            else {\r\n                _this.log_('closing an old connection');\r\n            }\r\n        };\r\n    };\r\n    Connection.prototype.connReceiver_ = function (conn) {\r\n        var _this = this;\r\n        return function (message) {\r\n            if (_this.state_ != 2 /* DISCONNECTED */) {\r\n                if (conn === _this.rx_) {\r\n                    _this.onPrimaryMessageReceived_(message);\r\n                }\r\n                else if (conn === _this.secondaryConn_) {\r\n                    _this.onSecondaryMessageReceived_(message);\r\n                }\r\n                else {\r\n                    _this.log_('message on old connection');\r\n                }\r\n            }\r\n        };\r\n    };\r\n    /**\r\n     *\r\n     * @param {Object} dataMsg An arbitrary data message to be sent to the server\r\n     */\r\n    Connection.prototype.sendRequest = function (dataMsg) {\r\n        // wrap in a data message envelope and send it on\r\n        var msg = { t: 'd', d: dataMsg };\r\n        this.sendData_(msg);\r\n    };\r\n    Connection.prototype.tryCleanupConnection = function () {\r\n        if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {\r\n            this.log_('cleaning up and promoting a connection: ' + this.secondaryConn_.connId);\r\n            this.conn_ = this.secondaryConn_;\r\n            this.secondaryConn_ = null;\r\n            // the server will shutdown the old connection\r\n        }\r\n    };\r\n    Connection.prototype.onSecondaryControl_ = function (controlData) {\r\n        if (MESSAGE_TYPE in controlData) {\r\n            var cmd = controlData[MESSAGE_TYPE];\r\n            if (cmd === SWITCH_ACK) {\r\n                this.upgradeIfSecondaryHealthy_();\r\n            }\r\n            else if (cmd === CONTROL_RESET) {\r\n                // Most likely the session wasn't valid. Abandon the switch attempt\r\n                this.log_('Got a reset on secondary, closing it');\r\n                this.secondaryConn_.close();\r\n                // If we were already using this connection for something, than we need to fully close\r\n                if (this.tx_ === this.secondaryConn_ ||\r\n                    this.rx_ === this.secondaryConn_) {\r\n                    this.close();\r\n                }\r\n            }\r\n            else if (cmd === CONTROL_PONG) {\r\n                this.log_('got pong on secondary.');\r\n                this.secondaryResponsesRequired_--;\r\n                this.upgradeIfSecondaryHealthy_();\r\n            }\r\n        }\r\n    };\r\n    Connection.prototype.onSecondaryMessageReceived_ = function (parsedData) {\r\n        var layer = requireKey('t', parsedData);\r\n        var data = requireKey('d', parsedData);\r\n        if (layer == 'c') {\r\n            this.onSecondaryControl_(data);\r\n        }\r\n        else if (layer == 'd') {\r\n            // got a data message, but we're still second connection. Need to buffer it up\r\n            this.pendingDataMessages.push(data);\r\n        }\r\n        else {\r\n            throw new Error('Unknown protocol layer: ' + layer);\r\n        }\r\n    };\r\n    Connection.prototype.upgradeIfSecondaryHealthy_ = function () {\r\n        if (this.secondaryResponsesRequired_ <= 0) {\r\n            this.log_('Secondary connection is healthy.');\r\n            this.isHealthy_ = true;\r\n            this.secondaryConn_.markConnectionHealthy();\r\n            this.proceedWithUpgrade_();\r\n        }\r\n        else {\r\n            // Send a ping to make sure the connection is healthy.\r\n            this.log_('sending ping on secondary.');\r\n            this.secondaryConn_.send({ t: 'c', d: { t: PING, d: {} } });\r\n        }\r\n    };\r\n    Connection.prototype.proceedWithUpgrade_ = function () {\r\n        // tell this connection to consider itself open\r\n        this.secondaryConn_.start();\r\n        // send ack\r\n        this.log_('sending client ack on secondary');\r\n        this.secondaryConn_.send({ t: 'c', d: { t: SWITCH_ACK, d: {} } });\r\n        // send end packet on primary transport, switch to sending on this one\r\n        // can receive on this one, buffer responses until end received on primary transport\r\n        this.log_('Ending transmission on primary');\r\n        this.conn_.send({ t: 'c', d: { t: END_TRANSMISSION, d: {} } });\r\n        this.tx_ = this.secondaryConn_;\r\n        this.tryCleanupConnection();\r\n    };\r\n    Connection.prototype.onPrimaryMessageReceived_ = function (parsedData) {\r\n        // Must refer to parsedData properties in quotes, so closure doesn't touch them.\r\n        var layer = requireKey('t', parsedData);\r\n        var data = requireKey('d', parsedData);\r\n        if (layer == 'c') {\r\n            this.onControl_(data);\r\n        }\r\n        else if (layer == 'd') {\r\n            this.onDataMessage_(data);\r\n        }\r\n    };\r\n    Connection.prototype.onDataMessage_ = function (message) {\r\n        this.onPrimaryResponse_();\r\n        // We don't do anything with data messages, just kick them up a level\r\n        this.onMessage_(message);\r\n    };\r\n    Connection.prototype.onPrimaryResponse_ = function () {\r\n        if (!this.isHealthy_) {\r\n            this.primaryResponsesRequired_--;\r\n            if (this.primaryResponsesRequired_ <= 0) {\r\n                this.log_('Primary connection is healthy.');\r\n                this.isHealthy_ = true;\r\n                this.conn_.markConnectionHealthy();\r\n            }\r\n        }\r\n    };\r\n    Connection.prototype.onControl_ = function (controlData) {\r\n        var cmd = requireKey(MESSAGE_TYPE, controlData);\r\n        if (MESSAGE_DATA in controlData) {\r\n            var payload = controlData[MESSAGE_DATA];\r\n            if (cmd === SERVER_HELLO) {\r\n                this.onHandshake_(payload);\r\n            }\r\n            else if (cmd === END_TRANSMISSION) {\r\n                this.log_('recvd end transmission on primary');\r\n                this.rx_ = this.secondaryConn_;\r\n                for (var i = 0; i < this.pendingDataMessages.length; ++i) {\r\n                    this.onDataMessage_(this.pendingDataMessages[i]);\r\n                }\r\n                this.pendingDataMessages = [];\r\n                this.tryCleanupConnection();\r\n            }\r\n            else if (cmd === CONTROL_SHUTDOWN) {\r\n                // This was previously the 'onKill' callback passed to the lower-level connection\r\n                // payload in this case is the reason for the shutdown. Generally a human-readable error\r\n                this.onConnectionShutdown_(payload);\r\n            }\r\n            else if (cmd === CONTROL_RESET) {\r\n                // payload in this case is the host we should contact\r\n                this.onReset_(payload);\r\n            }\r\n            else if (cmd === CONTROL_ERROR) {\r\n                error('Server Error: ' + payload);\r\n            }\r\n            else if (cmd === CONTROL_PONG) {\r\n                this.log_('got pong on primary.');\r\n                this.onPrimaryResponse_();\r\n                this.sendPingOnPrimaryIfNecessary_();\r\n            }\r\n            else {\r\n                error('Unknown control packet command: ' + cmd);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     *\r\n     * @param {Object} handshake The handshake data returned from the server\r\n     * @private\r\n     */\r\n    Connection.prototype.onHandshake_ = function (handshake) {\r\n        var timestamp = handshake.ts;\r\n        var version = handshake.v;\r\n        var host = handshake.h;\r\n        this.sessionId = handshake.s;\r\n        this.repoInfo_.updateHost(host);\r\n        // if we've already closed the connection, then don't bother trying to progress further\r\n        if (this.state_ == 0 /* CONNECTING */) {\r\n            this.conn_.start();\r\n            this.onConnectionEstablished_(this.conn_, timestamp);\r\n            if (PROTOCOL_VERSION !== version) {\r\n                warn('Protocol version mismatch detected');\r\n            }\r\n            // TODO: do we want to upgrade? when? maybe a delay?\r\n            this.tryStartUpgrade_();\r\n        }\r\n    };\r\n    Connection.prototype.tryStartUpgrade_ = function () {\r\n        var conn = this.transportManager_.upgradeTransport();\r\n        if (conn) {\r\n            this.startUpgrade_(conn);\r\n        }\r\n    };\r\n    Connection.prototype.startUpgrade_ = function (conn) {\r\n        var _this = this;\r\n        this.secondaryConn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.sessionId);\r\n        // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n        // can consider the transport healthy.\r\n        this.secondaryResponsesRequired_ =\r\n            conn['responsesRequiredToBeHealthy'] || 0;\r\n        var onMessage = this.connReceiver_(this.secondaryConn_);\r\n        var onDisconnect = this.disconnReceiver_(this.secondaryConn_);\r\n        this.secondaryConn_.open(onMessage, onDisconnect);\r\n        // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.\r\n        setTimeoutNonBlocking(function () {\r\n            if (_this.secondaryConn_) {\r\n                _this.log_('Timed out trying to upgrade.');\r\n                _this.secondaryConn_.close();\r\n            }\r\n        }, Math.floor(UPGRADE_TIMEOUT));\r\n    };\r\n    Connection.prototype.onReset_ = function (host) {\r\n        this.log_('Reset packet received.  New host: ' + host);\r\n        this.repoInfo_.updateHost(host);\r\n        // TODO: if we're already \"connected\", we need to trigger a disconnect at the next layer up.\r\n        // We don't currently support resets after the connection has already been established\r\n        if (this.state_ === 1 /* CONNECTED */) {\r\n            this.close();\r\n        }\r\n        else {\r\n            // Close whatever connections we have open and start again.\r\n            this.closeConnections_();\r\n            this.start_();\r\n        }\r\n    };\r\n    Connection.prototype.onConnectionEstablished_ = function (conn, timestamp) {\r\n        var _this = this;\r\n        this.log_('Realtime connection established.');\r\n        this.conn_ = conn;\r\n        this.state_ = 1 /* CONNECTED */;\r\n        if (this.onReady_) {\r\n            this.onReady_(timestamp, this.sessionId);\r\n            this.onReady_ = null;\r\n        }\r\n        // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,\r\n        // send some pings.\r\n        if (this.primaryResponsesRequired_ === 0) {\r\n            this.log_('Primary connection is healthy.');\r\n            this.isHealthy_ = true;\r\n        }\r\n        else {\r\n            setTimeoutNonBlocking(function () {\r\n                _this.sendPingOnPrimaryIfNecessary_();\r\n            }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));\r\n        }\r\n    };\r\n    Connection.prototype.sendPingOnPrimaryIfNecessary_ = function () {\r\n        // If the connection isn't considered healthy yet, we'll send a noop ping packet request.\r\n        if (!this.isHealthy_ && this.state_ === 1 /* CONNECTED */) {\r\n            this.log_('sending ping on primary.');\r\n            this.sendData_({ t: 'c', d: { t: PING, d: {} } });\r\n        }\r\n    };\r\n    Connection.prototype.onSecondaryConnectionLost_ = function () {\r\n        var conn = this.secondaryConn_;\r\n        this.secondaryConn_ = null;\r\n        if (this.tx_ === conn || this.rx_ === conn) {\r\n            // we are relying on this connection already in some capacity. Therefore, a failure is real\r\n            this.close();\r\n        }\r\n    };\r\n    /**\r\n     *\r\n     * @param {boolean} everConnected Whether or not the connection ever reached a server. Used to determine if\r\n     * we should flush the host cache\r\n     * @private\r\n     */\r\n    Connection.prototype.onConnectionLost_ = function (everConnected) {\r\n        this.conn_ = null;\r\n        // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting\r\n        // called on window close and RealtimeState.CONNECTING is no longer defined.  Just a guess.\r\n        if (!everConnected && this.state_ === 0 /* CONNECTING */) {\r\n            this.log_('Realtime connection failed.');\r\n            // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away\r\n            if (this.repoInfo_.isCacheableHost()) {\r\n                PersistentStorage.remove('host:' + this.repoInfo_.host);\r\n                // reset the internal host to what we would show the user, i.e. <ns>.firebaseio.com\r\n                this.repoInfo_.internalHost = this.repoInfo_.host;\r\n            }\r\n        }\r\n        else if (this.state_ === 1 /* CONNECTED */) {\r\n            this.log_('Realtime connection lost.');\r\n        }\r\n        this.close();\r\n    };\r\n    /**\r\n     *\r\n     * @param {string} reason\r\n     * @private\r\n     */\r\n    Connection.prototype.onConnectionShutdown_ = function (reason) {\r\n        this.log_('Connection shutdown command received. Shutting down...');\r\n        if (this.onKill_) {\r\n            this.onKill_(reason);\r\n            this.onKill_ = null;\r\n        }\r\n        // We intentionally don't want to fire onDisconnect (kill is a different case),\r\n        // so clear the callback.\r\n        this.onDisconnect_ = null;\r\n        this.close();\r\n    };\r\n    Connection.prototype.sendData_ = function (data) {\r\n        if (this.state_ !== 1 /* CONNECTED */) {\r\n            throw 'Connection is not connected';\r\n        }\r\n        else {\r\n            this.tx_.send(data);\r\n        }\r\n    };\r\n    /**\r\n     * Cleans up this connection, calling the appropriate callbacks\r\n     */\r\n    Connection.prototype.close = function () {\r\n        if (this.state_ !== 2 /* DISCONNECTED */) {\r\n            this.log_('Closing realtime connection.');\r\n            this.state_ = 2 /* DISCONNECTED */;\r\n            this.closeConnections_();\r\n            if (this.onDisconnect_) {\r\n                this.onDisconnect_();\r\n                this.onDisconnect_ = null;\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     *\r\n     * @private\r\n     */\r\n    Connection.prototype.closeConnections_ = function () {\r\n        this.log_('Shutting down all connections');\r\n        if (this.conn_) {\r\n            this.conn_.close();\r\n            this.conn_ = null;\r\n        }\r\n        if (this.secondaryConn_) {\r\n            this.secondaryConn_.close();\r\n            this.secondaryConn_ = null;\r\n        }\r\n        if (this.healthyTimeout_) {\r\n            clearTimeout(this.healthyTimeout_);\r\n            this.healthyTimeout_ = null;\r\n        }\r\n    };\r\n    return Connection;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface defining the set of actions that can be performed against the Firebase server\r\n * (basically corresponds to our wire protocol).\r\n *\r\n * @interface\r\n */\r\nvar ServerActions = /** @class */ (function () {\r\n    function ServerActions() {\r\n    }\r\n    /**\r\n     * @param {string} pathString\r\n     * @param {*} data\r\n     * @param {function(string, string)=} onComplete\r\n     * @param {string=} hash\r\n     */\r\n    ServerActions.prototype.put = function (pathString, data, onComplete, hash) { };\r\n    /**\r\n     * @param {string} pathString\r\n     * @param {*} data\r\n     * @param {function(string, ?string)} onComplete\r\n     * @param {string=} hash\r\n     */\r\n    ServerActions.prototype.merge = function (pathString, data, onComplete, hash) { };\r\n    /**\r\n     * Refreshes the auth token for the current connection.\r\n     * @param {string} token The authentication token\r\n     */\r\n    ServerActions.prototype.refreshAuthToken = function (token) { };\r\n    /**\r\n     * @param {string} pathString\r\n     * @param {*} data\r\n     * @param {function(string, string)=} onComplete\r\n     */\r\n    ServerActions.prototype.onDisconnectPut = function (pathString, data, onComplete) { };\r\n    /**\r\n     * @param {string} pathString\r\n     * @param {*} data\r\n     * @param {function(string, string)=} onComplete\r\n     */\r\n    ServerActions.prototype.onDisconnectMerge = function (pathString, data, onComplete) { };\r\n    /**\r\n     * @param {string} pathString\r\n     * @param {function(string, string)=} onComplete\r\n     */\r\n    ServerActions.prototype.onDisconnectCancel = function (pathString, onComplete) { };\r\n    /**\r\n     * @param {Object.<string, *>} stats\r\n     */\r\n    ServerActions.prototype.reportStats = function (stats) { };\r\n    return ServerActions;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar RECONNECT_MIN_DELAY = 1000;\r\nvar RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)\r\nvar RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)\r\nvar RECONNECT_DELAY_MULTIPLIER = 1.3;\r\nvar RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.\r\nvar SERVER_KILL_INTERRUPT_REASON = 'server_kill';\r\n// If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.\r\nvar INVALID_AUTH_TOKEN_THRESHOLD = 3;\r\n/**\r\n * Firebase connection.  Abstracts wire protocol and handles reconnecting.\r\n *\r\n * NOTE: All JSON objects sent to the realtime connection must have property names enclosed\r\n * in quotes to make sure the closure compiler does not minify them.\r\n */\r\nvar PersistentConnection = /** @class */ (function (_super) {\r\n    tslib_1.__extends(PersistentConnection, _super);\r\n    /**\r\n     * @implements {ServerActions}\r\n     * @param {!RepoInfo} repoInfo_ Data about the namespace we are connecting to\r\n     * @param {function(string, *, boolean, ?number)} onDataUpdate_ A callback for new data from the server\r\n     * @param onConnectStatus_\r\n     * @param onServerInfoUpdate_\r\n     * @param authTokenProvider_\r\n     * @param authOverride_\r\n     */\r\n    function PersistentConnection(repoInfo_, onDataUpdate_, onConnectStatus_, onServerInfoUpdate_, authTokenProvider_, authOverride_) {\r\n        var _this = _super.call(this) || this;\r\n        _this.repoInfo_ = repoInfo_;\r\n        _this.onDataUpdate_ = onDataUpdate_;\r\n        _this.onConnectStatus_ = onConnectStatus_;\r\n        _this.onServerInfoUpdate_ = onServerInfoUpdate_;\r\n        _this.authTokenProvider_ = authTokenProvider_;\r\n        _this.authOverride_ = authOverride_;\r\n        // Used for diagnostic logging.\r\n        _this.id = PersistentConnection.nextPersistentConnectionId_++;\r\n        _this.log_ = logWrapper('p:' + _this.id + ':');\r\n        /** @private {Object} */\r\n        _this.interruptReasons_ = {};\r\n        _this.listens_ = {};\r\n        _this.outstandingPuts_ = [];\r\n        _this.outstandingPutCount_ = 0;\r\n        _this.onDisconnectRequestQueue_ = [];\r\n        _this.connected_ = false;\r\n        _this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n        _this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;\r\n        _this.securityDebugCallback_ = null;\r\n        _this.lastSessionId = null;\r\n        /** @private {number|null} */\r\n        _this.establishConnectionTimer_ = null;\r\n        /** @private {boolean} */\r\n        _this.visible_ = false;\r\n        // Before we get connected, we keep a queue of pending messages to send.\r\n        _this.requestCBHash_ = {};\r\n        _this.requestNumber_ = 0;\r\n        /** @private {?{\r\n         *   sendRequest(Object),\r\n         *   close()\r\n         * }} */\r\n        _this.realtime_ = null;\r\n        /** @private {string|null} */\r\n        _this.authToken_ = null;\r\n        _this.forceTokenRefresh_ = false;\r\n        _this.invalidAuthTokenCount_ = 0;\r\n        _this.firstConnection_ = true;\r\n        _this.lastConnectionAttemptTime_ = null;\r\n        _this.lastConnectionEstablishedTime_ = null;\r\n        if (authOverride_ && !util.isNodeSdk()) {\r\n            throw new Error('Auth override specified in options, but not supported on non Node.js platforms');\r\n        }\r\n        _this.scheduleConnect_(0);\r\n        VisibilityMonitor.getInstance().on('visible', _this.onVisible_, _this);\r\n        if (repoInfo_.host.indexOf('fblocal') === -1) {\r\n            OnlineMonitor.getInstance().on('online', _this.onOnline_, _this);\r\n        }\r\n        return _this;\r\n    }\r\n    /**\r\n     * @param {!string} action\r\n     * @param {*} body\r\n     * @param {function(*)=} onResponse\r\n     * @protected\r\n     */\r\n    PersistentConnection.prototype.sendRequest = function (action, body, onResponse) {\r\n        var curReqNum = ++this.requestNumber_;\r\n        var msg = { r: curReqNum, a: action, b: body };\r\n        this.log_(util.stringify(msg));\r\n        util.assert(this.connected_, \"sendRequest call when we're not connected not allowed.\");\r\n        this.realtime_.sendRequest(msg);\r\n        if (onResponse) {\r\n            this.requestCBHash_[curReqNum] = onResponse;\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PersistentConnection.prototype.listen = function (query, currentHashFn, tag, onComplete) {\r\n        var queryId = query.queryIdentifier();\r\n        var pathString = query.path.toString();\r\n        this.log_('Listen called for ' + pathString + ' ' + queryId);\r\n        this.listens_[pathString] = this.listens_[pathString] || {};\r\n        util.assert(query.getQueryParams().isDefault() ||\r\n            !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query');\r\n        util.assert(!this.listens_[pathString][queryId], 'listen() called twice for same path/queryId.');\r\n        var listenSpec = {\r\n            onComplete: onComplete,\r\n            hashFn: currentHashFn,\r\n            query: query,\r\n            tag: tag\r\n        };\r\n        this.listens_[pathString][queryId] = listenSpec;\r\n        if (this.connected_) {\r\n            this.sendListen_(listenSpec);\r\n        }\r\n    };\r\n    /**\r\n     * @param {!{onComplete(),\r\n     *           hashFn():!string,\r\n     *           query: !Query,\r\n     *           tag: ?number}} listenSpec\r\n     * @private\r\n     */\r\n    PersistentConnection.prototype.sendListen_ = function (listenSpec) {\r\n        var _this = this;\r\n        var query = listenSpec.query;\r\n        var pathString = query.path.toString();\r\n        var queryId = query.queryIdentifier();\r\n        this.log_('Listen on ' + pathString + ' for ' + queryId);\r\n        var req = { /*path*/ p: pathString };\r\n        var action = 'q';\r\n        // Only bother to send query if it's non-default.\r\n        if (listenSpec.tag) {\r\n            req['q'] = query.queryObject();\r\n            req['t'] = listenSpec.tag;\r\n        }\r\n        req[ /*hash*/'h'] = listenSpec.hashFn();\r\n        this.sendRequest(action, req, function (message) {\r\n            var payload = message[ /*data*/'d'];\r\n            var status = message[ /*status*/'s'];\r\n            // print warnings in any case...\r\n            PersistentConnection.warnOnListenWarnings_(payload, query);\r\n            var currentListenSpec = _this.listens_[pathString] && _this.listens_[pathString][queryId];\r\n            // only trigger actions if the listen hasn't been removed and readded\r\n            if (currentListenSpec === listenSpec) {\r\n                _this.log_('listen response', message);\r\n                if (status !== 'ok') {\r\n                    _this.removeListen_(pathString, queryId);\r\n                }\r\n                if (listenSpec.onComplete) {\r\n                    listenSpec.onComplete(status, payload);\r\n                }\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * @param {*} payload\r\n     * @param {!Query} query\r\n     * @private\r\n     */\r\n    PersistentConnection.warnOnListenWarnings_ = function (payload, query) {\r\n        if (payload && typeof payload === 'object' && util.contains(payload, 'w')) {\r\n            var warnings = util.safeGet(payload, 'w');\r\n            if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {\r\n                var indexSpec = '\".indexOn\": \"' +\r\n                    query\r\n                        .getQueryParams()\r\n                        .getIndex()\r\n                        .toString() +\r\n                    '\"';\r\n                var indexPath = query.path.toString();\r\n                warn(\"Using an unspecified index. Your data will be downloaded and \" +\r\n                    (\"filtered on the client. Consider adding \" + indexSpec + \" at \") +\r\n                    (indexPath + \" to your security rules for better performance.\"));\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PersistentConnection.prototype.refreshAuthToken = function (token) {\r\n        this.authToken_ = token;\r\n        this.log_('Auth token refreshed');\r\n        if (this.authToken_) {\r\n            this.tryAuth();\r\n        }\r\n        else {\r\n            //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete\r\n            //the credential so we dont become authenticated next time we connect.\r\n            if (this.connected_) {\r\n                this.sendRequest('unauth', {}, function () { });\r\n            }\r\n        }\r\n        this.reduceReconnectDelayIfAdminCredential_(token);\r\n    };\r\n    /**\r\n     * @param {!string} credential\r\n     * @private\r\n     */\r\n    PersistentConnection.prototype.reduceReconnectDelayIfAdminCredential_ = function (credential) {\r\n        // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).\r\n        // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.\r\n        var isFirebaseSecret = credential && credential.length === 40;\r\n        if (isFirebaseSecret || util.isAdmin(credential)) {\r\n            this.log_('Admin auth credential detected.  Reducing max reconnect time.');\r\n            this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n        }\r\n    };\r\n    /**\r\n     * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like\r\n     * a auth revoked (the connection is closed).\r\n     */\r\n    PersistentConnection.prototype.tryAuth = function () {\r\n        var _this = this;\r\n        if (this.connected_ && this.authToken_) {\r\n            var token_1 = this.authToken_;\r\n            var authMethod = util.isValidFormat(token_1) ? 'auth' : 'gauth';\r\n            var requestData = { cred: token_1 };\r\n            if (this.authOverride_ === null) {\r\n                requestData['noauth'] = true;\r\n            }\r\n            else if (typeof this.authOverride_ === 'object') {\r\n                requestData['authvar'] = this.authOverride_;\r\n            }\r\n            this.sendRequest(authMethod, requestData, function (res) {\r\n                var status = res[ /*status*/'s'];\r\n                var data = res[ /*data*/'d'] || 'error';\r\n                if (_this.authToken_ === token_1) {\r\n                    if (status === 'ok') {\r\n                        _this.invalidAuthTokenCount_ = 0;\r\n                    }\r\n                    else {\r\n                        // Triggers reconnect and force refresh for auth token\r\n                        _this.onAuthRevoked_(status, data);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PersistentConnection.prototype.unlisten = function (query, tag) {\r\n        var pathString = query.path.toString();\r\n        var queryId = query.queryIdentifier();\r\n        this.log_('Unlisten called for ' + pathString + ' ' + queryId);\r\n        util.assert(query.getQueryParams().isDefault() ||\r\n            !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query');\r\n        var listen = this.removeListen_(pathString, queryId);\r\n        if (listen && this.connected_) {\r\n            this.sendUnlisten_(pathString, queryId, query.queryObject(), tag);\r\n        }\r\n    };\r\n    PersistentConnection.prototype.sendUnlisten_ = function (pathString, queryId, queryObj, tag) {\r\n        this.log_('Unlisten on ' + pathString + ' for ' + queryId);\r\n        var req = { /*path*/ p: pathString };\r\n        var action = 'n';\r\n        // Only bother sending queryId if it's non-default.\r\n        if (tag) {\r\n            req['q'] = queryObj;\r\n            req['t'] = tag;\r\n        }\r\n        this.sendRequest(action, req);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PersistentConnection.prototype.onDisconnectPut = function (pathString, data, onComplete) {\r\n        if (this.connected_) {\r\n            this.sendOnDisconnect_('o', pathString, data, onComplete);\r\n        }\r\n        else {\r\n            this.onDisconnectRequestQueue_.push({\r\n                pathString: pathString,\r\n                action: 'o',\r\n                data: data,\r\n                onComplete: onComplete\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PersistentConnection.prototype.onDisconnectMerge = function (pathString, data, onComplete) {\r\n        if (this.connected_) {\r\n            this.sendOnDisconnect_('om', pathString, data, onComplete);\r\n        }\r\n        else {\r\n            this.onDisconnectRequestQueue_.push({\r\n                pathString: pathString,\r\n                action: 'om',\r\n                data: data,\r\n                onComplete: onComplete\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PersistentConnection.prototype.onDisconnectCancel = function (pathString, onComplete) {\r\n        if (this.connected_) {\r\n            this.sendOnDisconnect_('oc', pathString, null, onComplete);\r\n        }\r\n        else {\r\n            this.onDisconnectRequestQueue_.push({\r\n                pathString: pathString,\r\n                action: 'oc',\r\n                data: null,\r\n                onComplete: onComplete\r\n            });\r\n        }\r\n    };\r\n    PersistentConnection.prototype.sendOnDisconnect_ = function (action, pathString, data, onComplete) {\r\n        var request = { /*path*/ p: pathString, /*data*/ d: data };\r\n        this.log_('onDisconnect ' + action, request);\r\n        this.sendRequest(action, request, function (response) {\r\n            if (onComplete) {\r\n                setTimeout(function () {\r\n                    onComplete(response[ /*status*/'s'], response[ /* data */'d']);\r\n                }, Math.floor(0));\r\n            }\r\n        });\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {\r\n        this.putInternal('p', pathString, data, onComplete, hash);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PersistentConnection.prototype.merge = function (pathString, data, onComplete, hash) {\r\n        this.putInternal('m', pathString, data, onComplete, hash);\r\n    };\r\n    PersistentConnection.prototype.putInternal = function (action, pathString, data, onComplete, hash) {\r\n        var request = {\r\n            /*path*/ p: pathString,\r\n            /*data*/ d: data\r\n        };\r\n        if (hash !== undefined)\r\n            request[ /*hash*/'h'] = hash;\r\n        // TODO: Only keep track of the most recent put for a given path?\r\n        this.outstandingPuts_.push({\r\n            action: action,\r\n            request: request,\r\n            onComplete: onComplete\r\n        });\r\n        this.outstandingPutCount_++;\r\n        var index = this.outstandingPuts_.length - 1;\r\n        if (this.connected_) {\r\n            this.sendPut_(index);\r\n        }\r\n        else {\r\n            this.log_('Buffering put: ' + pathString);\r\n        }\r\n    };\r\n    PersistentConnection.prototype.sendPut_ = function (index) {\r\n        var _this = this;\r\n        var action = this.outstandingPuts_[index].action;\r\n        var request = this.outstandingPuts_[index].request;\r\n        var onComplete = this.outstandingPuts_[index].onComplete;\r\n        this.outstandingPuts_[index].queued = this.connected_;\r\n        this.sendRequest(action, request, function (message) {\r\n            _this.log_(action + ' response', message);\r\n            delete _this.outstandingPuts_[index];\r\n            _this.outstandingPutCount_--;\r\n            // Clean up array occasionally.\r\n            if (_this.outstandingPutCount_ === 0) {\r\n                _this.outstandingPuts_ = [];\r\n            }\r\n            if (onComplete)\r\n                onComplete(message[ /*status*/'s'], message[ /* data */'d']);\r\n        });\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    PersistentConnection.prototype.reportStats = function (stats) {\r\n        var _this = this;\r\n        // If we're not connected, we just drop the stats.\r\n        if (this.connected_) {\r\n            var request = { /*counters*/ c: stats };\r\n            this.log_('reportStats', request);\r\n            this.sendRequest(/*stats*/ 's', request, function (result) {\r\n                var status = result[ /*status*/'s'];\r\n                if (status !== 'ok') {\r\n                    var errorReason = result[ /* data */'d'];\r\n                    _this.log_('reportStats', 'Error sending stats: ' + errorReason);\r\n                }\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     * @param {*} message\r\n     * @private\r\n     */\r\n    PersistentConnection.prototype.onDataMessage_ = function (message) {\r\n        if ('r' in message) {\r\n            // this is a response\r\n            this.log_('from server: ' + util.stringify(message));\r\n            var reqNum = message['r'];\r\n            var onResponse = this.requestCBHash_[reqNum];\r\n            if (onResponse) {\r\n                delete this.requestCBHash_[reqNum];\r\n                onResponse(message[ /*body*/'b']);\r\n            }\r\n        }\r\n        else if ('error' in message) {\r\n            throw 'A server-side error has occurred: ' + message['error'];\r\n        }\r\n        else if ('a' in message) {\r\n            // a and b are action and body, respectively\r\n            this.onDataPush_(message['a'], message['b']);\r\n        }\r\n    };\r\n    PersistentConnection.prototype.onDataPush_ = function (action, body) {\r\n        this.log_('handleServerMessage', action, body);\r\n        if (action === 'd')\r\n            this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n            /*isMerge*/ false, body['t']);\r\n        else if (action === 'm')\r\n            this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n            /*isMerge=*/ true, body['t']);\r\n        else if (action === 'c')\r\n            this.onListenRevoked_(body[ /*path*/'p'], body[ /*query*/'q']);\r\n        else if (action === 'ac')\r\n            this.onAuthRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n        else if (action === 'sd')\r\n            this.onSecurityDebugPacket_(body);\r\n        else\r\n            error('Unrecognized action received from server: ' +\r\n                util.stringify(action) +\r\n                '\\nAre you using the latest client?');\r\n    };\r\n    PersistentConnection.prototype.onReady_ = function (timestamp, sessionId) {\r\n        this.log_('connection ready');\r\n        this.connected_ = true;\r\n        this.lastConnectionEstablishedTime_ = new Date().getTime();\r\n        this.handleTimestamp_(timestamp);\r\n        this.lastSessionId = sessionId;\r\n        if (this.firstConnection_) {\r\n            this.sendConnectStats_();\r\n        }\r\n        this.restoreState_();\r\n        this.firstConnection_ = false;\r\n        this.onConnectStatus_(true);\r\n    };\r\n    PersistentConnection.prototype.scheduleConnect_ = function (timeout) {\r\n        var _this = this;\r\n        util.assert(!this.realtime_, \"Scheduling a connect when we're already connected/ing?\");\r\n        if (this.establishConnectionTimer_) {\r\n            clearTimeout(this.establishConnectionTimer_);\r\n        }\r\n        // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating \"Security Error\" in\r\n        // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).\r\n        this.establishConnectionTimer_ = setTimeout(function () {\r\n            _this.establishConnectionTimer_ = null;\r\n            _this.establishConnection_();\r\n        }, Math.floor(timeout));\r\n    };\r\n    /**\r\n     * @param {boolean} visible\r\n     * @private\r\n     */\r\n    PersistentConnection.prototype.onVisible_ = function (visible) {\r\n        // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.\r\n        if (visible &&\r\n            !this.visible_ &&\r\n            this.reconnectDelay_ === this.maxReconnectDelay_) {\r\n            this.log_('Window became visible.  Reducing delay.');\r\n            this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n            if (!this.realtime_) {\r\n                this.scheduleConnect_(0);\r\n            }\r\n        }\r\n        this.visible_ = visible;\r\n    };\r\n    PersistentConnection.prototype.onOnline_ = function (online) {\r\n        if (online) {\r\n            this.log_('Browser went online.');\r\n            this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n            if (!this.realtime_) {\r\n                this.scheduleConnect_(0);\r\n            }\r\n        }\r\n        else {\r\n            this.log_('Browser went offline.  Killing connection.');\r\n            if (this.realtime_) {\r\n                this.realtime_.close();\r\n            }\r\n        }\r\n    };\r\n    PersistentConnection.prototype.onRealtimeDisconnect_ = function () {\r\n        this.log_('data client disconnected');\r\n        this.connected_ = false;\r\n        this.realtime_ = null;\r\n        // Since we don't know if our sent transactions succeeded or not, we need to cancel them.\r\n        this.cancelSentTransactions_();\r\n        // Clear out the pending requests.\r\n        this.requestCBHash_ = {};\r\n        if (this.shouldReconnect_()) {\r\n            if (!this.visible_) {\r\n                this.log_(\"Window isn't visible.  Delaying reconnect.\");\r\n                this.reconnectDelay_ = this.maxReconnectDelay_;\r\n                this.lastConnectionAttemptTime_ = new Date().getTime();\r\n            }\r\n            else if (this.lastConnectionEstablishedTime_) {\r\n                // If we've been connected long enough, reset reconnect delay to minimum.\r\n                var timeSinceLastConnectSucceeded = new Date().getTime() - this.lastConnectionEstablishedTime_;\r\n                if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT)\r\n                    this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n                this.lastConnectionEstablishedTime_ = null;\r\n            }\r\n            var timeSinceLastConnectAttempt = new Date().getTime() - this.lastConnectionAttemptTime_;\r\n            var reconnectDelay = Math.max(0, this.reconnectDelay_ - timeSinceLastConnectAttempt);\r\n            reconnectDelay = Math.random() * reconnectDelay;\r\n            this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');\r\n            this.scheduleConnect_(reconnectDelay);\r\n            // Adjust reconnect delay for next time.\r\n            this.reconnectDelay_ = Math.min(this.maxReconnectDelay_, this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER);\r\n        }\r\n        this.onConnectStatus_(false);\r\n    };\r\n    PersistentConnection.prototype.establishConnection_ = function () {\r\n        if (this.shouldReconnect_()) {\r\n            this.log_('Making a connection attempt');\r\n            this.lastConnectionAttemptTime_ = new Date().getTime();\r\n            this.lastConnectionEstablishedTime_ = null;\r\n            var onDataMessage_1 = this.onDataMessage_.bind(this);\r\n            var onReady_1 = this.onReady_.bind(this);\r\n            var onDisconnect_1 = this.onRealtimeDisconnect_.bind(this);\r\n            var connId_1 = this.id + ':' + PersistentConnection.nextConnectionId_++;\r\n            var self_1 = this;\r\n            var lastSessionId_1 = this.lastSessionId;\r\n            var canceled_1 = false;\r\n            var connection_1 = null;\r\n            var closeFn_1 = function () {\r\n                if (connection_1) {\r\n                    connection_1.close();\r\n                }\r\n                else {\r\n                    canceled_1 = true;\r\n                    onDisconnect_1();\r\n                }\r\n            };\r\n            var sendRequestFn = function (msg) {\r\n                util.assert(connection_1, \"sendRequest call when we're not connected not allowed.\");\r\n                connection_1.sendRequest(msg);\r\n            };\r\n            this.realtime_ = {\r\n                close: closeFn_1,\r\n                sendRequest: sendRequestFn\r\n            };\r\n            var forceRefresh = this.forceTokenRefresh_;\r\n            this.forceTokenRefresh_ = false;\r\n            // First fetch auth token, and establish connection after fetching the token was successful\r\n            this.authTokenProvider_\r\n                .getToken(forceRefresh)\r\n                .then(function (result) {\r\n                if (!canceled_1) {\r\n                    log('getToken() completed. Creating connection.');\r\n                    self_1.authToken_ = result && result.accessToken;\r\n                    connection_1 = new Connection(connId_1, self_1.repoInfo_, onDataMessage_1, onReady_1, onDisconnect_1, \r\n                    /* onKill= */ function (reason) {\r\n                        warn(reason + ' (' + self_1.repoInfo_.toString() + ')');\r\n                        self_1.interrupt(SERVER_KILL_INTERRUPT_REASON);\r\n                    }, lastSessionId_1);\r\n                }\r\n                else {\r\n                    log('getToken() completed but was canceled');\r\n                }\r\n            })\r\n                .then(null, function (error) {\r\n                self_1.log_('Failed to get token: ' + error);\r\n                if (!canceled_1) {\r\n                    if (util.CONSTANTS.NODE_ADMIN) {\r\n                        // This may be a critical error for the Admin Node.js SDK, so log a warning.\r\n                        // But getToken() may also just have temporarily failed, so we still want to\r\n                        // continue retrying.\r\n                        warn(error);\r\n                    }\r\n                    closeFn_1();\r\n                }\r\n            });\r\n        }\r\n    };\r\n    /**\r\n     * @param {string} reason\r\n     */\r\n    PersistentConnection.prototype.interrupt = function (reason) {\r\n        log('Interrupting connection for reason: ' + reason);\r\n        this.interruptReasons_[reason] = true;\r\n        if (this.realtime_) {\r\n            this.realtime_.close();\r\n        }\r\n        else {\r\n            if (this.establishConnectionTimer_) {\r\n                clearTimeout(this.establishConnectionTimer_);\r\n                this.establishConnectionTimer_ = null;\r\n            }\r\n            if (this.connected_) {\r\n                this.onRealtimeDisconnect_();\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * @param {string} reason\r\n     */\r\n    PersistentConnection.prototype.resume = function (reason) {\r\n        log('Resuming connection for reason: ' + reason);\r\n        delete this.interruptReasons_[reason];\r\n        if (util.isEmpty(this.interruptReasons_)) {\r\n            this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n            if (!this.realtime_) {\r\n                this.scheduleConnect_(0);\r\n            }\r\n        }\r\n    };\r\n    PersistentConnection.prototype.handleTimestamp_ = function (timestamp) {\r\n        var delta = timestamp - new Date().getTime();\r\n        this.onServerInfoUpdate_({ serverTimeOffset: delta });\r\n    };\r\n    PersistentConnection.prototype.cancelSentTransactions_ = function () {\r\n        for (var i = 0; i < this.outstandingPuts_.length; i++) {\r\n            var put = this.outstandingPuts_[i];\r\n            if (put && /*hash*/ 'h' in put.request && put.queued) {\r\n                if (put.onComplete)\r\n                    put.onComplete('disconnect');\r\n                delete this.outstandingPuts_[i];\r\n                this.outstandingPutCount_--;\r\n            }\r\n        }\r\n        // Clean up array occasionally.\r\n        if (this.outstandingPutCount_ === 0)\r\n            this.outstandingPuts_ = [];\r\n    };\r\n    /**\r\n     * @param {!string} pathString\r\n     * @param {Array.<*>=} query\r\n     * @private\r\n     */\r\n    PersistentConnection.prototype.onListenRevoked_ = function (pathString, query) {\r\n        // Remove the listen and manufacture a \"permission_denied\" error for the failed listen.\r\n        var queryId;\r\n        if (!query) {\r\n            queryId = 'default';\r\n        }\r\n        else {\r\n            queryId = query.map(function (q) { return ObjectToUniqueKey(q); }).join('$');\r\n        }\r\n        var listen = this.removeListen_(pathString, queryId);\r\n        if (listen && listen.onComplete)\r\n            listen.onComplete('permission_denied');\r\n    };\r\n    /**\r\n     * @param {!string} pathString\r\n     * @param {!string} queryId\r\n     * @return {{queries:Array.<Query>, onComplete:function(string)}}\r\n     * @private\r\n     */\r\n    PersistentConnection.prototype.removeListen_ = function (pathString, queryId) {\r\n        var normalizedPathString = new Path(pathString).toString(); // normalize path.\r\n        var listen;\r\n        if (this.listens_[normalizedPathString] !== undefined) {\r\n            listen = this.listens_[normalizedPathString][queryId];\r\n            delete this.listens_[normalizedPathString][queryId];\r\n            if (util.getCount(this.listens_[normalizedPathString]) === 0) {\r\n                delete this.listens_[normalizedPathString];\r\n            }\r\n        }\r\n        else {\r\n            // all listens for this path has already been removed\r\n            listen = undefined;\r\n        }\r\n        return listen;\r\n    };\r\n    PersistentConnection.prototype.onAuthRevoked_ = function (statusCode, explanation) {\r\n        log('Auth token revoked: ' + statusCode + '/' + explanation);\r\n        this.authToken_ = null;\r\n        this.forceTokenRefresh_ = true;\r\n        this.realtime_.close();\r\n        if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n            // We'll wait a couple times before logging the warning / increasing the\r\n            // retry period since oauth tokens will report as \"invalid\" if they're\r\n            // just expired. Plus there may be transient issues that resolve themselves.\r\n            this.invalidAuthTokenCount_++;\r\n            if (this.invalidAuthTokenCount_ >= INVALID_AUTH_TOKEN_THRESHOLD) {\r\n                // Set a long reconnect delay because recovery is unlikely\r\n                this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n                // Notify the auth token provider that the token is invalid, which will log\r\n                // a warning\r\n                this.authTokenProvider_.notifyForInvalidToken();\r\n            }\r\n        }\r\n    };\r\n    PersistentConnection.prototype.onSecurityDebugPacket_ = function (body) {\r\n        if (this.securityDebugCallback_) {\r\n            this.securityDebugCallback_(body);\r\n        }\r\n        else {\r\n            if ('msg' in body) {\r\n                console.log('FIREBASE: ' + body['msg'].replace('\\n', '\\nFIREBASE: '));\r\n            }\r\n        }\r\n    };\r\n    PersistentConnection.prototype.restoreState_ = function () {\r\n        var _this = this;\r\n        //Re-authenticate ourselves if we have a credential stored.\r\n        this.tryAuth();\r\n        // Puts depend on having received the corresponding data update from the server before they complete, so we must\r\n        // make sure to send listens before puts.\r\n        util.forEach(this.listens_, function (pathString, queries) {\r\n            util.forEach(queries, function (key, listenSpec) {\r\n                _this.sendListen_(listenSpec);\r\n            });\r\n        });\r\n        for (var i = 0; i < this.outstandingPuts_.length; i++) {\r\n            if (this.outstandingPuts_[i])\r\n                this.sendPut_(i);\r\n        }\r\n        while (this.onDisconnectRequestQueue_.length) {\r\n            var request = this.onDisconnectRequestQueue_.shift();\r\n            this.sendOnDisconnect_(request.action, request.pathString, request.data, request.onComplete);\r\n        }\r\n    };\r\n    /**\r\n     * Sends client stats for first connection\r\n     * @private\r\n     */\r\n    PersistentConnection.prototype.sendConnectStats_ = function () {\r\n        var stats = {};\r\n        var clientName = 'js';\r\n        if (util.CONSTANTS.NODE_ADMIN) {\r\n            clientName = 'admin_node';\r\n        }\r\n        else if (util.CONSTANTS.NODE_CLIENT) {\r\n            clientName = 'node';\r\n        }\r\n        stats['sdk.' + clientName + '.' + firebase.SDK_VERSION.replace(/\\./g, '-')] = 1;\r\n        if (util.isMobileCordova()) {\r\n            stats['framework.cordova'] = 1;\r\n        }\r\n        else if (util.isReactNative()) {\r\n            stats['framework.reactnative'] = 1;\r\n        }\r\n        this.reportStats(stats);\r\n    };\r\n    /**\r\n     * @return {boolean}\r\n     * @private\r\n     */\r\n    PersistentConnection.prototype.shouldReconnect_ = function () {\r\n        var online = OnlineMonitor.getInstance().currentlyOnline();\r\n        return util.isEmpty(this.interruptReasons_) && online;\r\n    };\r\n    /**\r\n     * @private\r\n     */\r\n    PersistentConnection.nextPersistentConnectionId_ = 0;\r\n    /**\r\n     * Counter for number of connections created. Mainly used for tagging in the logs\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    PersistentConnection.nextConnectionId_ = 0;\r\n    return PersistentConnection;\r\n}(ServerActions));\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of ServerActions that communicates with the server via REST requests.\r\n * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\r\n * persistent connection (using WebSockets or long-polling)\r\n */\r\nvar ReadonlyRestClient = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ReadonlyRestClient, _super);\r\n    /**\r\n     * @param {!RepoInfo} repoInfo_ Data about the namespace we are connecting to\r\n     * @param {function(string, *, boolean, ?number)} onDataUpdate_ A callback for new data from the server\r\n     * @param {AuthTokenProvider} authTokenProvider_\r\n     * @implements {ServerActions}\r\n     */\r\n    function ReadonlyRestClient(repoInfo_, onDataUpdate_, authTokenProvider_) {\r\n        var _this = _super.call(this) || this;\r\n        _this.repoInfo_ = repoInfo_;\r\n        _this.onDataUpdate_ = onDataUpdate_;\r\n        _this.authTokenProvider_ = authTokenProvider_;\r\n        /** @private {function(...[*])} */\r\n        _this.log_ = logWrapper('p:rest:');\r\n        /**\r\n         * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\r\n         * that's been removed. :-/\r\n         *\r\n         * @private {!Object.<string, !Object>}\r\n         */\r\n        _this.listens_ = {};\r\n        return _this;\r\n    }\r\n    ReadonlyRestClient.prototype.reportStats = function (stats) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    /**\r\n     * @param {!Query} query\r\n     * @param {?number=} tag\r\n     * @return {string}\r\n     * @private\r\n     */\r\n    ReadonlyRestClient.getListenId_ = function (query, tag) {\r\n        if (tag !== undefined) {\r\n            return 'tag$' + tag;\r\n        }\r\n        else {\r\n            util.assert(query.getQueryParams().isDefault(), \"should have a tag if it's not a default query.\");\r\n            return query.path.toString();\r\n        }\r\n    };\r\n    /** @inheritDoc */\r\n    ReadonlyRestClient.prototype.listen = function (query, currentHashFn, tag, onComplete) {\r\n        var _this = this;\r\n        var pathString = query.path.toString();\r\n        this.log_('Listen called for ' + pathString + ' ' + query.queryIdentifier());\r\n        // Mark this listener so we can tell if it's removed.\r\n        var listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n        var thisListen = {};\r\n        this.listens_[listenId] = thisListen;\r\n        var queryStringParameters = query\r\n            .getQueryParams()\r\n            .toRestQueryStringParameters();\r\n        this.restRequest_(pathString + '.json', queryStringParameters, function (error, result) {\r\n            var data = result;\r\n            if (error === 404) {\r\n                data = null;\r\n                error = null;\r\n            }\r\n            if (error === null) {\r\n                _this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\r\n            }\r\n            if (util.safeGet(_this.listens_, listenId) === thisListen) {\r\n                var status_1;\r\n                if (!error) {\r\n                    status_1 = 'ok';\r\n                }\r\n                else if (error == 401) {\r\n                    status_1 = 'permission_denied';\r\n                }\r\n                else {\r\n                    status_1 = 'rest_error:' + error;\r\n                }\r\n                onComplete(status_1, null);\r\n            }\r\n        });\r\n    };\r\n    /** @inheritDoc */\r\n    ReadonlyRestClient.prototype.unlisten = function (query, tag) {\r\n        var listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n        delete this.listens_[listenId];\r\n    };\r\n    /** @inheritDoc */\r\n    ReadonlyRestClient.prototype.refreshAuthToken = function (token) {\r\n        // no-op since we just always call getToken.\r\n    };\r\n    /**\r\n     * Performs a REST request to the given path, with the provided query string parameters,\r\n     * and any auth credentials we have.\r\n     *\r\n     * @param {!string} pathString\r\n     * @param {!Object.<string, *>} queryStringParameters\r\n     * @param {?function(?number, *=)} callback\r\n     * @private\r\n     */\r\n    ReadonlyRestClient.prototype.restRequest_ = function (pathString, queryStringParameters, callback) {\r\n        var _this = this;\r\n        if (queryStringParameters === void 0) { queryStringParameters = {}; }\r\n        queryStringParameters['format'] = 'export';\r\n        this.authTokenProvider_\r\n            .getToken(/*forceRefresh=*/ false)\r\n            .then(function (authTokenData) {\r\n            var authToken = authTokenData && authTokenData.accessToken;\r\n            if (authToken) {\r\n                queryStringParameters['auth'] = authToken;\r\n            }\r\n            var url = (_this.repoInfo_.secure ? 'https://' : 'http://') +\r\n                _this.repoInfo_.host +\r\n                pathString +\r\n                '?' +\r\n                'ns=' +\r\n                _this.repoInfo_.namespace +\r\n                util.querystring(queryStringParameters);\r\n            _this.log_('Sending REST request for ' + url);\r\n            var xhr = new XMLHttpRequest();\r\n            xhr.onreadystatechange = function () {\r\n                if (callback && xhr.readyState === 4) {\r\n                    _this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);\r\n                    var res = null;\r\n                    if (xhr.status >= 200 && xhr.status < 300) {\r\n                        try {\r\n                            res = util.jsonEval(xhr.responseText);\r\n                        }\r\n                        catch (e) {\r\n                            warn('Failed to parse JSON response for ' +\r\n                                url +\r\n                                ': ' +\r\n                                xhr.responseText);\r\n                        }\r\n                        callback(null, res);\r\n                    }\r\n                    else {\r\n                        // 401 and 404 are expected.\r\n                        if (xhr.status !== 401 && xhr.status !== 404) {\r\n                            warn('Got unsuccessful REST response for ' +\r\n                                url +\r\n                                ' Status: ' +\r\n                                xhr.status);\r\n                        }\r\n                        callback(xhr.status);\r\n                    }\r\n                    callback = null;\r\n                }\r\n            };\r\n            xhr.open('GET', url, /*asynchronous=*/ true);\r\n            xhr.send();\r\n        });\r\n    };\r\n    return ReadonlyRestClient;\r\n}(ServerActions));\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar INTERRUPT_REASON = 'repo_interrupt';\r\n/**\r\n * A connection to a single data repository.\r\n */\r\nvar Repo = /** @class */ (function () {\r\n    /**\r\n     * @param {!RepoInfo} repoInfo_\r\n     * @param {boolean} forceRestClient\r\n     * @param {!FirebaseApp} app\r\n     */\r\n    function Repo(repoInfo_, forceRestClient, app) {\r\n        var _this = this;\r\n        this.repoInfo_ = repoInfo_;\r\n        this.app = app;\r\n        this.dataUpdateCount = 0;\r\n        this.statsListener_ = null;\r\n        this.eventQueue_ = new EventQueue();\r\n        this.nextWriteId_ = 1;\r\n        this.interceptServerDataCallback_ = null;\r\n        // A list of data pieces and paths to be set when this client disconnects.\r\n        this.onDisconnect_ = new SparseSnapshotTree();\r\n        /**\r\n         * TODO: This should be @private but it's used by test_access.js and internal.js\r\n         * @type {?PersistentConnection}\r\n         */\r\n        this.persistentConnection_ = null;\r\n        /** @type {!AuthTokenProvider} */\r\n        var authTokenProvider = new AuthTokenProvider(app);\r\n        this.stats_ = StatsManager.getCollection(repoInfo_);\r\n        if (forceRestClient || beingCrawled()) {\r\n            this.server_ = new ReadonlyRestClient(this.repoInfo_, this.onDataUpdate_.bind(this), authTokenProvider);\r\n            // Minor hack: Fire onConnect immediately, since there's no actual connection.\r\n            setTimeout(this.onConnectStatus_.bind(this, true), 0);\r\n        }\r\n        else {\r\n            var authOverride = app.options['databaseAuthVariableOverride'];\r\n            // Validate authOverride\r\n            if (typeof authOverride !== 'undefined' && authOverride !== null) {\r\n                if (typeof authOverride !== 'object') {\r\n                    throw new Error('Only objects are supported for option databaseAuthVariableOverride');\r\n                }\r\n                try {\r\n                    util.stringify(authOverride);\r\n                }\r\n                catch (e) {\r\n                    throw new Error('Invalid authOverride provided: ' + e);\r\n                }\r\n            }\r\n            this.persistentConnection_ = new PersistentConnection(this.repoInfo_, this.onDataUpdate_.bind(this), this.onConnectStatus_.bind(this), this.onServerInfoUpdate_.bind(this), authTokenProvider, authOverride);\r\n            this.server_ = this.persistentConnection_;\r\n        }\r\n        authTokenProvider.addTokenChangeListener(function (token) {\r\n            _this.server_.refreshAuthToken(token);\r\n        });\r\n        // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),\r\n        // we only want to create one StatsReporter.  As such, we'll report stats over the first Repo created.\r\n        this.statsReporter_ = StatsManager.getOrCreateReporter(repoInfo_, function () { return new StatsReporter(_this.stats_, _this.server_); });\r\n        this.transactions_init_();\r\n        // Used for .info.\r\n        this.infoData_ = new SnapshotHolder();\r\n        this.infoSyncTree_ = new SyncTree({\r\n            startListening: function (query, tag, currentHashFn, onComplete) {\r\n                var infoEvents = [];\r\n                var node = _this.infoData_.getNode(query.path);\r\n                // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events\r\n                // on initial data...\r\n                if (!node.isEmpty()) {\r\n                    infoEvents = _this.infoSyncTree_.applyServerOverwrite(query.path, node);\r\n                    setTimeout(function () {\r\n                        onComplete('ok');\r\n                    }, 0);\r\n                }\r\n                return infoEvents;\r\n            },\r\n            stopListening: function () { }\r\n        });\r\n        this.updateInfo_('connected', false);\r\n        this.serverSyncTree_ = new SyncTree({\r\n            startListening: function (query, tag, currentHashFn, onComplete) {\r\n                _this.server_.listen(query, currentHashFn, tag, function (status, data) {\r\n                    var events = onComplete(status, data);\r\n                    _this.eventQueue_.raiseEventsForChangedPath(query.path, events);\r\n                });\r\n                // No synchronous events for network-backed sync trees\r\n                return [];\r\n            },\r\n            stopListening: function (query, tag) {\r\n                _this.server_.unlisten(query, tag);\r\n            }\r\n        });\r\n    }\r\n    /**\r\n     * @return {string}  The URL corresponding to the root of this Firebase.\r\n     */\r\n    Repo.prototype.toString = function () {\r\n        return ((this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host);\r\n    };\r\n    /**\r\n     * @return {!string} The namespace represented by the repo.\r\n     */\r\n    Repo.prototype.name = function () {\r\n        return this.repoInfo_.namespace;\r\n    };\r\n    /**\r\n     * @return {!number} The time in milliseconds, taking the server offset into account if we have one.\r\n     */\r\n    Repo.prototype.serverTime = function () {\r\n        var offsetNode = this.infoData_.getNode(new Path('.info/serverTimeOffset'));\r\n        var offset = offsetNode.val() || 0;\r\n        return new Date().getTime() + offset;\r\n    };\r\n    /**\r\n     * Generate ServerValues using some variables from the repo object.\r\n     * @return {!Object}\r\n     */\r\n    Repo.prototype.generateServerValues = function () {\r\n        return generateWithValues({\r\n            timestamp: this.serverTime()\r\n        });\r\n    };\r\n    /**\r\n     * Called by realtime when we get new messages from the server.\r\n     *\r\n     * @private\r\n     * @param {string} pathString\r\n     * @param {*} data\r\n     * @param {boolean} isMerge\r\n     * @param {?number} tag\r\n     */\r\n    Repo.prototype.onDataUpdate_ = function (pathString, data, isMerge, tag) {\r\n        // For testing.\r\n        this.dataUpdateCount++;\r\n        var path = new Path(pathString);\r\n        data = this.interceptServerDataCallback_\r\n            ? this.interceptServerDataCallback_(pathString, data)\r\n            : data;\r\n        var events = [];\r\n        if (tag) {\r\n            if (isMerge) {\r\n                var taggedChildren = util.map(data, function (raw) {\r\n                    return nodeFromJSON$1(raw);\r\n                });\r\n                events = this.serverSyncTree_.applyTaggedQueryMerge(path, taggedChildren, tag);\r\n            }\r\n            else {\r\n                var taggedSnap = nodeFromJSON$1(data);\r\n                events = this.serverSyncTree_.applyTaggedQueryOverwrite(path, taggedSnap, tag);\r\n            }\r\n        }\r\n        else if (isMerge) {\r\n            var changedChildren = util.map(data, function (raw) {\r\n                return nodeFromJSON$1(raw);\r\n            });\r\n            events = this.serverSyncTree_.applyServerMerge(path, changedChildren);\r\n        }\r\n        else {\r\n            var snap = nodeFromJSON$1(data);\r\n            events = this.serverSyncTree_.applyServerOverwrite(path, snap);\r\n        }\r\n        var affectedPath = path;\r\n        if (events.length > 0) {\r\n            // Since we have a listener outstanding for each transaction, receiving any events\r\n            // is a proxy for some change having occurred.\r\n            affectedPath = this.rerunTransactions_(path);\r\n        }\r\n        this.eventQueue_.raiseEventsForChangedPath(affectedPath, events);\r\n    };\r\n    /**\r\n     * TODO: This should be @private but it's used by test_access.js and internal.js\r\n     * @param {?function(!string, *):*} callback\r\n     * @private\r\n     */\r\n    Repo.prototype.interceptServerData_ = function (callback) {\r\n        this.interceptServerDataCallback_ = callback;\r\n    };\r\n    /**\r\n     * @param {!boolean} connectStatus\r\n     * @private\r\n     */\r\n    Repo.prototype.onConnectStatus_ = function (connectStatus) {\r\n        this.updateInfo_('connected', connectStatus);\r\n        if (connectStatus === false) {\r\n            this.runOnDisconnectEvents_();\r\n        }\r\n    };\r\n    /**\r\n     * @param {!Object} updates\r\n     * @private\r\n     */\r\n    Repo.prototype.onServerInfoUpdate_ = function (updates) {\r\n        var _this = this;\r\n        each(updates, function (value, key) {\r\n            _this.updateInfo_(key, value);\r\n        });\r\n    };\r\n    /**\r\n     *\r\n     * @param {!string} pathString\r\n     * @param {*} value\r\n     * @private\r\n     */\r\n    Repo.prototype.updateInfo_ = function (pathString, value) {\r\n        var path = new Path('/.info/' + pathString);\r\n        var newNode = nodeFromJSON$1(value);\r\n        this.infoData_.updateSnapshot(path, newNode);\r\n        var events = this.infoSyncTree_.applyServerOverwrite(path, newNode);\r\n        this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n    };\r\n    /**\r\n     * @return {!number}\r\n     * @private\r\n     */\r\n    Repo.prototype.getNextWriteId_ = function () {\r\n        return this.nextWriteId_++;\r\n    };\r\n    /**\r\n     * @param {!Path} path\r\n     * @param {*} newVal\r\n     * @param {number|string|null} newPriority\r\n     * @param {?function(?Error, *=)} onComplete\r\n     */\r\n    Repo.prototype.setWithPriority = function (path, newVal, newPriority, onComplete) {\r\n        var _this = this;\r\n        this.log_('set', {\r\n            path: path.toString(),\r\n            value: newVal,\r\n            priority: newPriority\r\n        });\r\n        // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or\r\n        // (b) store unresolved paths on JSON parse\r\n        var serverValues = this.generateServerValues();\r\n        var newNodeUnresolved = nodeFromJSON$1(newVal, newPriority);\r\n        var newNode = resolveDeferredValueSnapshot(newNodeUnresolved, serverValues);\r\n        var writeId = this.getNextWriteId_();\r\n        var events = this.serverSyncTree_.applyUserOverwrite(path, newNode, writeId, true);\r\n        this.eventQueue_.queueEvents(events);\r\n        this.server_.put(path.toString(), newNodeUnresolved.val(/*export=*/ true), function (status, errorReason) {\r\n            var success = status === 'ok';\r\n            if (!success) {\r\n                warn('set at ' + path + ' failed: ' + status);\r\n            }\r\n            var clearEvents = _this.serverSyncTree_.ackUserWrite(writeId, !success);\r\n            _this.eventQueue_.raiseEventsForChangedPath(path, clearEvents);\r\n            _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n        });\r\n        var affectedPath = this.abortTransactions_(path);\r\n        this.rerunTransactions_(affectedPath);\r\n        // We queued the events above, so just flush the queue here\r\n        this.eventQueue_.raiseEventsForChangedPath(affectedPath, []);\r\n    };\r\n    /**\r\n     * @param {!Path} path\r\n     * @param {!Object} childrenToMerge\r\n     * @param {?function(?Error, *=)} onComplete\r\n     */\r\n    Repo.prototype.update = function (path, childrenToMerge, onComplete) {\r\n        var _this = this;\r\n        this.log_('update', { path: path.toString(), value: childrenToMerge });\r\n        // Start with our existing data and merge each child into it.\r\n        var empty = true;\r\n        var serverValues = this.generateServerValues();\r\n        var changedChildren = {};\r\n        util.forEach(childrenToMerge, function (changedKey, changedValue) {\r\n            empty = false;\r\n            var newNodeUnresolved = nodeFromJSON$1(changedValue);\r\n            changedChildren[changedKey] = resolveDeferredValueSnapshot(newNodeUnresolved, serverValues);\r\n        });\r\n        if (!empty) {\r\n            var writeId_1 = this.getNextWriteId_();\r\n            var events = this.serverSyncTree_.applyUserMerge(path, changedChildren, writeId_1);\r\n            this.eventQueue_.queueEvents(events);\r\n            this.server_.merge(path.toString(), childrenToMerge, function (status, errorReason) {\r\n                var success = status === 'ok';\r\n                if (!success) {\r\n                    warn('update at ' + path + ' failed: ' + status);\r\n                }\r\n                var clearEvents = _this.serverSyncTree_.ackUserWrite(writeId_1, !success);\r\n                var affectedPath = clearEvents.length > 0 ? _this.rerunTransactions_(path) : path;\r\n                _this.eventQueue_.raiseEventsForChangedPath(affectedPath, clearEvents);\r\n                _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n            });\r\n            util.forEach(childrenToMerge, function (changedPath) {\r\n                var affectedPath = _this.abortTransactions_(path.child(changedPath));\r\n                _this.rerunTransactions_(affectedPath);\r\n            });\r\n            // We queued the events above, so just flush the queue here\r\n            this.eventQueue_.raiseEventsForChangedPath(path, []);\r\n        }\r\n        else {\r\n            log(\"update() called with empty data.  Don't do anything.\");\r\n            this.callOnCompleteCallback(onComplete, 'ok');\r\n        }\r\n    };\r\n    /**\r\n     * Applies all of the changes stored up in the onDisconnect_ tree.\r\n     * @private\r\n     */\r\n    Repo.prototype.runOnDisconnectEvents_ = function () {\r\n        var _this = this;\r\n        this.log_('onDisconnectEvents');\r\n        var serverValues = this.generateServerValues();\r\n        var resolvedOnDisconnectTree = resolveDeferredValueTree(this.onDisconnect_, serverValues);\r\n        var events = [];\r\n        resolvedOnDisconnectTree.forEachTree(Path.Empty, function (path, snap) {\r\n            events = events.concat(_this.serverSyncTree_.applyServerOverwrite(path, snap));\r\n            var affectedPath = _this.abortTransactions_(path);\r\n            _this.rerunTransactions_(affectedPath);\r\n        });\r\n        this.onDisconnect_ = new SparseSnapshotTree();\r\n        this.eventQueue_.raiseEventsForChangedPath(Path.Empty, events);\r\n    };\r\n    /**\r\n     * @param {!Path} path\r\n     * @param {?function(?Error, *=)} onComplete\r\n     */\r\n    Repo.prototype.onDisconnectCancel = function (path, onComplete) {\r\n        var _this = this;\r\n        this.server_.onDisconnectCancel(path.toString(), function (status, errorReason) {\r\n            if (status === 'ok') {\r\n                _this.onDisconnect_.forget(path);\r\n            }\r\n            _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n        });\r\n    };\r\n    /**\r\n     * @param {!Path} path\r\n     * @param {*} value\r\n     * @param {?function(?Error, *=)} onComplete\r\n     */\r\n    Repo.prototype.onDisconnectSet = function (path, value, onComplete) {\r\n        var _this = this;\r\n        var newNode = nodeFromJSON$1(value);\r\n        this.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), function (status, errorReason) {\r\n            if (status === 'ok') {\r\n                _this.onDisconnect_.remember(path, newNode);\r\n            }\r\n            _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n        });\r\n    };\r\n    /**\r\n     * @param {!Path} path\r\n     * @param {*} value\r\n     * @param {*} priority\r\n     * @param {?function(?Error, *=)} onComplete\r\n     */\r\n    Repo.prototype.onDisconnectSetWithPriority = function (path, value, priority, onComplete) {\r\n        var _this = this;\r\n        var newNode = nodeFromJSON$1(value, priority);\r\n        this.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), function (status, errorReason) {\r\n            if (status === 'ok') {\r\n                _this.onDisconnect_.remember(path, newNode);\r\n            }\r\n            _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n        });\r\n    };\r\n    /**\r\n     * @param {!Path} path\r\n     * @param {*} childrenToMerge\r\n     * @param {?function(?Error, *=)} onComplete\r\n     */\r\n    Repo.prototype.onDisconnectUpdate = function (path, childrenToMerge, onComplete) {\r\n        var _this = this;\r\n        if (util.isEmpty(childrenToMerge)) {\r\n            log(\"onDisconnect().update() called with empty data.  Don't do anything.\");\r\n            this.callOnCompleteCallback(onComplete, 'ok');\r\n            return;\r\n        }\r\n        this.server_.onDisconnectMerge(path.toString(), childrenToMerge, function (status, errorReason) {\r\n            if (status === 'ok') {\r\n                util.forEach(childrenToMerge, function (childName, childNode) {\r\n                    var newChildNode = nodeFromJSON$1(childNode);\r\n                    _this.onDisconnect_.remember(path.child(childName), newChildNode);\r\n                });\r\n            }\r\n            _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n        });\r\n    };\r\n    /**\r\n     * @param {!Query} query\r\n     * @param {!EventRegistration} eventRegistration\r\n     */\r\n    Repo.prototype.addEventCallbackForQuery = function (query, eventRegistration) {\r\n        var events;\r\n        if (query.path.getFront() === '.info') {\r\n            events = this.infoSyncTree_.addEventRegistration(query, eventRegistration);\r\n        }\r\n        else {\r\n            events = this.serverSyncTree_.addEventRegistration(query, eventRegistration);\r\n        }\r\n        this.eventQueue_.raiseEventsAtPath(query.path, events);\r\n    };\r\n    /**\r\n     * @param {!Query} query\r\n     * @param {?EventRegistration} eventRegistration\r\n     */\r\n    Repo.prototype.removeEventCallbackForQuery = function (query, eventRegistration) {\r\n        // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof\r\n        // a little bit by handling the return values anyways.\r\n        var events;\r\n        if (query.path.getFront() === '.info') {\r\n            events = this.infoSyncTree_.removeEventRegistration(query, eventRegistration);\r\n        }\r\n        else {\r\n            events = this.serverSyncTree_.removeEventRegistration(query, eventRegistration);\r\n        }\r\n        this.eventQueue_.raiseEventsAtPath(query.path, events);\r\n    };\r\n    Repo.prototype.interrupt = function () {\r\n        if (this.persistentConnection_) {\r\n            this.persistentConnection_.interrupt(INTERRUPT_REASON);\r\n        }\r\n    };\r\n    Repo.prototype.resume = function () {\r\n        if (this.persistentConnection_) {\r\n            this.persistentConnection_.resume(INTERRUPT_REASON);\r\n        }\r\n    };\r\n    Repo.prototype.stats = function (showDelta) {\r\n        if (showDelta === void 0) { showDelta = false; }\r\n        if (typeof console === 'undefined')\r\n            return;\r\n        var stats;\r\n        if (showDelta) {\r\n            if (!this.statsListener_)\r\n                this.statsListener_ = new StatsListener(this.stats_);\r\n            stats = this.statsListener_.get();\r\n        }\r\n        else {\r\n            stats = this.stats_.get();\r\n        }\r\n        var longestName = Object.keys(stats).reduce(function (previousValue, currentValue) {\r\n            return Math.max(currentValue.length, previousValue);\r\n        }, 0);\r\n        util.forEach(stats, function (stat, value) {\r\n            // pad stat names to be the same length (plus 2 extra spaces).\r\n            for (var i = stat.length; i < longestName + 2; i++)\r\n                stat += ' ';\r\n            console.log(stat + value);\r\n        });\r\n    };\r\n    Repo.prototype.statsIncrementCounter = function (metric) {\r\n        this.stats_.incrementCounter(metric);\r\n        this.statsReporter_.includeStat(metric);\r\n    };\r\n    /**\r\n     * @param {...*} var_args\r\n     * @private\r\n     */\r\n    Repo.prototype.log_ = function () {\r\n        var var_args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            var_args[_i] = arguments[_i];\r\n        }\r\n        var prefix = '';\r\n        if (this.persistentConnection_) {\r\n            prefix = this.persistentConnection_.id + ':';\r\n        }\r\n        log.apply(void 0, [prefix].concat(var_args));\r\n    };\r\n    /**\r\n     * @param {?function(?Error, *=)} callback\r\n     * @param {!string} status\r\n     * @param {?string=} errorReason\r\n     */\r\n    Repo.prototype.callOnCompleteCallback = function (callback, status, errorReason) {\r\n        if (callback) {\r\n            exceptionGuard(function () {\r\n                if (status == 'ok') {\r\n                    callback(null);\r\n                }\r\n                else {\r\n                    var code = (status || 'error').toUpperCase();\r\n                    var message = code;\r\n                    if (errorReason)\r\n                        message += ': ' + errorReason;\r\n                    var error = new Error(message);\r\n                    error.code = code;\r\n                    callback(error);\r\n                }\r\n            });\r\n        }\r\n    };\r\n    Object.defineProperty(Repo.prototype, \"database\", {\r\n        get: function () {\r\n            return this.__database || (this.__database = new Database(this));\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return Repo;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node\r\n *\r\n * @constructor\r\n * @implements {NodeFilter}\r\n */\r\nvar RangedFilter = /** @class */ (function () {\r\n    /**\r\n     * @param {!QueryParams} params\r\n     */\r\n    function RangedFilter(params) {\r\n        this.indexedFilter_ = new IndexedFilter(params.getIndex());\r\n        this.index_ = params.getIndex();\r\n        this.startPost_ = RangedFilter.getStartPost_(params);\r\n        this.endPost_ = RangedFilter.getEndPost_(params);\r\n    }\r\n    /**\r\n     * @return {!NamedNode}\r\n     */\r\n    RangedFilter.prototype.getStartPost = function () {\r\n        return this.startPost_;\r\n    };\r\n    /**\r\n     * @return {!NamedNode}\r\n     */\r\n    RangedFilter.prototype.getEndPost = function () {\r\n        return this.endPost_;\r\n    };\r\n    /**\r\n     * @param {!NamedNode} node\r\n     * @return {boolean}\r\n     */\r\n    RangedFilter.prototype.matches = function (node) {\r\n        return (this.index_.compare(this.getStartPost(), node) <= 0 &&\r\n            this.index_.compare(node, this.getEndPost()) <= 0);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    RangedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n        if (!this.matches(new NamedNode(key, newChild))) {\r\n            newChild = ChildrenNode.EMPTY_NODE;\r\n        }\r\n        return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    RangedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {\r\n        if (newSnap.isLeafNode()) {\r\n            // Make sure we have a children node with the correct index, not a leaf node;\r\n            newSnap = ChildrenNode.EMPTY_NODE;\r\n        }\r\n        var filtered = newSnap.withIndex(this.index_);\r\n        // Don't support priorities on queries\r\n        filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n        var self = this;\r\n        newSnap.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n            if (!self.matches(new NamedNode(key, childNode))) {\r\n                filtered = filtered.updateImmediateChild(key, ChildrenNode.EMPTY_NODE);\r\n            }\r\n        });\r\n        return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    RangedFilter.prototype.updatePriority = function (oldSnap, newPriority) {\r\n        // Don't support priorities on queries\r\n        return oldSnap;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    RangedFilter.prototype.filtersNodes = function () {\r\n        return true;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    RangedFilter.prototype.getIndexedFilter = function () {\r\n        return this.indexedFilter_;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    RangedFilter.prototype.getIndex = function () {\r\n        return this.index_;\r\n    };\r\n    /**\r\n     * @param {!QueryParams} params\r\n     * @return {!NamedNode}\r\n     * @private\r\n     */\r\n    RangedFilter.getStartPost_ = function (params) {\r\n        if (params.hasStart()) {\r\n            var startName = params.getIndexStartName();\r\n            return params.getIndex().makePost(params.getIndexStartValue(), startName);\r\n        }\r\n        else {\r\n            return params.getIndex().minPost();\r\n        }\r\n    };\r\n    /**\r\n     * @param {!QueryParams} params\r\n     * @return {!NamedNode}\r\n     * @private\r\n     */\r\n    RangedFilter.getEndPost_ = function (params) {\r\n        if (params.hasEnd()) {\r\n            var endName = params.getIndexEndName();\r\n            return params.getIndex().makePost(params.getIndexEndValue(), endName);\r\n        }\r\n        else {\r\n            return params.getIndex().maxPost();\r\n        }\r\n    };\r\n    return RangedFilter;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible\r\n *\r\n * @constructor\r\n * @implements {NodeFilter}\r\n */\r\nvar LimitedFilter = /** @class */ (function () {\r\n    /**\r\n     * @param {!QueryParams} params\r\n     */\r\n    function LimitedFilter(params) {\r\n        this.rangedFilter_ = new RangedFilter(params);\r\n        this.index_ = params.getIndex();\r\n        this.limit_ = params.getLimit();\r\n        this.reverse_ = !params.isViewFromLeft();\r\n    }\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LimitedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n        if (!this.rangedFilter_.matches(new NamedNode(key, newChild))) {\r\n            newChild = ChildrenNode.EMPTY_NODE;\r\n        }\r\n        if (snap.getImmediateChild(key).equals(newChild)) {\r\n            // No change\r\n            return snap;\r\n        }\r\n        else if (snap.numChildren() < this.limit_) {\r\n            return this.rangedFilter_\r\n                .getIndexedFilter()\r\n                .updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n        }\r\n        else {\r\n            return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);\r\n        }\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LimitedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {\r\n        var filtered;\r\n        if (newSnap.isLeafNode() || newSnap.isEmpty()) {\r\n            // Make sure we have a children node with the correct index, not a leaf node;\r\n            filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n        }\r\n        else {\r\n            if (this.limit_ * 2 < newSnap.numChildren() &&\r\n                newSnap.isIndexed(this.index_)) {\r\n                // Easier to build up a snapshot, since what we're given has more than twice the elements we want\r\n                filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n                // anchor to the startPost, endPost, or last element as appropriate\r\n                var iterator = void 0;\r\n                if (this.reverse_) {\r\n                    iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);\r\n                }\r\n                else {\r\n                    iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);\r\n                }\r\n                var count = 0;\r\n                while (iterator.hasNext() && count < this.limit_) {\r\n                    var next = iterator.getNext();\r\n                    var inRange = void 0;\r\n                    if (this.reverse_) {\r\n                        inRange =\r\n                            this.index_.compare(this.rangedFilter_.getStartPost(), next) <= 0;\r\n                    }\r\n                    else {\r\n                        inRange =\r\n                            this.index_.compare(next, this.rangedFilter_.getEndPost()) <= 0;\r\n                    }\r\n                    if (inRange) {\r\n                        filtered = filtered.updateImmediateChild(next.name, next.node);\r\n                        count++;\r\n                    }\r\n                    else {\r\n                        // if we have reached the end post, we cannot keep adding elemments\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one\r\n                filtered = newSnap.withIndex(this.index_);\r\n                // Don't support priorities on queries\r\n                filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n                var startPost = void 0;\r\n                var endPost = void 0;\r\n                var cmp = void 0;\r\n                var iterator = void 0;\r\n                if (this.reverse_) {\r\n                    iterator = filtered.getReverseIterator(this.index_);\r\n                    startPost = this.rangedFilter_.getEndPost();\r\n                    endPost = this.rangedFilter_.getStartPost();\r\n                    var indexCompare_1 = this.index_.getCompare();\r\n                    cmp = function (a, b) { return indexCompare_1(b, a); };\r\n                }\r\n                else {\r\n                    iterator = filtered.getIterator(this.index_);\r\n                    startPost = this.rangedFilter_.getStartPost();\r\n                    endPost = this.rangedFilter_.getEndPost();\r\n                    cmp = this.index_.getCompare();\r\n                }\r\n                var count = 0;\r\n                var foundStartPost = false;\r\n                while (iterator.hasNext()) {\r\n                    var next = iterator.getNext();\r\n                    if (!foundStartPost && cmp(startPost, next) <= 0) {\r\n                        // start adding\r\n                        foundStartPost = true;\r\n                    }\r\n                    var inRange = foundStartPost && count < this.limit_ && cmp(next, endPost) <= 0;\r\n                    if (inRange) {\r\n                        count++;\r\n                    }\r\n                    else {\r\n                        filtered = filtered.updateImmediateChild(next.name, ChildrenNode.EMPTY_NODE);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return this.rangedFilter_\r\n            .getIndexedFilter()\r\n            .updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LimitedFilter.prototype.updatePriority = function (oldSnap, newPriority) {\r\n        // Don't support priorities on queries\r\n        return oldSnap;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LimitedFilter.prototype.filtersNodes = function () {\r\n        return true;\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LimitedFilter.prototype.getIndexedFilter = function () {\r\n        return this.rangedFilter_.getIndexedFilter();\r\n    };\r\n    /**\r\n     * @inheritDoc\r\n     */\r\n    LimitedFilter.prototype.getIndex = function () {\r\n        return this.index_;\r\n    };\r\n    /**\r\n     * @param {!Node} snap\r\n     * @param {string} childKey\r\n     * @param {!Node} childSnap\r\n     * @param {!CompleteChildSource} source\r\n     * @param {?ChildChangeAccumulator} changeAccumulator\r\n     * @return {!Node}\r\n     * @private\r\n     */\r\n    LimitedFilter.prototype.fullLimitUpdateChild_ = function (snap, childKey, childSnap, source, changeAccumulator) {\r\n        // TODO: rename all cache stuff etc to general snap terminology\r\n        var cmp;\r\n        if (this.reverse_) {\r\n            var indexCmp_1 = this.index_.getCompare();\r\n            cmp = function (a, b) { return indexCmp_1(b, a); };\r\n        }\r\n        else {\r\n            cmp = this.index_.getCompare();\r\n        }\r\n        var oldEventCache = snap;\r\n        util.assert(oldEventCache.numChildren() == this.limit_, '');\r\n        var newChildNamedNode = new NamedNode(childKey, childSnap);\r\n        var windowBoundary = this.reverse_\r\n            ? oldEventCache.getFirstChild(this.index_)\r\n            : oldEventCache.getLastChild(this.index_);\r\n        var inRange = this.rangedFilter_.matches(newChildNamedNode);\r\n        if (oldEventCache.hasChild(childKey)) {\r\n            var oldChildSnap = oldEventCache.getImmediateChild(childKey);\r\n            var nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);\r\n            while (nextChild != null &&\r\n                (nextChild.name == childKey || oldEventCache.hasChild(nextChild.name))) {\r\n                // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't\r\n                // been applied to the limited filter yet. Ignore this next child which will be updated later in\r\n                // the limited filter...\r\n                nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);\r\n            }\r\n            var compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);\r\n            var remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;\r\n            if (remainsInWindow) {\r\n                if (changeAccumulator != null) {\r\n                    changeAccumulator.trackChildChange(Change.childChangedChange(childKey, childSnap, oldChildSnap));\r\n                }\r\n                return oldEventCache.updateImmediateChild(childKey, childSnap);\r\n            }\r\n            else {\r\n                if (changeAccumulator != null) {\r\n                    changeAccumulator.trackChildChange(Change.childRemovedChange(childKey, oldChildSnap));\r\n                }\r\n                var newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode.EMPTY_NODE);\r\n                var nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);\r\n                if (nextChildInRange) {\r\n                    if (changeAccumulator != null) {\r\n                        changeAccumulator.trackChildChange(Change.childAddedChange(nextChild.name, nextChild.node));\r\n                    }\r\n                    return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);\r\n                }\r\n                else {\r\n                    return newEventCache;\r\n                }\r\n            }\r\n        }\r\n        else if (childSnap.isEmpty()) {\r\n            // we're deleting a node, but it was not in the window, so ignore it\r\n            return snap;\r\n        }\r\n        else if (inRange) {\r\n            if (cmp(windowBoundary, newChildNamedNode) >= 0) {\r\n                if (changeAccumulator != null) {\r\n                    changeAccumulator.trackChildChange(Change.childRemovedChange(windowBoundary.name, windowBoundary.node));\r\n                    changeAccumulator.trackChildChange(Change.childAddedChange(childKey, childSnap));\r\n                }\r\n                return oldEventCache\r\n                    .updateImmediateChild(childKey, childSnap)\r\n                    .updateImmediateChild(windowBoundary.name, ChildrenNode.EMPTY_NODE);\r\n            }\r\n            else {\r\n                return snap;\r\n            }\r\n        }\r\n        else {\r\n            return snap;\r\n        }\r\n    };\r\n    return LimitedFilter;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\r\n * range to be returned for a particular location. It is assumed that validation of parameters is done at the\r\n * user-facing API level, so it is not done here.\r\n * @constructor\r\n */\r\nvar QueryParams = /** @class */ (function () {\r\n    function QueryParams() {\r\n        this.limitSet_ = false;\r\n        this.startSet_ = false;\r\n        this.startNameSet_ = false;\r\n        this.endSet_ = false;\r\n        this.endNameSet_ = false;\r\n        this.limit_ = 0;\r\n        this.viewFrom_ = '';\r\n        this.indexStartValue_ = null;\r\n        this.indexStartName_ = '';\r\n        this.indexEndValue_ = null;\r\n        this.indexEndName_ = '';\r\n        this.index_ = PRIORITY_INDEX;\r\n    }\r\n    /**\r\n     * @return {boolean}\r\n     */\r\n    QueryParams.prototype.hasStart = function () {\r\n        return this.startSet_;\r\n    };\r\n    /**\r\n     * @return {boolean} True if it would return from left.\r\n     */\r\n    QueryParams.prototype.isViewFromLeft = function () {\r\n        if (this.viewFrom_ === '') {\r\n            // limit(), rather than limitToFirst or limitToLast was called.\r\n            // This means that only one of startSet_ and endSet_ is true. Use them\r\n            // to calculate which side of the view to anchor to. If neither is set,\r\n            // anchor to the end.\r\n            return this.startSet_;\r\n        }\r\n        else {\r\n            return (this.viewFrom_ === QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_LEFT);\r\n        }\r\n    };\r\n    /**\r\n     * Only valid to call if hasStart() returns true\r\n     * @return {*}\r\n     */\r\n    QueryParams.prototype.getIndexStartValue = function () {\r\n        util.assert(this.startSet_, 'Only valid if start has been set');\r\n        return this.indexStartValue_;\r\n    };\r\n    /**\r\n     * Only valid to call if hasStart() returns true.\r\n     * Returns the starting key name for the range defined by these query parameters\r\n     * @return {!string}\r\n     */\r\n    QueryParams.prototype.getIndexStartName = function () {\r\n        util.assert(this.startSet_, 'Only valid if start has been set');\r\n        if (this.startNameSet_) {\r\n            return this.indexStartName_;\r\n        }\r\n        else {\r\n            return MIN_NAME;\r\n        }\r\n    };\r\n    /**\r\n     * @return {boolean}\r\n     */\r\n    QueryParams.prototype.hasEnd = function () {\r\n        return this.endSet_;\r\n    };\r\n    /**\r\n     * Only valid to call if hasEnd() returns true.\r\n     * @return {*}\r\n     */\r\n    QueryParams.prototype.getIndexEndValue = function () {\r\n        util.assert(this.endSet_, 'Only valid if end has been set');\r\n        return this.indexEndValue_;\r\n    };\r\n    /**\r\n     * Only valid to call if hasEnd() returns true.\r\n     * Returns the end key name for the range defined by these query parameters\r\n     * @return {!string}\r\n     */\r\n    QueryParams.prototype.getIndexEndName = function () {\r\n        util.assert(this.endSet_, 'Only valid if end has been set');\r\n        if (this.endNameSet_) {\r\n            return this.indexEndName_;\r\n        }\r\n        else {\r\n            return MAX_NAME;\r\n        }\r\n    };\r\n    /**\r\n     * @return {boolean}\r\n     */\r\n    QueryParams.prototype.hasLimit = function () {\r\n        return this.limitSet_;\r\n    };\r\n    /**\r\n     * @return {boolean} True if a limit has been set and it has been explicitly anchored\r\n     */\r\n    QueryParams.prototype.hasAnchoredLimit = function () {\r\n        return this.limitSet_ && this.viewFrom_ !== '';\r\n    };\r\n    /**\r\n     * Only valid to call if hasLimit() returns true\r\n     * @return {!number}\r\n     */\r\n    QueryParams.prototype.getLimit = function () {\r\n        util.assert(this.limitSet_, 'Only valid if limit has been set');\r\n        return this.limit_;\r\n    };\r\n    /**\r\n     * @return {!Index}\r\n     */\r\n    QueryParams.prototype.getIndex = function () {\r\n        return this.index_;\r\n    };\r\n    /**\r\n     * @return {!QueryParams}\r\n     * @private\r\n     */\r\n    QueryParams.prototype.copy_ = function () {\r\n        var copy = new QueryParams();\r\n        copy.limitSet_ = this.limitSet_;\r\n        copy.limit_ = this.limit_;\r\n        copy.startSet_ = this.startSet_;\r\n        copy.indexStartValue_ = this.indexStartValue_;\r\n        copy.startNameSet_ = this.startNameSet_;\r\n        copy.indexStartName_ = this.indexStartName_;\r\n        copy.endSet_ = this.endSet_;\r\n        copy.indexEndValue_ = this.indexEndValue_;\r\n        copy.endNameSet_ = this.endNameSet_;\r\n        copy.indexEndName_ = this.indexEndName_;\r\n        copy.index_ = this.index_;\r\n        copy.viewFrom_ = this.viewFrom_;\r\n        return copy;\r\n    };\r\n    /**\r\n     * @param {!number} newLimit\r\n     * @return {!QueryParams}\r\n     */\r\n    QueryParams.prototype.limit = function (newLimit) {\r\n        var newParams = this.copy_();\r\n        newParams.limitSet_ = true;\r\n        newParams.limit_ = newLimit;\r\n        newParams.viewFrom_ = '';\r\n        return newParams;\r\n    };\r\n    /**\r\n     * @param {!number} newLimit\r\n     * @return {!QueryParams}\r\n     */\r\n    QueryParams.prototype.limitToFirst = function (newLimit) {\r\n        var newParams = this.copy_();\r\n        newParams.limitSet_ = true;\r\n        newParams.limit_ = newLimit;\r\n        newParams.viewFrom_ = QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_LEFT;\r\n        return newParams;\r\n    };\r\n    /**\r\n     * @param {!number} newLimit\r\n     * @return {!QueryParams}\r\n     */\r\n    QueryParams.prototype.limitToLast = function (newLimit) {\r\n        var newParams = this.copy_();\r\n        newParams.limitSet_ = true;\r\n        newParams.limit_ = newLimit;\r\n        newParams.viewFrom_ = QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_RIGHT;\r\n        return newParams;\r\n    };\r\n    /**\r\n     * @param {*} indexValue\r\n     * @param {?string=} key\r\n     * @return {!QueryParams}\r\n     */\r\n    QueryParams.prototype.startAt = function (indexValue, key) {\r\n        var newParams = this.copy_();\r\n        newParams.startSet_ = true;\r\n        if (indexValue === undefined) {\r\n            indexValue = null;\r\n        }\r\n        newParams.indexStartValue_ = indexValue;\r\n        if (key != null) {\r\n            newParams.startNameSet_ = true;\r\n            newParams.indexStartName_ = key;\r\n        }\r\n        else {\r\n            newParams.startNameSet_ = false;\r\n            newParams.indexStartName_ = '';\r\n        }\r\n        return newParams;\r\n    };\r\n    /**\r\n     * @param {*} indexValue\r\n     * @param {?string=} key\r\n     * @return {!QueryParams}\r\n     */\r\n    QueryParams.prototype.endAt = function (indexValue, key) {\r\n        var newParams = this.copy_();\r\n        newParams.endSet_ = true;\r\n        if (indexValue === undefined) {\r\n            indexValue = null;\r\n        }\r\n        newParams.indexEndValue_ = indexValue;\r\n        if (key !== undefined) {\r\n            newParams.endNameSet_ = true;\r\n            newParams.indexEndName_ = key;\r\n        }\r\n        else {\r\n            newParams.endNameSet_ = false;\r\n            newParams.indexEndName_ = '';\r\n        }\r\n        return newParams;\r\n    };\r\n    /**\r\n     * @param {!Index} index\r\n     * @return {!QueryParams}\r\n     */\r\n    QueryParams.prototype.orderBy = function (index) {\r\n        var newParams = this.copy_();\r\n        newParams.index_ = index;\r\n        return newParams;\r\n    };\r\n    /**\r\n     * @return {!Object}\r\n     */\r\n    QueryParams.prototype.getQueryObject = function () {\r\n        var WIRE_PROTOCOL_CONSTANTS = QueryParams.WIRE_PROTOCOL_CONSTANTS_;\r\n        var obj = {};\r\n        if (this.startSet_) {\r\n            obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_VALUE] = this.indexStartValue_;\r\n            if (this.startNameSet_) {\r\n                obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_NAME] = this.indexStartName_;\r\n            }\r\n        }\r\n        if (this.endSet_) {\r\n            obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_VALUE] = this.indexEndValue_;\r\n            if (this.endNameSet_) {\r\n                obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_NAME] = this.indexEndName_;\r\n            }\r\n        }\r\n        if (this.limitSet_) {\r\n            obj[WIRE_PROTOCOL_CONSTANTS.LIMIT] = this.limit_;\r\n            var viewFrom = this.viewFrom_;\r\n            if (viewFrom === '') {\r\n                if (this.isViewFromLeft()) {\r\n                    viewFrom = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT;\r\n                }\r\n                else {\r\n                    viewFrom = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT;\r\n                }\r\n            }\r\n            obj[WIRE_PROTOCOL_CONSTANTS.VIEW_FROM] = viewFrom;\r\n        }\r\n        // For now, priority index is the default, so we only specify if it's some other index\r\n        if (this.index_ !== PRIORITY_INDEX) {\r\n            obj[WIRE_PROTOCOL_CONSTANTS.INDEX] = this.index_.toString();\r\n        }\r\n        return obj;\r\n    };\r\n    /**\r\n     * @return {boolean}\r\n     */\r\n    QueryParams.prototype.loadsAllData = function () {\r\n        return !(this.startSet_ || this.endSet_ || this.limitSet_);\r\n    };\r\n    /**\r\n     * @return {boolean}\r\n     */\r\n    QueryParams.prototype.isDefault = function () {\r\n        return this.loadsAllData() && this.index_ == PRIORITY_INDEX;\r\n    };\r\n    /**\r\n     * @return {!NodeFilter}\r\n     */\r\n    QueryParams.prototype.getNodeFilter = function () {\r\n        if (this.loadsAllData()) {\r\n            return new IndexedFilter(this.getIndex());\r\n        }\r\n        else if (this.hasLimit()) {\r\n            return new LimitedFilter(this);\r\n        }\r\n        else {\r\n            return new RangedFilter(this);\r\n        }\r\n    };\r\n    /**\r\n     * Returns a set of REST query string parameters representing this query.\r\n     *\r\n     * @return {!Object.<string,*>} query string parameters\r\n     */\r\n    QueryParams.prototype.toRestQueryStringParameters = function () {\r\n        var REST_CONSTANTS = QueryParams.REST_QUERY_CONSTANTS_;\r\n        var qs = {};\r\n        if (this.isDefault()) {\r\n            return qs;\r\n        }\r\n        var orderBy;\r\n        if (this.index_ === PRIORITY_INDEX) {\r\n            orderBy = REST_CONSTANTS.PRIORITY_INDEX;\r\n        }\r\n        else if (this.index_ === VALUE_INDEX) {\r\n            orderBy = REST_CONSTANTS.VALUE_INDEX;\r\n        }\r\n        else if (this.index_ === KEY_INDEX) {\r\n            orderBy = REST_CONSTANTS.KEY_INDEX;\r\n        }\r\n        else {\r\n            util.assert(this.index_ instanceof PathIndex, 'Unrecognized index type!');\r\n            orderBy = this.index_.toString();\r\n        }\r\n        qs[REST_CONSTANTS.ORDER_BY] = util.stringify(orderBy);\r\n        if (this.startSet_) {\r\n            qs[REST_CONSTANTS.START_AT] = util.stringify(this.indexStartValue_);\r\n            if (this.startNameSet_) {\r\n                qs[REST_CONSTANTS.START_AT] += ',' + util.stringify(this.indexStartName_);\r\n            }\r\n        }\r\n        if (this.endSet_) {\r\n            qs[REST_CONSTANTS.END_AT] = util.stringify(this.indexEndValue_);\r\n            if (this.endNameSet_) {\r\n                qs[REST_CONSTANTS.END_AT] += ',' + util.stringify(this.indexEndName_);\r\n            }\r\n        }\r\n        if (this.limitSet_) {\r\n            if (this.isViewFromLeft()) {\r\n                qs[REST_CONSTANTS.LIMIT_TO_FIRST] = this.limit_;\r\n            }\r\n            else {\r\n                qs[REST_CONSTANTS.LIMIT_TO_LAST] = this.limit_;\r\n            }\r\n        }\r\n        return qs;\r\n    };\r\n    /**\r\n     * Wire Protocol Constants\r\n     * @const\r\n     * @enum {string}\r\n     * @private\r\n     */\r\n    QueryParams.WIRE_PROTOCOL_CONSTANTS_ = {\r\n        INDEX_START_VALUE: 'sp',\r\n        INDEX_START_NAME: 'sn',\r\n        INDEX_END_VALUE: 'ep',\r\n        INDEX_END_NAME: 'en',\r\n        LIMIT: 'l',\r\n        VIEW_FROM: 'vf',\r\n        VIEW_FROM_LEFT: 'l',\r\n        VIEW_FROM_RIGHT: 'r',\r\n        INDEX: 'i'\r\n    };\r\n    /**\r\n     * REST Query Constants\r\n     * @const\r\n     * @enum {string}\r\n     * @private\r\n     */\r\n    QueryParams.REST_QUERY_CONSTANTS_ = {\r\n        ORDER_BY: 'orderBy',\r\n        PRIORITY_INDEX: '$priority',\r\n        VALUE_INDEX: '$value',\r\n        KEY_INDEX: '$key',\r\n        START_AT: 'startAt',\r\n        END_AT: 'endAt',\r\n        LIMIT_TO_FIRST: 'limitToFirst',\r\n        LIMIT_TO_LAST: 'limitToLast'\r\n    };\r\n    /**\r\n     * Default, empty query parameters\r\n     * @type {!QueryParams}\r\n     * @const\r\n     */\r\n    QueryParams.DEFAULT = new QueryParams();\r\n    return QueryParams;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar Reference = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Reference, _super);\r\n    /**\r\n     * Call options:\r\n     *   new Reference(Repo, Path) or\r\n     *   new Reference(url: string, string|RepoManager)\r\n     *\r\n     * Externally - this is the firebase.database.Reference type.\r\n     *\r\n     * @param {!Repo} repo\r\n     * @param {(!Path)} path\r\n     * @extends {Query}\r\n     */\r\n    function Reference(repo, path) {\r\n        var _this = this;\r\n        if (!(repo instanceof Repo)) {\r\n            throw new Error('new Reference() no longer supported - use app.database().');\r\n        }\r\n        // call Query's constructor, passing in the repo and path.\r\n        _this = _super.call(this, repo, path, QueryParams.DEFAULT, false) || this;\r\n        return _this;\r\n    }\r\n    /** @return {?string} */\r\n    Reference.prototype.getKey = function () {\r\n        util.validateArgCount('Reference.key', 0, 0, arguments.length);\r\n        if (this.path.isEmpty())\r\n            return null;\r\n        else\r\n            return this.path.getBack();\r\n    };\r\n    /**\r\n     * @param {!(string|Path)} pathString\r\n     * @return {!Reference}\r\n     */\r\n    Reference.prototype.child = function (pathString) {\r\n        util.validateArgCount('Reference.child', 1, 1, arguments.length);\r\n        if (typeof pathString === 'number') {\r\n            pathString = String(pathString);\r\n        }\r\n        else if (!(pathString instanceof Path)) {\r\n            if (this.path.getFront() === null)\r\n                validateRootPathString('Reference.child', 1, pathString, false);\r\n            else\r\n                validatePathString('Reference.child', 1, pathString, false);\r\n        }\r\n        return new Reference(this.repo, this.path.child(pathString));\r\n    };\r\n    /** @return {?Reference} */\r\n    Reference.prototype.getParent = function () {\r\n        util.validateArgCount('Reference.parent', 0, 0, arguments.length);\r\n        var parentPath = this.path.parent();\r\n        return parentPath === null ? null : new Reference(this.repo, parentPath);\r\n    };\r\n    /** @return {!Reference} */\r\n    Reference.prototype.getRoot = function () {\r\n        util.validateArgCount('Reference.root', 0, 0, arguments.length);\r\n        var ref = this;\r\n        while (ref.getParent() !== null) {\r\n            ref = ref.getParent();\r\n        }\r\n        return ref;\r\n    };\r\n    /** @return {!Database} */\r\n    Reference.prototype.databaseProp = function () {\r\n        return this.repo.database;\r\n    };\r\n    /**\r\n     * @param {*} newVal\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!Promise}\r\n     */\r\n    Reference.prototype.set = function (newVal, onComplete) {\r\n        util.validateArgCount('Reference.set', 1, 2, arguments.length);\r\n        validateWritablePath('Reference.set', this.path);\r\n        validateFirebaseDataArg('Reference.set', 1, newVal, this.path, false);\r\n        util.validateCallback('Reference.set', 2, onComplete, true);\r\n        var deferred = new util.Deferred();\r\n        this.repo.setWithPriority(this.path, newVal, \r\n        /*priority=*/ null, deferred.wrapCallback(onComplete));\r\n        return deferred.promise;\r\n    };\r\n    /**\r\n     * @param {!Object} objectToMerge\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!Promise}\r\n     */\r\n    Reference.prototype.update = function (objectToMerge, onComplete) {\r\n        util.validateArgCount('Reference.update', 1, 2, arguments.length);\r\n        validateWritablePath('Reference.update', this.path);\r\n        if (Array.isArray(objectToMerge)) {\r\n            var newObjectToMerge = {};\r\n            for (var i = 0; i < objectToMerge.length; ++i) {\r\n                newObjectToMerge['' + i] = objectToMerge[i];\r\n            }\r\n            objectToMerge = newObjectToMerge;\r\n            warn('Passing an Array to Firebase.update() is deprecated. ' +\r\n                'Use set() if you want to overwrite the existing data, or ' +\r\n                'an Object with integer keys if you really do want to ' +\r\n                'only update some of the children.');\r\n        }\r\n        validateFirebaseMergeDataArg('Reference.update', 1, objectToMerge, this.path, false);\r\n        util.validateCallback('Reference.update', 2, onComplete, true);\r\n        var deferred = new util.Deferred();\r\n        this.repo.update(this.path, objectToMerge, deferred.wrapCallback(onComplete));\r\n        return deferred.promise;\r\n    };\r\n    /**\r\n     * @param {*} newVal\r\n     * @param {string|number|null} newPriority\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!Promise}\r\n     */\r\n    Reference.prototype.setWithPriority = function (newVal, newPriority, onComplete) {\r\n        util.validateArgCount('Reference.setWithPriority', 2, 3, arguments.length);\r\n        validateWritablePath('Reference.setWithPriority', this.path);\r\n        validateFirebaseDataArg('Reference.setWithPriority', 1, newVal, this.path, false);\r\n        validatePriority('Reference.setWithPriority', 2, newPriority, false);\r\n        util.validateCallback('Reference.setWithPriority', 3, onComplete, true);\r\n        if (this.getKey() === '.length' || this.getKey() === '.keys')\r\n            throw 'Reference.setWithPriority failed: ' +\r\n                this.getKey() +\r\n                ' is a read-only object.';\r\n        var deferred = new util.Deferred();\r\n        this.repo.setWithPriority(this.path, newVal, newPriority, deferred.wrapCallback(onComplete));\r\n        return deferred.promise;\r\n    };\r\n    /**\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!Promise}\r\n     */\r\n    Reference.prototype.remove = function (onComplete) {\r\n        util.validateArgCount('Reference.remove', 0, 1, arguments.length);\r\n        validateWritablePath('Reference.remove', this.path);\r\n        util.validateCallback('Reference.remove', 1, onComplete, true);\r\n        return this.set(null, onComplete);\r\n    };\r\n    /**\r\n     * @param {function(*):*} transactionUpdate\r\n     * @param {(function(?Error, boolean, ?DataSnapshot))=} onComplete\r\n     * @param {boolean=} applyLocally\r\n     * @return {!Promise}\r\n     */\r\n    Reference.prototype.transaction = function (transactionUpdate, onComplete, applyLocally) {\r\n        util.validateArgCount('Reference.transaction', 1, 3, arguments.length);\r\n        validateWritablePath('Reference.transaction', this.path);\r\n        util.validateCallback('Reference.transaction', 1, transactionUpdate, false);\r\n        util.validateCallback('Reference.transaction', 2, onComplete, true);\r\n        // NOTE: applyLocally is an internal-only option for now.  We need to decide if we want to keep it and how\r\n        // to expose it.\r\n        validateBoolean('Reference.transaction', 3, applyLocally, true);\r\n        if (this.getKey() === '.length' || this.getKey() === '.keys')\r\n            throw 'Reference.transaction failed: ' +\r\n                this.getKey() +\r\n                ' is a read-only object.';\r\n        if (applyLocally === undefined)\r\n            applyLocally = true;\r\n        var deferred = new util.Deferred();\r\n        if (typeof onComplete === 'function') {\r\n            deferred.promise.catch(function () { });\r\n        }\r\n        var promiseComplete = function (error, committed, snapshot) {\r\n            if (error) {\r\n                deferred.reject(error);\r\n            }\r\n            else {\r\n                deferred.resolve(new TransactionResult(committed, snapshot));\r\n            }\r\n            if (typeof onComplete === 'function') {\r\n                onComplete(error, committed, snapshot);\r\n            }\r\n        };\r\n        this.repo.startTransaction(this.path, transactionUpdate, promiseComplete, applyLocally);\r\n        return deferred.promise;\r\n    };\r\n    /**\r\n     * @param {string|number|null} priority\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!Promise}\r\n     */\r\n    Reference.prototype.setPriority = function (priority, onComplete) {\r\n        util.validateArgCount('Reference.setPriority', 1, 2, arguments.length);\r\n        validateWritablePath('Reference.setPriority', this.path);\r\n        validatePriority('Reference.setPriority', 1, priority, false);\r\n        util.validateCallback('Reference.setPriority', 2, onComplete, true);\r\n        var deferred = new util.Deferred();\r\n        this.repo.setWithPriority(this.path.child('.priority'), priority, null, deferred.wrapCallback(onComplete));\r\n        return deferred.promise;\r\n    };\r\n    /**\r\n     * @param {*=} value\r\n     * @param {function(?Error)=} onComplete\r\n     * @return {!Reference}\r\n     */\r\n    Reference.prototype.push = function (value, onComplete) {\r\n        util.validateArgCount('Reference.push', 0, 2, arguments.length);\r\n        validateWritablePath('Reference.push', this.path);\r\n        validateFirebaseDataArg('Reference.push', 1, value, this.path, true);\r\n        util.validateCallback('Reference.push', 2, onComplete, true);\r\n        var now = this.repo.serverTime();\r\n        var name = nextPushId(now);\r\n        // push() returns a ThennableReference whose promise is fulfilled with a regular Reference.\r\n        // We use child() to create handles to two different references. The first is turned into a\r\n        // ThennableReference below by adding then() and catch() methods and is used as the\r\n        // return value of push(). The second remains a regular Reference and is used as the fulfilled\r\n        // value of the first ThennableReference.\r\n        var thennablePushRef = this.child(name);\r\n        var pushRef = this.child(name);\r\n        var promise;\r\n        if (value != null) {\r\n            promise = thennablePushRef.set(value, onComplete).then(function () { return pushRef; });\r\n        }\r\n        else {\r\n            promise = Promise.resolve(pushRef);\r\n        }\r\n        thennablePushRef.then = promise.then.bind(promise);\r\n        thennablePushRef.catch = promise.then.bind(promise, undefined);\r\n        if (typeof onComplete === 'function') {\r\n            promise.catch(function () { });\r\n        }\r\n        return thennablePushRef;\r\n    };\r\n    /**\r\n     * @return {!OnDisconnect}\r\n     */\r\n    Reference.prototype.onDisconnect = function () {\r\n        validateWritablePath('Reference.onDisconnect', this.path);\r\n        return new OnDisconnect(this.repo, this.path);\r\n    };\r\n    Object.defineProperty(Reference.prototype, \"database\", {\r\n        get: function () {\r\n            return this.databaseProp();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Reference.prototype, \"key\", {\r\n        get: function () {\r\n            return this.getKey();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Reference.prototype, \"parent\", {\r\n        get: function () {\r\n            return this.getParent();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Reference.prototype, \"root\", {\r\n        get: function () {\r\n            return this.getRoot();\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    return Reference;\r\n}(Query));\r\n/**\r\n * Define reference constructor in various modules\r\n *\r\n * We are doing this here to avoid several circular\r\n * dependency issues\r\n */\r\nQuery.__referenceConstructor = Reference;\r\nSyncPoint.__referenceConstructor = Reference;\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Node in a Tree.\r\n */\r\nvar TreeNode = /** @class */ (function () {\r\n    function TreeNode() {\r\n        // TODO: Consider making accessors that create children and value lazily or\r\n        // separate Internal / Leaf 'types'.\r\n        this.children = {};\r\n        this.childCount = 0;\r\n        this.value = null;\r\n    }\r\n    return TreeNode;\r\n}());\r\n/**\r\n * A light-weight tree, traversable by path.  Nodes can have both values and children.\r\n * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\r\n * children.\r\n */\r\nvar Tree = /** @class */ (function () {\r\n    /**\r\n     * @template T\r\n     * @param {string=} name_ Optional name of the node.\r\n     * @param {Tree=} parent_ Optional parent node.\r\n     * @param {TreeNode=} node_ Optional node to wrap.\r\n     */\r\n    function Tree(name_, parent_, node_) {\r\n        if (name_ === void 0) { name_ = ''; }\r\n        if (parent_ === void 0) { parent_ = null; }\r\n        if (node_ === void 0) { node_ = new TreeNode(); }\r\n        this.name_ = name_;\r\n        this.parent_ = parent_;\r\n        this.node_ = node_;\r\n    }\r\n    /**\r\n     * Returns a sub-Tree for the given path.\r\n     *\r\n     * @param {!(string|Path)} pathObj Path to look up.\r\n     * @return {!Tree.<T>} Tree for path.\r\n     */\r\n    Tree.prototype.subTree = function (pathObj) {\r\n        // TODO: Require pathObj to be Path?\r\n        var path = pathObj instanceof Path ? pathObj : new Path(pathObj);\r\n        var child = this, next;\r\n        while ((next = path.getFront()) !== null) {\r\n            var childNode = util.safeGet(child.node_.children, next) || new TreeNode();\r\n            child = new Tree(next, child, childNode);\r\n            path = path.popFront();\r\n        }\r\n        return child;\r\n    };\r\n    /**\r\n     * Returns the data associated with this tree node.\r\n     *\r\n     * @return {?T} The data or null if no data exists.\r\n     */\r\n    Tree.prototype.getValue = function () {\r\n        return this.node_.value;\r\n    };\r\n    /**\r\n     * Sets data to this tree node.\r\n     *\r\n     * @param {!T} value Value to set.\r\n     */\r\n    Tree.prototype.setValue = function (value) {\r\n        util.assert(typeof value !== 'undefined', 'Cannot set value to undefined');\r\n        this.node_.value = value;\r\n        this.updateParents_();\r\n    };\r\n    /**\r\n     * Clears the contents of the tree node (its value and all children).\r\n     */\r\n    Tree.prototype.clear = function () {\r\n        this.node_.value = null;\r\n        this.node_.children = {};\r\n        this.node_.childCount = 0;\r\n        this.updateParents_();\r\n    };\r\n    /**\r\n     * @return {boolean} Whether the tree has any children.\r\n     */\r\n    Tree.prototype.hasChildren = function () {\r\n        return this.node_.childCount > 0;\r\n    };\r\n    /**\r\n     * @return {boolean} Whether the tree is empty (no value or children).\r\n     */\r\n    Tree.prototype.isEmpty = function () {\r\n        return this.getValue() === null && !this.hasChildren();\r\n    };\r\n    /**\r\n     * Calls action for each child of this tree node.\r\n     *\r\n     * @param {function(!Tree.<T>)} action Action to be called for each child.\r\n     */\r\n    Tree.prototype.forEachChild = function (action) {\r\n        var _this = this;\r\n        util.forEach(this.node_.children, function (child, childTree) {\r\n            action(new Tree(child, _this, childTree));\r\n        });\r\n    };\r\n    /**\r\n     * Does a depth-first traversal of this node's descendants, calling action for each one.\r\n     *\r\n     * @param {function(!Tree.<T>)} action Action to be called for each child.\r\n     * @param {boolean=} includeSelf Whether to call action on this node as well. Defaults to\r\n     *   false.\r\n     * @param {boolean=} childrenFirst Whether to call action on children before calling it on\r\n     *   parent.\r\n     */\r\n    Tree.prototype.forEachDescendant = function (action, includeSelf, childrenFirst) {\r\n        if (includeSelf && !childrenFirst)\r\n            action(this);\r\n        this.forEachChild(function (child) {\r\n            child.forEachDescendant(action, /*includeSelf=*/ true, childrenFirst);\r\n        });\r\n        if (includeSelf && childrenFirst)\r\n            action(this);\r\n    };\r\n    /**\r\n     * Calls action on each ancestor node.\r\n     *\r\n     * @param {function(!Tree.<T>)} action Action to be called on each parent; return\r\n     *   true to abort.\r\n     * @param {boolean=} includeSelf Whether to call action on this node as well.\r\n     * @return {boolean} true if the action callback returned true.\r\n     */\r\n    Tree.prototype.forEachAncestor = function (action, includeSelf) {\r\n        var node = includeSelf ? this : this.parent();\r\n        while (node !== null) {\r\n            if (action(node)) {\r\n                return true;\r\n            }\r\n            node = node.parent();\r\n        }\r\n        return false;\r\n    };\r\n    /**\r\n     * Does a depth-first traversal of this node's descendants.  When a descendant with a value\r\n     * is found, action is called on it and traversal does not continue inside the node.\r\n     * Action is *not* called on this node.\r\n     *\r\n     * @param {function(!Tree.<T>)} action Action to be called for each child.\r\n     */\r\n    Tree.prototype.forEachImmediateDescendantWithValue = function (action) {\r\n        this.forEachChild(function (child) {\r\n            if (child.getValue() !== null)\r\n                action(child);\r\n            else\r\n                child.forEachImmediateDescendantWithValue(action);\r\n        });\r\n    };\r\n    /**\r\n     * @return {!Path} The path of this tree node, as a Path.\r\n     */\r\n    Tree.prototype.path = function () {\r\n        return new Path(this.parent_ === null\r\n            ? this.name_\r\n            : this.parent_.path() + '/' + this.name_);\r\n    };\r\n    /**\r\n     * @return {string} The name of the tree node.\r\n     */\r\n    Tree.prototype.name = function () {\r\n        return this.name_;\r\n    };\r\n    /**\r\n     * @return {?Tree} The parent tree node, or null if this is the root of the tree.\r\n     */\r\n    Tree.prototype.parent = function () {\r\n        return this.parent_;\r\n    };\r\n    /**\r\n     * Adds or removes this child from its parent based on whether it's empty or not.\r\n     *\r\n     * @private\r\n     */\r\n    Tree.prototype.updateParents_ = function () {\r\n        if (this.parent_ !== null)\r\n            this.parent_.updateChild_(this.name_, this);\r\n    };\r\n    /**\r\n     * Adds or removes the passed child to this tree node, depending on whether it's empty.\r\n     *\r\n     * @param {string} childName The name of the child to update.\r\n     * @param {!Tree.<T>} child The child to update.\r\n     * @private\r\n     */\r\n    Tree.prototype.updateChild_ = function (childName, child) {\r\n        var childEmpty = child.isEmpty();\r\n        var childExists = util.contains(this.node_.children, childName);\r\n        if (childEmpty && childExists) {\r\n            delete this.node_.children[childName];\r\n            this.node_.childCount--;\r\n            this.updateParents_();\r\n        }\r\n        else if (!childEmpty && !childExists) {\r\n            this.node_.children[childName] = child.node_;\r\n            this.node_.childCount++;\r\n            this.updateParents_();\r\n        }\r\n    };\r\n    return Tree;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// TODO: This is pretty messy.  Ideally, a lot of this would move into FirebaseData, or a transaction-specific\r\n// component used by FirebaseData, but it has ties to user callbacks (transaction update and onComplete) as well\r\n// as the realtime connection (to send transactions to the server).  So that all needs to be decoupled first.\r\n// For now it's part of Repo, but in its own file.\r\n/**\r\n * @enum {number}\r\n */\r\nvar TransactionStatus;\r\n(function (TransactionStatus) {\r\n    // We've run the transaction and updated transactionResultData_ with the result, but it isn't currently sent to the\r\n    // server. A transaction will go from RUN -> SENT -> RUN if it comes back from the server as rejected due to\r\n    // mismatched hash.\r\n    TransactionStatus[TransactionStatus[\"RUN\"] = 0] = \"RUN\";\r\n    // We've run the transaction and sent it to the server and it's currently outstanding (hasn't come back as accepted\r\n    // or rejected yet).\r\n    TransactionStatus[TransactionStatus[\"SENT\"] = 1] = \"SENT\";\r\n    // Temporary state used to mark completed transactions (whether successful or aborted).  The transaction will be\r\n    // removed when we get a chance to prune completed ones.\r\n    TransactionStatus[TransactionStatus[\"COMPLETED\"] = 2] = \"COMPLETED\";\r\n    // Used when an already-sent transaction needs to be aborted (e.g. due to a conflicting set() call that was made).\r\n    // If it comes back as unsuccessful, we'll abort it.\r\n    TransactionStatus[TransactionStatus[\"SENT_NEEDS_ABORT\"] = 3] = \"SENT_NEEDS_ABORT\";\r\n    // Temporary state used to mark transactions that need to be aborted.\r\n    TransactionStatus[TransactionStatus[\"NEEDS_ABORT\"] = 4] = \"NEEDS_ABORT\";\r\n})(TransactionStatus || (TransactionStatus = {}));\r\n/**\r\n * If a transaction does not succeed after 25 retries, we abort it.  Among other things this ensure that if there's\r\n * ever a bug causing a mismatch between client / server hashes for some data, we won't retry indefinitely.\r\n * @type {number}\r\n * @const\r\n * @private\r\n */\r\nRepo.MAX_TRANSACTION_RETRIES_ = 25;\r\n/**\r\n * Setup the transaction data structures\r\n * @private\r\n */\r\nRepo.prototype.transactions_init_ = function () {\r\n    /**\r\n     * Stores queues of outstanding transactions for Firebase locations.\r\n     *\r\n     * @type {!Tree.<Array.<!Transaction>>}\r\n     * @private\r\n     */\r\n    this.transactionQueueTree_ = new Tree();\r\n};\r\n/**\r\n * Creates a new transaction, adds it to the transactions we're tracking, and sends it to the server if possible.\r\n *\r\n * @param {!Path} path Path at which to do transaction.\r\n * @param {function(*):*} transactionUpdate Update callback.\r\n * @param {?function(?Error, boolean, ?DataSnapshot)} onComplete Completion callback.\r\n * @param {boolean} applyLocally Whether or not to make intermediate results visible\r\n */\r\nRepo.prototype.startTransaction = function (path, transactionUpdate, onComplete, applyLocally) {\r\n    this.log_('transaction on ' + path);\r\n    // Add a watch to make sure we get server updates.\r\n    var valueCallback = function () { };\r\n    var watchRef = new Reference(this, path);\r\n    watchRef.on('value', valueCallback);\r\n    var unwatcher = function () {\r\n        watchRef.off('value', valueCallback);\r\n    };\r\n    // Initialize transaction.\r\n    var transaction = {\r\n        path: path,\r\n        update: transactionUpdate,\r\n        onComplete: onComplete,\r\n        // One of TransactionStatus enums.\r\n        status: null,\r\n        // Used when combining transactions at different locations to figure out which one goes first.\r\n        order: LUIDGenerator(),\r\n        // Whether to raise local events for this transaction.\r\n        applyLocally: applyLocally,\r\n        // Count of how many times we've retried the transaction.\r\n        retryCount: 0,\r\n        // Function to call to clean up our .on() listener.\r\n        unwatcher: unwatcher,\r\n        // Stores why a transaction was aborted.\r\n        abortReason: null,\r\n        currentWriteId: null,\r\n        currentInputSnapshot: null,\r\n        currentOutputSnapshotRaw: null,\r\n        currentOutputSnapshotResolved: null\r\n    };\r\n    // Run transaction initially.\r\n    var currentState = this.getLatestState_(path);\r\n    transaction.currentInputSnapshot = currentState;\r\n    var newVal = transaction.update(currentState.val());\r\n    if (newVal === undefined) {\r\n        // Abort transaction.\r\n        transaction.unwatcher();\r\n        transaction.currentOutputSnapshotRaw = null;\r\n        transaction.currentOutputSnapshotResolved = null;\r\n        if (transaction.onComplete) {\r\n            // We just set the input snapshot, so this cast should be safe\r\n            var snapshot = new DataSnapshot(transaction.currentInputSnapshot, new Reference(this, transaction.path), PRIORITY_INDEX);\r\n            transaction.onComplete(null, false, snapshot);\r\n        }\r\n    }\r\n    else {\r\n        validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path);\r\n        // Mark as run and add to our queue.\r\n        transaction.status = TransactionStatus.RUN;\r\n        var queueNode = this.transactionQueueTree_.subTree(path);\r\n        var nodeQueue = queueNode.getValue() || [];\r\n        nodeQueue.push(transaction);\r\n        queueNode.setValue(nodeQueue);\r\n        // Update visibleData and raise events\r\n        // Note: We intentionally raise events after updating all of our transaction state, since the user could\r\n        // start new transactions from the event callbacks.\r\n        var priorityForNode = void 0;\r\n        if (typeof newVal === 'object' &&\r\n            newVal !== null &&\r\n            util.contains(newVal, '.priority')) {\r\n            priorityForNode = util.safeGet(newVal, '.priority');\r\n            util.assert(isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' +\r\n                'Priority must be a valid string, finite number, server value, or null.');\r\n        }\r\n        else {\r\n            var currentNode = this.serverSyncTree_.calcCompleteEventCache(path) ||\r\n                ChildrenNode.EMPTY_NODE;\r\n            priorityForNode = currentNode.getPriority().val();\r\n        }\r\n        priorityForNode /** @type {null|number|string} */ = priorityForNode;\r\n        var serverValues = this.generateServerValues();\r\n        var newNodeUnresolved = nodeFromJSON$1(newVal, priorityForNode);\r\n        var newNode = resolveDeferredValueSnapshot(newNodeUnresolved, serverValues);\r\n        transaction.currentOutputSnapshotRaw = newNodeUnresolved;\r\n        transaction.currentOutputSnapshotResolved = newNode;\r\n        transaction.currentWriteId = this.getNextWriteId_();\r\n        var events = this.serverSyncTree_.applyUserOverwrite(path, newNode, transaction.currentWriteId, transaction.applyLocally);\r\n        this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n        this.sendReadyTransactions_();\r\n    }\r\n};\r\n/**\r\n * @param {!Path} path\r\n * @param {Array.<number>=} excludeSets A specific set to exclude\r\n * @return {Node}\r\n * @private\r\n */\r\nRepo.prototype.getLatestState_ = function (path, excludeSets) {\r\n    return (this.serverSyncTree_.calcCompleteEventCache(path, excludeSets) ||\r\n        ChildrenNode.EMPTY_NODE);\r\n};\r\n/**\r\n * Sends any already-run transactions that aren't waiting for outstanding transactions to\r\n * complete.\r\n *\r\n * Externally it's called with no arguments, but it calls itself recursively with a particular\r\n * transactionQueueTree node to recurse through the tree.\r\n *\r\n * @param {Tree.<Array.<Transaction>>=} node  transactionQueueTree node to start at.\r\n * @private\r\n */\r\nRepo.prototype.sendReadyTransactions_ = function (node) {\r\n    var _this = this;\r\n    if (node === void 0) { node = this.transactionQueueTree_; }\r\n    // Before recursing, make sure any completed transactions are removed.\r\n    if (!node) {\r\n        this.pruneCompletedTransactionsBelowNode_(node);\r\n    }\r\n    if (node.getValue() !== null) {\r\n        var queue = this.buildTransactionQueue_(node);\r\n        util.assert(queue.length > 0, 'Sending zero length transaction queue');\r\n        var allRun = queue.every(function (transaction) { return transaction.status === TransactionStatus.RUN; });\r\n        // If they're all run (and not sent), we can send them.  Else, we must wait.\r\n        if (allRun) {\r\n            this.sendTransactionQueue_(node.path(), queue);\r\n        }\r\n    }\r\n    else if (node.hasChildren()) {\r\n        node.forEachChild(function (childNode) {\r\n            _this.sendReadyTransactions_(childNode);\r\n        });\r\n    }\r\n};\r\n/**\r\n * Given a list of run transactions, send them to the server and then handle the result (success or failure).\r\n *\r\n * @param {!Path} path The location of the queue.\r\n * @param {!Array.<Transaction>} queue Queue of transactions under the specified location.\r\n * @private\r\n */\r\nRepo.prototype.sendTransactionQueue_ = function (path, queue) {\r\n    var _this = this;\r\n    // Mark transactions as sent and increment retry count!\r\n    var setsToIgnore = queue.map(function (txn) {\r\n        return txn.currentWriteId;\r\n    });\r\n    var latestState = this.getLatestState_(path, setsToIgnore);\r\n    var snapToSend = latestState;\r\n    var latestHash = latestState.hash();\r\n    for (var i = 0; i < queue.length; i++) {\r\n        var txn = queue[i];\r\n        util.assert(txn.status === TransactionStatus.RUN, 'tryToSendTransactionQueue_: items in queue should all be run.');\r\n        txn.status = TransactionStatus.SENT;\r\n        txn.retryCount++;\r\n        var relativePath = Path.relativePath(path, txn.path);\r\n        // If we've gotten to this point, the output snapshot must be defined.\r\n        snapToSend = snapToSend.updateChild(relativePath /**@type {!Node} */, txn.currentOutputSnapshotRaw);\r\n    }\r\n    var dataToSend = snapToSend.val(true);\r\n    var pathToSend = path;\r\n    // Send the put.\r\n    this.server_.put(pathToSend.toString(), dataToSend, function (status) {\r\n        _this.log_('transaction put response', {\r\n            path: pathToSend.toString(),\r\n            status: status\r\n        });\r\n        var events = [];\r\n        if (status === 'ok') {\r\n            // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\r\n            // the callback could trigger more transactions or sets.\r\n            var callbacks = [];\r\n            for (var i = 0; i < queue.length; i++) {\r\n                queue[i].status = TransactionStatus.COMPLETED;\r\n                events = events.concat(_this.serverSyncTree_.ackUserWrite(queue[i].currentWriteId));\r\n                if (queue[i].onComplete) {\r\n                    // We never unset the output snapshot, and given that this transaction is complete, it should be set\r\n                    var node = queue[i].currentOutputSnapshotResolved;\r\n                    var ref = new Reference(_this, queue[i].path);\r\n                    var snapshot = new DataSnapshot(node, ref, PRIORITY_INDEX);\r\n                    callbacks.push(queue[i].onComplete.bind(null, null, true, snapshot));\r\n                }\r\n                queue[i].unwatcher();\r\n            }\r\n            // Now remove the completed transactions.\r\n            _this.pruneCompletedTransactionsBelowNode_(_this.transactionQueueTree_.subTree(path));\r\n            // There may be pending transactions that we can now send.\r\n            _this.sendReadyTransactions_();\r\n            _this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n            // Finally, trigger onComplete callbacks.\r\n            for (var i = 0; i < callbacks.length; i++) {\r\n                exceptionGuard(callbacks[i]);\r\n            }\r\n        }\r\n        else {\r\n            // transactions are no longer sent.  Update their status appropriately.\r\n            if (status === 'datastale') {\r\n                for (var i = 0; i < queue.length; i++) {\r\n                    if (queue[i].status === TransactionStatus.SENT_NEEDS_ABORT)\r\n                        queue[i].status = TransactionStatus.NEEDS_ABORT;\r\n                    else\r\n                        queue[i].status = TransactionStatus.RUN;\r\n                }\r\n            }\r\n            else {\r\n                warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);\r\n                for (var i = 0; i < queue.length; i++) {\r\n                    queue[i].status = TransactionStatus.NEEDS_ABORT;\r\n                    queue[i].abortReason = status;\r\n                }\r\n            }\r\n            _this.rerunTransactions_(path);\r\n        }\r\n    }, latestHash);\r\n};\r\n/**\r\n * Finds all transactions dependent on the data at changedPath and reruns them.\r\n *\r\n * Should be called any time cached data changes.\r\n *\r\n * Return the highest path that was affected by rerunning transactions.  This is the path at which events need to\r\n * be raised for.\r\n *\r\n * @param {!Path} changedPath The path in mergedData that changed.\r\n * @return {!Path} The rootmost path that was affected by rerunning transactions.\r\n * @private\r\n */\r\nRepo.prototype.rerunTransactions_ = function (changedPath) {\r\n    var rootMostTransactionNode = this.getAncestorTransactionNode_(changedPath);\r\n    var path = rootMostTransactionNode.path();\r\n    var queue = this.buildTransactionQueue_(rootMostTransactionNode);\r\n    this.rerunTransactionQueue_(queue, path);\r\n    return path;\r\n};\r\n/**\r\n * Does all the work of rerunning transactions (as well as cleans up aborted transactions and whatnot).\r\n *\r\n * @param {Array.<Transaction>} queue The queue of transactions to run.\r\n * @param {!Path} path The path the queue is for.\r\n * @private\r\n */\r\nRepo.prototype.rerunTransactionQueue_ = function (queue, path) {\r\n    if (queue.length === 0) {\r\n        return; // Nothing to do!\r\n    }\r\n    // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\r\n    // the callback could trigger more transactions or sets.\r\n    var callbacks = [];\r\n    var events = [];\r\n    // Ignore all of the sets we're going to re-run.\r\n    var txnsToRerun = queue.filter(function (q) {\r\n        return q.status === TransactionStatus.RUN;\r\n    });\r\n    var setsToIgnore = txnsToRerun.map(function (q) {\r\n        return q.currentWriteId;\r\n    });\r\n    for (var i = 0; i < queue.length; i++) {\r\n        var transaction = queue[i];\r\n        var relativePath = Path.relativePath(path, transaction.path);\r\n        var abortTransaction = false, abortReason = void 0;\r\n        util.assert(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');\r\n        if (transaction.status === TransactionStatus.NEEDS_ABORT) {\r\n            abortTransaction = true;\r\n            abortReason = transaction.abortReason;\r\n            events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\r\n        }\r\n        else if (transaction.status === TransactionStatus.RUN) {\r\n            if (transaction.retryCount >= Repo.MAX_TRANSACTION_RETRIES_) {\r\n                abortTransaction = true;\r\n                abortReason = 'maxretry';\r\n                events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\r\n            }\r\n            else {\r\n                // This code reruns a transaction\r\n                var currentNode = this.getLatestState_(transaction.path, setsToIgnore);\r\n                transaction.currentInputSnapshot = currentNode;\r\n                var newData = queue[i].update(currentNode.val());\r\n                if (newData !== undefined) {\r\n                    validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);\r\n                    var newDataNode = nodeFromJSON$1(newData);\r\n                    var hasExplicitPriority = typeof newData === 'object' &&\r\n                        newData != null &&\r\n                        util.contains(newData, '.priority');\r\n                    if (!hasExplicitPriority) {\r\n                        // Keep the old priority if there wasn't a priority explicitly specified.\r\n                        newDataNode = newDataNode.updatePriority(currentNode.getPriority());\r\n                    }\r\n                    var oldWriteId = transaction.currentWriteId;\r\n                    var serverValues = this.generateServerValues();\r\n                    var newNodeResolved = resolveDeferredValueSnapshot(newDataNode, serverValues);\r\n                    transaction.currentOutputSnapshotRaw = newDataNode;\r\n                    transaction.currentOutputSnapshotResolved = newNodeResolved;\r\n                    transaction.currentWriteId = this.getNextWriteId_();\r\n                    // Mutates setsToIgnore in place\r\n                    setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\r\n                    events = events.concat(this.serverSyncTree_.applyUserOverwrite(transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));\r\n                    events = events.concat(this.serverSyncTree_.ackUserWrite(oldWriteId, true));\r\n                }\r\n                else {\r\n                    abortTransaction = true;\r\n                    abortReason = 'nodata';\r\n                    events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\r\n                }\r\n            }\r\n        }\r\n        this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n        events = [];\r\n        if (abortTransaction) {\r\n            // Abort.\r\n            queue[i].status = TransactionStatus.COMPLETED;\r\n            // Removing a listener can trigger pruning which can muck with mergedData/visibleData (as it prunes data).\r\n            // So defer the unwatcher until we're done.\r\n            (function (unwatcher) {\r\n                setTimeout(unwatcher, Math.floor(0));\r\n            })(queue[i].unwatcher);\r\n            if (queue[i].onComplete) {\r\n                if (abortReason === 'nodata') {\r\n                    var ref = new Reference(this, queue[i].path);\r\n                    // We set this field immediately, so it's safe to cast to an actual snapshot\r\n                    var lastInput /** @type {!Node} */ = queue[i].currentInputSnapshot;\r\n                    var snapshot = new DataSnapshot(lastInput, ref, PRIORITY_INDEX);\r\n                    callbacks.push(queue[i].onComplete.bind(null, null, false, snapshot));\r\n                }\r\n                else {\r\n                    callbacks.push(queue[i].onComplete.bind(null, new Error(abortReason), false, null));\r\n                }\r\n            }\r\n        }\r\n    }\r\n    // Clean up completed transactions.\r\n    this.pruneCompletedTransactionsBelowNode_(this.transactionQueueTree_);\r\n    // Now fire callbacks, now that we're in a good, known state.\r\n    for (var i = 0; i < callbacks.length; i++) {\r\n        exceptionGuard(callbacks[i]);\r\n    }\r\n    // Try to send the transaction result to the server.\r\n    this.sendReadyTransactions_();\r\n};\r\n/**\r\n * Returns the rootmost ancestor node of the specified path that has a pending transaction on it, or just returns\r\n * the node for the given path if there are no pending transactions on any ancestor.\r\n *\r\n * @param {!Path} path The location to start at.\r\n * @return {!Tree.<Array.<!Transaction>>} The rootmost node with a transaction.\r\n * @private\r\n */\r\nRepo.prototype.getAncestorTransactionNode_ = function (path) {\r\n    var front;\r\n    // Start at the root and walk deeper into the tree towards path until we find a node with pending transactions.\r\n    var transactionNode = this.transactionQueueTree_;\r\n    while ((front = path.getFront()) !== null &&\r\n        transactionNode.getValue() === null) {\r\n        transactionNode = transactionNode.subTree(front);\r\n        path = path.popFront();\r\n    }\r\n    return transactionNode;\r\n};\r\n/**\r\n * Builds the queue of all transactions at or below the specified transactionNode.\r\n *\r\n * @param {!Tree.<Array.<Transaction>>} transactionNode\r\n * @return {Array.<Transaction>} The generated queue.\r\n * @private\r\n */\r\nRepo.prototype.buildTransactionQueue_ = function (transactionNode) {\r\n    // Walk any child transaction queues and aggregate them into a single queue.\r\n    var transactionQueue = [];\r\n    this.aggregateTransactionQueuesForNode_(transactionNode, transactionQueue);\r\n    // Sort them by the order the transactions were created.\r\n    transactionQueue.sort(function (a, b) {\r\n        return a.order - b.order;\r\n    });\r\n    return transactionQueue;\r\n};\r\n/**\r\n * @param {!Tree.<Array.<Transaction>>} node\r\n * @param {Array.<Transaction>} queue\r\n * @private\r\n */\r\nRepo.prototype.aggregateTransactionQueuesForNode_ = function (node, queue) {\r\n    var _this = this;\r\n    var nodeQueue = node.getValue();\r\n    if (nodeQueue !== null) {\r\n        for (var i = 0; i < nodeQueue.length; i++) {\r\n            queue.push(nodeQueue[i]);\r\n        }\r\n    }\r\n    node.forEachChild(function (child) {\r\n        _this.aggregateTransactionQueuesForNode_(child, queue);\r\n    });\r\n};\r\n/**\r\n * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\r\n *\r\n * @param {!Tree.<Array.<!Transaction>>} node\r\n * @private\r\n */\r\nRepo.prototype.pruneCompletedTransactionsBelowNode_ = function (node) {\r\n    var _this = this;\r\n    var queue = node.getValue();\r\n    if (queue) {\r\n        var to = 0;\r\n        for (var from = 0; from < queue.length; from++) {\r\n            if (queue[from].status !== TransactionStatus.COMPLETED) {\r\n                queue[to] = queue[from];\r\n                to++;\r\n            }\r\n        }\r\n        queue.length = to;\r\n        node.setValue(queue.length > 0 ? queue : null);\r\n    }\r\n    node.forEachChild(function (childNode) {\r\n        _this.pruneCompletedTransactionsBelowNode_(childNode);\r\n    });\r\n};\r\n/**\r\n * Aborts all transactions on ancestors or descendants of the specified path.  Called when doing a set() or update()\r\n * since we consider them incompatible with transactions.\r\n *\r\n * @param {!Path} path Path for which we want to abort related transactions.\r\n * @return {!Path}\r\n * @private\r\n */\r\nRepo.prototype.abortTransactions_ = function (path) {\r\n    var _this = this;\r\n    var affectedPath = this.getAncestorTransactionNode_(path).path();\r\n    var transactionNode = this.transactionQueueTree_.subTree(path);\r\n    transactionNode.forEachAncestor(function (node) {\r\n        _this.abortTransactionsOnNode_(node);\r\n    });\r\n    this.abortTransactionsOnNode_(transactionNode);\r\n    transactionNode.forEachDescendant(function (node) {\r\n        _this.abortTransactionsOnNode_(node);\r\n    });\r\n    return affectedPath;\r\n};\r\n/**\r\n * Abort transactions stored in this transaction queue node.\r\n *\r\n * @param {!Tree.<Array.<Transaction>>} node Node to abort transactions for.\r\n * @private\r\n */\r\nRepo.prototype.abortTransactionsOnNode_ = function (node) {\r\n    var queue = node.getValue();\r\n    if (queue !== null) {\r\n        // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\r\n        // the callback could trigger more transactions or sets.\r\n        var callbacks = [];\r\n        // Go through queue.  Any already-sent transactions must be marked for abort, while the unsent ones\r\n        // can be immediately aborted and removed.\r\n        var events = [];\r\n        var lastSent = -1;\r\n        for (var i = 0; i < queue.length; i++) {\r\n            if (queue[i].status === TransactionStatus.SENT_NEEDS_ABORT) ;\r\n            else if (queue[i].status === TransactionStatus.SENT) {\r\n                util.assert(lastSent === i - 1, 'All SENT items should be at beginning of queue.');\r\n                lastSent = i;\r\n                // Mark transaction for abort when it comes back.\r\n                queue[i].status = TransactionStatus.SENT_NEEDS_ABORT;\r\n                queue[i].abortReason = 'set';\r\n            }\r\n            else {\r\n                util.assert(queue[i].status === TransactionStatus.RUN, 'Unexpected transaction status in abort');\r\n                // We can abort it immediately.\r\n                queue[i].unwatcher();\r\n                events = events.concat(this.serverSyncTree_.ackUserWrite(queue[i].currentWriteId, true));\r\n                if (queue[i].onComplete) {\r\n                    var snapshot = null;\r\n                    callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, snapshot));\r\n                }\r\n            }\r\n        }\r\n        if (lastSent === -1) {\r\n            // We're not waiting for any sent transactions.  We can clear the queue.\r\n            node.setValue(null);\r\n        }\r\n        else {\r\n            // Remove the transactions we aborted.\r\n            queue.length = lastSent + 1;\r\n        }\r\n        // Now fire the callbacks.\r\n        this.eventQueue_.raiseEventsForChangedPath(node.path(), events);\r\n        for (var i = 0; i < callbacks.length; i++) {\r\n            exceptionGuard(callbacks[i]);\r\n        }\r\n    }\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** @const {string} */\r\nvar DATABASE_URL_OPTION = 'databaseURL';\r\nvar _staticInstance;\r\n/**\r\n * Creates and caches Repo instances.\r\n */\r\nvar RepoManager = /** @class */ (function () {\r\n    function RepoManager() {\r\n        /**\r\n         * @private {!Object.<string, Object<string, !fb.core.Repo>>}\r\n         */\r\n        this.repos_ = {};\r\n        /**\r\n         * If true, new Repos will be created to use ReadonlyRestClient (for testing purposes).\r\n         * @private {boolean}\r\n         */\r\n        this.useRestClient_ = false;\r\n    }\r\n    RepoManager.getInstance = function () {\r\n        if (!_staticInstance) {\r\n            _staticInstance = new RepoManager();\r\n        }\r\n        return _staticInstance;\r\n    };\r\n    // TODO(koss): Remove these functions unless used in tests?\r\n    RepoManager.prototype.interrupt = function () {\r\n        for (var appName in this.repos_) {\r\n            for (var dbUrl in this.repos_[appName]) {\r\n                this.repos_[appName][dbUrl].interrupt();\r\n            }\r\n        }\r\n    };\r\n    RepoManager.prototype.resume = function () {\r\n        for (var appName in this.repos_) {\r\n            for (var dbUrl in this.repos_[appName]) {\r\n                this.repos_[appName][dbUrl].resume();\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * This function should only ever be called to CREATE a new database instance.\r\n     *\r\n     * @param {!FirebaseApp} app\r\n     * @return {!Database}\r\n     */\r\n    RepoManager.prototype.databaseFromApp = function (app, url) {\r\n        var dbUrl = url || app.options[DATABASE_URL_OPTION];\r\n        if (dbUrl === undefined) {\r\n            fatal(\"Can't determine Firebase Database URL.  Be sure to include \" +\r\n                DATABASE_URL_OPTION +\r\n                ' option when calling firebase.initializeApp().');\r\n        }\r\n        var parsedUrl = parseRepoInfo(dbUrl);\r\n        var repoInfo = parsedUrl.repoInfo;\r\n        validateUrl('Invalid Firebase Database URL', 1, parsedUrl);\r\n        if (!parsedUrl.path.isEmpty()) {\r\n            fatal('Database URL must point to the root of a Firebase Database ' +\r\n                '(not including a child path).');\r\n        }\r\n        var repo = this.createRepo(repoInfo, app);\r\n        return repo.database;\r\n    };\r\n    /**\r\n     * Remove the repo and make sure it is disconnected.\r\n     *\r\n     * @param {!Repo} repo\r\n     */\r\n    RepoManager.prototype.deleteRepo = function (repo) {\r\n        var appRepos = util.safeGet(this.repos_, repo.app.name);\r\n        // This should never happen...\r\n        if (!appRepos || util.safeGet(appRepos, repo.repoInfo_.toURLString()) !== repo) {\r\n            fatal(\"Database \" + repo.app.name + \"(\" + repo.repoInfo_ + \") has already been deleted.\");\r\n        }\r\n        repo.interrupt();\r\n        delete appRepos[repo.repoInfo_.toURLString()];\r\n    };\r\n    /**\r\n     * Ensures a repo doesn't already exist and then creates one using the\r\n     * provided app.\r\n     *\r\n     * @param {!RepoInfo} repoInfo The metadata about the Repo\r\n     * @param {!FirebaseApp} app\r\n     * @return {!Repo} The Repo object for the specified server / repoName.\r\n     */\r\n    RepoManager.prototype.createRepo = function (repoInfo, app) {\r\n        var appRepos = util.safeGet(this.repos_, app.name);\r\n        if (!appRepos) {\r\n            appRepos = {};\r\n            this.repos_[app.name] = appRepos;\r\n        }\r\n        var repo = util.safeGet(appRepos, repoInfo.toURLString());\r\n        if (repo) {\r\n            fatal('Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.');\r\n        }\r\n        repo = new Repo(repoInfo, this.useRestClient_, app);\r\n        appRepos[repoInfo.toURLString()] = repo;\r\n        return repo;\r\n    };\r\n    /**\r\n     * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.\r\n     * @param {boolean} forceRestClient\r\n     */\r\n    RepoManager.prototype.forceRestClient = function (forceRestClient) {\r\n        this.useRestClient_ = forceRestClient;\r\n    };\r\n    return RepoManager;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Class representing a firebase database.\r\n * @implements {FirebaseService}\r\n */\r\nvar Database = /** @class */ (function () {\r\n    /**\r\n     * The constructor should not be called by users of our public API.\r\n     * @param {!Repo} repo_\r\n     */\r\n    function Database(repo_) {\r\n        this.repo_ = repo_;\r\n        if (!(repo_ instanceof Repo)) {\r\n            fatal(\"Don't call new Database() directly - please use firebase.database().\");\r\n        }\r\n        /** @type {Reference} */\r\n        this.root_ = new Reference(repo_, Path.Empty);\r\n        this.INTERNAL = new DatabaseInternals(this);\r\n    }\r\n    Object.defineProperty(Database.prototype, \"app\", {\r\n        get: function () {\r\n            return this.repo_.app;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Database.prototype.ref = function (path) {\r\n        this.checkDeleted_('ref');\r\n        util.validateArgCount('database.ref', 0, 1, arguments.length);\r\n        if (path instanceof Reference) {\r\n            return this.refFromURL(path.toString());\r\n        }\r\n        return path !== undefined ? this.root_.child(path) : this.root_;\r\n    };\r\n    /**\r\n     * Returns a reference to the root or the path specified in url.\r\n     * We throw a exception if the url is not in the same domain as the\r\n     * current repo.\r\n     * @param {string} url\r\n     * @return {!Reference} Firebase reference.\r\n     */\r\n    Database.prototype.refFromURL = function (url) {\r\n        /** @const {string} */\r\n        var apiName = 'database.refFromURL';\r\n        this.checkDeleted_(apiName);\r\n        util.validateArgCount(apiName, 1, 1, arguments.length);\r\n        var parsedURL = parseRepoInfo(url);\r\n        validateUrl(apiName, 1, parsedURL);\r\n        var repoInfo = parsedURL.repoInfo;\r\n        if (repoInfo.host !== this.repo_.repoInfo_.host) {\r\n            fatal(apiName +\r\n                ': Host name does not match the current database: ' +\r\n                '(found ' +\r\n                repoInfo.host +\r\n                ' but expected ' +\r\n                this.repo_.repoInfo_.host +\r\n                ')');\r\n        }\r\n        return this.ref(parsedURL.path.toString());\r\n    };\r\n    /**\r\n     * @param {string} apiName\r\n     */\r\n    Database.prototype.checkDeleted_ = function (apiName) {\r\n        if (this.repo_ === null) {\r\n            fatal('Cannot call ' + apiName + ' on a deleted database.');\r\n        }\r\n    };\r\n    // Make individual repo go offline.\r\n    Database.prototype.goOffline = function () {\r\n        util.validateArgCount('database.goOffline', 0, 0, arguments.length);\r\n        this.checkDeleted_('goOffline');\r\n        this.repo_.interrupt();\r\n    };\r\n    Database.prototype.goOnline = function () {\r\n        util.validateArgCount('database.goOnline', 0, 0, arguments.length);\r\n        this.checkDeleted_('goOnline');\r\n        this.repo_.resume();\r\n    };\r\n    Database.ServerValue = {\r\n        TIMESTAMP: {\r\n            '.sv': 'timestamp'\r\n        }\r\n    };\r\n    return Database;\r\n}());\r\nvar DatabaseInternals = /** @class */ (function () {\r\n    /** @param {!Database} database */\r\n    function DatabaseInternals(database) {\r\n        this.database = database;\r\n    }\r\n    /** @return {Promise<void>} */\r\n    DatabaseInternals.prototype.delete = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            return tslib_1.__generator(this, function (_a) {\r\n                this.database.checkDeleted_('delete');\r\n                RepoManager.getInstance().deleteRepo(this.database.repo_);\r\n                this.database.repo_ = null;\r\n                this.database.root_ = null;\r\n                this.database.INTERNAL = null;\r\n                this.database = null;\r\n                return [2 /*return*/];\r\n            });\r\n        });\r\n    };\r\n    return DatabaseInternals;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * INTERNAL methods for internal-use only (tests, etc.).\r\n *\r\n * Customers shouldn't use these or else should be aware that they could break at any time.\r\n *\r\n * @const\r\n */\r\nvar forceLongPolling = function () {\r\n    WebSocketConnection.forceDisallow();\r\n    BrowserPollConnection.forceAllow();\r\n};\r\nvar forceWebSockets = function () {\r\n    BrowserPollConnection.forceDisallow();\r\n};\r\n/* Used by App Manager */\r\nvar isWebSocketsAvailable = function () {\r\n    return WebSocketConnection['isAvailable']();\r\n};\r\nvar setSecurityDebugCallback = function (ref, callback) {\r\n    ref.repo.persistentConnection_.securityDebugCallback_ = callback;\r\n};\r\nvar stats = function (ref, showDelta) {\r\n    ref.repo.stats(showDelta);\r\n};\r\nvar statsIncrementCounter = function (ref, metric) {\r\n    ref.repo.statsIncrementCounter(metric);\r\n};\r\nvar dataUpdateCount = function (ref) {\r\n    return ref.repo.dataUpdateCount;\r\n};\r\nvar interceptServerData = function (ref, callback) {\r\n    return ref.repo.interceptServerData_(callback);\r\n};\n\nvar INTERNAL = /*#__PURE__*/Object.freeze({\n  forceLongPolling: forceLongPolling,\n  forceWebSockets: forceWebSockets,\n  isWebSocketsAvailable: isWebSocketsAvailable,\n  setSecurityDebugCallback: setSecurityDebugCallback,\n  stats: stats,\n  statsIncrementCounter: statsIncrementCounter,\n  dataUpdateCount: dataUpdateCount,\n  interceptServerData: interceptServerData\n});\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar DataConnection = PersistentConnection;\r\n/**\r\n * @param {!string} pathString\r\n * @param {function(*)} onComplete\r\n */\r\nPersistentConnection.prototype.simpleListen = function (pathString, onComplete) {\r\n    this.sendRequest('q', { p: pathString }, onComplete);\r\n};\r\n/**\r\n * @param {*} data\r\n * @param {function(*)} onEcho\r\n */\r\nPersistentConnection.prototype.echo = function (data, onEcho) {\r\n    this.sendRequest('echo', { d: data }, onEcho);\r\n};\r\n// RealTimeConnection properties that we use in tests.\r\nvar RealTimeConnection = Connection;\r\n/**\r\n * @param {function(): string} newHash\r\n * @return {function()}\r\n */\r\nvar hijackHash = function (newHash) {\r\n    var oldPut = PersistentConnection.prototype.put;\r\n    PersistentConnection.prototype.put = function (pathString, data, opt_onComplete, opt_hash) {\r\n        if (opt_hash !== undefined) {\r\n            opt_hash = newHash();\r\n        }\r\n        oldPut.call(this, pathString, data, opt_onComplete, opt_hash);\r\n    };\r\n    return function () {\r\n        PersistentConnection.prototype.put = oldPut;\r\n    };\r\n};\r\n/**\r\n * @type {function(new:RepoInfo, !string, boolean, !string, boolean): undefined}\r\n */\r\nvar ConnectionTarget = RepoInfo;\r\n/**\r\n * @param {!Query} query\r\n * @return {!string}\r\n */\r\nvar queryIdentifier = function (query) {\r\n    return query.queryIdentifier();\r\n};\r\n/**\r\n * @param {!Query} firebaseRef\r\n * @return {!Object}\r\n */\r\nvar listens = function (firebaseRef) {\r\n    return firebaseRef.repo.persistentConnection_.listens_;\r\n};\r\n/**\r\n * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\r\n *\r\n * @param {boolean} forceRestClient\r\n */\r\nvar forceRestClient = function (forceRestClient) {\r\n    RepoManager.getInstance().forceRestClient(forceRestClient);\r\n};\n\nvar TEST_ACCESS = /*#__PURE__*/Object.freeze({\n  DataConnection: DataConnection,\n  RealTimeConnection: RealTimeConnection,\n  hijackHash: hijackHash,\n  ConnectionTarget: ConnectionTarget,\n  queryIdentifier: queryIdentifier,\n  listens: listens,\n  forceRestClient: forceRestClient\n});\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar ServerValue = Database.ServerValue;\r\nfunction registerDatabase(instance) {\r\n    // Register the Database Service with the 'firebase' namespace.\r\n    var namespace = instance.INTERNAL.registerService('database', function (app, unused, url) { return RepoManager.getInstance().databaseFromApp(app, url); }, \r\n    // firebase.database namespace properties\r\n    {\r\n        Reference: Reference,\r\n        Query: Query,\r\n        Database: Database,\r\n        DataSnapshot: DataSnapshot,\r\n        enableLogging: enableLogging,\r\n        INTERNAL: INTERNAL,\r\n        ServerValue: ServerValue,\r\n        TEST_ACCESS: TEST_ACCESS\r\n    }, null, true);\r\n    if (util.isNodeSdk()) {\r\n        module.exports = namespace;\r\n    }\r\n}\r\nregisterDatabase(firebase);\n\nexports.DataSnapshot = DataSnapshot;\nexports.Database = Database;\nexports.OnDisconnect = OnDisconnect;\nexports.Query = Query;\nexports.Reference = Reference;\nexports.ServerValue = ServerValue;\nexports.enableLogging = enableLogging;\nexports.registerDatabase = registerDatabase;\n//# sourceMappingURL=index.cjs.js.map\n","/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A container for all of the Logger instances\r\n */\r\nvar instances = [];\r\n/**\r\n * The JS SDK supports 5 log levels and also allows a user the ability to\r\n * silence the logs altogether.\r\n *\r\n * The order is a follows:\r\n * DEBUG < VERBOSE < INFO < WARN < ERROR\r\n *\r\n * All of the log types above the current log level will be captured (i.e. if\r\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\r\n * `VERBOSE` logs will not)\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n    LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n    LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n    LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n    LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n    LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n    LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n})(LogLevel || (LogLevel = {}));\r\n/**\r\n * The default log level\r\n */\r\nvar defaultLogLevel = LogLevel.INFO;\r\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\r\nvar defaultLogHandler = function (instance, logType) {\r\n    var args = [];\r\n    for (var _i = 2; _i < arguments.length; _i++) {\r\n        args[_i - 2] = arguments[_i];\r\n    }\r\n    if (logType < instance.logLevel)\r\n        return;\r\n    var now = new Date().toISOString();\r\n    switch (logType) {\r\n        /**\r\n         * By default, `console.debug` is not displayed in the developer console (in\r\n         * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n         * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n         * logs to the `console.log` function.\r\n         */\r\n        case LogLevel.DEBUG:\r\n            console.log.apply(console, [\"[\" + now + \"]  \" + instance.name + \":\"].concat(args));\r\n            break;\r\n        case LogLevel.VERBOSE:\r\n            console.log.apply(console, [\"[\" + now + \"]  \" + instance.name + \":\"].concat(args));\r\n            break;\r\n        case LogLevel.INFO:\r\n            console.info.apply(console, [\"[\" + now + \"]  \" + instance.name + \":\"].concat(args));\r\n            break;\r\n        case LogLevel.WARN:\r\n            console.warn.apply(console, [\"[\" + now + \"]  \" + instance.name + \":\"].concat(args));\r\n            break;\r\n        case LogLevel.ERROR:\r\n            console.error.apply(console, [\"[\" + now + \"]  \" + instance.name + \":\"].concat(args));\r\n            break;\r\n        default:\r\n            throw new Error(\"Attempted to log a message with an invalid logType (value: \" + logType + \")\");\r\n    }\r\n};\r\nvar Logger = /** @class */ (function () {\r\n    /**\r\n     * Gives you an instance of a Logger to capture messages according to\r\n     * Firebase's logging scheme.\r\n     *\r\n     * @param name The name that the logs will be associated with\r\n     */\r\n    function Logger(name) {\r\n        this.name = name;\r\n        /**\r\n         * The log level of the given Logger instance.\r\n         */\r\n        this._logLevel = defaultLogLevel;\r\n        /**\r\n         * The log handler for the Logger instance.\r\n         */\r\n        this._logHandler = defaultLogHandler;\r\n        /**\r\n         * Capture the current instance for later use\r\n         */\r\n        instances.push(this);\r\n    }\r\n    Object.defineProperty(Logger.prototype, \"logLevel\", {\r\n        get: function () {\r\n            return this._logLevel;\r\n        },\r\n        set: function (val) {\r\n            if (!(val in LogLevel)) {\r\n                throw new TypeError('Invalid value assigned to `logLevel`');\r\n            }\r\n            this._logLevel = val;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(Logger.prototype, \"logHandler\", {\r\n        get: function () {\r\n            return this._logHandler;\r\n        },\r\n        set: function (val) {\r\n            if (typeof val !== 'function') {\r\n                throw new TypeError('Value assigned to `logHandler` must be a function');\r\n            }\r\n            this._logHandler = val;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * The functions below are all based on the `console` interface\r\n     */\r\n    Logger.prototype.debug = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        this._logHandler.apply(this, [this, LogLevel.DEBUG].concat(args));\r\n    };\r\n    Logger.prototype.log = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        this._logHandler.apply(this, [this, LogLevel.VERBOSE].concat(args));\r\n    };\r\n    Logger.prototype.info = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        this._logHandler.apply(this, [this, LogLevel.INFO].concat(args));\r\n    };\r\n    Logger.prototype.warn = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        this._logHandler.apply(this, [this, LogLevel.WARN].concat(args));\r\n    };\r\n    Logger.prototype.error = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        this._logHandler.apply(this, [this, LogLevel.ERROR].concat(args));\r\n    };\r\n    return Logger;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction setLogLevel(level) {\r\n    instances.forEach(function (inst) {\r\n        inst.logLevel = level;\r\n    });\r\n}\n\nexport { LogLevel, Logger, setLogLevel };\n//# sourceMappingURL=index.esm.js.map\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var map = {\n\t\"./af\": 92,\n\t\"./af.js\": 92,\n\t\"./ar\": 93,\n\t\"./ar-dz\": 94,\n\t\"./ar-dz.js\": 94,\n\t\"./ar-kw\": 95,\n\t\"./ar-kw.js\": 95,\n\t\"./ar-ly\": 96,\n\t\"./ar-ly.js\": 96,\n\t\"./ar-ma\": 97,\n\t\"./ar-ma.js\": 97,\n\t\"./ar-sa\": 98,\n\t\"./ar-sa.js\": 98,\n\t\"./ar-tn\": 99,\n\t\"./ar-tn.js\": 99,\n\t\"./ar.js\": 93,\n\t\"./az\": 100,\n\t\"./az.js\": 100,\n\t\"./be\": 101,\n\t\"./be.js\": 101,\n\t\"./bg\": 102,\n\t\"./bg.js\": 102,\n\t\"./bm\": 103,\n\t\"./bm.js\": 103,\n\t\"./bn\": 104,\n\t\"./bn.js\": 104,\n\t\"./bo\": 105,\n\t\"./bo.js\": 105,\n\t\"./br\": 106,\n\t\"./br.js\": 106,\n\t\"./bs\": 107,\n\t\"./bs.js\": 107,\n\t\"./ca\": 108,\n\t\"./ca.js\": 108,\n\t\"./cs\": 109,\n\t\"./cs.js\": 109,\n\t\"./cv\": 110,\n\t\"./cv.js\": 110,\n\t\"./cy\": 111,\n\t\"./cy.js\": 111,\n\t\"./da\": 112,\n\t\"./da.js\": 112,\n\t\"./de\": 113,\n\t\"./de-at\": 114,\n\t\"./de-at.js\": 114,\n\t\"./de-ch\": 115,\n\t\"./de-ch.js\": 115,\n\t\"./de.js\": 113,\n\t\"./dv\": 116,\n\t\"./dv.js\": 116,\n\t\"./el\": 117,\n\t\"./el.js\": 117,\n\t\"./en-SG\": 118,\n\t\"./en-SG.js\": 118,\n\t\"./en-au\": 119,\n\t\"./en-au.js\": 119,\n\t\"./en-ca\": 120,\n\t\"./en-ca.js\": 120,\n\t\"./en-gb\": 121,\n\t\"./en-gb.js\": 121,\n\t\"./en-ie\": 122,\n\t\"./en-ie.js\": 122,\n\t\"./en-il\": 123,\n\t\"./en-il.js\": 123,\n\t\"./en-nz\": 124,\n\t\"./en-nz.js\": 124,\n\t\"./eo\": 125,\n\t\"./eo.js\": 125,\n\t\"./es\": 126,\n\t\"./es-do\": 127,\n\t\"./es-do.js\": 127,\n\t\"./es-us\": 128,\n\t\"./es-us.js\": 128,\n\t\"./es.js\": 126,\n\t\"./et\": 129,\n\t\"./et.js\": 129,\n\t\"./eu\": 130,\n\t\"./eu.js\": 130,\n\t\"./fa\": 131,\n\t\"./fa.js\": 131,\n\t\"./fi\": 132,\n\t\"./fi.js\": 132,\n\t\"./fo\": 133,\n\t\"./fo.js\": 133,\n\t\"./fr\": 134,\n\t\"./fr-ca\": 135,\n\t\"./fr-ca.js\": 135,\n\t\"./fr-ch\": 136,\n\t\"./fr-ch.js\": 136,\n\t\"./fr.js\": 134,\n\t\"./fy\": 137,\n\t\"./fy.js\": 137,\n\t\"./ga\": 138,\n\t\"./ga.js\": 138,\n\t\"./gd\": 139,\n\t\"./gd.js\": 139,\n\t\"./gl\": 140,\n\t\"./gl.js\": 140,\n\t\"./gom-latn\": 141,\n\t\"./gom-latn.js\": 141,\n\t\"./gu\": 142,\n\t\"./gu.js\": 142,\n\t\"./he\": 143,\n\t\"./he.js\": 143,\n\t\"./hi\": 144,\n\t\"./hi.js\": 144,\n\t\"./hr\": 145,\n\t\"./hr.js\": 145,\n\t\"./hu\": 146,\n\t\"./hu.js\": 146,\n\t\"./hy-am\": 147,\n\t\"./hy-am.js\": 147,\n\t\"./id\": 148,\n\t\"./id.js\": 148,\n\t\"./is\": 149,\n\t\"./is.js\": 149,\n\t\"./it\": 150,\n\t\"./it-ch\": 151,\n\t\"./it-ch.js\": 151,\n\t\"./it.js\": 150,\n\t\"./ja\": 152,\n\t\"./ja.js\": 152,\n\t\"./jv\": 153,\n\t\"./jv.js\": 153,\n\t\"./ka\": 154,\n\t\"./ka.js\": 154,\n\t\"./kk\": 155,\n\t\"./kk.js\": 155,\n\t\"./km\": 156,\n\t\"./km.js\": 156,\n\t\"./kn\": 157,\n\t\"./kn.js\": 157,\n\t\"./ko\": 158,\n\t\"./ko.js\": 158,\n\t\"./ku\": 159,\n\t\"./ku.js\": 159,\n\t\"./ky\": 160,\n\t\"./ky.js\": 160,\n\t\"./lb\": 161,\n\t\"./lb.js\": 161,\n\t\"./lo\": 162,\n\t\"./lo.js\": 162,\n\t\"./lt\": 163,\n\t\"./lt.js\": 163,\n\t\"./lv\": 164,\n\t\"./lv.js\": 164,\n\t\"./me\": 165,\n\t\"./me.js\": 165,\n\t\"./mi\": 166,\n\t\"./mi.js\": 166,\n\t\"./mk\": 167,\n\t\"./mk.js\": 167,\n\t\"./ml\": 168,\n\t\"./ml.js\": 168,\n\t\"./mn\": 169,\n\t\"./mn.js\": 169,\n\t\"./mr\": 170,\n\t\"./mr.js\": 170,\n\t\"./ms\": 171,\n\t\"./ms-my\": 172,\n\t\"./ms-my.js\": 172,\n\t\"./ms.js\": 171,\n\t\"./mt\": 173,\n\t\"./mt.js\": 173,\n\t\"./my\": 174,\n\t\"./my.js\": 174,\n\t\"./nb\": 175,\n\t\"./nb.js\": 175,\n\t\"./ne\": 176,\n\t\"./ne.js\": 176,\n\t\"./nl\": 177,\n\t\"./nl-be\": 178,\n\t\"./nl-be.js\": 178,\n\t\"./nl.js\": 177,\n\t\"./nn\": 179,\n\t\"./nn.js\": 179,\n\t\"./pa-in\": 180,\n\t\"./pa-in.js\": 180,\n\t\"./pl\": 181,\n\t\"./pl.js\": 181,\n\t\"./pt\": 182,\n\t\"./pt-br\": 183,\n\t\"./pt-br.js\": 183,\n\t\"./pt.js\": 182,\n\t\"./ro\": 184,\n\t\"./ro.js\": 184,\n\t\"./ru\": 185,\n\t\"./ru.js\": 185,\n\t\"./sd\": 186,\n\t\"./sd.js\": 186,\n\t\"./se\": 187,\n\t\"./se.js\": 187,\n\t\"./si\": 188,\n\t\"./si.js\": 188,\n\t\"./sk\": 189,\n\t\"./sk.js\": 189,\n\t\"./sl\": 190,\n\t\"./sl.js\": 190,\n\t\"./sq\": 191,\n\t\"./sq.js\": 191,\n\t\"./sr\": 192,\n\t\"./sr-cyrl\": 193,\n\t\"./sr-cyrl.js\": 193,\n\t\"./sr.js\": 192,\n\t\"./ss\": 194,\n\t\"./ss.js\": 194,\n\t\"./sv\": 195,\n\t\"./sv.js\": 195,\n\t\"./sw\": 196,\n\t\"./sw.js\": 196,\n\t\"./ta\": 197,\n\t\"./ta.js\": 197,\n\t\"./te\": 198,\n\t\"./te.js\": 198,\n\t\"./tet\": 199,\n\t\"./tet.js\": 199,\n\t\"./tg\": 200,\n\t\"./tg.js\": 200,\n\t\"./th\": 201,\n\t\"./th.js\": 201,\n\t\"./tl-ph\": 202,\n\t\"./tl-ph.js\": 202,\n\t\"./tlh\": 203,\n\t\"./tlh.js\": 203,\n\t\"./tr\": 204,\n\t\"./tr.js\": 204,\n\t\"./tzl\": 205,\n\t\"./tzl.js\": 205,\n\t\"./tzm\": 206,\n\t\"./tzm-latn\": 207,\n\t\"./tzm-latn.js\": 207,\n\t\"./tzm.js\": 206,\n\t\"./ug-cn\": 208,\n\t\"./ug-cn.js\": 208,\n\t\"./uk\": 209,\n\t\"./uk.js\": 209,\n\t\"./ur\": 210,\n\t\"./ur.js\": 210,\n\t\"./uz\": 211,\n\t\"./uz-latn\": 212,\n\t\"./uz-latn.js\": 212,\n\t\"./uz.js\": 211,\n\t\"./vi\": 213,\n\t\"./vi.js\": 213,\n\t\"./x-pseudo\": 214,\n\t\"./x-pseudo.js\": 214,\n\t\"./yo\": 215,\n\t\"./yo.js\": 215,\n\t\"./zh-cn\": 216,\n\t\"./zh-cn.js\": 216,\n\t\"./zh-hk\": 217,\n\t\"./zh-hk.js\": 217,\n\t\"./zh-tw\": 218,\n\t\"./zh-tw.js\": 218\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 308;","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('../internals/fails')(function () {\n  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","// Generated by CoffeeScript 1.10.0\nvar DATE_MAX_YEAR, DATE_MIN_YEAR, DATE_SPLITS, GRAPHS, L33T_TABLE, RANKED_DICTIONARIES, REGEXEN, adjacency_graphs, build_ranked_dict, frequency_lists, lst, matching, name, scoring;\n\nfrequency_lists = require('./frequency_lists');\n\nadjacency_graphs = require('./adjacency_graphs');\n\nscoring = require('./scoring');\n\nbuild_ranked_dict = function(ordered_list) {\n  var i, len1, o, result, word;\n  result = {};\n  i = 1;\n  for (o = 0, len1 = ordered_list.length; o < len1; o++) {\n    word = ordered_list[o];\n    result[word] = i;\n    i += 1;\n  }\n  return result;\n};\n\nRANKED_DICTIONARIES = {};\n\nfor (name in frequency_lists) {\n  lst = frequency_lists[name];\n  RANKED_DICTIONARIES[name] = build_ranked_dict(lst);\n}\n\nGRAPHS = {\n  qwerty: adjacency_graphs.qwerty,\n  dvorak: adjacency_graphs.dvorak,\n  keypad: adjacency_graphs.keypad,\n  mac_keypad: adjacency_graphs.mac_keypad\n};\n\nL33T_TABLE = {\n  a: ['4', '@'],\n  b: ['8'],\n  c: ['(', '{', '[', '<'],\n  e: ['3'],\n  g: ['6', '9'],\n  i: ['1', '!', '|'],\n  l: ['1', '|', '7'],\n  o: ['0'],\n  s: ['$', '5'],\n  t: ['+', '7'],\n  x: ['%'],\n  z: ['2']\n};\n\nREGEXEN = {\n  recent_year: /19\\d\\d|200\\d|201\\d/g\n};\n\nDATE_MAX_YEAR = 2050;\n\nDATE_MIN_YEAR = 1000;\n\nDATE_SPLITS = {\n  4: [[1, 2], [2, 3]],\n  5: [[1, 3], [2, 3]],\n  6: [[1, 2], [2, 4], [4, 5]],\n  7: [[1, 3], [2, 3], [4, 5], [4, 6]],\n  8: [[2, 4], [4, 6]]\n};\n\nmatching = {\n  empty: function(obj) {\n    var k;\n    return ((function() {\n      var results;\n      results = [];\n      for (k in obj) {\n        results.push(k);\n      }\n      return results;\n    })()).length === 0;\n  },\n  extend: function(lst, lst2) {\n    return lst.push.apply(lst, lst2);\n  },\n  translate: function(string, chr_map) {\n    var chr;\n    return ((function() {\n      var len1, o, ref, results;\n      ref = string.split('');\n      results = [];\n      for (o = 0, len1 = ref.length; o < len1; o++) {\n        chr = ref[o];\n        results.push(chr_map[chr] || chr);\n      }\n      return results;\n    })()).join('');\n  },\n  mod: function(n, m) {\n    return ((n % m) + m) % m;\n  },\n  sorted: function(matches) {\n    return matches.sort(function(m1, m2) {\n      return (m1.i - m2.i) || (m1.j - m2.j);\n    });\n  },\n  omnimatch: function(password) {\n    var len1, matcher, matchers, matches, o;\n    matches = [];\n    matchers = [this.dictionary_match, this.reverse_dictionary_match, this.l33t_match, this.spatial_match, this.repeat_match, this.sequence_match, this.regex_match, this.date_match];\n    for (o = 0, len1 = matchers.length; o < len1; o++) {\n      matcher = matchers[o];\n      this.extend(matches, matcher.call(this, password));\n    }\n    return this.sorted(matches);\n  },\n  dictionary_match: function(password, _ranked_dictionaries) {\n    var dictionary_name, i, j, len, matches, o, p, password_lower, rank, ranked_dict, ref, ref1, ref2, word;\n    if (_ranked_dictionaries == null) {\n      _ranked_dictionaries = RANKED_DICTIONARIES;\n    }\n    matches = [];\n    len = password.length;\n    password_lower = password.toLowerCase();\n    for (dictionary_name in _ranked_dictionaries) {\n      ranked_dict = _ranked_dictionaries[dictionary_name];\n      for (i = o = 0, ref = len; 0 <= ref ? o < ref : o > ref; i = 0 <= ref ? ++o : --o) {\n        for (j = p = ref1 = i, ref2 = len; ref1 <= ref2 ? p < ref2 : p > ref2; j = ref1 <= ref2 ? ++p : --p) {\n          if (password_lower.slice(i, +j + 1 || 9e9) in ranked_dict) {\n            word = password_lower.slice(i, +j + 1 || 9e9);\n            rank = ranked_dict[word];\n            matches.push({\n              pattern: 'dictionary',\n              i: i,\n              j: j,\n              token: password.slice(i, +j + 1 || 9e9),\n              matched_word: word,\n              rank: rank,\n              dictionary_name: dictionary_name,\n              reversed: false,\n              l33t: false\n            });\n          }\n        }\n      }\n    }\n    return this.sorted(matches);\n  },\n  reverse_dictionary_match: function(password, _ranked_dictionaries) {\n    var len1, match, matches, o, ref, reversed_password;\n    if (_ranked_dictionaries == null) {\n      _ranked_dictionaries = RANKED_DICTIONARIES;\n    }\n    reversed_password = password.split('').reverse().join('');\n    matches = this.dictionary_match(reversed_password, _ranked_dictionaries);\n    for (o = 0, len1 = matches.length; o < len1; o++) {\n      match = matches[o];\n      match.token = match.token.split('').reverse().join('');\n      match.reversed = true;\n      ref = [password.length - 1 - match.j, password.length - 1 - match.i], match.i = ref[0], match.j = ref[1];\n    }\n    return this.sorted(matches);\n  },\n  set_user_input_dictionary: function(ordered_list) {\n    return RANKED_DICTIONARIES['user_inputs'] = build_ranked_dict(ordered_list.slice());\n  },\n  relevant_l33t_subtable: function(password, table) {\n    var chr, len1, letter, o, password_chars, ref, relevant_subs, sub, subs, subtable;\n    password_chars = {};\n    ref = password.split('');\n    for (o = 0, len1 = ref.length; o < len1; o++) {\n      chr = ref[o];\n      password_chars[chr] = true;\n    }\n    subtable = {};\n    for (letter in table) {\n      subs = table[letter];\n      relevant_subs = (function() {\n        var len2, p, results;\n        results = [];\n        for (p = 0, len2 = subs.length; p < len2; p++) {\n          sub = subs[p];\n          if (sub in password_chars) {\n            results.push(sub);\n          }\n        }\n        return results;\n      })();\n      if (relevant_subs.length > 0) {\n        subtable[letter] = relevant_subs;\n      }\n    }\n    return subtable;\n  },\n  enumerate_l33t_subs: function(table) {\n    var chr, dedup, helper, k, keys, l33t_chr, len1, len2, o, p, ref, sub, sub_dict, sub_dicts, subs;\n    keys = (function() {\n      var results;\n      results = [];\n      for (k in table) {\n        results.push(k);\n      }\n      return results;\n    })();\n    subs = [[]];\n    dedup = function(subs) {\n      var assoc, deduped, label, len1, members, o, sub, v;\n      deduped = [];\n      members = {};\n      for (o = 0, len1 = subs.length; o < len1; o++) {\n        sub = subs[o];\n        assoc = (function() {\n          var len2, p, results;\n          results = [];\n          for (v = p = 0, len2 = sub.length; p < len2; v = ++p) {\n            k = sub[v];\n            results.push([k, v]);\n          }\n          return results;\n        })();\n        assoc.sort();\n        label = ((function() {\n          var len2, p, results;\n          results = [];\n          for (v = p = 0, len2 = assoc.length; p < len2; v = ++p) {\n            k = assoc[v];\n            results.push(k + ',' + v);\n          }\n          return results;\n        })()).join('-');\n        if (!(label in members)) {\n          members[label] = true;\n          deduped.push(sub);\n        }\n      }\n      return deduped;\n    };\n    helper = function(keys) {\n      var dup_l33t_index, first_key, i, l33t_chr, len1, len2, next_subs, o, p, q, ref, ref1, rest_keys, sub, sub_alternative, sub_extension;\n      if (!keys.length) {\n        return;\n      }\n      first_key = keys[0];\n      rest_keys = keys.slice(1);\n      next_subs = [];\n      ref = table[first_key];\n      for (o = 0, len1 = ref.length; o < len1; o++) {\n        l33t_chr = ref[o];\n        for (p = 0, len2 = subs.length; p < len2; p++) {\n          sub = subs[p];\n          dup_l33t_index = -1;\n          for (i = q = 0, ref1 = sub.length; 0 <= ref1 ? q < ref1 : q > ref1; i = 0 <= ref1 ? ++q : --q) {\n            if (sub[i][0] === l33t_chr) {\n              dup_l33t_index = i;\n              break;\n            }\n          }\n          if (dup_l33t_index === -1) {\n            sub_extension = sub.concat([[l33t_chr, first_key]]);\n            next_subs.push(sub_extension);\n          } else {\n            sub_alternative = sub.slice(0);\n            sub_alternative.splice(dup_l33t_index, 1);\n            sub_alternative.push([l33t_chr, first_key]);\n            next_subs.push(sub);\n            next_subs.push(sub_alternative);\n          }\n        }\n      }\n      subs = dedup(next_subs);\n      return helper(rest_keys);\n    };\n    helper(keys);\n    sub_dicts = [];\n    for (o = 0, len1 = subs.length; o < len1; o++) {\n      sub = subs[o];\n      sub_dict = {};\n      for (p = 0, len2 = sub.length; p < len2; p++) {\n        ref = sub[p], l33t_chr = ref[0], chr = ref[1];\n        sub_dict[l33t_chr] = chr;\n      }\n      sub_dicts.push(sub_dict);\n    }\n    return sub_dicts;\n  },\n  l33t_match: function(password, _ranked_dictionaries, _l33t_table) {\n    var chr, k, len1, len2, match, match_sub, matches, o, p, ref, ref1, sub, subbed_chr, subbed_password, token, v;\n    if (_ranked_dictionaries == null) {\n      _ranked_dictionaries = RANKED_DICTIONARIES;\n    }\n    if (_l33t_table == null) {\n      _l33t_table = L33T_TABLE;\n    }\n    matches = [];\n    ref = this.enumerate_l33t_subs(this.relevant_l33t_subtable(password, _l33t_table));\n    for (o = 0, len1 = ref.length; o < len1; o++) {\n      sub = ref[o];\n      if (this.empty(sub)) {\n        break;\n      }\n      subbed_password = this.translate(password, sub);\n      ref1 = this.dictionary_match(subbed_password, _ranked_dictionaries);\n      for (p = 0, len2 = ref1.length; p < len2; p++) {\n        match = ref1[p];\n        token = password.slice(match.i, +match.j + 1 || 9e9);\n        if (token.toLowerCase() === match.matched_word) {\n          continue;\n        }\n        match_sub = {};\n        for (subbed_chr in sub) {\n          chr = sub[subbed_chr];\n          if (token.indexOf(subbed_chr) !== -1) {\n            match_sub[subbed_chr] = chr;\n          }\n        }\n        match.l33t = true;\n        match.token = token;\n        match.sub = match_sub;\n        match.sub_display = ((function() {\n          var results;\n          results = [];\n          for (k in match_sub) {\n            v = match_sub[k];\n            results.push(k + \" -> \" + v);\n          }\n          return results;\n        })()).join(', ');\n        matches.push(match);\n      }\n    }\n    return this.sorted(matches.filter(function(match) {\n      return match.token.length > 1;\n    }));\n  },\n  spatial_match: function(password, _graphs) {\n    var graph, graph_name, matches;\n    if (_graphs == null) {\n      _graphs = GRAPHS;\n    }\n    matches = [];\n    for (graph_name in _graphs) {\n      graph = _graphs[graph_name];\n      this.extend(matches, this.spatial_match_helper(password, graph, graph_name));\n    }\n    return this.sorted(matches);\n  },\n  SHIFTED_RX: /[~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:\"ZXCVBNM<>?]/,\n  spatial_match_helper: function(password, graph, graph_name) {\n    var adj, adjacents, cur_char, cur_direction, found, found_direction, i, j, last_direction, len1, matches, o, prev_char, shifted_count, turns;\n    matches = [];\n    i = 0;\n    while (i < password.length - 1) {\n      j = i + 1;\n      last_direction = null;\n      turns = 0;\n      if ((graph_name === 'qwerty' || graph_name === 'dvorak') && this.SHIFTED_RX.exec(password.charAt(i))) {\n        shifted_count = 1;\n      } else {\n        shifted_count = 0;\n      }\n      while (true) {\n        prev_char = password.charAt(j - 1);\n        found = false;\n        found_direction = -1;\n        cur_direction = -1;\n        adjacents = graph[prev_char] || [];\n        if (j < password.length) {\n          cur_char = password.charAt(j);\n          for (o = 0, len1 = adjacents.length; o < len1; o++) {\n            adj = adjacents[o];\n            cur_direction += 1;\n            if (adj && adj.indexOf(cur_char) !== -1) {\n              found = true;\n              found_direction = cur_direction;\n              if (adj.indexOf(cur_char) === 1) {\n                shifted_count += 1;\n              }\n              if (last_direction !== found_direction) {\n                turns += 1;\n                last_direction = found_direction;\n              }\n              break;\n            }\n          }\n        }\n        if (found) {\n          j += 1;\n        } else {\n          if (j - i > 2) {\n            matches.push({\n              pattern: 'spatial',\n              i: i,\n              j: j - 1,\n              token: password.slice(i, j),\n              graph: graph_name,\n              turns: turns,\n              shifted_count: shifted_count\n            });\n          }\n          i = j;\n          break;\n        }\n      }\n    }\n    return matches;\n  },\n  repeat_match: function(password) {\n    var base_analysis, base_guesses, base_matches, base_token, greedy, greedy_match, i, j, lastIndex, lazy, lazy_anchored, lazy_match, match, matches, ref;\n    matches = [];\n    greedy = /(.+)\\1+/g;\n    lazy = /(.+?)\\1+/g;\n    lazy_anchored = /^(.+?)\\1+$/;\n    lastIndex = 0;\n    while (lastIndex < password.length) {\n      greedy.lastIndex = lazy.lastIndex = lastIndex;\n      greedy_match = greedy.exec(password);\n      lazy_match = lazy.exec(password);\n      if (greedy_match == null) {\n        break;\n      }\n      if (greedy_match[0].length > lazy_match[0].length) {\n        match = greedy_match;\n        base_token = lazy_anchored.exec(match[0])[1];\n      } else {\n        match = lazy_match;\n        base_token = match[1];\n      }\n      ref = [match.index, match.index + match[0].length - 1], i = ref[0], j = ref[1];\n      base_analysis = scoring.most_guessable_match_sequence(base_token, this.omnimatch(base_token));\n      base_matches = base_analysis.sequence;\n      base_guesses = base_analysis.guesses;\n      matches.push({\n        pattern: 'repeat',\n        i: i,\n        j: j,\n        token: match[0],\n        base_token: base_token,\n        base_guesses: base_guesses,\n        base_matches: base_matches,\n        repeat_count: match[0].length / base_token.length\n      });\n      lastIndex = j + 1;\n    }\n    return matches;\n  },\n  MAX_DELTA: 5,\n  sequence_match: function(password) {\n    var delta, i, j, k, last_delta, o, ref, result, update;\n    if (password.length === 1) {\n      return [];\n    }\n    update = (function(_this) {\n      return function(i, j, delta) {\n        var ref, sequence_name, sequence_space, token;\n        if (j - i > 1 || Math.abs(delta) === 1) {\n          if ((0 < (ref = Math.abs(delta)) && ref <= _this.MAX_DELTA)) {\n            token = password.slice(i, +j + 1 || 9e9);\n            if (/^[a-z]+$/.test(token)) {\n              sequence_name = 'lower';\n              sequence_space = 26;\n            } else if (/^[A-Z]+$/.test(token)) {\n              sequence_name = 'upper';\n              sequence_space = 26;\n            } else if (/^\\d+$/.test(token)) {\n              sequence_name = 'digits';\n              sequence_space = 10;\n            } else {\n              sequence_name = 'unicode';\n              sequence_space = 26;\n            }\n            return result.push({\n              pattern: 'sequence',\n              i: i,\n              j: j,\n              token: password.slice(i, +j + 1 || 9e9),\n              sequence_name: sequence_name,\n              sequence_space: sequence_space,\n              ascending: delta > 0\n            });\n          }\n        }\n      };\n    })(this);\n    result = [];\n    i = 0;\n    last_delta = null;\n    for (k = o = 1, ref = password.length; 1 <= ref ? o < ref : o > ref; k = 1 <= ref ? ++o : --o) {\n      delta = password.charCodeAt(k) - password.charCodeAt(k - 1);\n      if (last_delta == null) {\n        last_delta = delta;\n      }\n      if (delta === last_delta) {\n        continue;\n      }\n      j = k - 1;\n      update(i, j, last_delta);\n      i = j;\n      last_delta = delta;\n    }\n    update(i, password.length - 1, last_delta);\n    return result;\n  },\n  regex_match: function(password, _regexen) {\n    var matches, regex, rx_match, token;\n    if (_regexen == null) {\n      _regexen = REGEXEN;\n    }\n    matches = [];\n    for (name in _regexen) {\n      regex = _regexen[name];\n      regex.lastIndex = 0;\n      while (rx_match = regex.exec(password)) {\n        token = rx_match[0];\n        matches.push({\n          pattern: 'regex',\n          token: token,\n          i: rx_match.index,\n          j: rx_match.index + rx_match[0].length - 1,\n          regex_name: name,\n          regex_match: rx_match\n        });\n      }\n    }\n    return this.sorted(matches);\n  },\n  date_match: function(password) {\n    var best_candidate, candidate, candidates, distance, dmy, i, j, k, l, len1, len2, matches, maybe_date_no_separator, maybe_date_with_separator, metric, min_distance, o, p, q, r, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9, rx_match, s, t, token;\n    matches = [];\n    maybe_date_no_separator = /^\\d{4,8}$/;\n    maybe_date_with_separator = /^(\\d{1,4})([\\s\\/\\\\_.-])(\\d{1,2})\\2(\\d{1,4})$/;\n    for (i = o = 0, ref = password.length - 4; 0 <= ref ? o <= ref : o >= ref; i = 0 <= ref ? ++o : --o) {\n      for (j = p = ref1 = i + 3, ref2 = i + 7; ref1 <= ref2 ? p <= ref2 : p >= ref2; j = ref1 <= ref2 ? ++p : --p) {\n        if (j >= password.length) {\n          break;\n        }\n        token = password.slice(i, +j + 1 || 9e9);\n        if (!maybe_date_no_separator.exec(token)) {\n          continue;\n        }\n        candidates = [];\n        ref3 = DATE_SPLITS[token.length];\n        for (q = 0, len1 = ref3.length; q < len1; q++) {\n          ref4 = ref3[q], k = ref4[0], l = ref4[1];\n          dmy = this.map_ints_to_dmy([parseInt(token.slice(0, k)), parseInt(token.slice(k, l)), parseInt(token.slice(l))]);\n          if (dmy != null) {\n            candidates.push(dmy);\n          }\n        }\n        if (!(candidates.length > 0)) {\n          continue;\n        }\n        best_candidate = candidates[0];\n        metric = function(candidate) {\n          return Math.abs(candidate.year - scoring.REFERENCE_YEAR);\n        };\n        min_distance = metric(candidates[0]);\n        ref5 = candidates.slice(1);\n        for (r = 0, len2 = ref5.length; r < len2; r++) {\n          candidate = ref5[r];\n          distance = metric(candidate);\n          if (distance < min_distance) {\n            ref6 = [candidate, distance], best_candidate = ref6[0], min_distance = ref6[1];\n          }\n        }\n        matches.push({\n          pattern: 'date',\n          token: token,\n          i: i,\n          j: j,\n          separator: '',\n          year: best_candidate.year,\n          month: best_candidate.month,\n          day: best_candidate.day\n        });\n      }\n    }\n    for (i = s = 0, ref7 = password.length - 6; 0 <= ref7 ? s <= ref7 : s >= ref7; i = 0 <= ref7 ? ++s : --s) {\n      for (j = t = ref8 = i + 5, ref9 = i + 9; ref8 <= ref9 ? t <= ref9 : t >= ref9; j = ref8 <= ref9 ? ++t : --t) {\n        if (j >= password.length) {\n          break;\n        }\n        token = password.slice(i, +j + 1 || 9e9);\n        rx_match = maybe_date_with_separator.exec(token);\n        if (rx_match == null) {\n          continue;\n        }\n        dmy = this.map_ints_to_dmy([parseInt(rx_match[1]), parseInt(rx_match[3]), parseInt(rx_match[4])]);\n        if (dmy == null) {\n          continue;\n        }\n        matches.push({\n          pattern: 'date',\n          token: token,\n          i: i,\n          j: j,\n          separator: rx_match[2],\n          year: dmy.year,\n          month: dmy.month,\n          day: dmy.day\n        });\n      }\n    }\n    return this.sorted(matches.filter(function(match) {\n      var is_submatch, len3, other_match, u;\n      is_submatch = false;\n      for (u = 0, len3 = matches.length; u < len3; u++) {\n        other_match = matches[u];\n        if (match === other_match) {\n          continue;\n        }\n        if (other_match.i <= match.i && other_match.j >= match.j) {\n          is_submatch = true;\n          break;\n        }\n      }\n      return !is_submatch;\n    }));\n  },\n  map_ints_to_dmy: function(ints) {\n    var dm, int, len1, len2, len3, o, over_12, over_31, p, possible_year_splits, q, ref, ref1, rest, under_1, y;\n    if (ints[1] > 31 || ints[1] <= 0) {\n      return;\n    }\n    over_12 = 0;\n    over_31 = 0;\n    under_1 = 0;\n    for (o = 0, len1 = ints.length; o < len1; o++) {\n      int = ints[o];\n      if ((99 < int && int < DATE_MIN_YEAR) || int > DATE_MAX_YEAR) {\n        return;\n      }\n      if (int > 31) {\n        over_31 += 1;\n      }\n      if (int > 12) {\n        over_12 += 1;\n      }\n      if (int <= 0) {\n        under_1 += 1;\n      }\n    }\n    if (over_31 >= 2 || over_12 === 3 || under_1 >= 2) {\n      return;\n    }\n    possible_year_splits = [[ints[2], ints.slice(0, 2)], [ints[0], ints.slice(1, 3)]];\n    for (p = 0, len2 = possible_year_splits.length; p < len2; p++) {\n      ref = possible_year_splits[p], y = ref[0], rest = ref[1];\n      if ((DATE_MIN_YEAR <= y && y <= DATE_MAX_YEAR)) {\n        dm = this.map_ints_to_dm(rest);\n        if (dm != null) {\n          return {\n            year: y,\n            month: dm.month,\n            day: dm.day\n          };\n        } else {\n          return;\n        }\n      }\n    }\n    for (q = 0, len3 = possible_year_splits.length; q < len3; q++) {\n      ref1 = possible_year_splits[q], y = ref1[0], rest = ref1[1];\n      dm = this.map_ints_to_dm(rest);\n      if (dm != null) {\n        y = this.two_to_four_digit_year(y);\n        return {\n          year: y,\n          month: dm.month,\n          day: dm.day\n        };\n      }\n    }\n  },\n  map_ints_to_dm: function(ints) {\n    var d, len1, m, o, ref, ref1;\n    ref = [ints, ints.slice().reverse()];\n    for (o = 0, len1 = ref.length; o < len1; o++) {\n      ref1 = ref[o], d = ref1[0], m = ref1[1];\n      if ((1 <= d && d <= 31) && (1 <= m && m <= 12)) {\n        return {\n          day: d,\n          month: m\n        };\n      }\n    }\n  },\n  two_to_four_digit_year: function(year) {\n    if (year > 99) {\n      return year;\n    } else if (year > 50) {\n      return year + 1900;\n    } else {\n      return year + 2000;\n    }\n  }\n};\n\nmodule.exports = matching;\n\n//# sourceMappingURL=matching.js.map\n","// Generated by CoffeeScript 1.10.0\nvar frequency_lists;\n\nfrequency_lists = {\n  passwords: \"123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,shadow,master,696969,mustang,666666,qwertyuiop,123321,1234567890,pussy,superman,654321,1qaz2wsx,7777777,fuckyou,qazwsx,jordan,123qwe,000000,killer,trustno1,hunter,harley,zxcvbnm,asdfgh,buster,batman,soccer,tigger,charlie,sunshine,iloveyou,fuckme,ranger,hockey,computer,starwars,asshole,pepper,klaster,112233,zxcvbn,freedom,princess,maggie,pass,ginger,11111111,131313,fuck,love,cheese,159753,summer,chelsea,dallas,biteme,matrix,yankees,6969,corvette,austin,access,thunder,merlin,secret,diamond,hello,hammer,fucker,1234qwer,silver,gfhjkm,internet,samantha,golfer,scooter,test,orange,cookie,q1w2e3r4t5,maverick,sparky,phoenix,mickey,bigdog,snoopy,guitar,whatever,chicken,camaro,mercedes,peanut,ferrari,falcon,cowboy,welcome,sexy,samsung,steelers,smokey,dakota,arsenal,boomer,eagles,tigers,marina,nascar,booboo,gateway,yellow,porsche,monster,spider,diablo,hannah,bulldog,junior,london,purple,compaq,lakers,iceman,qwer1234,hardcore,cowboys,money,banana,ncc1701,boston,tennis,q1w2e3r4,coffee,scooby,123654,nikita,yamaha,mother,barney,brandy,chester,fuckoff,oliver,player,forever,rangers,midnight,chicago,bigdaddy,redsox,angel,badboy,fender,jasper,slayer,rabbit,natasha,marine,bigdick,wizard,marlboro,raiders,prince,casper,fishing,flower,jasmine,iwantu,panties,adidas,winter,winner,gandalf,password1,enter,ghbdtn,1q2w3e4r,golden,cocacola,jordan23,winston,madison,angels,panther,blowme,sexsex,bigtits,spanky,bitch,sophie,asdfasdf,horny,thx1138,toyota,tiger,dick,canada,12344321,blowjob,8675309,muffin,liverpoo,apples,qwerty123,passw0rd,abcd1234,pokemon,123abc,slipknot,qazxsw,123456a,scorpion,qwaszx,butter,startrek,rainbow,asdfghjkl,razz,newyork,redskins,gemini,cameron,qazwsxedc,florida,liverpool,turtle,sierra,viking,booger,butthead,doctor,rocket,159357,dolphins,captain,bandit,jaguar,packers,pookie,peaches,789456,asdf,dolphin,helpme,blue,theman,maxwell,qwertyui,shithead,lovers,maddog,giants,nirvana,metallic,hotdog,rosebud,mountain,warrior,stupid,elephant,suckit,success,bond007,jackass,alexis,porn,lucky,scorpio,samson,q1w2e3,azerty,rush2112,driver,freddy,1q2w3e4r5t,sydney,gators,dexter,red123,123456q,12345a,bubba,creative,voodoo,golf,trouble,america,nissan,gunner,garfield,bullshit,asdfghjk,5150,fucking,apollo,1qazxsw2,2112,eminem,legend,airborne,bear,beavis,apple,brooklyn,godzilla,skippy,4815162342,buddy,qwert,kitten,magic,shelby,beaver,phantom,asdasd,xavier,braves,darkness,blink182,copper,platinum,qweqwe,tomcat,01012011,girls,bigboy,102030,animal,police,online,11223344,voyager,lifehack,12qwaszx,fish,sniper,315475,trinity,blazer,heaven,lover,snowball,playboy,loveme,bubbles,hooters,cricket,willow,donkey,topgun,nintendo,saturn,destiny,pakistan,pumpkin,digital,sergey,redwings,explorer,tits,private,runner,therock,guinness,lasvegas,beatles,789456123,fire,cassie,christin,qwerty1,celtic,asdf1234,andrey,broncos,007007,babygirl,eclipse,fluffy,cartman,michigan,carolina,testing,alexande,birdie,pantera,cherry,vampire,mexico,dickhead,buffalo,genius,montana,beer,minecraft,maximus,flyers,lovely,stalker,metallica,doggie,snickers,speedy,bronco,lol123,paradise,yankee,horses,magnum,dreams,147258369,lacrosse,ou812,goober,enigma,qwertyu,scotty,pimpin,bollocks,surfer,cock,poohbear,genesis,star,asd123,qweasdzxc,racing,hello1,hawaii,eagle1,viper,poopoo,einstein,boobies,12345q,bitches,drowssap,simple,badger,alaska,action,jester,drummer,111222,spitfire,forest,maryjane,champion,diesel,svetlana,friday,hotrod,147258,chevy,lucky1,westside,security,google,badass,tester,shorty,thumper,hitman,mozart,zaq12wsx,boobs,reddog,010203,lizard,a123456,123456789a,ruslan,eagle,1232323q,scarface,qwerty12,147852,a12345,buddha,porno,420420,spirit,money1,stargate,qwe123,naruto,mercury,liberty,12345qwert,semperfi,suzuki,popcorn,spooky,marley,scotland,kitty,cherokee,vikings,simpsons,rascal,qweasd,hummer,loveyou,michael1,patches,russia,jupiter,penguin,passion,cumshot,vfhbyf,honda,vladimir,sandman,passport,raider,bastard,123789,infinity,assman,bulldogs,fantasy,sucker,1234554321,horney,domino,budlight,disney,ironman,usuckballz1,softball,brutus,redrum,bigred,mnbvcxz,fktrcfylh,karina,marines,digger,kawasaki,cougar,fireman,oksana,monday,cunt,justice,nigger,super,wildcats,tinker,logitech,dancer,swordfis,avalon,everton,alexandr,motorola,patriots,hentai,madonna,pussy1,ducati,colorado,connor,juventus,galore,smooth,freeuser,warcraft,boogie,titanic,wolverin,elizabet,arizona,valentin,saints,asdfg,accord,test123,password123,christ,yfnfif,stinky,slut,spiderma,naughty,chopper,hello123,ncc1701d,extreme,skyline,poop,zombie,pearljam,123qweasd,froggy,awesome,vision,pirate,fylhtq,dreamer,bullet,predator,empire,123123a,kirill,charlie1,panthers,penis,skipper,nemesis,rasdzv3,peekaboo,rolltide,cardinal,psycho,danger,mookie,happy1,wanker,chevelle,manutd,goblue,9379992,hobbes,vegeta,fyfcnfcbz,852456,picard,159951,windows,loverboy,victory,vfrcbv,bambam,serega,123654789,turkey,tweety,galina,hiphop,rooster,changeme,berlin,taurus,suckme,polina,electric,avatar,134679,maksim,raptor,alpha1,hendrix,newport,bigcock,brazil,spring,a1b2c3,madmax,alpha,britney,sublime,darkside,bigman,wolfpack,classic,hercules,ronaldo,letmein1,1q2w3e,741852963,spiderman,blizzard,123456789q,cheyenne,cjkysirj,tiger1,wombat,bubba1,pandora,zxc123,holiday,wildcat,devils,horse,alabama,147852369,caesar,12312,buddy1,bondage,pussycat,pickle,shaggy,catch22,leather,chronic,a1b2c3d4,admin,qqq111,qaz123,airplane,kodiak,freepass,billybob,sunset,katana,phpbb,chocolat,snowman,angel1,stingray,firebird,wolves,zeppelin,detroit,pontiac,gundam,panzer,vagina,outlaw,redhead,tarheels,greenday,nastya,01011980,hardon,engineer,dragon1,hellfire,serenity,cobra,fireball,lickme,darkstar,1029384756,01011,mustang1,flash,124578,strike,beauty,pavilion,01012000,bobafett,dbrnjhbz,bigmac,bowling,chris1,ytrewq,natali,pyramid,rulez,welcome1,dodgers,apache,swimming,whynot,teens,trooper,fuckit,defender,precious,135790,packard,weasel,popeye,lucifer,cancer,icecream,142536,raven,swordfish,presario,viktor,rockstar,blonde,james1,wutang,spike,pimp,atlanta,airforce,thailand,casino,lennon,mouse,741852,hacker,bluebird,hawkeye,456123,theone,catfish,sailor,goldfish,nfnmzyf,tattoo,pervert,barbie,maxima,nipples,machine,trucks,wrangler,rocks,tornado,lights,cadillac,bubble,pegasus,madman,longhorn,browns,target,666999,eatme,qazwsx123,microsoft,dilbert,christia,baller,lesbian,shooter,xfiles,seattle,qazqaz,cthutq,amateur,prelude,corona,freaky,malibu,123qweasdzxc,assassin,246810,atlantis,integra,pussies,iloveu,lonewolf,dragons,monkey1,unicorn,software,bobcat,stealth,peewee,openup,753951,srinivas,zaqwsx,valentina,shotgun,trigger,veronika,bruins,coyote,babydoll,joker,dollar,lestat,rocky1,hottie,random,butterfly,wordpass,smiley,sweety,snake,chipper,woody,samurai,devildog,gizmo,maddie,soso123aljg,mistress,freedom1,flipper,express,hjvfirf,moose,cessna,piglet,polaris,teacher,montreal,cookies,wolfgang,scully,fatboy,wicked,balls,tickle,bunny,dfvgbh,foobar,transam,pepsi,fetish,oicu812,basketba,toshiba,hotstuff,sunday,booty,gambit,31415926,impala,stephani,jessica1,hooker,lancer,knicks,shamrock,fuckyou2,stinger,314159,redneck,deftones,squirt,siemens,blaster,trucker,subaru,renegade,ibanez,manson,swinger,reaper,blondie,mylove,galaxy,blahblah,enterpri,travel,1234abcd,babylon5,indiana,skeeter,master1,sugar,ficken,smoke,bigone,sweetpea,fucked,trfnthbyf,marino,escort,smitty,bigfoot,babes,larisa,trumpet,spartan,valera,babylon,asdfghj,yankees1,bigboobs,stormy,mister,hamlet,aardvark,butterfl,marathon,paladin,cavalier,manchester,skater,indigo,hornet,buckeyes,01011990,indians,karate,hesoyam,toronto,diamonds,chiefs,buckeye,1qaz2wsx3edc,highland,hotsex,charger,redman,passwor,maiden,drpepper,storm,pornstar,garden,12345678910,pencil,sherlock,timber,thuglife,insane,pizza,jungle,jesus1,aragorn,1a2b3c,hamster,david1,triumph,techno,lollol,pioneer,catdog,321654,fktrctq,morpheus,141627,pascal,shadow1,hobbit,wetpussy,erotic,consumer,blabla,justme,stones,chrissy,spartak,goforit,burger,pitbull,adgjmptw,italia,barcelona,hunting,colors,kissme,virgin,overlord,pebbles,sundance,emerald,doggy,racecar,irina,element,1478963,zipper,alpine,basket,goddess,poison,nipple,sakura,chichi,huskers,13579,pussys,q12345,ultimate,ncc1701e,blackie,nicola,rommel,matthew1,caserta,omega,geronimo,sammy1,trojan,123qwe123,philips,nugget,tarzan,chicks,aleksandr,bassman,trixie,portugal,anakin,dodger,bomber,superfly,madness,q1w2e3r4t5y6,loser,123asd,fatcat,ybrbnf,soldier,warlock,wrinkle1,desire,sexual,babe,seminole,alejandr,951753,11235813,westham,andrei,concrete,access14,weed,letmein2,ladybug,naked,christop,trombone,tintin,bluesky,rhbcnbyf,qazxswedc,onelove,cdtnkfyf,whore,vfvjxrf,titans,stallion,truck,hansolo,blue22,smiles,beagle,panama,kingkong,flatron,inferno,mongoose,connect,poiuyt,snatch,qawsed,juice,blessed,rocker,snakes,turbo,bluemoon,sex4me,finger,jamaica,a1234567,mulder,beetle,fuckyou1,passat,immortal,plastic,123454321,anthony1,whiskey,dietcoke,suck,spunky,magic1,monitor,cactus,exigen,planet,ripper,teen,spyder,apple1,nolimit,hollywoo,sluts,sticky,trunks,1234321,14789632,pickles,sailing,bonehead,ghbdtnbr,delta,charlott,rubber,911911,112358,molly1,yomama,hongkong,jumper,william1,ilovesex,faster,unreal,cumming,memphis,1123581321,nylons,legion,sebastia,shalom,pentium,geheim,werewolf,funtime,ferret,orion,curious,555666,niners,cantona,sprite,philly,pirates,abgrtyu,lollipop,eternity,boeing,super123,sweets,cooldude,tottenha,green1,jackoff,stocking,7895123,moomoo,martini,biscuit,drizzt,colt45,fossil,makaveli,snapper,satan666,maniac,salmon,patriot,verbatim,nasty,shasta,asdzxc,shaved,blackcat,raistlin,qwerty12345,punkrock,cjkywt,01012010,4128,waterloo,crimson,twister,oxford,musicman,seinfeld,biggie,condor,ravens,megadeth,wolfman,cosmos,sharks,banshee,keeper,foxtrot,gn56gn56,skywalke,velvet,black1,sesame,dogs,squirrel,privet,sunrise,wolverine,sucks,legolas,grendel,ghost,cats,carrot,frosty,lvbnhbq,blades,stardust,frog,qazwsxed,121314,coolio,brownie,groovy,twilight,daytona,vanhalen,pikachu,peanuts,licker,hershey,jericho,intrepid,ninja,1234567a,zaq123,lobster,goblin,punisher,strider,shogun,kansas,amadeus,seven7,jason1,neptune,showtime,muscle,oldman,ekaterina,rfrfirf,getsome,showme,111222333,obiwan,skittles,danni,tanker,maestro,tarheel,anubis,hannibal,anal,newlife,gothic,shark,fighter,blue123,blues,123456z,princes,slick,chaos,thunder1,sabine,1q2w3e4r5t6y,python,test1,mirage,devil,clover,tequila,chelsea1,surfing,delete,potato,chubby,panasonic,sandiego,portland,baggins,fusion,sooners,blackdog,buttons,californ,moscow,playtime,mature,1a2b3c4d,dagger,dima,stimpy,asdf123,gangster,warriors,iverson,chargers,byteme,swallow,liquid,lucky7,dingdong,nymets,cracker,mushroom,456852,crusader,bigguy,miami,dkflbvbh,bugger,nimrod,tazman,stranger,newpass,doodle,powder,gotcha,guardian,dublin,slapshot,septembe,147896325,pepsi1,milano,grizzly,woody1,knights,photos,2468,nookie,charly,rammstein,brasil,123321123,scruffy,munchkin,poopie,123098,kittycat,latino,walnut,1701,thegame,viper1,1passwor,kolobok,picasso,robert1,barcelon,bananas,trance,auburn,coltrane,eatshit,goodluck,starcraft,wheels,parrot,postal,blade,wisdom,pink,gorilla,katerina,pass123,andrew1,shaney14,dumbass,osiris,fuck_inside,oakland,discover,ranger1,spanking,lonestar,bingo,meridian,ping,heather1,dookie,stonecol,megaman,192837465,rjntyjr,ledzep,lowrider,25802580,richard1,firefly,griffey,racerx,paradox,ghjcnj,gangsta,zaq1xsw2,tacobell,weezer,sirius,halflife,buffett,shiloh,123698745,vertigo,sergei,aliens,sobaka,keyboard,kangaroo,sinner,soccer1,0.0.000,bonjour,socrates,chucky,hotboy,sprint,0007,sarah1,scarlet,celica,shazam,formula1,sommer,trebor,qwerasdf,jeep,mailcreated5240,bollox,asshole1,fuckface,honda1,rebels,vacation,lexmark,penguins,12369874,ragnarok,formula,258456,tempest,vfhecz,tacoma,qwertz,colombia,flames,rockon,duck,prodigy,wookie,dodgeram,mustangs,123qaz,sithlord,smoker,server,bang,incubus,scoobydo,oblivion,molson,kitkat,titleist,rescue,zxcv1234,carpet,1122,bigballs,tardis,jimbob,xanadu,blueeyes,shaman,mersedes,pooper,pussy69,golfing,hearts,mallard,12312312,kenwood,patrick1,dogg,cowboys1,oracle,123zxc,nuttertools,102938,topper,1122334455,shemale,sleepy,gremlin,yourmom,123987,gateway1,printer,monkeys,peterpan,mikey,kingston,cooler,analsex,jimbo,pa55word,asterix,freckles,birdman,frank1,defiant,aussie,stud,blondes,tatyana,445566,aspirine,mariners,jackal,deadhead,katrin,anime,rootbeer,frogger,polo,scooter1,hallo,noodles,thomas1,parola,shaolin,celine,11112222,plymouth,creampie,justdoit,ohyeah,fatass,assfuck,amazon,1234567q,kisses,magnus,camel,nopass,bosco,987456,6751520,harley1,putter,champs,massive,spidey,lightnin,camelot,letsgo,gizmodo,aezakmi,bones,caliente,12121,goodtime,thankyou,raiders1,brucelee,redalert,aquarius,456654,catherin,smokin,pooh,mypass,astros,roller,porkchop,sapphire,qwert123,kevin1,a1s2d3f4,beckham,atomic,rusty1,vanilla,qazwsxedcrfv,hunter1,kaktus,cxfcnmt,blacky,753159,elvis1,aggies,blackjac,bangkok,scream,123321q,iforgot,power1,kasper,abc12,buster1,slappy,shitty,veritas,chevrole,amber1,01012001,vader,amsterdam,jammer,primus,spectrum,eduard,granny,horny1,sasha1,clancy,usa123,satan,diamond1,hitler,avenger,1221,spankme,123456qwerty,simba,smudge,scrappy,labrador,john316,syracuse,front242,falcons,husker,candyman,commando,gator,pacman,delta1,pancho,krishna,fatman,clitoris,pineappl,lesbians,8j4ye3uz,barkley,vulcan,punkin,boner,celtics,monopoly,flyboy,romashka,hamburg,123456aa,lick,gangbang,223344,area51,spartans,aaa111,tricky,snuggles,drago,homerun,vectra,homer1,hermes,topcat,cuddles,infiniti,1234567890q,cosworth,goose,phoenix1,killer1,ivanov,bossman,qawsedrf,peugeot,exigent,doberman,durango,brandon1,plumber,telefon,horndog,laguna,rbhbkk,dawg,webmaster,breeze,beast,porsche9,beefcake,leopard,redbull,oscar1,topdog,godsmack,theking,pics,omega1,speaker,viktoria,fuckers,bowler,starbuck,gjkbyf,valhalla,anarchy,blacks,herbie,kingpin,starfish,nokia,loveit,achilles,906090,labtec,ncc1701a,fitness,jordan1,brando,arsenal1,bull,kicker,napass,desert,sailboat,bohica,tractor,hidden,muppet,jackson1,jimmy1,terminator,phillies,pa55w0rd,terror,farside,swingers,legacy,frontier,butthole,doughboy,jrcfyf,tuesday,sabbath,daniel1,nebraska,homers,qwertyuio,azamat,fallen,agent007,striker,camels,iguana,looker,pinkfloy,moloko,qwerty123456,dannyboy,luckydog,789654,pistol,whocares,charmed,skiing,select,franky,puppy,daniil,vladik,vette,vfrcbvrf,ihateyou,nevada,moneys,vkontakte,mandingo,puppies,666777,mystic,zidane,kotenok,dilligaf,budman,bunghole,zvezda,123457,triton,golfball,technics,trojans,panda,laptop,rookie,01011991,15426378,aberdeen,gustav,jethro,enterprise,igor,stripper,filter,hurrican,rfnthbyf,lespaul,gizmo1,butch,132435,dthjybrf,1366613,excalibu,963852,nofear,momoney,possum,cutter,oilers,moocow,cupcake,gbpltw,batman1,splash,svetik,super1,soleil,bogdan,melissa1,vipers,babyboy,tdutybq,lancelot,ccbill,keystone,passwort,flamingo,firefox,dogman,vortex,rebel,noodle,raven1,zaphod,killme,pokemon1,coolman,danila,designer,skinny,kamikaze,deadman,gopher,doobie,warhammer,deeznuts,freaks,engage,chevy1,steve1,apollo13,poncho,hammers,azsxdc,dracula,000007,sassy,bitch1,boots,deskjet,12332,macdaddy,mighty,rangers1,manchest,sterlin,casey1,meatball,mailman,sinatra,cthulhu,summer1,bubbas,cartoon,bicycle,eatpussy,truelove,sentinel,tolkien,breast,capone,lickit,summit,123456k,peter1,daisy1,kitty1,123456789z,crazy1,jamesbon,texas1,sexygirl,362436,sonic,billyboy,redhot,microsof,microlab,daddy1,rockets,iloveyo,fernand,gordon24,danie,cutlass,polska,star69,titties,pantyhos,01011985,thekid,aikido,gofish,mayday,1234qwe,coke,anfield,sony,lansing,smut,scotch,sexx,catman,73501505,hustler,saun,dfkthbz,passwor1,jenny1,azsxdcfv,cheers,irish1,gabrie,tinman,orioles,1225,charlton,fortuna,01011970,airbus,rustam,xtreme,bigmoney,zxcasd,retard,grumpy,huskies,boxing,4runner,kelly1,ultima,warlord,fordf150,oranges,rotten,asdfjkl,superstar,denali,sultan,bikini,saratoga,thor,figaro,sixers,wildfire,vladislav,128500,sparta,mayhem,greenbay,chewie,music1,number1,cancun,fabie,mellon,poiuytrewq,cloud9,crunch,bigtime,chicken1,piccolo,bigbird,321654987,billy1,mojo,01011981,maradona,sandro,chester1,bizkit,rjirfrgbde,789123,rightnow,jasmine1,hyperion,treasure,meatloaf,armani,rovers,jarhead,01011986,cruise,coconut,dragoon,utopia,davids,cosmo,rfhbyf,reebok,1066,charli,giorgi,sticks,sayang,pass1234,exodus,anaconda,zaqxsw,illini,woofwoof,emily1,sandy1,packer,poontang,govols,jedi,tomato,beaner,cooter,creamy,lionking,happy123,albatros,poodle,kenworth,dinosaur,greens,goku,happyday,eeyore,tsunami,cabbage,holyshit,turkey50,memorex,chaser,bogart,orgasm,tommy1,volley,whisper,knopka,ericsson,walleye,321123,pepper1,katie1,chickens,tyler1,corrado,twisted,100000,zorro,clemson,zxcasdqwe,tootsie,milana,zenith,fktrcfylhf,shania,frisco,polniypizdec0211,crazybab,junebug,fugazi,rereirf,vfvekz,1001,sausage,vfczyz,koshka,clapton,justin1,anhyeuem,condom,fubar,hardrock,skywalker,tundra,cocks,gringo,150781,canon,vitalik,aspire,stocks,samsung1,applepie,abc12345,arjay,gandalf1,boob,pillow,sparkle,gmoney,rockhard,lucky13,samiam,everest,hellyeah,bigsexy,skorpion,rfrnec,hedgehog,australi,candle,slacker,dicks,voyeur,jazzman,america1,bobby1,br0d3r,wolfie,vfksirf,1qa2ws3ed,13243546,fright,yosemite,temp,karolina,fart,barsik,surf,cheetah,baddog,deniska,starship,bootie,milena,hithere,kume,greatone,dildo,50cent,0.0.0.000,albion,amanda1,midget,lion,maxell,football1,cyclone,freeporn,nikola,bonsai,kenshin,slider,balloon,roadkill,killbill,222333,jerkoff,78945612,dinamo,tekken,rambler,goliath,cinnamon,malaka,backdoor,fiesta,packers1,rastaman,fletch,sojdlg123aljg,stefano,artemis,calico,nyjets,damnit,robotech,duchess,rctybz,hooter,keywest,18436572,hal9000,mechanic,pingpong,operator,presto,sword,rasputin,spank,bristol,faggot,shado,963852741,amsterda,321456,wibble,carrera,alibaba,majestic,ramses,duster,route66,trident,clipper,steeler,wrestlin,divine,kipper,gotohell,kingfish,snake1,passwords,buttman,pompey,viagra,zxcvbnm1,spurs,332211,slutty,lineage2,oleg,macross,pooter,brian1,qwert1,charles1,slave,jokers,yzerman,swimmer,ne1469,nwo4life,solnce,seamus,lolipop,pupsik,moose1,ivanova,secret1,matador,love69,420247,ktyjxrf,subway,cinder,vermont,pussie,chico,florian,magick,guiness,allsop,ghetto,flash1,a123456789,typhoon,dfkthf,depeche,skydive,dammit,seeker,fuckthis,crysis,kcj9wx5n,umbrella,r2d2c3po,123123q,snoopdog,critter,theboss,ding,162534,splinter,kinky,cyclops,jayhawk,456321,caramel,qwer123,underdog,caveman,onlyme,grapes,feather,hotshot,fuckher,renault,george1,sex123,pippen,000001,789987,floppy,cunts,megapass,1000,pornos,usmc,kickass,great1,quattro,135246,wassup,helloo,p0015123,nicole1,chivas,shannon1,bullseye,java,fishes,blackhaw,jamesbond,tunafish,juggalo,dkflbckfd,123789456,dallas1,translator,122333,beanie,alucard,gfhjkm123,supersta,magicman,ashley1,cohiba,xbox360,caligula,12131415,facial,7753191,dfktynbyf,cobra1,cigars,fang,klingon,bob123,safari,looser,10203,deepthroat,malina,200000,tazmania,gonzo,goalie,jacob1,monaco,cruiser,misfit,vh5150,tommyboy,marino13,yousuck,sharky,vfhufhbnf,horizon,absolut,brighton,123456r,death1,kungfu,maxx,forfun,mamapapa,enter1,budweise,banker,getmoney,kostya,qazwsx12,bigbear,vector,fallout,nudist,gunners,royals,chainsaw,scania,trader,blueboy,walrus,eastside,kahuna,qwerty1234,love123,steph,01011989,cypress,champ,undertaker,ybrjkfq,europa,snowboar,sabres,moneyman,chrisbln,minime,nipper,groucho,whitey,viewsonic,penthous,wolf359,fabric,flounder,coolguy,whitesox,passme,smegma,skidoo,thanatos,fucku2,snapple,dalejr,mondeo,thesims,mybaby,panasoni,sinbad,thecat,topher,frodo,sneakers,q123456,z1x2c3,alfa,chicago1,taylor1,ghjcnjnfr,cat123,olivier,cyber,titanium,0420,madison1,jabroni,dang,hambone,intruder,holly1,gargoyle,sadie1,static,poseidon,studly,newcastl,sexxxx,poppy,johannes,danzig,beastie,musica,buckshot,sunnyday,adonis,bluedog,bonkers,2128506,chrono,compute,spawn,01011988,turbo1,smelly,wapbbs,goldstar,ferrari1,778899,quantum,pisces,boomboom,gunnar,1024,test1234,florida1,nike,superman1,multiplelo,custom,motherlode,1qwerty,westwood,usnavy,apple123,daewoo,korn,stereo,sasuke,sunflowe,watcher,dharma,555777,mouse1,assholes,babyblue,123qwerty,marius,walmart,snoop,starfire,tigger1,paintbal,knickers,aaliyah,lokomotiv,theend,winston1,sapper,rover,erotica,scanner,racer,zeus,sexy69,doogie,bayern,joshua1,newbie,scott1,losers,droopy,outkast,martin1,dodge1,wasser,ufkbyf,rjycnfynby,thirteen,12345z,112211,hotred,deejay,hotpussy,192837,jessic,philippe,scout,panther1,cubbies,havefun,magpie,fghtkm,avalanch,newyork1,pudding,leonid,harry1,cbr600,audia4,bimmer,fucku,01011984,idontknow,vfvfgfgf,1357,aleksey,builder,01011987,zerocool,godfather,mylife,donuts,allmine,redfish,777888,sascha,nitram,bounce,333666,smokes,1x2zkg8w,rodman,stunner,zxasqw12,hoosier,hairy,beretta,insert,123456s,rtyuehe,francesc,tights,cheese1,micron,quartz,hockey1,gegcbr,searay,jewels,bogey,paintball,celeron,padres,bing,syncmaster,ziggy,simon1,beaches,prissy,diehard,orange1,mittens,aleksandra,queens,02071986,biggles,thongs,southpark,artur,twinkle,gretzky,rabota,cambiami,monalisa,gollum,chuckles,spike1,gladiator,whisky,spongebob,sexy1,03082006,mazafaka,meathead,4121,ou8122,barefoot,12345678q,cfitymrf,bigass,a1s2d3,kosmos,blessing,titty,clevelan,terrapin,ginger1,johnboy,maggot,clarinet,deeznutz,336699,stumpy,stoney,footbal,traveler,volvo,bucket,snapon,pianoman,hawkeyes,futbol,casanova,tango,goodboy,scuba,honey1,sexyman,warthog,mustard,abc1234,nickel,10203040,meowmeow,1012,boricua,prophet,sauron,12qwas,reefer,andromeda,crystal1,joker1,90210,goofy,loco,lovesex,triangle,whatsup,mellow,bengals,monster1,maste,01011910,lover1,love1,123aaa,sunshin,smeghead,hokies,sting,welder,rambo,cerberus,bunny1,rockford,monke,1q2w3e4r5,goldwing,gabriell,buzzard,crjhgbjy,james007,rainman,groove,tiberius,purdue,nokia6300,hayabusa,shou,jagger,diver,zigzag,poochie,usarmy,phish,redwood,redwing,12345679,salamander,silver1,abcd123,sputnik,boobie,ripple,eternal,12qw34er,thegreat,allstar,slinky,gesperrt,mishka,whiskers,pinhead,overkill,sweet1,rhfcjnrf,montgom240,sersolution,jamie1,starman,proxy,swords,nikolay,bacardi,rasta,badgirl,rebecca1,wildman,penny1,spaceman,1007,10101,logan1,hacked,bulldog1,helmet,windsor,buffy1,runescape,trapper,123451,banane,dbrnjh,ripken,12345qwe,frisky,shun,fester,oasis,lightning,ib6ub9,cicero,kool,pony,thedog,784512,01011992,megatron,illusion,edward1,napster,11223,squash,roadking,woohoo,19411945,hoosiers,01091989,tracker,bagira,midway,leavemealone,br549,14725836,235689,menace,rachel1,feng,laser,stoned,realmadrid,787898,balloons,tinkerbell,5551212,maria1,pobeda,heineken,sonics,moonlight,optimus,comet,orchid,02071982,jaybird,kashmir,12345678a,chuang,chunky,peach,mortgage,rulezzz,saleen,chuckie,zippy,fishing1,gsxr750,doghouse,maxim,reader,shai,buddah,benfica,chou,salomon,meister,eraser,blackbir,bigmike,starter,pissing,angus,deluxe,eagles1,hardcock,135792468,mian,seahawks,godfathe,bookworm,gregor,intel,talisman,blackjack,babyface,hawaiian,dogfood,zhong,01011975,sancho,ludmila,medusa,mortimer,123456654321,roadrunn,just4me,stalin,01011993,handyman,alphabet,pizzas,calgary,clouds,password2,cgfhnfr,f**k,cubswin,gong,lexus,max123,xxx123,digital1,gfhjkm1,7779311,missy1,michae,beautifu,gator1,1005,pacers,buddie,chinook,heckfy,dutchess,sally1,breasts,beowulf,darkman,jenn,tiffany1,zhei,quan,qazwsx1,satana,shang,idontkno,smiths,puddin,nasty1,teddybea,valkyrie,passwd,chao,boxster,killers,yoda,cheater,inuyasha,beast1,wareagle,foryou,dragonball,mermaid,bhbirf,teddy1,dolphin1,misty1,delphi,gromit,sponge,qazzaq,fytxrf,gameover,diao,sergi,beamer,beemer,kittykat,rancid,manowar,adam12,diggler,assword,austin1,wishbone,gonavy,sparky1,fisting,thedude,sinister,1213,venera,novell,salsero,jayden,fuckoff1,linda1,vedder,02021987,1pussy,redline,lust,jktymrf,02011985,dfcbkbq,dragon12,chrome,gamecube,titten,cong,bella1,leng,02081988,eureka,bitchass,147369,banner,lakota,123321a,mustafa,preacher,hotbox,02041986,z1x2c3v4,playstation,01011977,claymore,electra,checkers,zheng,qing,armagedon,02051986,wrestle,svoboda,bulls,nimbus,alenka,madina,newpass6,onetime,aa123456,bartman,02091987,silverad,electron,12345t,devil666,oliver1,skylar,rhtdtlrj,gobucks,johann,12011987,milkman,02101985,camper,thunderb,bigbutt,jammin,davide,cheeks,goaway,lighter,claudi,thumbs,pissoff,ghostrider,cocaine,teng,squall,lotus,hootie,blackout,doitnow,subzero,02031986,marine1,02021988,pothead,123456qw,skate,1369,peng,antoni,neng,miao,bcfields,1492,marika,794613,musashi,tulips,nong,piao,chai,ruan,southpar,02061985,nude,mandarin,654123,ninjas,cannabis,jetski,xerxes,zhuang,kleopatra,dickie,bilbo,pinky,morgan1,1020,1017,dieter,baseball1,tottenham,quest,yfnfkmz,dirtbike,1234567890a,mango,jackson5,ipswich,iamgod,02011987,tdutybz,modena,qiao,slippery,qweasd123,bluefish,samtron,toon,111333,iscool,02091986,petrov,fuzzy,zhou,1357924680,mollydog,deng,02021986,1236987,pheonix,zhun,ghblehjr,othello,starcraf,000111,sanfran,a11111,cameltoe,badman,vasilisa,jiang,1qaz2ws,luan,sveta,12qw12,akira,chuai,369963,cheech,beatle,pickup,paloma,01011983,caravan,elizaveta,gawker,banzai,pussey,mullet,seng,bingo1,bearcat,flexible,farscape,borussia,zhuai,templar,guitar1,toolman,yfcntymrf,chloe1,xiang,slave1,guai,nuggets,02081984,mantis,slim,scorpio1,fyutkbyf,thedoors,02081987,02061986,123qq123,zappa,fergie,7ugd5hip2j,huai,asdfzxcv,sunflower,pussyman,deadpool,bigtit,01011982,love12,lassie,skyler,gatorade,carpedie,jockey,mancity,spectre,02021984,cameron1,artemka,reng,02031984,iomega,jing,moritz,spice,rhino,spinner,heater,zhai,hover,talon,grease,qiong,corleone,ltybcrf,tian,cowboy1,hippie,chimera,ting,alex123,02021985,mickey1,corsair,sonoma,aaron1,xxxpass,bacchus,webmaste,chuo,xyz123,chrysler,spurs1,artem,shei,cosmic,01020304,deutsch,gabriel1,123455,oceans,987456321,binladen,latinas,a12345678,speedo,buttercu,02081989,21031988,merlot,millwall,ceng,kotaku,jiong,dragonba,2580,stonecold,snuffy,01011999,02011986,hellos,blaze,maggie1,slapper,istanbul,bonjovi,babylove,mazda,bullfrog,phoeni,meng,porsche1,nomore,02061989,bobdylan,capslock,orion1,zaraza,teddybear,ntktajy,myname,rong,wraith,mets,niao,02041984,smokie,chevrolet,dialog,gfhjkmgfhjkm,dotcom,vadim,monarch,athlon,mikey1,hamish,pian,liang,coolness,chui,thoma,ramones,ciccio,chippy,eddie1,house1,ning,marker,cougars,jackpot,barbados,reds,pdtplf,knockers,cobalt,amateurs,dipshit,napoli,kilroy,pulsar,jayhawks,daemon,alexey,weng,shuang,9293709b13,shiner,eldorado,soulmate,mclaren,golfer1,andromed,duan,50spanks,sexyboy,dogshit,02021983,shuo,kakashka,syzygy,111111a,yeahbaby,qiang,netscape,fulham,120676,gooner,zhui,rainbow6,laurent,dog123,halifax,freeway,carlitos,147963,eastwood,microphone,monkey12,1123,persik,coldbeer,geng,nuan,danny1,fgtkmcby,entropy,gadget,just4fun,sophi,baggio,carlito,1234567891,02021989,02041983,specialk,piramida,suan,bigblue,salasana,hopeful,mephisto,bailey1,hack,annie1,generic,violetta,spencer1,arcadia,02051983,hondas,9562876,trainer,jones1,smashing,liao,159632,iceberg,rebel1,snooker,temp123,zang,matteo,fastball,q2w3e4r5,bamboo,fuckyo,shutup,astro,buddyboy,nikitos,redbird,maxxxx,shitface,02031987,kuai,kissmyass,sahara,radiohea,1234asdf,wildcard,maxwell1,patric,plasma,heynow,bruno1,shao,bigfish,misfits,sassy1,sheng,02011988,02081986,testpass,nanook,cygnus,licking,slavik,pringles,xing,1022,ninja1,submit,dundee,tiburon,pinkfloyd,yummy,shuai,guang,chopin,obelix,insomnia,stroker,1a2s3d4f,1223,playboy1,lazarus,jorda,spider1,homerj,sleeper,02041982,darklord,cang,02041988,02041987,tripod,magician,jelly,telephon,15975,vsjasnel12,pasword,iverson3,pavlov,homeboy,gamecock,amigo,brodie,budapest,yjdsqgfhjkm,reckless,02011980,pang,tiger123,2469,mason1,orient,01011979,zong,cdtnbr,maksimka,1011,bushido,taxman,giorgio,sphinx,kazantip,02101984,concorde,verizon,lovebug,georg,sam123,seadoo,qazwsxedc123,jiao,jezebel,pharmacy,abnormal,jellybea,maxime,puffy,islander,bunnies,jiggaman,drakon,010180,pluto,zhjckfd,12365,classics,crusher,mordor,hooligan,strawberry,02081985,scrabble,hawaii50,1224,wg8e3wjf,cthtuf,premium,arrow,123456qwe,mazda626,ramrod,tootie,rhjrjlbk,ghost1,1211,bounty,niang,02071984,goat,killer12,sweetnes,porno1,masamune,426hemi,corolla,mariposa,hjccbz,doomsday,bummer,blue12,zhao,bird33,excalibur,samsun,kirsty,buttfuck,kfhbcf,zhuo,marcello,ozzy,02021982,dynamite,655321,master12,123465,lollypop,stepan,1qa2ws,spiker,goirish,callum,michael2,moonbeam,attila,henry1,lindros,andrea1,sporty,lantern,12365478,nextel,violin,volcom,998877,water1,imation,inspiron,dynamo,citadel,placebo,clowns,tiao,02061988,tripper,dabears,haggis,merlin1,02031985,anthrax,amerika,iloveme,vsegda,burrito,bombers,snowboard,forsaken,katarina,a1a2a3,woofer,tigger2,fullmoon,tiger2,spock,hannah1,snoopy1,sexxxy,sausages,stanislav,cobain,robotics,exotic,green123,mobydick,senators,pumpkins,fergus,asddsa,147741,258852,windsurf,reddevil,vfitymrf,nevermind,nang,woodland,4417,mick,shui,q1q2q3,wingman,69696,superb,zuan,ganesh,pecker,zephyr,anastasiya,icu812,larry1,02081982,broker,zalupa,mihail,vfibyf,dogger,7007,paddle,varvara,schalke,1z2x3c,presiden,yankees2,tuning,poopy,02051982,concord,vanguard,stiffy,rjhjktdf,felix1,wrench,firewall,boxer,bubba69,popper,02011984,temppass,gobears,cuan,tipper,fuckme1,kamila,thong,puss,bigcat,drummer1,02031982,sowhat,digimon,tigers1,rang,jingle,bian,uranus,soprano,mandy1,dusty1,fandango,aloha,pumpkin1,postman,02061980,dogcat,bombay,pussy123,onetwo,highheel,pippo,julie1,laura1,pepito,beng,smokey1,stylus,stratus,reload,duckie,karen1,jimbo1,225588,369258,krusty,snappy,asdf12,electro,111qqq,kuang,fishin,clit,abstr,christma,qqqqq1,1234560,carnage,guyver,boxers,kittens,zeng,1000000,qwerty11,toaster,cramps,yugioh,02061987,icehouse,zxcvbnm123,pineapple,namaste,harrypotter,mygirl,falcon1,earnhard,fender1,spikes,nutmeg,01081989,dogboy,02091983,369852,softail,mypassword,prowler,bigboss,1112,harvest,heng,jubilee,killjoy,basset,keng,zaqxswcde,redsox1,biao,titan,misfit99,robot,wifey,kidrock,02101987,gameboy,enrico,1z2x3c4v,broncos1,arrows,havana,banger,cookie1,chriss,123qw,platypus,cindy1,lumber,pinball,foxy,london1,1023,05051987,02041985,password12,superma,longbow,radiohead,nigga,12051988,spongebo,qwert12345,abrakadabra,dodgers1,02101989,chillin,niceguy,pistons,hookup,santafe,bigben,jets,1013,vikings1,mankind,viktoriya,beardog,hammer1,02071980,reddwarf,magelan,longjohn,jennife,gilles,carmex2,02071987,stasik,bumper,doofus,slamdunk,pixies,garion,steffi,alessandro,beerman,niceass,warrior1,honolulu,134679852,visa,johndeer,mother1,windmill,boozer,oatmeal,aptiva,busty,delight,tasty,slick1,bergkamp,badgers,guitars,puffin,02091981,nikki1,irishman,miller1,zildjian,123000,airwolf,magnet,anai,install,02041981,02061983,astra,romans,megan1,mudvayne,freebird,muscles,dogbert,02091980,02091984,snowflak,01011900,mang,joseph1,nygiants,playstat,junior1,vjcrdf,qwer12,webhompas,giraffe,pelican,jefferso,comanche,bruiser,monkeybo,kjkszpj,123456l,micro,albany,02051987,angel123,epsilon,aladin,death666,hounddog,josephin,altima,chilly,02071988,78945,ultra,02041979,gasman,thisisit,pavel,idunno,kimmie,05051985,paulie,ballin,medion,moondog,manolo,pallmall,climber,fishbone,genesis1,153624,toffee,tbone,clippers,krypton,jerry1,picturs,compass,111111q,02051988,1121,02081977,sairam,getout,333777,cobras,22041987,bigblock,severin,booster,norwich,whiteout,ctrhtn,123456m,02061984,hewlett,shocker,fuckinside,02031981,chase1,white1,versace,123456789s,basebal,iloveyou2,bluebell,08031986,anthon,stubby,foreve,undertak,werder,saiyan,mama123,medic,chipmunk,mike123,mazdarx7,qwe123qwe,bowwow,kjrjvjnbd,celeb,choochoo,demo,lovelife,02051984,colnago,lithium,02051989,15051981,zzzxxx,welcom,anastasi,fidelio,franc,26061987,roadster,stone55,drifter,hookem,hellboy,1234qw,cbr900rr,sinned,good123654,storm1,gypsy,zebra,zachary1,toejam,buceta,02021979,testing1,redfox,lineage,mike1,highbury,koroleva,nathan1,washingt,02061982,02091985,vintage,redbaron,dalshe,mykids,11051987,macbeth,julien,james123,krasotka,111000,10011986,987123,pipeline,tatarin,sensei,codered,komodo,frogman,7894561230,nascar24,juicy,01031988,redrose,mydick,pigeon,tkbpfdtnf,smirnoff,1215,spam,winner1,flyfish,moskva,81fukkc,21031987,olesya,starligh,summer99,13041988,fishhead,freesex,super12,06061986,azazel,scoobydoo,02021981,cabron,yogibear,sheba1,konstantin,tranny,chilli,terminat,ghbywtccf,slowhand,soccer12,cricket1,fuckhead,1002,seagull,achtung,blam,bigbob,bdsm,nostromo,survivor,cnfybckfd,lemonade,boomer1,rainbow1,rober,irinka,cocksuck,peaches1,itsme,sugar1,zodiac,upyours,dinara,135791,sunny1,chiara,johnson1,02041989,solitude,habibi,sushi,markiz,smoke1,rockies,catwoman,johnny1,qwerty7,bearcats,username,01011978,wanderer,ohshit,02101986,sigma,stephen1,paradigm,02011989,flanker,sanity,jsbach,spotty,bologna,fantasia,chevys,borabora,cocker,74108520,123ewq,12021988,01061990,gtnhjdbx,02071981,01011960,sundevil,3000gt,mustang6,gagging,maggi,armstron,yfnfkb,13041987,revolver,02021976,trouble1,madcat,jeremy1,jackass1,volkswag,30051985,corndog,pool6123,marines1,03041991,pizza1,piggy,sissy,02031979,sunfire,angelus,undead,24061986,14061991,wildbill,shinobi,45m2do5bs,123qwer,21011989,cleopatr,lasvega,hornets,amorcit,11081989,coventry,nirvana1,destin,sidekick,20061988,02081983,gbhfvblf,sneaky,bmw325,22021989,nfytxrf,sekret,kalina,zanzibar,hotone,qazws,wasabi,heidi1,highlander,blues1,hitachi,paolo,23041987,slayer1,simba1,02011981,tinkerbe,kieran,01121986,172839,boiler,1125,bluesman,waffle,asdfgh01,threesom,conan,1102,reflex,18011987,nautilus,everlast,fatty,vader1,01071986,cyborg,ghbdtn123,birddog,rubble,02071983,suckers,02021973,skyhawk,12qw12qw,dakota1,joebob,nokia6233,woodie,longdong,lamer,troll,ghjcnjgfhjkm,420000,boating,nitro,armada,messiah,1031,penguin1,02091989,americ,02071989,redeye,asdqwe123,07071987,monty1,goten,spikey,sonata,635241,tokiohotel,sonyericsson,citroen,compaq1,1812,umpire,belmont,jonny,pantera1,nudes,palmtree,14111986,fenway,bighead,razor,gryphon,andyod22,aaaaa1,taco,10031988,enterme,malachi,dogface,reptile,01041985,dindom,handball,marseille,candy1,19101987,torino,tigge,matthias,viewsoni,13031987,stinker,evangelion,24011985,123456123,rampage,sandrine,02081980,thecrow,astral,28041987,sprinter,private1,seabee,shibby,02101988,25081988,fearless,junkie,01091987,aramis,antelope,draven,fuck1,mazda6,eggman,02021990,barselona,buddy123,19061987,fyfnjkbq,nancy1,12121990,10071987,sluggo,kille,hotties,irishka,zxcasdqwe123,shamus,fairlane,honeybee,soccer10,13061986,fantomas,17051988,10051987,20111986,gladiato,karachi,gambler,gordo,01011995,biatch,matthe,25800852,papito,excite,buffalo1,bobdole,cheshire,player1,28021992,thewho,10101986,pinky1,mentor,tomahawk,brown1,03041986,bismillah,bigpoppa,ijrjkfl,01121988,runaway,08121986,skibum,studman,helper,squeak,holycow,manfred,harlem,glock,gideon,987321,14021985,yellow1,wizard1,margarit,success1,medved,sf49ers,lambda,pasadena,johngalt,quasar,1776,02031980,coldplay,amand,playa,bigpimp,04041991,capricorn,elefant,sweetness,bruce1,luca,dominik,10011990,biker,09051945,datsun,elcamino,trinitro,malice,audi,voyager1,02101983,joe123,carpente,spartan1,mario1,glamour,diaper,12121985,22011988,winter1,asimov,callisto,nikolai,pebble,02101981,vendetta,david123,boytoy,11061985,02031989,iloveyou1,stupid1,cayman,casper1,zippo,yamahar1,wildwood,foxylady,calibra,02041980,27061988,dungeon,leedsutd,30041986,11051990,bestbuy,antares,dominion,24680,01061986,skillet,enforcer,derparol,01041988,196969,29071983,f00tball,purple1,mingus,25031987,21031990,remingto,giggles,klaste,3x7pxr,01011994,coolcat,29051989,megane,20031987,02051980,04041988,synergy,0000007,macman,iforget,adgjmp,vjqgfhjkm,28011987,rfvfcenhf,16051989,25121987,16051987,rogue,mamamia,08051990,20091991,1210,carnival,bolitas,paris1,dmitriy,dimas,05051989,papillon,knuckles,29011985,hola,tophat,28021990,100500,cutiepie,devo,415263,ducks,ghjuhfvvf,asdqwe,22021986,freefall,parol,02011983,zarina,buste,vitamin,warez,bigones,17061988,baritone,jamess,twiggy,mischief,bitchy,hetfield,1003,dontknow,grinch,sasha_007,18061990,12031985,12031987,calimero,224466,letmei,15011987,acmilan,alexandre,02031977,08081988,whiteboy,21051991,barney1,02071978,money123,18091985,bigdawg,02031988,cygnusx1,zoloto,31011987,firefigh,blowfish,screamer,lfybbk,20051988,chelse,11121986,01031989,harddick,sexylady,30031988,02041974,auditt,pizdec,kojak,kfgjxrf,20091988,123456ru,wp2003wp,1204,15051990,slugger,kordell1,03031986,swinging,01011974,02071979,rockie,dimples,1234123,1dragon,trucking,rusty2,roger1,marijuana,kerouac,02051978,08031985,paco,thecure,keepout,kernel,noname123,13121985,francisc,bozo,02011982,22071986,02101979,obsidian,12345qw,spud,tabasco,02051985,jaguars,dfktynby,kokomo,popova,notused,sevens,4200,magneto,02051976,roswell,15101986,21101986,lakeside,bigbang,aspen,little1,14021986,loki,suckmydick,strawber,carlos1,nokian73,dirty1,joshu,25091987,16121987,02041975,advent,17011987,slimshady,whistler,10101990,stryker,22031984,15021985,01031985,blueball,26031988,ksusha,bahamut,robocop,w_pass,chris123,impreza,prozac,bookie,bricks,13021990,alice1,cassandr,11111q,john123,4ever,korova,02051973,142857,25041988,paramedi,eclipse1,salope,07091990,1124,darkangel,23021986,999666,nomad,02051981,smackdow,01021990,yoyoma,argentin,moonligh,57chevy,bootys,hardone,capricor,galant,spanker,dkflbr,24111989,magpies,krolik,21051988,cevthrb,cheddar,22041988,bigbooty,scuba1,qwedsa,duffman,bukkake,acura,johncena,sexxy,p@ssw0rd,258369,cherries,12345s,asgard,leopold,fuck123,mopar,lalakers,dogpound,matrix1,crusty,spanner,kestrel,fenris,universa,peachy,assasin,lemmein,eggplant,hejsan,canucks,wendy1,doggy1,aikman,tupac,turnip,godlike,fussball,golden1,19283746,april1,django,petrova,captain1,vincent1,ratman,taekwondo,chocha,serpent,perfect1,capetown,vampir,amore,gymnast,timeout,nbvjatq,blue32,ksenia,k.lvbkf,nazgul,budweiser,clutch,mariya,sylveste,02051972,beaker,cartman1,q11111,sexxx,forever1,loser1,marseill,magellan,vehpbr,sexgod,jktxrf,hallo123,132456,liverpool1,southpaw,seneca,camden,357159,camero,tenchi,johndoe,145236,roofer,741963,vlad,02041978,fktyrf,zxcv123,wingnut,wolfpac,notebook,pufunga7782,brandy1,biteme1,goodgirl,redhat,02031978,challeng,millenium,hoops,maveric,noname,angus1,gaell,onion,olympus,sabrina1,ricard,sixpack,gratis,gagged,camaross,hotgirls,flasher,02051977,bubba123,goldfing,moonshin,gerrard,volkov,sonyfuck,mandrake,258963,tracer,lakers1,asians,susan1,money12,helmut,boater,diablo2,1234zxcv,dogwood,bubbles1,happy2,randy1,aries,beach1,marcius2,navigator,goodie,hellokitty,fkbyjxrf,earthlink,lookout,jumbo,opendoor,stanley1,marie1,12345m,07071977,ashle,wormix,murzik,02081976,lakewood,bluejays,loveya,commande,gateway2,peppe,01011976,7896321,goth,oreo,slammer,rasmus,faith1,knight1,stone1,redskin,ironmaiden,gotmilk,destiny1,dejavu,1master,midnite,timosha,espresso,delfin,toriamos,oberon,ceasar,markie,1a2s3d,ghhh47hj7649,vjkjrj,daddyo,dougie,disco,auggie,lekker,therock1,ou8123,start1,noway,p4ssw0rd,shadow12,333444,saigon,2fast4u,capecod,23skidoo,qazxcv,beater,bremen,aaasss,roadrunner,peace1,12345qwer,02071975,platon,bordeaux,vbkfirf,135798642,test12,supernov,beatles1,qwert40,optimist,vanessa1,prince1,ilovegod,nightwish,natasha1,alchemy,bimbo,blue99,patches1,gsxr1000,richar,hattrick,hott,solaris,proton,nevets,enternow,beavis1,amigos,159357a,ambers,lenochka,147896,suckdick,shag,intercourse,blue1234,spiral,02061977,tosser,ilove,02031975,cowgirl,canuck,q2w3e4,munch,spoons,waterboy,123567,evgeniy,savior,zasada,redcar,mamacita,terefon,globus,doggies,htubcnhfwbz,1008,cuervo,suslik,azertyui,limewire,houston1,stratfor,steaua,coors,tennis1,12345qwerty,stigmata,derf,klondike,patrici,marijuan,hardball,odyssey,nineinch,boston1,pass1,beezer,sandr,charon,power123,a1234,vauxhall,875421,awesome1,reggae,boulder,funstuff,iriska,krokodil,rfntymrf,sterva,champ1,bball,peeper,m123456,toolbox,cabernet,sheepdog,magic32,pigpen,02041977,holein1,lhfrjy,banan,dabomb,natalie1,jennaj,montana1,joecool,funky,steven1,ringo,junio,sammy123,qqqwww,baltimor,footjob,geezer,357951,mash4077,cashmone,pancake,monic,grandam,bongo,yessir,gocubs,nastia,vancouve,barley,dragon69,watford,ilikepie,02071976,laddie,123456789m,hairball,toonarmy,pimpdadd,cvthnm,hunte,davinci,lback,sophie1,firenze,q1234567,admin1,bonanza,elway7,daman,strap,azert,wxcvbn,afrika,theforce,123456t,idefix,wolfen,houdini,scheisse,default,beech,maserati,02061976,sigmachi,dylan1,bigdicks,eskimo,mizzou,02101976,riccardo,egghead,111777,kronos,ghbrjk,chaos1,jomama,rfhnjirf,rodeo,dolemite,cafc91,nittany,pathfind,mikael,password9,vqsablpzla,purpl,gabber,modelsne,myxworld,hellsing,punker,rocknrol,fishon,fuck69,02041976,lolol,twinkie,tripleh,cirrus,redbone,killer123,biggun,allegro,gthcbr,smith1,wanking,bootsy,barry1,mohawk,koolaid,5329,futurama,samoht,klizma,996633,lobo,honeys,peanut1,556677,zxasqw,joemama,javelin,samm,223322,sandra1,flicks,montag,nataly,3006,tasha1,1235789,dogbone,poker1,p0o9i8u7,goodday,smoothie,toocool,max333,metroid,archange,vagabond,billabon,22061941,tyson1,02031973,darkange,skateboard,evolutio,morrowind,wizards,frodo1,rockin,cumslut,plastics,zaqwsxcde,5201314,doit,outback,bumble,dominiqu,persona,nevermore,alinka,02021971,forgetit,sexo,all4one,c2h5oh,petunia,sheeba,kenny1,elisabet,aolsucks,woodstoc,pumper,02011975,fabio,granada,scrapper,123459,minimoni,q123456789,breaker,1004,02091976,ncc74656,slimshad,friendster,austin31,wiseguy,donner,dilbert1,132465,blackbird,buffet,jellybean,barfly,behappy,01011971,carebear,fireblad,02051975,boxcar,cheeky,kiteboy,hello12,panda1,elvisp,opennow,doktor,alex12,02101977,pornking,flamengo,02091975,snowbird,lonesome,robin1,11111a,weed420,baracuda,bleach,12345abc,nokia1,metall,singapor,mariner,herewego,dingo,tycoon,cubs,blunts,proview,123456789d,kamasutra,lagnaf,vipergts,navyseal,starwar,masterbate,wildone,peterbil,cucumber,butkus,123qwert,climax,deniro,gotribe,cement,scooby1,summer69,harrier,shodan,newyear,02091977,starwars1,romeo1,sedona,harald,doubled,sasha123,bigguns,salami,awnyce,kiwi,homemade,pimping,azzer,bradley1,warhamme,linkin,dudeman,qwe321,pinnacle,maxdog,flipflop,lfitymrf,fucker1,acidburn,esquire,sperma,fellatio,jeepster,thedon,sexybitch,pookey,spliff,widget,vfntvfnbrf,trinity1,mutant,samuel1,meliss,gohome,1q2q3q,mercede,comein,grin,cartoons,paragon,henrik,rainyday,pacino,senna,bigdog1,alleycat,12345qaz,narnia,mustang2,tanya1,gianni,apollo11,wetter,clovis,escalade,rainbows,freddy1,smart1,daisydog,s123456,cocksucker,pushkin,lefty,sambo,fyutkjxtr,hiziad,boyz,whiplash,orchard,newark,adrenalin,1598753,bootsie,chelle,trustme,chewy,golfgti,tuscl,ambrosia,5wr2i7h8,penetration,shonuf,jughead,payday,stickman,gotham,kolokol,johnny5,kolbasa,stang,puppydog,charisma,gators1,mone,jakarta,draco,nightmar,01011973,inlove,laetitia,02091973,tarpon,nautica,meadow,0192837465,luckyone,14881488,chessie,goldeney,tarakan,69camaro,bungle,wordup,interne,fuckme2,515000,dragonfl,sprout,02081974,gerbil,bandit1,02071971,melanie1,phialpha,camber,kathy1,adriano,gonzo1,10293847,bigjohn,bismarck,7777777a,scamper,12348765,rabbits,222777,bynthytn,dima123,alexander1,mallorca,dragster,favorite6,beethove,burner,cooper1,fosters,hello2,normandy,777999,sebring,1michael,lauren1,blake1,killa,02091971,nounours,trumpet1,thumper1,playball,xantia,rugby1,rocknroll,guillaum,angela1,strelok,prosper,buttercup,masterp,dbnfkbr,cambridg,venom,treefrog,lumina,1234566,supra,sexybabe,freee,shen,frogs,driller,pavement,grace1,dicky,checker,smackdown,pandas,cannibal,asdffdsa,blue42,zyjxrf,nthvbyfnjh,melrose,neon,jabber,gamma,369258147,aprilia,atticus,benessere,catcher,skipper1,azertyuiop,sixty9,thierry,treetop,jello,melons,123456789qwe,tantra,buzzer,catnip,bouncer,computer1,sexyone,ananas,young1,olenka,sexman,mooses,kittys,sephiroth,contra,hallowee,skylark,sparkles,777333,1qazxsw23edc,lucas1,q1w2e3r,gofast,hannes,amethyst,ploppy,flower2,hotass,amatory,volleyba,dixie1,bettyboo,ticklish,02061974,frenchy,phish1,murphy1,trustno,02061972,leinad,mynameis,spooge,jupiter1,hyundai,frosch,junkmail,abacab,marbles,32167,casio,sunshine1,wayne1,longhair,caster,snicker,02101973,gannibal,skinhead,hansol,gatsby,segblue2,montecar,plato,gumby,kaboom,matty,bosco1,888999,jazzy,panter,jesus123,charlie2,giulia,candyass,sex69,travis1,farmboy,special1,02041973,letsdoit,password01,allison1,abcdefg1,notredam,ilikeit,789654123,liberty1,rugger,uptown,alcatraz,123456w,airman,007bond,navajo,kenobi,terrier,stayout,grisha,frankie1,fluff,1qazzaq1,1234561,virginie,1234568,tango1,werdna,octopus,fitter,dfcbkbcf,blacklab,115599,montrose,allen1,supernova,frederik,ilovepussy,justice1,radeon,playboy2,blubber,sliver,swoosh,motocros,lockdown,pearls,thebear,istheman,pinetree,biit,1234rewq,rustydog,tampabay,titts,babycake,jehovah,vampire1,streaming,collie,camil,fidelity,calvin1,stitch,gatit,restart,puppy1,budgie,grunt,capitals,hiking,dreamcas,zorro1,321678,riffraff,makaka,playmate,napalm,rollin,amstel,zxcvb123,samanth,rumble,fuckme69,jimmys,951357,pizzaman,1234567899,tralala,delpiero,alexi,yamato,itisme,1million,vfndtq,kahlua,londo,wonderboy,carrots,tazz,ratboy,rfgecnf,02081973,nico,fujitsu,tujhrf,sergbest,blobby,02051970,sonic1,1357911,smirnov,video1,panhead,bucky,02031974,44332211,duffer,cashmoney,left4dead,bagpuss,salman,01011972,titfuck,66613666,england1,malish,dresden,lemans,darina,zapper,123456as,123456qqq,met2002,02041972,redstar,blue23,1234509876,pajero,booyah,please1,tetsuo,semper,finder,hanuman,sunlight,123456n,02061971,treble,cupoi,password99,dimitri,3ip76k2,popcorn1,lol12345,stellar,nympho,shark1,keith1,saskia,bigtruck,revoluti,rambo1,asd222,feelgood,phat,gogators,bismark,cola,puck,furball,burnout,slonik,bowtie,mommy1,icecube,fabienn,mouser,papamama,rolex,giants1,blue11,trooper1,momdad,iklo,morten,rhubarb,gareth,123456d,blitz,canada1,r2d2,brest,tigercat,usmarine,lilbit,benny1,azrael,lebowski,12345r,madagaskar,begemot,loverman,dragonballz,italiano,mazda3,naughty1,onions,diver1,cyrano,capcom,asdfg123,forlife,fisherman,weare138,requiem,mufasa,alpha123,piercing,hellas,abracadabra,duckman,caracas,macintos,02011971,jordan2,crescent,fduecn,hogtied,eatmenow,ramjet,18121812,kicksass,whatthe,discus,rfhfvtkmrf,rufus1,sqdwfe,mantle,vegitto,trek,dan123,paladin1,rudeboy,liliya,lunchbox,riversid,acapulco,libero,dnsadm,maison,toomuch,boobear,hemlock,sextoy,pugsley,misiek,athome,migue,altoids,marcin,123450,rhfcfdbwf,jeter2,rhinos,rjhjkm,mercury1,ronaldinho,shampoo,makayla,kamilla,masterbating,tennesse,holger,john1,matchbox,hores,poptart,parlament,goodyear,asdfgh1,02081970,hardwood,alain,erection,hfytnrb,highlife,implants,benjami,dipper,jeeper,bendover,supersonic,babybear,laserjet,gotenks,bama,natedogg,aol123,pokemo,rabbit1,raduga,sopranos,cashflow,menthol,pharao,hacking,334455,ghjcnbnenrf,lizzy,muffin1,pooky,penis1,flyer,gramma,dipset,becca,ireland1,diana1,donjuan,pong,ziggy1,alterego,simple1,cbr900,logger,111555,claudia1,cantona7,matisse,ljxtymrf,victori,harle,mamas,encore,mangos,iceman1,diamon,alexxx,tiamat,5000,desktop,mafia,smurf,princesa,shojou,blueberr,welkom,maximka,123890,123q123,tammy1,bobmarley,clips,demon666,ismail,termite,laser1,missie,altair,donna1,bauhaus,trinitron,mogwai,flyers88,juniper,nokia5800,boroda,jingles,qwerasdfzxcv,shakur,777666,legos,mallrats,1qazxsw,goldeneye,tamerlan,julia1,backbone,spleen,49ers,shady,darkone,medic1,justi,giggle,cloudy,aisan,douche,parkour,bluejay,huskers1,redwine,1qw23er4,satchmo,1231234,nineball,stewart1,ballsack,probes,kappa,amiga,flipper1,dortmund,963258,trigun,1237895,homepage,blinky,screwy,gizzmo,belkin,chemist,coolhand,chachi,braves1,thebest,greedisgood,pro100,banana1,101091m,123456g,wonderfu,barefeet,8inches,1111qqqq,kcchiefs,qweasdzxc123,metal1,jennifer1,xian,asdasd123,pollux,cheerleaers,fruity,mustang5,turbos,shopper,photon,espana,hillbill,oyster,macaroni,gigabyte,jesper,motown,tuxedo,buster12,triplex,cyclones,estrell,mortis,holla,456987,fiddle,sapphic,jurassic,thebeast,ghjcnjq,baura,spock1,metallica1,karaoke,nemrac58,love1234,02031970,flvbybcnhfnjh,frisbee,diva,ajax,feathers,flower1,soccer11,allday,mierda,pearl1,amature,marauder,333555,redheads,womans,egorka,godbless,159263,nimitz,aaaa1111,sashka,madcow,socce,greywolf,baboon,pimpdaddy,123456789r,reloaded,lancia,rfhfylfi,dicker,placid,grimace,22446688,olemiss,whores,culinary,wannabe,maxi,1234567aa,amelie,riley1,trample,phantom1,baberuth,bramble,asdfqwer,vides,4you,abc123456,taichi,aztnm,smother,outsider,hakr,blackhawk,bigblack,girlie,spook,valeriya,gianluca,freedo,1q2q3q4q,handbag,lavalamp,cumm,pertinant,whatup,nokia123,redlight,patrik,111aaa,poppy1,dfytxrf,aviator,sweeps,kristin1,cypher,elway,yinyang,access1,poophead,tucson,noles1,monterey,waterfal,dank,dougal,918273,suede,minnesot,legman,bukowski,ganja,mammoth,riverrat,asswipe,daredevi,lian,arizona1,kamikadze,alex1234,smile1,angel2,55bgates,bellagio,0001,wanrltw,stiletto,lipton,arsena,biohazard,bbking,chappy,tetris,as123456,darthvad,lilwayne,nopassword,7412369,123456789987654321,natchez,glitter,14785236,mytime,rubicon,moto,pyon,wazzup,tbird,shane1,nightowl,getoff,beckham7,trueblue,hotgirl,nevermin,deathnote,13131,taffy,bigal,copenhag,apricot,gallaries,dtkjcbgtl,totoro,onlyone,civicsi,jesse1,baby123,sierra1,festus,abacus,sickboy,fishtank,fungus,charle,golfpro,teensex,mario66,seaside,aleksei,rosewood,blackberry,1020304050,bedlam,schumi,deerhunt,contour,darkelf,surveyor,deltas,pitchers,741258963,dipstick,funny1,lizzard,112233445566,jupiter2,softtail,titman,greenman,z1x2c3v4b5,smartass,12345677,notnow,myworld,nascar1,chewbacc,nosferatu,downhill,dallas22,kuan,blazers,whales,soldat,craving,powerman,yfcntyf,hotrats,cfvceyu,qweasdzx,princess1,feline,qqwwee,chitown,1234qaz,mastermind,114477,dingbat,care1839,standby,kismet,atreides,dogmeat,icarus,monkeyboy,alex1,mouses,nicetits,sealteam,chopper1,crispy,winter99,rrpass1,myporn,myspace1,corazo,topolino,ass123,lawman,muffy,orgy,1love,passord,hooyah,ekmzyf,pretzel,amonra,nestle,01011950,jimbeam,happyman,z12345,stonewal,helios,manunited,harcore,dick1,gaymen,2hot4u,light1,qwerty13,kakashi,pjkjnj,alcatel,taylo,allah,buddydog,ltkmaby,mongo,blonds,start123,audia6,123456v,civilwar,bellaco,turtles,mustan,deadspin,aaa123,fynjirf,lucky123,tortoise,amor,summe,waterski,zulu,drag0n,dtxyjcnm,gizmos,strife,interacial,pusyy,goose1,bear1,equinox,matri,jaguar1,tobydog,sammys,nachos,traktor,bryan1,morgoth,444555,dasani,miami1,mashka,xxxxxx1,ownage,nightwin,hotlips,passmast,cool123,skolko,eldiablo,manu,1357908642,screwyou,badabing,foreplay,hydro,kubrick,seductive,demon1,comeon,galileo,aladdin,metoo,happines,902100,mizuno,caddy,bizzare,girls1,redone,ohmygod,sable,bonovox,girlies,hamper,opus,gizmodo1,aaabbb,pizzahut,999888,rocky2,anton1,kikimora,peavey,ocelot,a1a2a3a4,2wsx3edc,jackie1,solace,sprocket,galary,chuck1,volvo1,shurik,poop123,locutus,virago,wdtnjxtr,tequier,bisexual,doodles,makeitso,fishy,789632145,nothing1,fishcake,sentry,libertad,oaktree,fivestar,adidas1,vegitta,mississi,spiffy,carme,neutron,vantage,agassi,boners,123456789v,hilltop,taipan,barrage,kenneth1,fister,martian,willem,lfybkf,bluestar,moonman,ntktdbpjh,paperino,bikers,daffy,benji,quake,dragonfly,suckcock,danilka,lapochka,belinea,calypso,asshol,camero1,abraxas,mike1234,womam,q1q2q3q4q5,youknow,maxpower,pic\\'s,audi80,sonora,raymond1,tickler,tadpole,belair,crazyman,finalfantasy,999000,jonatha,paisley,kissmyas,morgana,monste,mantra,spunk,magic123,jonesy,mark1,alessand,741258,baddest,ghbdtnrfrltkf,zxccxz,tictac,augustin,racers,7grout,foxfire,99762000,openit,nathanie,1z2x3c4v5b,seadog,gangbanged,lovehate,hondacbr,harpoon,mamochka,fisherma,bismilla,locust,wally1,spiderman1,saffron,utjhubq,123456987,20spanks,safeway,pisser,bdfyjd,kristen1,bigdick1,magenta,vfhujif,anfisa,friday13,qaz123wsx,0987654321q,tyrant,guan,meggie,kontol,nurlan,ayanami,rocket1,yaroslav,websol76,mutley,hugoboss,websolutions,elpaso,gagarin,badboys,sephirot,918273645,newuser,qian,edcrfv,booger1,852258,lockout,timoxa94,mazda323,firedog,sokolova,skydiver,jesus777,1234567890z,soulfly,canary,malinka,guillerm,hookers,dogfart,surfer1,osprey,india123,rhjkbr,stoppedby,nokia5530,123456789o,blue1,werter,divers,3000,123456f,alpina,cali,whoknows,godspeed,986532,foreskin,fuzzy1,heyyou,didier,slapnuts,fresno,rosebud1,sandman1,bears1,blade1,honeybun,queen1,baronn,pakista,philipp,9111961,topsecret,sniper1,214365,slipper,letsfuck,pippen33,godawgs,mousey,qw123456,scrotum,loveis,lighthou,bp2002,nancy123,jeffrey1,susieq,buddy2,ralphie,trout1,willi,antonov,sluttey,rehbwf,marty1,darian,losangeles,letme1n,12345d,pusssy,godiva,ender,golfnut,leonidas,a1b2c3d4e5,puffer,general1,wizzard,lehjxrf,racer1,bigbucks,cool12,buddys,zinger,esprit,vbienrf,josep,tickling,froggie,987654321a,895623,daddys,crumbs,gucci,mikkel,opiate,tracy1,christophe,came11,777555,petrovich,humbug,dirtydog,allstate,horatio,wachtwoord,creepers,squirts,rotary,bigd,georgia1,fujifilm,2sweet,dasha,yorkie,slimjim,wiccan,kenzie,system1,skunk,b12345,getit,pommes,daredevil,sugars,bucker,piston,lionheart,1bitch,515051,catfight,recon,icecold,fantom,vodafone,kontakt,boris1,vfcnth,canine,01011961,valleywa,faraon,chickenwing101,qq123456,livewire,livelife,roosters,jeepers,ilya1234,coochie,pavlik,dewalt,dfhdfhf,architec,blackops,1qaz2wsx3edc4rfv,rhfcjnf,wsxedc,teaser,sebora,25252,rhino1,ankara,swifty,decimal,redleg,shanno,nermal,candies,smirnova,dragon01,photo1,ranetki,a1s2d3f4g5,axio,wertzu,maurizio,6uldv8,zxcvasdf,punkass,flowe,graywolf,peddler,3rjs1la7qe,mpegs,seawolf,ladyboy,pianos,piggies,vixen,alexus,orpheus,gdtrfb,z123456,macgyver,hugetits,ralph1,flathead,maurici,mailru,goofball,nissan1,nikon,stopit,odin,big1,smooch,reboot,famil,bullit,anthony7,gerhard,methos,124038,morena,eagle2,jessica2,zebras,getlost,gfynthf,123581321,sarajevo,indon,comets,tatjana,rfgbnjirf,joystick,batman12,123456c,sabre,beerme,victory1,kitties,1475369,badboy1,booboo1,comcast,slava,squid,saxophon,lionhear,qaywsx,bustle,nastena,roadway,loader,hillside,starlight,24681012,niggers,access99,bazooka,molly123,blackice,bandi,cocacol,nfhfrfy,timur,muschi,horse1,quant4307s,squerting,oscars,mygirls,flashman,tangerin,goofy1,p0o9i8,housewifes,newness,monkey69,escorpio,password11,hippo,warcraft3,qazxsw123,qpalzm,ribbit,ghbdtndctv,bogota,star123,258000,lincoln1,bigjim,lacoste,firestorm,legenda,indain,ludacris,milamber,1009,evangeli,letmesee,a111111,hooters1,bigred1,shaker,husky,a4tech,cnfkrth,argyle,rjhjdf,nataha,0o9i8u7y,gibson1,sooners1,glendale,archery,hoochie,stooge,aaaaaa1,scorpions,school1,vegas1,rapier,mike23,bassoon,groupd2013,macaco,baker1,labia,freewill,santiag,silverado,butch1,vflfufcrfh,monica1,rugrat,cornhole,aerosmit,bionicle,gfgfvfvf,daniel12,virgo,fmale,favorite2,detroit1,pokey,shredder,baggies,wednesda,cosmo1,mimosa,sparhawk,firehawk,romario,911turbo,funtimes,fhntvrf,nexus6,159753456,timothy1,bajingan,terry1,frenchie,raiden,1mustang,babemagnet,74123698,nadejda,truffles,rapture,douglas1,lamborghini,motocross,rjcvjc,748596,skeeter1,dante1,angel666,telecom,carsten,pietro,bmw318,astro1,carpediem,samir,orang,helium,scirocco,fuzzball,rushmore,rebelz,hotspur,lacrimosa,chevys10,madonna1,domenico,yfnfirf,jachin,shelby1,bloke,dawgs,dunhill,atlanta1,service1,mikado,devilman,angelit,reznor,euphoria,lesbain,checkmat,browndog,phreak,blaze1,crash1,farida,mutter,luckyme,horsemen,vgirl,jediknig,asdas,cesare,allnight,rockey,starlite,truck1,passfan,close-up,samue,cazzo,wrinkles,homely,eatme1,sexpot,snapshot,dima1995,asthma,thetruth,ducky,blender,priyanka,gaucho,dutchman,sizzle,kakarot,651550,passcode,justinbieber,666333,elodie,sanjay,110442,alex01,lotus1,2300mj,lakshmi,zoomer,quake3,12349876,teapot,12345687,ramada,pennywis,striper,pilot1,chingon,optima,nudity,ethan1,euclid,beeline,loyola,biguns,zaq12345,bravo1,disney1,buffa,assmunch,vivid,6661313,wellingt,aqwzsx,madala11,9874123,sigmar,pictere,tiptop,bettyboop,dinero,tahiti,gregory1,bionic,speed1,fubar1,lexus1,denis1,hawthorn,saxman,suntzu,bernhard,dominika,camaro1,hunter12,balboa,bmw2002,seville,diablo1,vfhbyjxrf,1234abc,carling,lockerroom,punani,darth,baron1,vaness,1password,libido,picher,232425,karamba,futyn007,daydream,11001001,dragon123,friends1,bopper,rocky123,chooch,asslover,shimmer,riddler,openme,tugboat,sexy123,midori,gulnara,christo,swatch,laker,offroad,puddles,hackers,mannheim,manager1,horseman,roman1,dancer1,komputer,pictuers,nokia5130,ejaculation,lioness,123456y,evilone,nastenka,pushok,javie,lilman,3141592,mjolnir,toulouse,pussy2,bigworm,smoke420,fullback,extensa,dreamcast,belize,delboy,willie1,casablanca,csyjxtr,ricky1,bonghit,salvator,basher,pussylover,rosie1,963258741,vivitron,cobra427,meonly,armageddon,myfriend,zardoz,qwedsazxc,kraken,fzappa,starfox,333999,illmatic,capoeira,weenie,ramzes,freedom2,toasty,pupkin,shinigami,fhvfutljy,nocturne,churchil,thumbnils,tailgate,neworder,sexymama,goarmy,cerebus,michelle1,vbifyz,surfsup,earthlin,dabulls,basketbal,aligator,mojojojo,saibaba,welcome2,wifes,wdtnjr,12345w,slasher,papabear,terran,footman,hocke,153759,texans,tom123,sfgiants,billabong,aassdd,monolith,xxx777,l3tm31n,ticktock,newone,hellno,japanees,contortionist,admin123,scout1,alabama1,divx1,rochard,privat,radar1,bigdad,fhctybq,tortuga,citrus,avanti,fantasy1,woodstock,s12345,fireman1,embalmer,woodwork,bonzai,konyor,newstart,jigga,panorama,goats,smithy,rugrats,hotmama,daedalus,nonstop,fruitbat,lisenok,quaker,violator,12345123,my3sons,cajun,fraggle,gayboy,oldfart,vulva,knickerless,orgasms,undertow,binky,litle,kfcnjxrf,masturbation,bunnie,alexis1,planner,transexual,sparty,leeloo,monies,fozzie,stinger1,landrove,anakonda,scoobie,yamaha1,henti,star12,rfhlbyfk,beyonce,catfood,cjytxrf,zealots,strat,fordtruc,archangel,silvi,sativa,boogers,miles1,bigjoe,tulip,petite,greentea,shitter,jonboy,voltron,morticia,evanescence,3edc4rfv,longshot,windows1,serge,aabbcc,starbucks,sinful,drywall,prelude1,www123,camel1,homebrew,marlins,123412,letmeinn,domini,swampy,plokij,fordf350,webcam,michele1,bolivi,27731828,wingzero,qawsedrftg,shinji,sverige,jasper1,piper1,cummer,iiyama,gocats,amour,alfarome,jumanji,mike69,fantasti,1monkey,w00t88,shawn1,lorien,1a2s3d4f5g,koleso,murph,natascha,sunkist,kennwort,emine,grinder,m12345,q1q2q3q4,cheeba,money2,qazwsxedc1,diamante,prosto,pdiddy,stinky1,gabby1,luckys,franci,pornographic,moochie,gfhjdjp,samdog,empire1,comicbookdb,emili,motdepasse,iphone,braveheart,reeses,nebula,sanjose,bubba2,kickflip,arcangel,superbow,porsche911,xyzzy,nigger1,dagobert,devil1,alatam,monkey2,barbara1,12345v,vfpfafrf,alessio,babemagn,aceman,arrakis,kavkaz,987789,jasons,berserk,sublime1,rogue1,myspace,buckwhea,csyekz,pussy4me,vette1,boots1,boingo,arnaud,budlite,redstorm,paramore,becky1,imtheman,chango,marley1,milkyway,666555,giveme,mahalo,lux2000,lucian,paddy,praxis,shimano,bigpenis,creeper,newproject2004,rammstei,j3qq4h7h2v,hfljcnm,lambchop,anthony2,bugman,gfhjkm12,dreamer1,stooges,cybersex,diamant,cowboyup,maximus1,sentra,615243,goethe,manhatta,fastcar,selmer,1213141516,yfnfitymrf,denni,chewey,yankee1,elektra,123456789p,trousers,fishface,topspin,orwell,vorona,sodapop,motherfu,ibilltes,forall,kookie,ronald1,balrog,maximilian,mypasswo,sonny1,zzxxcc,tkfkdg,magoo,mdogg,heeled,gitara,lesbos,marajade,tippy,morozova,enter123,lesbean,pounded,asd456,fialka,scarab,sharpie,spanky1,gstring,sachin,12345asd,princeto,hellohel,ursitesux,billows,1234kekc,kombat,cashew,duracell,kseniya,sevenof9,kostik,arthur1,corvet07,rdfhnbhf,songoku,tiberian,needforspeed,1qwert,dropkick,kevin123,panache,libra,a123456a,kjiflm,vfhnsirf,cntgfy,iamcool,narut,buffer,sk8ordie,urlaub,fireblade,blanked,marishka,gemini1,altec,gorillaz,chief1,revival47,ironman1,space1,ramstein,doorknob,devilmaycry,nemesis1,sosiska,pennstat,monday1,pioner,shevchenko,detectiv,evildead,blessed1,aggie,coffees,tical,scotts,bullwink,marsel,krypto,adrock,rjitxrf,asmodeus,rapunzel,theboys,hotdogs,deepthro,maxpayne,veronic,fyyeirf,otter,cheste,abbey1,thanos,bedrock,bartok,google1,xxxzzz,rodent,montecarlo,hernande,mikayla,123456789l,bravehea,12locked,ltymub,pegasus1,ameteur,saltydog,faisal,milfnew,momsuck,everques,ytngfhjkz,m0nkey,businessbabe,cooki,custard,123456ab,lbvjxrf,outlaws,753357,qwerty78,udacha,insider,chees,fuckmehard,shotokan,katya,seahorse,vtldtlm,turtle1,mike12,beebop,heathe,everton1,darknes,barnie,rbcekz,alisher,toohot,theduke,555222,reddog1,breezy,bulldawg,monkeyman,baylee,losangel,mastermi,apollo1,aurelie,zxcvb12345,cayenne,bastet,wsxzaq,geibcnbr,yello,fucmy69,redwall,ladybird,bitchs,cccccc1,rktjgfnhf,ghjdthrf,quest1,oedipus,linus,impalass,fartman,12345k,fokker,159753a,optiplex,bbbbbb1,realtor,slipkno,santacru,rowdy,jelena,smeller,3984240,ddddd1,sexyme,janet1,3698741,eatme69,cazzone,today1,poobear,ignatius,master123,newpass1,heather2,snoopdogg,blondinka,pass12,honeydew,fuckthat,890098890,lovem,goldrush,gecko,biker1,llama,pendejo,avalanche,fremont,snowman1,gandolf,chowder,1a2b3c4d5e,flyguy,magadan,1fuck,pingvin,nokia5230,ab1234,lothar,lasers,bignuts,renee1,royboy,skynet,12340987,1122334,dragrace,lovely1,22334455,booter,12345612,corvett,123456qq,capital1,videoes,funtik,wyvern,flange,sammydog,hulkster,13245768,not4you,vorlon,omegared,l58jkdjp!,filippo,123mudar,samadams,petrus,chris12,charlie123,123456789123,icetea,sunderla,adrian1,123qweas,kazanova,aslan,monkey123,fktyeirf,goodsex,123ab,lbtest,banaan,bluenose,837519,asd12345,waffenss,whateve,1a2a3a4a,trailers,vfhbirf,bhbcrf,klaatu,turk182,monsoon,beachbum,sunbeam,succes,clyde1,viking1,rawhide,bubblegum,princ,mackenzi,hershey1,222555,dima55,niggaz,manatee,aquila,anechka,pamel,bugsbunn,lovel,sestra,newport1,althor,hornyman,wakeup,zzz111,phishy,cerber,torrent,thething,solnishko,babel,buckeye1,peanu,ethernet,uncencored,baraka,665544,chris2,rb26dett,willy1,choppers,texaco,biggirl,123456b,anna2614,sukebe,caralho,callofduty,rt6ytere,jesus7,angel12,1money,timelord,allblack,pavlova,romanov,tequiero,yitbos,lookup,bulls23,snowflake,dickweed,barks,lever,irisha,firestar,fred1234,ghjnjnbg,danman,gatito,betty1,milhouse,kbctyjr,masterbaiting,delsol,papit,doggys,123698741,bdfyjdf,invictus,bloods,kayla1,yourmama,apple2,angelok,bigboy1,pontiac1,verygood,yeshua,twins2,porn4me,141516,rasta69,james2,bosshog,candys,adventur,stripe,djkjlz,dokken,austin316,skins,hogwarts,vbhevbh,navigato,desperado,xxx666,cneltyn,vasiliy,hazmat,daytek,eightbal,fred1,four20,74227422,fabia,aerosmith,manue,wingchun,boohoo,hombre,sanity72,goatboy,fuckm,partizan,avrora,utahjazz,submarin,pussyeat,heinlein,control1,costaric,smarty,chuan,triplets,snowy,snafu,teacher1,vangogh,vandal,evergree,cochise,qwerty99,pyramid1,saab900,sniffer,qaz741,lebron23,mark123,wolvie,blackbelt,yoshi,feeder,janeway,nutella,fuking,asscock,deepak,poppie,bigshow,housewife,grils,tonto,cynthia1,temptress,irakli,belle1,russell1,manders,frank123,seabass,gforce,songbird,zippy1,naught,brenda1,chewy1,hotshit,topaz,43046721,girfriend,marinka,jakester,thatsme,planeta,falstaff,patrizia,reborn,riptide,cherry1,shuan,nogard,chino,oasis1,qwaszx12,goodlife,davis1,1911a1,harrys,shitfuck,12345678900,russian7,007700,bulls1,porshe,danil,dolphi,river1,sabaka,gobigred,deborah1,volkswagen,miamo,alkaline,muffdive,1letmein,fkbyrf,goodguy,hallo1,nirvan,ozzie,cannonda,cvbhyjdf,marmite,germany1,joeblow,radio1,love11,raindrop,159852,jacko,newday,fathead,elvis123,caspe,citibank,sports1,deuce,boxter,fakepass,golfman,snowdog,birthday4,nonmembe,niklas,parsifal,krasota,theshit,1235813,maganda,nikita1,omicron,cassie1,columbo,buick,sigma1,thistle,bassin,rickster,apteka,sienna,skulls,miamor,coolgirl,gravis,1qazxc,virgini,hunter2,akasha,batma,motorcyc,bambino,tenerife,fordf250,zhuan,iloveporn,markiza,hotbabes,becool,fynjybyf,wapapapa,forme,mamont,pizda,dragonz,sharon1,scrooge,mrbill,pfloyd,leeroy,natedog,ishmael,777111,tecumseh,carajo,nfy.irf,0000000000o,blackcock,fedorov,antigone,feanor,novikova,bobert,peregrin,spartan117,pumkin,rayman,manuals,tooltime,555333,bonethug,marina1,bonnie1,tonyhawk,laracroft,mahalkita,18273645,terriers,gamer,hoser,littlema,molotok,glennwei,lemon1,caboose,tater,12345654321,brians,fritz1,mistral,jigsaw,fuckshit,hornyguy,southside,edthom,antonio1,bobmarle,pitures,ilikesex,crafty,nexus,boarder,fulcrum,astonvil,yanks1,yngwie,account1,zooropa,hotlegs,sammi,gumbo,rover1,perkele,maurolarastefy,lampard,357753,barracud,dmband,abcxyz,pathfinder,335577,yuliya,micky,jayman,asdfg12345,1596321,halcyon,rerfhtre,feniks,zaxscd,gotyoass,jaycee,samson1,jamesb,vibrate,grandpri,camino,colossus,davidb,mamo4ka,nicky1,homer123,pinguin,watermelon,shadow01,lasttime,glider,823762,helen1,pyramids,tulane,osama,rostov,john12,scoote,bhbyrf,gohan,galeries,joyful,bigpussy,tonka,mowgli,astalavista,zzz123,leafs,dalejr8,unicorn1,777000,primal,bigmama,okmijn,killzone,qaz12345,snookie,zxcvvcxz,davidc,epson,rockman,ceaser,beanbag,katten,3151020,duckhunt,segreto,matros,ragnar,699669,sexsexse,123123z,fuckyeah,bigbutts,gbcmrf,element1,marketin,saratov,elbereth,blaster1,yamahar6,grime,masha,juneau,1230123,pappy,lindsay1,mooner,seattle1,katzen,lucent,polly1,lagwagon,pixie,misiaczek,666666a,smokedog,lakers24,eyeball,ironhors,ametuer,volkodav,vepsrf,kimmy,gumby1,poi098,ovation,1q2w3,drinker,penetrating,summertime,1dallas,prima,modles,takamine,hardwork,macintosh,tahoe,passthie,chiks,sundown,flowers1,boromir,music123,phaedrus,albert1,joung,malakas,gulliver,parker1,balder,sonne,jessie1,domainlock2005,express1,vfkbyf,youandme,raketa,koala,dhjnvytyjub,nhfrnjh,testibil,ybrbnjc,987654321q,axeman,pintail,pokemon123,dogggg,shandy,thesaint,11122233,x72jhhu3z,theclash,raptors,zappa1,djdjxrf,hell666,friday1,vivaldi,pluto1,lance1,guesswho,jeadmi,corgan,skillz,skippy1,mango1,gymnastic,satori,362514,theedge,cxfcnkbdfz,sparkey,deicide,bagels,lololol,lemmings,r4e3w2q1,silve,staind,schnuffi,dazzle,basebal1,leroy1,bilbo1,luckie,qwerty2,goodfell,hermione,peaceout,davidoff,yesterda,killah,flippy,chrisb,zelda1,headless,muttley,fuckof,tittys,catdaddy,photog,beeker,reaver,ram1500,yorktown,bolero,tryagain,arman,chicco,learjet,alexei,jenna1,go2hell,12s3t4p55,momsanaladventure,mustang9,protoss,rooter,ginola,dingo1,mojave,erica1,1qazse4,marvin1,redwolf,sunbird,dangerou,maciek,girsl,hawks1,packard1,excellen,dashka,soleda,toonces,acetate,nacked,jbond007,alligator,debbie1,wellhung,monkeyma,supers,rigger,larsson,vaseline,rjnzhf,maripos,123456asd,cbr600rr,doggydog,cronic,jason123,trekker,flipmode,druid,sonyvaio,dodges,mayfair,mystuff,fun4me,samanta,sofiya,magics,1ranger,arcane,sixtynin,222444,omerta,luscious,gbyudby,bobcats,envision,chance1,seaweed,holdem,tomate,mensch,slicer,acura1,goochi,qweewq,punter,repoman,tomboy,never1,cortina,gomets,147896321,369852147,dogma,bhjxrf,loglatin,eragon,strato,gazelle,growler,885522,klaudia,payton34,fuckem,butchie,scorpi,lugano,123456789k,nichola,chipper1,spide,uhbujhbq,rsalinas,vfylfhby,longhorns,bugatti,everquest,!qaz2wsx,blackass,999111,snakeman,p455w0rd,fanatic,family1,pfqxbr,777vlad,mysecret,marat,phoenix2,october1,genghis,panties1,cooker,citron,ace123,1234569,gramps,blackcoc,kodiak1,hickory,ivanhoe,blackboy,escher,sincity,beaks,meandyou,spaniel,canon1,timmy1,lancaste,polaroid,edinburg,fuckedup,hotman,cueball,golfclub,gopack,bookcase,worldcup,dkflbvbhjdbx,twostep,17171717aa,letsplay,zolushka,stella1,pfkegf,kingtut,67camaro,barracuda,wiggles,gjhjkm,prancer,patata,kjifhf,theman1,romanova,sexyass,copper1,dobber,sokolov,pomidor,algernon,cadman,amoremio,william2,silly1,bobbys,hercule,hd764nw5d7e1vb1,defcon,deutschland,robinhood,alfalfa,machoman,lesbens,pandora1,easypay,tomservo,nadezhda,goonies,saab9000,jordyn,f15eagle,dbrecz,12qwerty,greatsex,thrawn,blunted,baywatch,doggystyle,loloxx,chevy2,january1,kodak,bushel,78963214,ub6ib9,zz8807zpl,briefs,hawker,224488,first1,bonzo,brent1,erasure,69213124,sidewind,soccer13,622521,mentos,kolibri,onepiece,united1,ponyboy,keksa12,wayer,mypussy,andrej,mischa,mille,bruno123,garter,bigpun,talgat,familia,jazzy1,mustang8,newjob,747400,bobber,blackbel,hatteras,ginge,asdfjkl;,camelot1,blue44,rebbyt34,ebony1,vegas123,myboys,aleksander,ijrjkflrf,lopata,pilsner,lotus123,m0nk3y,andreev,freiheit,balls1,drjynfrnt,mazda1,waterpolo,shibumi,852963,123bbb,cezer121,blondie1,volkova,rattler,kleenex,ben123,sanane,happydog,satellit,qazplm,qazwsxedcrfvtgb,meowmix,badguy,facefuck,spice1,blondy,major1,25000,anna123,654321a,sober1,deathrow,patterso,china1,naruto1,hawkeye1,waldo1,butchy,crayon,5tgb6yhn,klopik,crocodil,mothra,imhorny,pookie1,splatter,slippy,lizard1,router,buratino,yahweh,123698,dragon11,123qwe456,peepers,trucker1,ganjaman,1hxboqg2,cheyanne,storys,sebastie,zztop,maddison,4rfv3edc,darthvader,jeffro,iloveit,victor1,hotty,delphin,lifeisgood,gooseman,shifty,insertions,dude123,abrupt,123masha,boogaloo,chronos,stamford,pimpster,kthjxrf,getmein,amidala,flubber,fettish,grapeape,dantes,oralsex,jack1,foxcg33,winchest,francis1,getin,archon,cliffy,blueman,1basebal,sport1,emmitt22,porn123,bignasty,morga,123hfjdk147,ferrar,juanito,fabiol,caseydog,steveo,peternorth,paroll,kimchi,bootleg,gaijin,secre,acacia,eatme2,amarillo,monkey11,rfhfgep,tylers,a1a2a3a4a5,sweetass,blower,rodina,babushka,camilo,cimbom,tiffan,vfnbkmlf,ohbaby,gotigers,lindsey1,dragon13,romulus,qazxsw12,zxcvbn1,dropdead,hitman47,snuggle,eleven11,bloopers,357mag,avangard,bmw320,ginscoot,dshade,masterkey,voodoo1,rootedit,caramba,leahcim,hannover,8phrowz622,tim123,cassius,000000a,angelito,zzzzz1,badkarma,star1,malaga,glenwood,footlove,golf1,summer12,helpme1,fastcars,titan1,police1,polinka,k.jdm,marusya,augusto,shiraz,pantyhose,donald1,blaise,arabella,brigada,c3por2d2,peter01,marco1,hellow,dillweed,uzumymw,geraldin,loveyou2,toyota1,088011,gophers,indy500,slainte,5hsu75kpot,teejay,renat,racoon,sabrin,angie1,shiznit,harpua,sexyred,latex,tucker1,alexandru,wahoo,teamwork,deepblue,goodison,rundmc,r2d2c3p0,puppys,samba,ayrton,boobed,999777,topsecre,blowme1,123321z,loudog,random1,pantie,drevil,mandolin,121212q,hottub,brother1,failsafe,spade1,matvey,open1234,carmen1,priscill,schatzi,kajak,gooddog,trojans1,gordon1,kayak,calamity,argent,ufhvjybz,seviyi,penfold,assface,dildos,hawkwind,crowbar,yanks,ruffles,rastus,luv2epus,open123,aquafina,dawns,jared1,teufel,12345c,vwgolf,pepsi123,amores,passwerd,01478520,boliva,smutty,headshot,password3,davidd,zydfhm,gbgbcmrf,pornpass,insertion,ceckbr,test2,car123,checkit,dbnfkbq,niggas,nyyankee,muskrat,nbuhtyjr,gunner1,ocean1,fabienne,chrissy1,wendys,loveme89,batgirl,cerveza,igorek,steel1,ragman,boris123,novifarm,sexy12,qwerty777,mike01,giveitup,123456abc,fuckall,crevice,hackerz,gspot,eight8,assassins,texass,swallows,123458,baldur,moonshine,labatt,modem,sydney1,voland,dbnfkz,hotchick,jacker,princessa,dawgs1,holiday1,booper,reliant,miranda1,jamaica1,andre1,badnaamhere,barnaby,tiger7,david12,margaux,corsica,085tzzqi,universi,thewall,nevermor,martin6,qwerty77,cipher,apples1,0102030405,seraphim,black123,imzadi,gandon,ducati99,1shadow,dkflbvbhjdyf,44magnum,bigbad,feedme,samantha1,ultraman,redneck1,jackdog,usmc0311,fresh1,monique1,tigre,alphaman,cool1,greyhoun,indycar,crunchy,55chevy,carefree,willow1,063dyjuy,xrated,assclown,federica,hilfiger,trivia,bronco1,mamita,100200300,simcity,lexingky,akatsuki,retsam,johndeere,abudfv,raster,elgato,businka,satanas,mattingl,redwing1,shamil,patate,mannn,moonstar,evil666,b123456,bowl300,tanechka,34523452,carthage,babygir,santino,bondarenko,jesuss,chico1,numlock,shyguy,sound1,kirby1,needit,mostwanted,427900,funky1,steve123,passions,anduril,kermit1,prospero,lusty,barakuda,dream1,broodwar,porky,christy1,mahal,yyyyyy1,allan1,1sexy,flintsto,capri,cumeater,heretic,robert2,hippos,blindax,marykay,collecti,kasumi,1qaz!qaz,112233q,123258,chemistr,coolboy,0o9i8u,kabuki,righton,tigress,nessie,sergej,andrew12,yfafyz,ytrhjvfyn,angel7,victo,mobbdeep,lemming,transfor,1725782,myhouse,aeynbr,muskie,leno4ka,westham1,cvbhyjd,daffodil,pussylicker,pamela1,stuffer,warehous,tinker1,2w3e4r,pluton,louise1,polarbea,253634,prime1,anatoliy,januar,wysiwyg,cobraya,ralphy,whaler,xterra,cableguy,112233a,porn69,jamesd,aqualung,jimmy123,lumpy,luckyman,kingsize,golfing1,alpha7,leeds1,marigold,lol1234,teabag,alex11,10sne1,saopaulo,shanny,roland1,basser,3216732167,carol1,year2005,morozov,saturn1,joseluis,bushed,redrock,memnoch,lalaland,indiana1,lovegod,gulnaz,buffalos,loveyou1,anteater,pattaya,jaydee,redshift,bartek,summerti,coffee1,ricochet,incest,schastie,rakkaus,h2opolo,suikoden,perro,dance1,loveme1,whoopass,vladvlad,boober,flyers1,alessia,gfcgjhn,pipers,papaya,gunsling,coolone,blackie1,gonads,gfhjkzytn,foxhound,qwert12,gangrel,ghjvtntq,bluedevi,mywife,summer01,hangman,licorice,patter,vfr750,thorsten,515253,ninguna,dakine,strange1,mexic,vergeten,12345432,8phrowz624,stampede,floyd1,sailfish,raziel,ananda,giacomo,freeme,crfprf,74185296,allstars,master01,solrac,gfnhbjn,bayliner,bmw525,3465xxx,catter,single1,michael3,pentium4,nitrox,mapet123456,halibut,killroy,xxxxx1,phillip1,poopsie,arsenalfc,buffys,kosova,all4me,32165498,arslan,opensesame,brutis,charles2,pochta,nadegda,backspac,mustang0,invis,gogeta,654321q,adam25,niceday,truckin,gfdkbr,biceps,sceptre,bigdave,lauras,user345,sandys,shabba,ratdog,cristiano,natha,march13,gumball,getsdown,wasdwasd,redhead1,dddddd1,longlegs,13572468,starsky,ducksoup,bunnys,omsairam,whoami,fred123,danmark,flapper,swanky,lakings,yfhenj,asterios,rainier,searcher,dapper,ltdjxrf,horsey,seahawk,shroom,tkfkdgo,aquaman,tashkent,number9,messi10,1asshole,milenium,illumina,vegita,jodeci,buster01,bareback,goldfinger,fire1,33rjhjds,sabian,thinkpad,smooth1,sully,bonghits,sushi1,magnavox,colombi,voiture,limpone,oldone,aruba,rooster1,zhenya,nomar5,touchdow,limpbizkit,rhfcfdxbr,baphomet,afrodita,bball1,madiso,ladles,lovefeet,matthew2,theworld,thunderbird,dolly1,123rrr,forklift,alfons,berkut,speedy1,saphire,oilman,creatine,pussylov,bastard1,456258,wicked1,filimon,skyline1,fucing,yfnfkbz,hot123,abdulla,nippon,nolimits,billiard,booty1,buttplug,westlife,coolbean,aloha1,lopas,asasin,1212121,october2,whodat,good4u,d12345,kostas,ilya1992,regal,pioneer1,volodya,focus1,bastos,nbvjif,fenix,anita1,vadimka,nickle,jesusc,123321456,teste,christ1,essendon,evgenii,celticfc,adam1,forumwp,lovesme,26exkp,chillout,burly,thelast1,marcus1,metalgear,test11,ronaldo7,socrate,world1,franki,mommie,vicecity,postov1000,charlie3,oldschool,333221,legoland,antoshka,counterstrike,buggy,mustang3,123454,qwertzui,toons,chesty,bigtoe,tigger12,limpopo,rerehepf,diddle,nokia3250,solidsnake,conan1,rockroll,963369,titanic1,qwezxc,cloggy,prashant,katharin,maxfli,takashi,cumonme,michael9,mymother,pennstate,khalid,48151623,fightclub,showboat,mateusz,elrond,teenie,arrow1,mammamia,dustydog,dominator,erasmus,zxcvb1,1a2a3a,bones1,dennis1,galaxie,pleaseme,whatever1,junkyard,galadriel,charlies,2wsxzaq1,crimson1,behemoth,teres,master11,fairway,shady1,pass99,1batman,joshua12,baraban,apelsin,mousepad,melon,twodogs,123321qwe,metalica,ryjgrf,pipiska,rerfhfxf,lugnut,cretin,iloveu2,powerade,aaaaaaa1,omanko,kovalenko,isabe,chobits,151nxjmt,shadow11,zcxfcnkbdf,gy3yt2rgls,vfhbyrf,159753123,bladerunner,goodone,wonton,doodie,333666999,fuckyou123,kitty123,chisox,orlando1,skateboa,red12345,destroye,snoogans,satan1,juancarlo,goheels,jetson,scottt,fuckup,aleksa,gfhfljrc,passfind,oscar123,derrick1,hateme,viper123,pieman,audi100,tuffy,andover,shooter1,10000,makarov,grant1,nighthaw,13576479,browneye,batigol,nfvfhf,chocolate1,7hrdnw23,petter,bantam,morlii,jediknight,brenden,argonaut,goodstuf,wisconsi,315920,abigail1,dirtbag,splurge,k123456,lucky777,valdepen,gsxr600,322223,ghjnjrjk,zaq1xsw2cde3,schwanz,walter1,letmein22,nomads,124356,codeblue,nokian70,fucke,footbal1,agyvorc,aztecs,passw0r,smuggles,femmes,ballgag,krasnodar,tamuna,schule,sixtynine,empires,erfolg,dvader,ladygaga,elite1,venezuel,nitrous,kochamcie,olivia1,trustn01,arioch,sting1,131415,tristar,555000,maroon,135799,marsik,555556,fomoco,natalka,cwoui,tartan,davecole,nosferat,hotsauce,dmitry,horus,dimasik,skazka,boss302,bluebear,vesper,ultras,tarantul,asd123asd,azteca,theflash,8ball,1footbal,titlover,lucas123,number6,sampson1,789852,party1,dragon99,adonai,carwash,metropol,psychnau,vthctltc,hounds,firework,blink18,145632,wildcat1,satchel,rice80,ghtktcnm,sailor1,cubano,anderso,rocks1,mike11,famili,dfghjc,besiktas,roygbiv,nikko,bethan,minotaur,rakesh,orange12,hfleuf,jackel,myangel,favorite7,1478520,asssss,agnieszka,haley1,raisin,htubyf,1buster,cfiekz,derevo,1a2a3a4a5a,baltika,raffles,scruffy1,clitlick,louis1,buddha1,fy.nrf,walker1,makoto,shadow2,redbeard,vfvfvskfhfve,mycock,sandydog,lineman,network1,favorite8,longdick,mustangg,mavericks,indica,1killer,cisco1,angelofwar,blue69,brianna1,bubbaa,slayer666,level42,baldrick,brutus1,lowdown,haribo,lovesexy,500000,thissuck,picker,stephy,1fuckme,characte,telecast,1bigdog,repytwjdf,thematrix,hammerhe,chucha,ganesha,gunsmoke,georgi,sheltie,1harley,knulla,sallas,westie,dragon7,conker,crappie,margosha,lisboa,3e2w1q,shrike,grifter,ghjcnjghjcnj,asdfg1,mnbvcxz1,myszka,posture,boggie,rocketman,flhtyfkby,twiztid,vostok,pi314159,force1,televizor,gtkmvtym,samhain,imcool,jadzia,dreamers,strannik,k2trix,steelhea,nikitin,commodor,brian123,chocobo,whopper,ibilljpf,megafon,ararat,thomas12,ghbrjkbcn,q1234567890,hibernia,kings1,jim123,redfive,68camaro,iawgk2,xavier1,1234567u,d123456,ndirish,airborn,halfmoon,fluffy1,ranchero,sneaker,soccer2,passion1,cowman,birthday1,johnn,razzle,glock17,wsxqaz,nubian,lucky2,jelly1,henderso,eric1,123123e,boscoe01,fuck0ff,simpson1,sassie,rjyjgkz,nascar3,watashi,loredana,janus,wilso,conman,david2,mothe,iloveher,snikers,davidj,fkmnthyfnbdf,mettss,ratfink,123456h,lostsoul,sweet16,brabus,wobble,petra1,fuckfest,otters,sable1,svetka,spartacu,bigstick,milashka,1lover,pasport,champagn,papichul,hrvatska,hondacivic,kevins,tacit,moneybag,gohogs,rasta1,246813579,ytyfdbcnm,gubber,darkmoon,vitaliy,233223,playboys,tristan1,joyce1,oriflame,mugwump,access2,autocad,thematri,qweqwe123,lolwut,ibill01,multisyn,1233211,pelikan,rob123,chacal,1234432,griffon,pooch,dagestan,geisha,satriani,anjali,rocketma,gixxer,pendrago,vincen,hellokit,killyou,ruger,doodah,bumblebe,badlands,galactic,emachines,foghorn,jackso,jerem,avgust,frontera,123369,daisymae,hornyboy,welcome123,tigger01,diabl,angel13,interex,iwantsex,rockydog,kukolka,sawdust,online1,3234412,bigpapa,jewboy,3263827,dave123,riches,333222,tony1,toggle,farter,124816,tities,balle,brasilia,southsid,micke,ghbdtn12,patit,ctdfcnjgjkm,olds442,zzzzzz1,nelso,gremlins,gypsy1,carter1,slut69,farcry,7415963,michael8,birdie1,charl,123456789abc,100001,aztec,sinjin,bigpimpi,closeup,atlas1,nvidia,doggone,classic1,manana,malcolm1,rfkbyf,hotbabe,rajesh,dimebag,ganjubas,rodion,jagr68,seren,syrinx,funnyman,karapuz,123456789n,bloomin,admin18533362,biggdogg,ocarina,poopy1,hellome,internet1,booties,blowjobs,matt1,donkey1,swede,1jennife,evgeniya,lfhbyf,coach1,444777,green12,patryk,pinewood,justin12,271828,89600506779,notredame,tuborg,lemond,sk8ter,million1,wowser,pablo1,st0n3,jeeves,funhouse,hiroshi,gobucs,angeleye,bereza,winter12,catalin,qazedc,andros,ramazan,vampyre,sweethea,imperium,murat,jamest,flossy,sandeep,morgen,salamandra,bigdogg,stroller,njdevils,nutsack,vittorio,%%passwo,playful,rjyatnrf,tookie,ubnfhf,michi,777444,shadow13,devils1,radiance,toshiba1,beluga,amormi,dandfa,trust1,killemall,smallville,polgara,billyb,landscap,steves,exploite,zamboni,damage11,dzxtckfd,trader12,pokey1,kobe08,damager,egorov,dragon88,ckfdbr,lisa69,blade2,audis4,nelson1,nibbles,23176djivanfros,mutabor,artofwar,matvei,metal666,hrfzlz,schwinn,poohbea,seven77,thinker,123456789qwerty,sobriety,jakers,karamelka,vbkfyf,volodin,iddqd,dale03,roberto1,lizaveta,qqqqqq1,cathy1,08154711,davidm,quixote,bluenote,tazdevil,katrina1,bigfoot1,bublik,marma,olechka,fatpussy,marduk,arina,nonrev67,qqqq1111,camill,wtpfhm,truffle,fairview,mashina,voltaire,qazxswedcvfr,dickface,grassy,lapdance,bosstone,crazy8,yackwin,mobil,danielit,mounta1n,player69,bluegill,mewtwo,reverb,cnthdf,pablito,a123321,elena1,warcraft1,orland,ilovemyself,rfntyjr,joyride,schoo,dthjxrf,thetachi,goodtimes,blacksun,humpty,chewbacca,guyute,123xyz,lexicon,blue45,qwe789,galatasaray,centrino,hendrix1,deimos,saturn5,craig1,vlad1996,sarah123,tupelo,ljrnjh,hotwife,bingos,1231231,nicholas1,flamer,pusher,1233210,heart1,hun999,jiggy,giddyup,oktober,123456zxc,budda,galahad,glamur,samwise,oneton,bugsbunny,dominic1,scooby2,freetime,internat,159753852,sc00ter,wantit,mazinger,inflames,laracrof,greedo,014789,godofwar,repytwjd,water123,fishnet,venus1,wallace1,tenpin,paula1,1475963,mania,novikov,qwertyasdfgh,goldmine,homies,777888999,8balls,holeinon,paper1,samael,013579,mansur,nikit,ak1234,blueline,polska1,hotcock,laredo,windstar,vbkbwbz,raider1,newworld,lfybkrf,catfish1,shorty1,piranha,treacle,royale,2234562,smurfs,minion,cadence,flapjack,123456p,sydne,135531,robinhoo,nasdaq,decatur,cyberonline,newage,gemstone,jabba,touchme,hooch,pigdog,indahous,fonzie,zebra1,juggle,patrick2,nihongo,hitomi,oldnavy,qwerfdsa,ukraina,shakti,allure,kingrich,diane1,canad,piramide,hottie1,clarion,college1,5641110,connect1,therion,clubber,velcro,dave1,astra1,13579-,astroboy,skittle,isgreat,photoes,cvzefh1gkc,001100,2cool4u,7555545,ginger12,2wsxcde3,camaro69,invader,domenow,asd1234,colgate,qwertasdfg,jack123,pass01,maxman,bronte,whkzyc,peter123,bogie,yecgaa,abc321,1qay2wsx,enfield,camaroz2,trashman,bonefish,system32,azsxdcfvgb,peterose,iwantyou,dick69,temp1234,blastoff,capa200,connie1,blazin,12233445,sexybaby,123456j,brentfor,pheasant,hommer,jerryg,thunders,august1,lager,kapusta,boobs1,nokia5300,rocco1,xytfu7,stars1,tugger,123sas,blingbling,1bubba,0wnsyo0,1george,baile,richard2,habana,1diamond,sensatio,1golfer,maverick1,1chris,clinton1,michael7,dragons1,sunrise1,pissant,fatim,mopar1,levani,rostik,pizzapie,987412365,oceans11,748159263,cum4me,palmetto,4r3e2w1q,paige1,muncher,arsehole,kratos,gaffer,banderas,billys,prakash,crabby,bungie,silver12,caddis,spawn1,xboxlive,sylvania,littlebi,524645,futura,valdemar,isacs155,prettygirl,big123,555444,slimer,chicke,newstyle,skypilot,sailormoon,fatluvr69,jetaime,sitruc,jesuschrist,sameer,bear12,hellion,yendor,country1,etnies,conejo,jedimast,darkknight,toobad,yxcvbn,snooks,porn4life,calvary,alfaromeo,ghostman,yannick,fnkfynblf,vatoloco,homebase,5550666,barret,1111111111zz,odysseus,edwardss,favre4,jerrys,crybaby,xsw21qaz,firestor,spanks,indians1,squish,kingair,babycakes,haters,sarahs,212223,teddyb,xfactor,cumload,rhapsody,death123,three3,raccoon,thomas2,slayer66,1q2q3q4q5q,thebes,mysterio,thirdeye,orkiox.,nodoubt,bugsy,schweiz,dima1996,angels1,darkwing,jeronimo,moonpie,ronaldo9,peaches2,mack10,manish,denise1,fellowes,carioca,taylor12,epaulson,makemoney,oc247ngucz,kochanie,3edcvfr4,vulture,1qw23e,1234567z,munchie,picard1,xthtgfirf,sportste,psycho1,tahoe1,creativ,perils,slurred,hermit,scoob,diesel1,cards1,wipeout,weeble,integra1,out3xf,powerpc,chrism,kalle,ariadne,kailua,phatty,dexter1,fordman,bungalow,paul123,compa,train1,thejoker,jys6wz,pussyeater,eatmee,sludge,dominus,denisa,tagheuer,yxcvbnm,bill1,ghfdlf,300zx,nikita123,carcass,semaj,ramone,muenchen,animal1,greeny,annemari,dbrf134,jeepcj7,mollys,garten,sashok,ironmaid,coyotes,astoria,george12,westcoast,primetim,123456o,panchito,rafae,japan1,framer,auralo,tooshort,egorova,qwerty22,callme,medicina,warhawk,w1w2w3w4,cristia,merli,alex22,kawaii,chatte,wargames,utvols,muaddib,trinket,andreas1,jjjjj1,cleric,scooters,cuntlick,gggggg1,slipknot1,235711,handcuff,stussy,guess1,leiceste,ppppp1,passe,lovegun,chevyman,hugecock,driver1,buttsex,psychnaut1,cyber1,black2,alpha12,melbourn,man123,metalman,yjdsqujl,blondi,bungee,freak1,stomper,caitlin1,nikitina,flyaway,prikol,begood,desperad,aurelius,john1234,whosyourdaddy,slimed123,bretagne,den123,hotwheel,king123,roodypoo,izzicam,save13tx,warpten,nokia3310,samolet,ready1,coopers,scott123,bonito,1aaaaa,yomomma,dawg1,rache,itworks,asecret,fencer,451236,polka,olivetti,sysadmin,zepplin,sanjuan,479373,lickem,hondacrx,pulamea,future1,naked1,sexyguy,w4g8at,lollol1,declan,runner1,rumple,daddy123,4snz9g,grandprix,calcio,whatthefuck,nagrom,asslick,pennst,negrit,squiggy,1223334444,police22,giovann,toronto1,tweet,yardbird,seagate,truckers,554455,scimitar,pescator,slydog,gaysex,dogfish,fuck777,12332112,qazxswed,morkovka,daniela1,imback,horny69,789123456,123456789w,jimmy2,bagger,ilove69,nikolaus,atdhfkm,rebirth,1111aaaa,pervasive,gjgeufq,dte4uw,gfhnbpfy,skeletor,whitney1,walkman,delorean,disco1,555888,as1234,ishikawa,fuck12,reaper1,dmitrii,bigshot,morrisse,purgen,qwer4321,itachi,willys,123123qwe,kisska,roma123,trafford,sk84life,326159487,pedros,idiom,plover,bebop,159875321,jailbird,arrowhea,qwaszx123,zaxscdvf,catlover,bakers,13579246,bones69,vermont1,helloyou,simeon,chevyz71,funguy,stargaze,parolparol,steph1,bubby,apathy,poppet,laxman,kelly123,goodnews,741236,boner1,gaetano,astonvilla,virtua,luckyboy,rocheste,hello2u,elohim,trigger1,cstrike,pepsicola,miroslav,96385274,fistfuck,cheval,magyar,svetlanka,lbfyjxrf,mamedov,123123123q,ronaldo1,scotty1,1nicole,pittbull,fredd,bbbbb1,dagwood,gfhkfvtyn,ghblehrb,logan5,1jordan,sexbomb,omega2,montauk,258741,dtythf,gibbon,winamp,thebomb,millerli,852654,gemin,baldy,halflife2,dragon22,mulberry,morrigan,hotel6,zorglub,surfin,951159,excell,arhangel,emachine,moses1,968574,reklama,bulldog2,cuties,barca,twingo,saber,elite11,redtruck,casablan,ashish,moneyy,pepper12,cnhtktw,rjcnbr,arschloch,phenix,cachorro,sunita,madoka,joselui,adams1,mymoney,hemicuda,fyutkjr,jake12,chicas,eeeee1,sonnyboy,smarties,birdy,kitten1,cnfcbr,island1,kurosaki,taekwond,konfetka,bennett1,omega3,jackson2,fresca,minako,octavian,kban667,feyenoord,muaythai,jakedog,fktrcfylhjdyf,1357911q,phuket,sexslave,fktrcfylhjdbx,asdfjk,89015173454,qwerty00,kindbud,eltoro,sex6969,nyknicks,12344321q,caballo,evenflow,hoddle,love22,metro1,mahalko,lawdog,tightass,manitou,buckie,whiskey1,anton123,335533,password4,primo,ramair,timbo,brayden,stewie,pedro1,yorkshir,ganster,hellothe,tippy1,direwolf,genesi,rodrig,enkeli,vaz21099,sorcerer,winky,oneshot,boggle,serebro,badger1,japanes,comicbook,kamehame,alcat,denis123,echo45,sexboy,gr8ful,hondo,voetbal,blue33,2112rush,geneviev,danni1,moosey,polkmn,matthew7,ironhead,hot2trot,ashley12,sweeper,imogen,blue21,retep,stealth1,guitarra,bernard1,tatian,frankfur,vfnhbwf,slacking,haha123,963741,asdasdas,katenok,airforce1,123456789qaz,shotgun1,12qwasz,reggie1,sharo,976431,pacifica,dhip6a,neptun,kardon,spooky1,beaut,555555a,toosweet,tiedup,11121314,startac,lover69,rediska,pirata,vfhrbp,1234qwerty,energize,hansolo1,playbo,larry123,oemdlg,cnjvfnjkju,a123123,alexan,gohawks,antonius,fcbayern,mambo,yummy1,kremlin,ellen1,tremere,vfiekz,bellevue,charlie9,izabella,malishka,fermat,rotterda,dawggy,becket,chasey,kramer1,21125150,lolit,cabrio,schlong,arisha,verity,3some,favorit,maricon,travelle,hotpants,red1234,garrett1,home123,knarf,seven777,figment,asdewq,canseco,good2go,warhol,thomas01,pionee,al9agd,panacea,chevy454,brazzers,oriole,azerty123,finalfan,patricio,northsta,rebelde,bulldo,stallone,boogie1,7uftyx,cfhfnjd,compusa,cornholi,config,deere,hoopster,sepultura,grasshop,babygurl,lesbo,diceman,proverbs,reddragon,nurbek,tigerwoo,superdup,buzzsaw,kakaroto,golgo13,edwar,123qaz123,butter1,sssss1,texas2,respekt,ou812ic,123456qaz,55555a,doctor1,mcgwire,maria123,aol999,cinders,aa1234,joness,ghbrjkmyj,makemone,sammyboy,567765,380zliki,theraven,testme,mylene,elvira26,indiglo,tiramisu,shannara,baby1,123666,gfhreh,papercut,johnmish,orange8,bogey1,mustang7,bagpipes,dimarik,vsijyjr,4637324,ravage,cogito,seven11,natashka,warzone,hr3ytm,4free,bigdee,000006,243462536,bigboi,123333,trouts,sandy123,szevasz,monica2,guderian,newlife1,ratchet,r12345,razorbac,12345i,piazza31,oddjob,beauty1,fffff1,anklet,nodrog,pepit,olivi,puravida,robert12,transam1,portman,bubbadog,steelers1,wilson1,eightball,mexico1,superboy,4rfv5tgb,mzepab,samurai1,fuckslut,colleen1,girdle,vfrcbvec,q1w2e3r4t,soldier1,19844891,alyssa1,a12345a,fidelis,skelter,nolove,mickeymouse,frehley,password69,watermel,aliska,soccer15,12345e,ladybug1,abulafia,adagio,tigerlil,takehana,hecate,bootneck,junfan,arigato,wonkette,bobby123,trustnoone,phantasm,132465798,brianjo,w12345,t34vfrc1991,deadeye,1robert,1daddy,adida,check1,grimlock,muffi,airwalk,prizrak,onclick,longbeac,ernie1,eadgbe,moore1,geniu,shadow123,bugaga,jonathan1,cjrjkjdf,orlova,buldog,talon1,westport,aenima,541233432442,barsuk,chicago2,kellys,hellbent,toughguy,iskander,skoal,whatisit,jake123,scooter2,fgjrfkbgcbc,ghandi,love13,adelphia,vjhrjdrf,adrenali,niunia,jemoeder,rainbo,all4u8,anime1,freedom7,seraph,789321,tommys,antman,firetruc,neogeo,natas,bmwm3,froggy1,paul1,mamit,bayview,gateways,kusanagi,ihateu,frederi,rock1,centurion,grizli,biggin,fish1,stalker1,3girls,ilovepor,klootzak,lollo,redsox04,kirill123,jake1,pampers,vasya,hammers1,teacup,towing,celtic1,ishtar,yingyang,4904s677075,dahc1,patriot1,patrick9,redbirds,doremi,rebecc,yoohoo,makarova,epiphone,rfgbnfy,milesd,blister,chelseafc,katana1,blackrose,1james,primrose,shock5,hard1,scooby12,c6h12o6,dustoff,boing,chisel,kamil,1william,defiant1,tyvugq,mp8o6d,aaa340,nafets,sonnet,flyhigh,242526,crewcom,love23,strike1,stairway,katusha,salamand,cupcake1,password0,007james,sunnie,multisync,harley01,tequila1,fred12,driver8,q8zo8wzq,hunter01,mozzer,temporar,eatmeraw,mrbrownxx,kailey,sycamore,flogger,tincup,rahasia,ganymede,bandera,slinger,1111122222,vander,woodys,1cowboy,khaled,jamies,london12,babyboo,tzpvaw,diogenes,budice,mavrick,135797531,cheeta,macros,squonk,blackber,topfuel,apache1,falcon16,darkjedi,cheeze,vfhvtkfl,sparco,change1,gfhfif,freestyl,kukuruza,loveme2,12345f,kozlov,sherpa,marbella,44445555,bocephus,1winner,alvar,hollydog,gonefish,iwantin,barman,godislove,amanda18,rfpfynbg,eugen,abcdef1,redhawk,thelema,spoonman,baller1,harry123,475869,tigerman,cdtnjxrf,marillio,scribble,elnino,carguy,hardhead,l2g7k3,troopers,selen,dragon76,antigua,ewtosi,ulysse,astana,paroli,cristo,carmex,marjan,bassfish,letitbe,kasparov,jay123,19933991,blue13,eyecandy,scribe,mylord,ukflbjkec,ellie1,beaver1,destro,neuken,halfpint,ameli,lilly1,satanic,xngwoj,12345trewq,asdf1,bulldogg,asakura,jesucrist,flipside,packers4,biggy,kadett,biteme69,bobdog,silverfo,saint1,bobbo,packman,knowledg,foolio,fussbal,12345g,kozerog,westcoas,minidisc,nbvcxw,martini1,alastair,rasengan,superbee,memento,porker,lena123,florenc,kakadu,bmw123,getalife,bigsky,monkee,people1,schlampe,red321,memyself,0147896325,12345678900987654321,soccer14,realdeal,gfgjxrf,bella123,juggs,doritos,celtics1,peterbilt,ghbdtnbrb,gnusmas,xcountry,ghbdtn1,batman99,deusex,gtnhjdf,blablabl,juster,marimba,love2,rerjkrf,alhambra,micros,siemens1,assmaste,moonie,dashadasha,atybrc,eeeeee1,wildrose,blue55,davidl,xrp23q,skyblue,leo123,ggggg1,bestfriend,franny,1234rmvb,fun123,rules1,sebastien,chester2,hakeem,winston2,fartripper,atlant,07831505,iluvsex,q1a2z3,larrys,009900,ghjkju,capitan,rider1,qazxsw21,belochka,andy123,hellya,chicca,maximal,juergen,password1234,howard1,quetzal,daniel123,qpwoeiruty,123555,bharat,ferrari3,numbnuts,savant,ladydog,phipsi,lovepussy,etoile,power2,mitten,britneys,chilidog,08522580,2fchbg,kinky1,bluerose,loulo,ricardo1,doqvq3,kswbdu,013cpfza,timoha,ghbdtnghbdtn,3stooges,gearhead,browns1,g00ber,super7,greenbud,kitty2,pootie,toolshed,gamers,coffe,ibill123,freelove,anasazi,sister1,jigger,natash,stacy1,weronika,luzern,soccer7,hoopla,dmoney,valerie1,canes,razdvatri,washere,greenwoo,rfhjkbyf,anselm,pkxe62,maribe,daniel2,maxim1,faceoff,carbine,xtkjdtr,buddy12,stratos,jumpman,buttocks,aqswdefr,pepsis,sonechka,steeler1,lanman,nietzsch,ballz,biscuit1,wrxsti,goodfood,juventu,federic,mattman,vika123,strelec,jledfyxbr,sideshow,4life,fredderf,bigwilly,12347890,12345671,sharik,bmw325i,fylhtqrf,dannon4,marky,mrhappy,drdoom,maddog1,pompier,cerbera,goobers,howler,jenny69,evely,letitrid,cthuttdyf,felip,shizzle,golf12,t123456,yamah,bluearmy,squishy,roxan,10inches,dollface,babygirl1,blacksta,kaneda,lexingto,canadien,222888,kukushka,sistema,224422,shadow69,ppspankp,mellons,barbie1,free4all,alfa156,lostone,2w3e4r5t,painkiller,robbie1,binger,8dihc6,jaspe,rellik,quark,sogood,hoopstar,number2,snowy1,dad2ownu,cresta,qwe123asd,hjvfyjdf,gibsonsg,qbg26i,dockers,grunge,duckling,lfiekz,cuntsoup,kasia1,1tigger,woaini,reksio,tmoney,firefighter,neuron,audia3,woogie,powerboo,powermac,fatcock,12345666,upnfmc,lustful,porn1,gotlove,amylee,kbytqrf,11924704,25251325,sarasota,sexme,ozzie1,berliner,nigga1,guatemal,seagulls,iloveyou!,chicken2,qwerty21,010203040506,1pillow,libby1,vodoley,backlash,piglets,teiubesc,019283,vonnegut,perico,thunde,buckey,gtxtymrf,manunite,iiiii1,lost4815162342,madonn,270873_,britney1,kevlar,piano1,boondock,colt1911,salamat,doma77ns,anuradha,cnhjqrf,rottweil,newmoon,topgun1,mauser,fightclu,birthday21,reviewpa,herons,aassddff,lakers32,melissa2,vredina,jiujitsu,mgoblue,shakey,moss84,12345zxcvb,funsex,benji1,garci,113322,chipie,windex,nokia5310,pwxd5x,bluemax,cosita,chalupa,trotsky,new123,g3ujwg,newguy,canabis,gnaget,happydays,felixx,1patrick,cumface,sparkie,kozlova,123234,newports,broncos7,golf18,recycle,hahah,harrypot,cachondo,open4me,miria,guessit,pepsione,knocker,usmc1775,countach,playe,wiking,landrover,cracksevi,drumline,a7777777,smile123,manzana,panty,liberta,pimp69,dolfan,quality1,schnee,superson,elaine22,webhompass,mrbrownx,deepsea,4wheel,mamasita,rockport,rollie,myhome,jordan12,kfvgjxrf,hockey12,seagrave,ford1,chelsea2,samsara,marissa1,lamesa,mobil1,piotrek,tommygun,yyyyy1,wesley1,billy123,homersim,julies,amanda12,shaka,maldini,suzenet,springst,iiiiii1,yakuza,111111aa,westwind,helpdesk,annamari,bringit,hopefull,hhhhhhh1,saywhat,mazdarx8,bulova,jennife1,baikal,gfhjkmxbr,victoria1,gizmo123,alex99,defjam,2girls,sandrock,positivo,shingo,syncmast,opensesa,silicone,fuckina,senna1,karlos,duffbeer,montagne,gehrig,thetick,pepino,hamburge,paramedic,scamp,smokeweed,fabregas,phantoms,venom121293,2583458,badone,porno69,manwhore,vfvf123,notagain,vbktyf,rfnthbyrf,wildblue,kelly001,dragon66,camell,curtis1,frolova,1212123,dothedew,tyler123,reddrago,planetx,promethe,gigolo,1001001,thisone,eugeni,blackshe,cruzazul,incognito,puller,joonas,quick1,spirit1,gazza,zealot,gordito,hotrod1,mitch1,pollito,hellcat,mythos,duluth,383pdjvl,easy123,hermos,binkie,its420,lovecraf,darien,romina,doraemon,19877891,syclone,hadoken,transpor,ichiro,intell,gargamel,dragon2,wavpzt,557744,rjw7x4,jennys,kickit,rjynfrn,likeit,555111,corvus,nec3520,133113,mookie1,bochum,samsung2,locoman0,154ugeiu,vfvfbgfgf,135792,[start],tenni,20001,vestax,hufmqw,neveragain,wizkid,kjgfnf,nokia6303,tristen,saltanat,louie1,gandalf2,sinfonia,alpha3,tolstoy,ford150,f00bar,1hello,alici,lol12,riker1,hellou,333888,1hunter,qw1234,vibrator,mets86,43211234,gonzale,cookies1,sissy1,john11,bubber,blue01,cup2006,gtkmvtyb,nazareth,heybaby,suresh,teddie,mozilla,rodeo1,madhouse,gamera,123123321,naresh,dominos,foxtrot1,taras,powerup,kipling,jasonb,fidget,galena,meatman,alpacino,bookmark,farting,humper,titsnass,gorgon,castaway,dianka,anutka,gecko1,fucklove,connery,wings1,erika1,peoria,moneymaker,ichabod,heaven1,paperboy,phaser,breakers,nurse1,westbrom,alex13,brendan1,123asd123,almera,grubber,clarkie,thisisme,welkom01,51051051051,crypto,freenet,pflybwf,black12,testme2,changeit,autobahn,attica,chaoss,denver1,tercel,gnasher23,master2,vasilii,sherman1,gomer,bigbuck,derek1,qwerzxcv,jumble,dragon23,art131313,numark,beasty,cxfcnmttcnm,updown,starion,glist,sxhq65,ranger99,monkey7,shifter,wolves1,4r5t6y,phone1,favorite5,skytommy,abracada,1martin,102030405060,gatech,giulio,blacktop,cheer1,africa1,grizzly1,inkjet,shemales,durango1,booner,11223344q,supergirl,vanyarespekt,dickless,srilanka,weaponx,6string,nashvill,spicey,boxer1,fabien,2sexy2ho,bowhunt,jerrylee,acrobat,tawnee,ulisse,nolimit8,l8g3bkde,pershing,gordo1,allover,gobrowns,123432,123444,321456987,spoon1,hhhhh1,sailing1,gardenia,teache,sexmachine,tratata,pirate1,niceone,jimbos,314159265,qsdfgh,bobbyy,ccccc1,carla1,vjkjltw,savana,biotech,frigid,123456789g,dragon10,yesiam,alpha06,oakwood,tooter,winsto,radioman,vavilon,asnaeb,google123,nariman,kellyb,dthyjcnm,password6,parol1,golf72,skate1,lthtdj,1234567890s,kennet,rossia,lindas,nataliya,perfecto,eminem1,kitana,aragorn1,rexona,arsenalf,planot,coope,testing123,timex,blackbox,bullhead,barbarian,dreamon,polaris1,cfvjktn,frdfhbev,gametime,slipknot666,nomad1,hfgcjlbz,happy69,fiddler,brazil1,joeboy,indianali,113355,obelisk,telemark,ghostrid,preston1,anonim,wellcome,verizon1,sayangku,censor,timeport,dummies,adult1,nbnfybr,donger,thales,iamgay,sexy1234,deadlift,pidaras,doroga,123qwe321,portuga,asdfgh12,happys,cadr14nu,pi3141,maksik,dribble,cortland,darken,stepanova,bommel,tropic,sochi2014,bluegras,shahid,merhaba,nacho,2580456,orange44,kongen,3cudjz,78girl,my3kids,marcopol,deadmeat,gabbie,saruman,jeepman,freddie1,katie123,master99,ronal,ballbag,centauri,killer7,xqgann,pinecone,jdeere,geirby,aceshigh,55832811,pepsimax,rayden,razor1,tallyho,ewelina,coldfire,florid,glotest,999333,sevenup,bluefin,limaperu,apostol,bobbins,charmed1,michelin,sundin,centaur,alphaone,christof,trial1,lions1,45645,just4you,starflee,vicki1,cougar1,green2,jellyfis,batman69,games1,hihje863,crazyzil,w0rm1,oklick,dogbite,yssup,sunstar,paprika,postov10,124578963,x24ik3,kanada,buckster,iloveamy,bear123,smiler,nx74205,ohiostat,spacey,bigbill,doudo,nikolaeva,hcleeb,sex666,mindy1,buster11,deacons,boness,njkcnsq,candy2,cracker1,turkey1,qwertyu1,gogreen,tazzzz,edgewise,ranger01,qwerty6,blazer1,arian,letmeinnow,cigar1,jjjjjj1,grigio,frien,tenchu,f9lmwd,imissyou,filipp,heathers,coolie,salem1,woodduck,scubadiv,123kat,raffaele,nikolaev,dapzu455,skooter,9inches,lthgfhjkm,gr8one,ffffff1,zujlrf,amanda69,gldmeo,m5wkqf,rfrltkf,televisi,bonjou,paleale,stuff1,cumalot,fuckmenow,climb7,mark1234,t26gn4,oneeye,george2,utyyflbq,hunting1,tracy71,ready2go,hotguy,accessno,charger1,rudedog,kmfdm,goober1,sweetie1,wtpmjgda,dimensio,ollie1,pickles1,hellraiser,mustdie,123zzz,99887766,stepanov,verdun,tokenbad,anatol,bartende,cidkid86,onkelz,timmie,mooseman,patch1,12345678c,marta1,dummy1,bethany1,myfamily,history1,178500,lsutiger,phydeaux,moren,dbrnjhjdbx,gnbxrf,uniden,drummers,abpbrf,godboy,daisy123,hogan1,ratpack,irland,tangerine,greddy,flore,sqrunch,billyjoe,q55555,clemson1,98745632,marios,ishot,angelin,access12,naruto12,lolly,scxakv,austin12,sallad,cool99,rockit,mongo1,mark22,ghbynth,ariadna,senha,docto,tyler2,mobius,hammarby,192168,anna12,claire1,pxx3eftp,secreto,greeneye,stjabn,baguvix,satana666,rhbcnbyjxrf,dallastx,garfiel,michaelj,1summer,montan,1234ab,filbert,squids,fastback,lyudmila,chucho,eagleone,kimberle,ar3yuk3,jake01,nokids,soccer22,1066ad,ballon,cheeto,review69,madeira,taylor2,sunny123,chubbs,lakeland,striker1,porche,qwertyu8,digiview,go1234,ferari,lovetits,aditya,minnow,green3,matman,cellphon,fortytwo,minni,pucara,69a20a,roman123,fuente,12e3e456,paul12,jacky,demian,littleman,jadakiss,vlad1997,franca,282860,midian,nunzio,xaccess2,colibri,jessica0,revilo,654456,harvey1,wolf1,macarena,corey1,husky1,arsen,milleniu,852147,crowes,redcat,combat123654,hugger,psalms,quixtar,ilovemom,toyot,ballss,ilovekim,serdar,james23,avenger1,serendip,malamute,nalgas,teflon,shagger,letmein6,vyjujnjxbt,assa1234,student1,dixiedog,gznybwf13,fuckass,aq1sw2de3,robroy,hosehead,sosa21,123345,ias100,teddy123,poppin,dgl70460,zanoza,farhan,quicksilver,1701d,tajmahal,depechemode,paulchen,angler,tommy2,recoil,megamanx,scarecro,nicole2,152535,rfvtgb,skunky,fatty1,saturno,wormwood,milwauke,udbwsk,sexlover,stefa,7bgiqk,gfnhbr,omar10,bratan,lbyfvj,slyfox,forest1,jambo,william3,tempus,solitari,lucydog,murzilka,qweasdzxc1,vehpbkrf,12312345,fixit,woobie,andre123,123456789x,lifter,zinaida,soccer17,andone,foxbat,torsten,apple12,teleport,123456i,leglover,bigcocks,vologda,dodger1,martyn,d6o8pm,naciona,eagleeye,maria6,rimshot,bentley1,octagon,barbos,masaki,gremio,siemen,s1107d,mujeres,bigtits1,cherr,saints1,mrpink,simran,ghzybr,ferrari2,secret12,tornado1,kocham,picolo,deneme,onelove1,rolan,fenster,1fuckyou,cabbie,pegaso,nastyboy,password5,aidana,mine2306,mike13,wetone,tigger69,ytreza,bondage1,myass,golova,tolik,happyboy,poilkj,nimda2k,rammer,rubies,hardcore1,jetset,hoops1,jlaudio,misskitt,1charlie,google12,theone1,phred,porsch,aalborg,luft4,charlie5,password7,gnosis,djgabbab,1daniel,vinny,borris,cumulus,member1,trogdor,darthmau,andrew2,ktjybl,relisys,kriste,rasta220,chgobndg,weener,qwerty66,fritter,followme,freeman1,ballen,blood1,peache,mariso,trevor1,biotch,gtfullam,chamonix,friendste,alligato,misha1,1soccer,18821221,venkat,superd,molotov,bongos,mpower,acun3t1x,dfcmrf,h4x3d,rfhfufylf,tigran,booyaa,plastic1,monstr,rfnhby,lookatme,anabolic,tiesto,simon123,soulman,canes1,skyking,tomcat1,madona,bassline,dasha123,tarheel1,dutch1,xsw23edc,qwerty123456789,imperator,slaveboy,bateau,paypal,house123,pentax,wolf666,drgonzo,perros,digger1,juninho,hellomoto,bladerun,zzzzzzz1,keebler,take8422,fffffff1,ginuwine,israe,caesar1,crack1,precious1,garand,magda1,zigazaga,321ewq,johnpaul,mama1234,iceman69,sanjeev,treeman,elric,rebell,1thunder,cochon,deamon,zoltan,straycat,uhbyuj,luvfur,mugsy,primer,wonder1,teetime,candycan,pfchfytw,fromage,gitler,salvatio,piggy1,23049307,zafira,chicky,sergeev,katze,bangers,andriy,jailbait,vaz2107,ghbhjlf,dbjktnnf,aqswde,zaratustra,asroma,1pepper,alyss,kkkkk1,ryan1,radish,cozumel,waterpol,pentium1,rosebowl,farmall,steinway,dbrekz,baranov,jkmuf,another1,chinacat,qqqqqqq1,hadrian,devilmaycry4,ratbag,teddy2,love21,pullings,packrat,robyn1,boobo,qw12er34,tribe1,rosey,celestia,nikkie,fortune12,olga123,danthema,gameon,vfrfhjys,dilshod,henry14,jenova,redblue,chimaera,pennywise,sokrates,danimal,qqaazz,fuaqz4,killer2,198200,tbone1,kolyan,wabbit,lewis1,maxtor,egoist,asdfas,spyglass,omegas,jack12,nikitka,esperanz,doozer,matematika,wwwww1,ssssss1,poiu0987,suchka,courtney1,gungho,alpha2,fktyjxrf,summer06,bud420,devildriver,heavyd,saracen,foucault,choclate,rjdfktyrj,goblue1,monaro,jmoney,dcpugh,efbcapa201,qqh92r,pepsicol,bbb747,ch5nmk,honeyb,beszoptad,tweeter,intheass,iseedeadpeople,123dan,89231243658s,farside1,findme,smiley1,55556666,sartre,ytcnjh,kacper,costarica,134679258,mikeys,nolimit9,vova123,withyou,5rxypn,love143,freebie,rescue1,203040,michael6,12monkey,redgreen,steff,itstime,naveen,good12345,acidrain,1dawg,miramar,playas,daddio,orion2,852741,studmuff,kobe24,senha123,stephe,mehmet,allalone,scarface1,helloworld,smith123,blueyes,vitali,memphis1,mybitch,colin1,159874,1dick,podaria,d6wnro,brahms,f3gh65,dfcbkmtd,xxxman,corran,ugejvp,qcfmtz,marusia,totem,arachnid,matrix2,antonell,fgntrf,zemfira,christos,surfing1,naruto123,plato1,56qhxs,madzia,vanille,043aaa,asq321,mutton,ohiostate,golde,cdznjckfd,rhfcysq,green5,elephan,superdog,jacqueli,bollock,lolitas,nick12,1orange,maplelea,july23,argento,waldorf,wolfer,pokemon12,zxcvbnmm,flicka,drexel,outlawz,harrie,atrain,juice2,falcons1,charlie6,19391945,tower1,dragon21,hotdamn,dirtyboy,love4ever,1ginger,thunder2,virgo1,alien1,bubblegu,4wwvte,123456789qqq,realtime,studio54,passss,vasilek,awsome,giorgia,bigbass,2002tii,sunghile,mosdef,simbas,count0,uwrl7c,summer05,lhepmz,ranger21,sugarbea,principe,5550123,tatanka,9638v,cheerios,majere,nomercy,jamesbond007,bh90210,7550055,jobber,karaganda,pongo,trickle,defamer,6chid8,1q2a3z,tuscan,nick123,.adgjm,loveyo,hobbes1,note1234,shootme,171819,loveporn,9788960,monty123,fabrice,macduff,monkey13,shadowfa,tweeker,hanna1,madball,telnet,loveu2,qwedcxzas,thatsit,vfhcbr,ptfe3xxp,gblfhfcs,ddddddd1,hakkinen,liverune,deathsta,misty123,suka123,recon1,inferno1,232629,polecat,sanibel,grouch,hitech,hamradio,rkfdbfnehf,vandam,nadin,fastlane,shlong,iddqdidkfa,ledzeppelin,sexyfeet,098123,stacey1,negras,roofing,lucifer1,ikarus,tgbyhn,melnik,barbaria,montego,twisted1,bigal1,jiggle,darkwolf,acerview,silvio,treetops,bishop1,iwanna,pornsite,happyme,gfccdjhl,114411,veritech,batterse,casey123,yhntgb,mailto,milli,guster,q12345678,coronet,sleuth,fuckmeha,armadill,kroshka,geordie,lastochka,pynchon,killall,tommy123,sasha1996,godslove,hikaru,clticic,cornbrea,vfkmdbyf,passmaster,123123123a,souris,nailer,diabolo,skipjack,martin12,hinata,mof6681,brookie,dogfight,johnso,karpov,326598,rfvbrflpt,travesti,caballer,galaxy1,wotan,antoha,art123,xakep1234,ricflair,pervert1,p00kie,ambulanc,santosh,berserker,larry33,bitch123,a987654321,dogstar,angel22,cjcbcrf,redhouse,toodles,gold123,hotspot,kennedy1,glock21,chosen1,schneide,mainman,taffy1,3ki42x,4zqauf,ranger2,4meonly,year2000,121212a,kfylsi,netzwerk,diese,picasso1,rerecz,225522,dastan,swimmer1,brooke1,blackbea,oneway,ruslana,dont4get,phidelt,chrisp,gjyxbr,xwing,kickme,shimmy,kimmy1,4815162342lost,qwerty5,fcporto,jazzbo,mierd,252627,basses,sr20det,00133,florin,howdy1,kryten,goshen,koufax,cichlid,imhotep,andyman,wrest666,saveme,dutchy,anonymou,semprini,siempre,mocha1,forest11,wildroid,aspen1,sesam,kfgekz,cbhbec,a55555,sigmanu,slash1,giggs11,vatech,marias,candy123,jericho1,kingme,123a123,drakula,cdjkjxm,mercur,oneman,hoseman,plumper,ilovehim,lancers,sergey1,takeshi,goodtogo,cranberr,ghjcnj123,harvick,qazxs,1972chev,horsesho,freedom3,letmein7,saitek,anguss,vfvfgfgfz,300000,elektro,toonporn,999111999q,mamuka,q9umoz,edelweis,subwoofer,bayside,disturbe,volition,lucky3,12345678z,3mpz4r,march1,atlantida,strekoza,seagrams,090909t,yy5rbfsc,jack1234,sammy12,sampras,mark12,eintrach,chaucer,lllll1,nochance,whitepower,197000,lbvekz,passer,torana,12345as,pallas,koolio,12qw34,nokia8800,findout,1thomas,mmmmm1,654987,mihaela,chinaman,superduper,donnas,ringo1,jeroen,gfdkjdf,professo,cdtnrf,tranmere,tanstaaf,himera,ukflbfnjh,667788,alex32,joschi,w123456,okidoki,flatline,papercli,super8,doris1,2good4u,4z34l0ts,pedigree,freeride,gsxr1100,wulfgar,benjie,ferdinan,king1,charlie7,djdxbr,fhntvbq,ripcurl,2wsx1qaz,kingsx,desade,sn00py,loveboat,rottie,evgesha,4money,dolittle,adgjmpt,buzzers,brett1,makita,123123qweqwe,rusalka,sluts1,123456e,jameson1,bigbaby,1z2z3z,ckjybr,love4u,fucker69,erhfbyf,jeanluc,farhad,fishfood,merkin,giant1,golf69,rfnfcnhjaf,camera1,stromb,smoothy,774411,nylon,juice1,rfn.irf,newyor,123456789t,marmot,star11,jennyff,jester1,hisashi,kumquat,alex777,helicopt,merkur,dehpye,cummin,zsmj2v,kristjan,april12,englan,honeypot,badgirls,uzumaki,keines,p12345,guita,quake1,duncan1,juicer,milkbone,hurtme,123456789b,qq123456789,schwein,p3wqaw,54132442,qwertyytrewq,andreeva,ruffryde,punkie,abfkrf,kristinka,anna1987,ooooo1,335533aa,umberto,amber123,456123789,456789123,beelch,manta,peeker,1112131415,3141592654,gipper,wrinkle5,katies,asd123456,james11,78n3s5af,michael0,daboss,jimmyb,hotdog1,david69,852123,blazed,sickan,eljefe,2n6wvq,gobills,rfhfcm,squeaker,cabowabo,luebri,karups,test01,melkor,angel777,smallvil,modano,olorin,4rkpkt,leslie1,koffie,shadows1,littleon,amiga1,topeka,summer20,asterix1,pitstop,aloysius,k12345,magazin,joker69,panocha,pass1word,1233214,ironpony,368ejhih,88keys,pizza123,sonali,57np39,quake2,1234567890qw,1020304,sword1,fynjif,abcde123,dfktyjr,rockys,grendel1,harley12,kokakola,super2,azathoth,lisa123,shelley1,girlss,ibragim,seven1,jeff24,1bigdick,dragan,autobot,t4nvp7,omega123,900000,hecnfv,889988,nitro1,doggie1,fatjoe,811pahc,tommyt,savage1,pallino,smitty1,jg3h4hfn,jamielee,1qazwsx,zx123456,machine1,asdfgh123,guinnes,789520,sharkman,jochen,legend1,sonic2,extreme1,dima12,photoman,123459876,nokian95,775533,vaz2109,april10,becks,repmvf,pooker,qwer12345,themaster,nabeel,monkey10,gogetit,hockey99,bbbbbbb1,zinedine,dolphin2,anelka,1superma,winter01,muggsy,horny2,669966,kuleshov,jesusis,calavera,bullet1,87t5hdf,sleepers,winkie,vespa,lightsab,carine,magister,1spider,shitbird,salavat,becca1,wc18c2,shirak,galactus,zaskar,barkley1,reshma,dogbreat,fullsail,asasa,boeder,12345ta,zxcvbnm12,lepton,elfquest,tony123,vkaxcs,savatage,sevilia1,badkitty,munkey,pebbles1,diciembr,qapmoc,gabriel2,1qa2ws3e,cbcmrb,welldone,nfyufh,kaizen,jack11,manisha,grommit,g12345,maverik,chessman,heythere,mixail,jjjjjjj1,sylvia1,fairmont,harve,skully,global1,youwish,pikachu1,badcat,zombie1,49527843,ultra1,redrider,offsprin,lovebird,153426,stymie,aq1sw2,sorrento,0000001,r3ady41t,webster1,95175,adam123,coonass,159487,slut1,gerasim,monkey99,slutwife,159963,1pass1page,hobiecat,bigtymer,all4you,maggie2,olamide,comcast1,infinit,bailee,vasileva,.ktxrf,asdfghjkl1,12345678912,setter,fuckyou7,nnagqx,lifesuck,draken,austi,feb2000,cable1,1234qwerasdf,hax0red,zxcv12,vlad7788,nosaj,lenovo,underpar,huskies1,lovegirl,feynman,suerte,babaloo,alskdjfhg,oldsmobi,bomber1,redrover,pupuce,methodman,phenom,cutegirl,countyli,gretsch,godisgood,bysunsu,hardhat,mironova,123qwe456rty,rusty123,salut,187211,555666777,11111z,mahesh,rjntyjxtr,br00klyn,dunce1,timebomb,bovine,makelove,littlee,shaven,rizwan,patrick7,42042042,bobbijo,rustem,buttmunc,dongle,tiger69,bluecat,blackhol,shirin,peaces,cherub,cubase,longwood,lotus7,gwju3g,bruin,pzaiu8,green11,uyxnyd,seventee,dragon5,tinkerbel,bluess,bomba,fedorova,joshua2,bodyshop,peluche,gbpacker,shelly1,d1i2m3a4,ghtpbltyn,talons,sergeevna,misato,chrisc,sexmeup,brend,olddog,davros,hazelnut,bridget1,hzze929b,readme,brethart,wild1,ghbdtnbr1,nortel,kinger,royal1,bucky1,allah1,drakkar,emyeuanh,gallaghe,hardtime,jocker,tanman,flavio,abcdef123,leviatha,squid1,skeet,sexse,123456x,mom4u4mm,lilred,djljktq,ocean11,cadaver,baxter1,808state,fighton,primavera,1andrew,moogle,limabean,goddess1,vitalya,blue56,258025,bullride,cicci,1234567d,connor1,gsxr11,oliveoil,leonard1,legsex,gavrik,rjnjgtc,mexicano,2bad4u,goodfellas,ornw6d,mancheste,hawkmoon,zlzfrh,schorsch,g9zns4,bashful,rossi46,stephie,rfhfntkm,sellout,123fuck,stewar1,solnze,00007,thor5200,compaq12,didit,bigdeal,hjlbyf,zebulon,wpf8eu,kamran,emanuele,197500,carvin,ozlq6qwm,3syqo15hil,pennys,epvjb6,asdfghjkl123,198000,nfbcbz,jazzer,asfnhg66,zoloft,albundy,aeiou,getlaid,planet1,gjkbyjxrf,alex2000,brianb,moveon,maggie11,eieio,vcradq,shaggy1,novartis,cocoloco,dunamis,554uzpad,sundrop,1qwertyu,alfie,feliks,briand,123www,red456,addams,fhntv1998,goodhead,theway,javaman,angel01,stratoca,lonsdale,15987532,bigpimpin,skater1,issue43,muffie,yasmina,slowride,crm114,sanity729,himmel,carolcox,bustanut,parabola,masterlo,computador,crackhea,dynastar,rockbott,doggysty,wantsome,bigten,gaelle,juicy1,alaska1,etower,sixnine,suntan,froggies,nokia7610,hunter11,njnets,alicante,buttons1,diosesamo,elizabeth1,chiron,trustnoo,amatuers,tinytim,mechta,sammy2,cthulu,trs8f7,poonam,m6cjy69u35,cookie12,blue25,jordans,santa1,kalinka,mikey123,lebedeva,12345689,kissss,queenbee,vjybnjh,ghostdog,cuckold,bearshare,rjcntyrj,alinochka,ghjcnjrdfibyj,aggie1,teens1,3qvqod,dauren,tonino,hpk2qc,iqzzt580,bears85,nascar88,theboy,njqcw4,masyanya,pn5jvw,intranet,lollone,shadow99,00096462,techie,cvtifhbrb,redeemed,gocanes,62717315,topman,intj3a,cobrajet,antivirus,whyme,berserke,ikilz083,airedale,brandon2,hopkig,johanna1,danil8098,gojira,arthu,vision1,pendragon,milen,chrissie,vampiro,mudder,chris22,blowme69,omega7,surfers,goterps,italy1,baseba11,diego1,gnatsum,birdies,semenov,joker123,zenit2011,wojtek,cab4ma99,watchmen,damia,forgotte,fdm7ed,strummer,freelanc,cingular,orange77,mcdonalds,vjhjpjdf,kariya,tombston,starlet,hawaii1,dantheman,megabyte,nbvjirf,anjing,ybrjkftdbx,hotmom,kazbek,pacific1,sashimi,asd12,coorslig,yvtte545,kitte,elysium,klimenko,cobblers,kamehameha,only4me,redriver,triforce,sidorov,vittoria,fredi,dank420,m1234567,fallout2,989244342a,crazy123,crapola,servus,volvos,1scooter,griffin1,autopass,ownzyou,deviant,george01,2kgwai,boeing74,simhrq,hermosa,hardcor,griffy,rolex1,hackme,cuddles1,master3,bujhtr,aaron123,popolo,blader,1sexyred,gerry1,cronos,ffvdj474,yeehaw,bob1234,carlos2,mike77,buckwheat,ramesh,acls2h,monster2,montess,11qq22ww,lazer,zx123456789,chimpy,masterch,sargon,lochness,archana,1234qwert,hbxfhl,sarahb,altoid,zxcvbn12,dakot,caterham,dolomite,chazz,r29hqq,longone,pericles,grand1,sherbert,eagle3,pudge,irontree,synapse,boome,nogood,summer2,pooki,gangsta1,mahalkit,elenka,lbhtrnjh,dukedog,19922991,hopkins1,evgenia,domino1,x123456,manny1,tabbycat,drake1,jerico,drahcir,kelly2,708090a,facesit,11c645df,mac123,boodog,kalani,hiphop1,critters,hellothere,tbirds,valerka,551scasi,love777,paloalto,mrbrown,duke3d,killa1,arcturus,spider12,dizzy1,smudger,goddog,75395,spammy,1357997531,78678,datalife,zxcvbn123,1122112211,london22,23dp4x,rxmtkp,biggirls,ownsu,lzbs2twz,sharps,geryfe,237081a,golakers,nemesi,sasha1995,pretty1,mittens1,d1lakiss,speedrac,gfhjkmm,sabbat,hellrais,159753258,qwertyuiop123,playgirl,crippler,salma,strat1,celest,hello5,omega5,cheese12,ndeyl5,edward12,soccer3,cheerio,davido,vfrcbr,gjhjctyjr,boscoe,inessa,shithole,ibill,qwepoi,201jedlz,asdlkj,davidk,spawn2,ariel1,michael4,jamie123,romantik,micro1,pittsbur,canibus,katja,muhtar,thomas123,studboy,masahiro,rebrov,patrick8,hotboys,sarge1,1hammer,nnnnn1,eistee,datalore,jackdani,sasha2010,mwq6qlzo,cmfnpu,klausi,cnhjbntkm,andrzej,ilovejen,lindaa,hunter123,vvvvv1,novembe,hamster1,x35v8l,lacey1,1silver,iluvporn,valter,herson,alexsandr,cojones,backhoe,womens,777angel,beatit,klingon1,ta8g4w,luisito,benedikt,maxwel,inspecto,zaq12ws,wladimir,bobbyd,peterj,asdfg12,hellspawn,bitch69,nick1234,golfer23,sony123,jello1,killie,chubby1,kodaira52,yanochka,buckfast,morris1,roaddogg,snakeeye,sex1234,mike22,mmouse,fucker11,dantist,brittan,vfrfhjdf,doc123,plokijuh,emerald1,batman01,serafim,elementa,soccer9,footlong,cthuttdbx,hapkido,eagle123,getsmart,getiton,batman2,masons,mastiff,098890,cfvfhf,james7,azalea,sherif,saun24865709,123red,cnhtrjpf,martina1,pupper,michael5,alan12,shakir,devin1,ha8fyp,palom,mamulya,trippy,deerhunter,happyone,monkey77,3mta3,123456789f,crownvic,teodor,natusik,0137485,vovchik,strutter,triumph1,cvetok,moremone,sonnen,screwbal,akira1,sexnow,pernille,independ,poopies,samapi,kbcbxrf,master22,swetlana,urchin,viper2,magica,slurpee,postit,gilgames,kissarmy,clubpenguin,limpbizk,timber1,celin,lilkim,fuckhard,lonely1,mom123,goodwood,extasy,sdsadee23,foxglove,malibog,clark1,casey2,shell1,odense,balefire,dcunited,cubbie,pierr,solei,161718,bowling1,areyukesc,batboy,r123456,1pionee,marmelad,maynard1,cn42qj,cfvehfq,heathrow,qazxcvbn,connecti,secret123,newfie,xzsawq21,tubitzen,nikusha,enigma1,yfcnz123,1austin,michaelc,splunge,wanger,phantom2,jason2,pain4me,primetime21,babes1,liberte,sugarray,undergro,zonker,labatts,djhjyf,watch1,eagle5,madison2,cntgfirf,sasha2,masterca,fiction7,slick50,bruins1,sagitari,12481632,peniss,insuranc,2b8riedt,12346789,mrclean,ssptx452,tissot,q1w2e3r4t5y6u7,avatar1,comet1,spacer,vbrjkf,pass11,wanker1,14vbqk9p,noshit,money4me,sayana,fish1234,seaways,pipper,romeo123,karens,wardog,ab123456,gorilla1,andrey123,lifesucks,jamesr,4wcqjn,bearman,glock22,matt11,dflbvrf,barbi,maine1,dima1997,sunnyboy,6bjvpe,bangkok1,666666q,rafiki,letmein0,0raziel0,dalla,london99,wildthin,patrycja,skydog,qcactw,tmjxn151,yqlgr667,jimmyd,stripclub,deadwood,863abgsg,horses1,qn632o,scatman,sonia1,subrosa,woland,kolya,charlie4,moleman,j12345,summer11,angel11,blasen,sandal,mynewpas,retlaw,cambria,mustang4,nohack04,kimber45,fatdog,maiden1,bigload,necron,dupont24,ghost123,turbo2,.ktymrf,radagast,balzac,vsevolod,pankaj,argentum,2bigtits,mamabear,bumblebee,mercury7,maddie1,chomper,jq24nc,snooky,pussylic,1lovers,taltos,warchild,diablo66,jojo12,sumerki,aventura,gagger,annelies,drumset,cumshots,azimut,123580,clambake,bmw540,birthday54,psswrd,paganini,wildwest,filibert,teaseme,1test,scampi,thunder5,antosha,purple12,supersex,hhhhhh1,brujah,111222333a,13579a,bvgthfnjh,4506802a,killians,choco,qqqwwweee,raygun,1grand,koetsu13,sharp1,mimi92139,fastfood,idontcare,bluered,chochoz,4z3al0ts,target1,sheffiel,labrat,stalingrad,147123,cubfan,corvett1,holden1,snapper1,4071505,amadeo,pollo,desperados,lovestory,marcopolo,mumbles,familyguy,kimchee,marcio,support1,tekila,shygirl1,trekkie,submissi,ilaria,salam,loveu,wildstar,master69,sales1,netware,homer2,arseniy,gerrity1,raspberr,atreyu,stick1,aldric,tennis12,matahari,alohomora,dicanio,michae1,michaeld,666111,luvbug,boyscout,esmerald,mjordan,admiral1,steamboa,616913,ybhdfyf,557711,555999,sunray,apokalipsis,theroc,bmw330,buzzy,chicos,lenusik,shadowma,eagles05,444222,peartree,qqq123,sandmann,spring1,430799,phatass,andi03,binky1,arsch,bamba,kenny123,fabolous,loser123,poop12,maman,phobos,tecate,myxworld4,metros,cocorico,nokia6120,johnny69,hater,spanked,313233,markos,love2011,mozart1,viktoriy,reccos,331234,hornyone,vitesse,1um83z,55555q,proline,v12345,skaven,alizee,bimini,fenerbahce,543216,zaqqaz,poi123,stabilo,brownie1,1qwerty1,dinesh,baggins1,1234567t,davidkin,friend1,lietuva,octopuss,spooks,12345qq,myshit,buttface,paradoxx,pop123,golfin,sweet69,rfghbp,sambuca,kayak1,bogus1,girlz,dallas12,millers,123456zx,operatio,pravda,eternal1,chase123,moroni,proust,blueduck,harris1,redbarch,996699,1010101,mouche,millenni,1123456,score1,1234565,1234576,eae21157,dave12,pussyy,gfif1991,1598741,hoppy,darrian,snoogins,fartface,ichbins,vfkbyrf,rusrap,2741001,fyfrjylf,aprils,favre,thisis,bannana,serval,wiggum,satsuma,matt123,ivan123,gulmira,123zxc123,oscar2,acces,annie2,dragon0,emiliano,allthat,pajaro,amandine,rawiswar,sinead,tassie,karma1,piggys,nokias,orions,origami,type40,mondo,ferrets,monker,biteme2,gauntlet,arkham,ascona,ingram01,klem1,quicksil,bingo123,blue66,plazma,onfire,shortie,spjfet,123963,thered,fire777,lobito,vball,1chicken,moosehea,elefante,babe23,jesus12,parallax,elfstone,number5,shrooms,freya,hacker1,roxette,snoops,number7,fellini,dtlmvf,chigger,mission1,mitsubis,kannan,whitedog,james01,ghjgecr,rfnfgekmnf,everythi,getnaked,prettybo,sylvan,chiller,carrera4,cowbo,biochem,azbuka,qwertyuiop1,midnight1,informat,audio1,alfred1,0range,sucker1,scott2,russland,1eagle,torben,djkrjlfd,rocky6,maddy1,bonobo,portos,chrissi,xjznq5,dexte,vdlxuc,teardrop,pktmxr,iamtheone,danijela,eyphed,suzuki1,etvww4,redtail,ranger11,mowerman,asshole2,coolkid,adriana1,bootcamp,longcut,evets,npyxr5,bighurt,bassman1,stryder,giblet,nastja,blackadd,topflite,wizar,cumnow,technolo,bassboat,bullitt,kugm7b,maksimus,wankers,mine12,sunfish,pimpin1,shearer9,user1,vjzgjxnf,tycobb,80070633pc,stanly,vitaly,shirley1,cinzia,carolyn1,angeliqu,teamo,qdarcv,aa123321,ragdoll,bonit,ladyluck,wiggly,vitara,jetbalance,12345600,ozzman,dima12345,mybuddy,shilo,satan66,erebus,warrio,090808qwe,stupi,bigdan,paul1234,chiapet,brooks1,philly1,dually,gowest,farmer1,1qa2ws3ed4rf,alberto1,beachboy,barne,aa12345,aliyah,radman,benson1,dfkthbq,highball,bonou2,i81u812,workit,darter,redhook,csfbr5yy,buttlove,episode1,ewyuza,porthos,lalal,abcd12,papero,toosexy,keeper1,silver7,jujitsu,corset,pilot123,simonsay,pinggolf,katerinka,kender,drunk1,fylhjvtlf,rashmi,nighthawk,maggy,juggernaut,larryb,cabibble,fyabcf,247365,gangstar,jaybee,verycool,123456789qw,forbidde,prufrock,12345zxc,malaika,blackbur,docker,filipe,koshechka,gemma1,djamaal,dfcbkmtdf,gangst,9988aa,ducks1,pthrfkj,puertorico,muppets,griffins,whippet,sauber,timofey,larinso,123456789zxc,quicken,qsefth,liteon,headcase,bigdadd,zxc321,maniak,jamesc,bassmast,bigdogs,1girls,123xxx,trajan,lerochka,noggin,mtndew,04975756,domin,wer123,fumanchu,lambada,thankgod,june22,kayaking,patchy,summer10,timepass,poiu1234,kondor,kakka,lament,zidane10,686xqxfg,l8v53x,caveman1,nfvthkfy,holymoly,pepita,alex1996,mifune,fighter1,asslicker,jack22,abc123abc,zaxxon,midnigh,winni,psalm23,punky,monkey22,password13,mymusic,justyna,annushka,lucky5,briann,495rus19,withlove,almaz,supergir,miata,bingbong,bradpitt,kamasutr,yfgjktjy,vanman,pegleg,amsterdam1,123a321,letmein9,shivan,korona,bmw520,annette1,scotsman,gandal,welcome12,sc00by,qpwoei,fred69,m1sf1t,hamburg1,1access,dfkmrbhbz,excalibe,boobies1,fuckhole,karamel,starfuck,star99,breakfas,georgiy,ywvxpz,smasher,fatcat1,allanon,12345n,coondog,whacko,avalon1,scythe,saab93,timon,khorne,atlast,nemisis,brady12,blenheim,52678677,mick7278,9skw5g,fleetwoo,ruger1,kissass,pussy7,scruff,12345l,bigfun,vpmfsz,yxkck878,evgeny,55667788,lickher,foothill,alesis,poppies,77777778,californi,mannie,bartjek,qhxbij,thehulk,xirt2k,angelo4ek,rfkmrekznjh,tinhorse,1david,sparky12,night1,luojianhua,bobble,nederland,rosemari,travi,minou,ciscokid,beehive,565hlgqo,alpine1,samsung123,trainman,xpress,logistic,vw198m2n,hanter,zaqwsx123,qwasz,mariachi,paska,kmg365,kaulitz,sasha12,north1,polarbear,mighty1,makeksa11,123456781,one4all,gladston,notoriou,polniypizdec110211,gosia,grandad,xholes,timofei,invalidp,speaker1,zaharov,maggiema,loislane,gonoles,br5499,discgolf,kaskad,snooper,newman1,belial,demigod,vicky1,pridurok,alex1990,tardis1,cruzer,hornie,sacramen,babycat,burunduk,mark69,oakland1,me1234,gmctruck,extacy,sexdog,putang,poppen,billyd,1qaz2w,loveable,gimlet,azwebitalia,ragtop,198500,qweas,mirela,rock123,11bravo,sprewell,tigrenok,jaredleto,vfhbif,blue2,rimjob,catwalk,sigsauer,loqse,doromich,jack01,lasombra,jonny5,newpassword,profesor,garcia1,123as123,croucher,demeter,4_life,rfhfvtkm,superman2,rogues,assword1,russia1,jeff1,mydream,z123456789,rascal1,darre,kimberl,pickle1,ztmfcq,ponchik,lovesporn,hikari,gsgba368,pornoman,chbjun,choppy,diggity,nightwolf,viktori,camar,vfhecmrf,alisa1,minstrel,wishmaster,mulder1,aleks,gogirl,gracelan,8womys,highwind,solstice,dbrnjhjdyf,nightman,pimmel,beertje,ms6nud,wwfwcw,fx3tuo,poopface,asshat,dirtyd,jiminy,luv2fuck,ptybnxtvgbjy,dragnet,pornogra,10inch,scarlet1,guido1,raintree,v123456,1aaaaaaa,maxim1935,hotwater,gadzooks,playaz,harri,brando1,defcon1,ivanna,123654a,arsenal2,candela,nt5d27,jaime1,duke1,burton1,allstar1,dragos,newpoint,albacore,1236987z,verygoodbot,1wildcat,fishy1,ptktysq,chris11,puschel,itdxtyrj,7kbe9d,serpico,jazzie,1zzzzz,kindbuds,wenef45313,1compute,tatung,sardor,gfyfcjybr,test99,toucan,meteora,lysander,asscrack,jowgnx,hevnm4,suckthis,masha123,karinka,marit,oqglh565,dragon00,vvvbbb,cheburashka,vfrfrf,downlow,unforgiven,p3e85tr,kim123,sillyboy,gold1,golfvr6,quicksan,irochka,froglegs,shortsto,caleb1,tishka,bigtitts,smurfy,bosto,dropzone,nocode,jazzbass,digdug,green7,saltlake,therat,dmitriev,lunita,deaddog,summer0,1212qq,bobbyg,mty3rh,isaac1,gusher,helloman,sugarbear,corvair,extrem,teatime,tujazopi,titanik,efyreg,jo9k2jw2,counchac,tivoli,utjvtnhbz,bebit,jacob6,clayton1,incubus1,flash123,squirter,dima2010,cock1,rawks,komatsu,forty2,98741236,cajun1,madelein,mudhoney,magomed,q111111,qaswed,consense,12345b,bakayaro,silencer,zoinks,bigdic,werwolf,pinkpuss,96321478,alfie1,ali123,sarit,minette,musics,chato,iaapptfcor,cobaka,strumpf,datnigga,sonic123,yfnecbr,vjzctvmz,pasta1,tribbles,crasher,htlbcrf,1tiger,shock123,bearshar,syphon,a654321,cubbies1,jlhanes,eyespy,fucktheworld,carrie1,bmw325is,suzuk,mander,dorina,mithril,hondo1,vfhnbyb,sachem,newton1,12345x,7777755102q,230857z,xxxsex,scubapro,hayastan,spankit,delasoul,searock6,fallout3,nilrem,24681357,pashka,voluntee,pharoh,willo,india1,badboy69,roflmao,gunslinger,lovergir,mama12,melange,640xwfkv,chaton,darkknig,bigman1,aabbccdd,harleyd,birdhouse,giggsy,hiawatha,tiberium,joker7,hello1234,sloopy,tm371855,greendog,solar1,bignose,djohn11,espanol,oswego,iridium,kavitha,pavell,mirjam,cyjdsvujljv,alpha5,deluge,hamme,luntik,turismo,stasya,kjkbnf,caeser,schnecke,tweety1,tralfaz,lambrett,prodigy1,trstno1,pimpshit,werty1,karman,bigboob,pastel,blackmen,matthew8,moomin,q1w2e,gilly,primaver,jimmyg,house2,elviss,15975321,1jessica,monaliza,salt55,vfylfhbyrf,harley11,tickleme,murder1,nurgle,kickass1,theresa1,fordtruck,pargolf,managua,inkognito,sherry1,gotit,friedric,metro2033,slk230,freeport,cigarett,492529,vfhctkm,thebeach,twocats,bakugan,yzerman1,charlieb,motoko,skiman,1234567w,pussy3,love77,asenna,buffie,260zntpc,kinkos,access20,mallard1,fuckyou69,monami,rrrrr1,bigdog69,mikola,1boomer,godzila,ginger2,dima2000,skorpion39,dima1234,hawkdog79,warrior2,ltleirf,supra1,jerusale,monkey01,333z333,666888,kelsey1,w8gkz2x1,fdfnfh,msnxbi,qwe123rty,mach1,monkey3,123456789qq,c123456,nezabudka,barclays,nisse,dasha1,12345678987654321,dima1993,oldspice,frank2,rabbitt,prettyboy,ov3ajy,iamthema,kawasak,banjo1,gtivr6,collants,gondor,hibees,cowboys2,codfish,buster2,purzel,rubyred,kayaker,bikerboy,qguvyt,masher,sseexx,kenshiro,moonglow,semenova,rosari,eduard1,deltaforce,grouper,bongo1,tempgod,1taylor,goldsink,qazxsw1,1jesus,m69fg2w,maximili,marysia,husker1,kokanee,sideout,googl,south1,plumber1,trillian,00001,1357900,farkle,1xxxxx,pascha,emanuela,bagheera,hound1,mylov,newjersey,swampfox,sakic19,torey,geforce,wu4etd,conrail,pigman,martin2,ber02,nascar2,angel69,barty,kitsune,cornet,yes90125,goomba,daking,anthea,sivart,weather1,ndaswf,scoubidou,masterchief,rectum,3364068,oranges1,copter,1samanth,eddies,mimoza,ahfywbz,celtic88,86mets,applemac,amanda11,taliesin,1angel,imhere,london11,bandit12,killer666,beer1,06225930,psylocke,james69,schumach,24pnz6kc,endymion,wookie1,poiu123,birdland,smoochie,lastone,rclaki,olive1,pirat,thunder7,chris69,rocko,151617,djg4bb4b,lapper,ajcuivd289,colole57,shadow7,dallas21,ajtdmw,executiv,dickies,omegaman,jason12,newhaven,aaaaaas,pmdmscts,s456123789,beatri,applesauce,levelone,strapon,benladen,creaven,ttttt1,saab95,f123456,pitbul,54321a,sex12345,robert3,atilla,mevefalkcakk,1johnny,veedub,lilleke,nitsuj,5t6y7u8i,teddys,bluefox,nascar20,vwjetta,buffy123,playstation3,loverr,qweasd12,lover2,telekom,benjamin1,alemania,neutrino,rockz,valjean,testicle,trinity3,realty,firestarter,794613852,ardvark,guadalup,philmont,arnold1,holas,zw6syj,birthday299,dover1,sexxy1,gojets,741236985,cance,blue77,xzibit,qwerty88,komarova,qweszxc,footer,rainger,silverst,ghjcnb,catmando,tatooine,31217221027711,amalgam,69dude,qwerty321,roscoe1,74185,cubby,alfa147,perry1,darock,katmandu,darknight,knicks1,freestuff,45454,kidman,4tlved,axlrose,cutie1,quantum1,joseph10,ichigo,pentium3,rfhectkm,rowdy1,woodsink,justforfun,sveta123,pornografia,mrbean,bigpig,tujheirf,delta9,portsmou,hotbod,kartal,10111213,fkbyf001,pavel1,pistons1,necromancer,verga,c7lrwu,doober,thegame1,hatesyou,sexisfun,1melissa,tuczno18,bowhunte,gobama,scorch,campeon,bruce2,fudge1,herpderp,bacon1,redsky,blackeye,19966991,19992000,ripken8,masturba,34524815,primax,paulina1,vp6y38,427cobra,4dwvjj,dracon,fkg7h4f3v6,longview,arakis,panama1,honda2,lkjhgfdsaz,razors,steels,fqkw5m,dionysus,mariajos,soroka,enriqu,nissa,barolo,king1234,hshfd4n279,holland1,flyer1,tbones,343104ky,modems,tk421,ybrbnrf,pikapp,sureshot,wooddoor,florida2,mrbungle,vecmrf,catsdogs,axolotl,nowayout,francoi,chris21,toenail,hartland,asdjkl,nikkii,onlyyou,buckskin,fnord,flutie,holen1,rincewind,lefty1,ducky1,199000,fvthbrf,redskin1,ryno23,lostlove,19mtpgam19,abercrom,benhur,jordan11,roflcopter,ranma,phillesh,avondale,igromania,p4ssword,jenny123,tttttt1,spycams,cardigan,2112yyz,sleepy1,paris123,mopars,lakers34,hustler1,james99,matrix3,popimp,12pack,eggbert,medvedev,testit,performa,logitec,marija,sexybeast,supermanboy,iwantit,rjktcj,jeffer,svarog,halo123,whdbtp,nokia3230,heyjoe,marilyn1,speeder,ibxnsm,prostock,bennyboy,charmin,codydog,parol999,ford9402,jimmer,crayola,159357258,alex77,joey1,cayuga,phish420,poligon,specops,tarasova,caramelo,draconis,dimon,cyzkhw,june29,getbent,1guitar,jimjam,dictiona,shammy,flotsam,0okm9ijn,crapper,technic,fwsadn,rhfdxtyrj,zaq11qaz,anfield1,159753q,curious1,hip-hop,1iiiii,gfhjkm2,cocteau,liveevil,friskie,crackhead,b1afra,elektrik,lancer1,b0ll0cks,jasond,z1234567,tempest1,alakazam,asdfasd,duffy1,oneday,dinkle,qazedctgb,kasimir,happy7,salama,hondaciv,nadezda,andretti,cannondale,sparticu,znbvjd,blueice,money01,finster,eldar,moosie,pappa,delta123,neruda,bmw330ci,jeanpaul,malibu1,alevtina,sobeit,travolta,fullmetal,enamorad,mausi,boston12,greggy,smurf1,ratrace,ichiban,ilovepus,davidg,wolf69,villa1,cocopuff,football12,starfury,zxc12345,forfree,fairfiel,dreams1,tayson,mike2,dogday,hej123,oldtimer,sanpedro,clicker,mollycat,roadstar,golfe,lvbnhbq1,topdevice,a1b2c,sevastopol,calli,milosc,fire911,pink123,team3x,nolimit5,snickers1,annies,09877890,jewel1,steve69,justin11,autechre,killerbe,browncow,slava1,christer,fantomen,redcloud,elenberg,beautiful1,passw0rd1,nazira,advantag,cockring,chaka,rjpzdrf,99941,az123456,biohazar,energie,bubble1,bmw323,tellme,printer1,glavine,1starwar,coolbeans,april17,carly1,quagmire,admin2,djkujuhfl,pontoon,texmex,carlos12,thermo,vaz2106,nougat,bob666,1hockey,1john,cricke,qwerty10,twinz,totalwar,underwoo,tijger,lildevil,123q321,germania,freddd,1scott,beefy,5t4r3e2w1q,fishbait,nobby,hogger,dnstuff,jimmyc,redknapp,flame1,tinfloor,balla,nfnfhby,yukon1,vixens,batata,danny123,1zxcvbnm,gaetan,homewood,greats,tester1,green99,1fucker,sc0tland,starss,glori,arnhem,goatman,1234asd,supertra,bill123,elguapo,sexylegs,jackryan,usmc69,innow,roaddog,alukard,winter11,crawler,gogiants,rvd420,alessandr,homegrow,gobbler,esteba,valeriy,happy12,1joshua,hawking,sicnarf,waynes,iamhappy,bayadera,august2,sashas,gotti,dragonfire,pencil1,halogen,borisov,bassingw,15975346,zachar,sweetp,soccer99,sky123,flipyou,spots3,xakepy,cyclops1,dragon77,rattolo58,motorhea,piligrim,helloween,dmb2010,supermen,shad0w,eatcum,sandokan,pinga,ufkfrnbrf,roksana,amista,pusser,sony1234,azerty1,1qasw2,ghbdt,q1w2e3r4t5y6u7i8,ktutylf,brehznev,zaebali,shitass,creosote,gjrtvjy,14938685,naughtyboy,pedro123,21crack,maurice1,joesakic,nicolas1,matthew9,lbyfhf,elocin,hfcgbplzq,pepper123,tiktak,mycroft,ryan11,firefly1,arriva,cyecvevhbr,loreal,peedee,jessica8,lisa01,anamari,pionex,ipanema,airbag,frfltvbz,123456789aa,epwr49,casper12,sweethear,sanandreas,wuschel,cocodog,france1,119911,redroses,erevan,xtvgbjy,bigfella,geneve,volvo850,evermore,amy123,moxie,celebs,geeman,underwor,haslo1,joy123,hallow,chelsea0,12435687,abarth,12332145,tazman1,roshan,yummie,genius1,chrisd,ilovelife,seventy7,qaz1wsx2,rocket88,gaurav,bobbyboy,tauchen,roberts1,locksmit,masterof,www111,d9ungl,volvos40,asdasd1,golfers,jillian1,7xm5rq,arwpls4u,gbhcf2,elloco,football2,muerte,bob101,sabbath1,strider1,killer66,notyou,lawnboy,de7mdf,johnnyb,voodoo2,sashaa,homedepo,bravos,nihao123,braindea,weedhead,rajeev,artem1,camille1,rockss,bobbyb,aniston,frnhbcf,oakridge,biscayne,cxfcnm,dressage,jesus3,kellyann,king69,juillet,holliste,h00ters,ripoff,123645,1999ar,eric12,123777,tommi,dick12,bilder,chris99,rulezz,getpaid,chicubs,ender1,byajhvfnbrf,milkshak,sk8board,freakshow,antonella,monolit,shelb,hannah01,masters1,pitbull1,1matthew,luvpussy,agbdlcid,panther2,alphas,euskadi,8318131,ronnie1,7558795,sweetgirl,cookie59,sequoia,5552555,ktyxbr,4500455,money7,severus,shinobu,dbityrf,phisig,rogue2,fractal,redfred,sebastian1,nelli,b00mer,cyberman,zqjphsyf6ctifgu,oldsmobile,redeemer,pimpi,lovehurts,1slayer,black13,rtynfdh,airmax,g00gle,1panther,artemon,nopasswo,fuck1234,luke1,trinit,666000,ziadma,oscardog,davex,hazel1,isgood,demond,james5,construc,555551,january2,m1911a1,flameboy,merda,nathan12,nicklaus,dukester,hello99,scorpio7,leviathan,dfcbktr,pourquoi,vfrcbv123,shlomo,rfcgth,rocky3,ignatz,ajhneyf,roger123,squeek,4815162342a,biskit,mossimo,soccer21,gridlock,lunker,popstar,ghhh47hj764,chutney,nitehawk,vortec,gamma1,codeman,dragula,kappasig,rainbow2,milehigh,blueballs,ou8124me,rulesyou,collingw,mystere,aster,astrovan,firetruck,fische,crawfish,hornydog,morebeer,tigerpaw,radost,144000,1chance,1234567890qwe,gracie1,myopia,oxnard,seminoles,evgeni,edvard,partytim,domani,tuffy1,jaimatadi,blackmag,kzueirf,peternor,mathew1,maggie12,henrys,k1234567,fasted,pozitiv,cfdtkbq,jessica7,goleafs,bandito,girl78,sharingan,skyhigh,bigrob,zorros,poopers,oldschoo,pentium2,gripper,norcal,kimba,artiller,moneymak,00197400,272829,shadow1212,thebull,handbags,all4u2c,bigman2,civics,godisgoo,section8,bandaid,suzanne1,zorba,159123,racecars,i62gbq,rambo123,ironroad,johnson2,knobby,twinboys,sausage1,kelly69,enter2,rhjirf,yessss,james12,anguilla,boutit,iggypop,vovochka,06060,budwiser,romuald,meditate,good1,sandrin,herkules,lakers8,honeybea,11111111a,miche,rangers9,lobster1,seiko,belova,midcon,mackdadd,bigdaddy1,daddie,sepultur,freddy12,damon1,stormy1,hockey2,bailey12,hedimaptfcor,dcowboys,sadiedog,thuggin,horny123,josie1,nikki2,beaver69,peewee1,mateus,viktorija,barrys,cubswin1,matt1234,timoxa,rileydog,sicilia,luckycat,candybar,julian1,abc456,pussylip,phase1,acadia,catty,246800,evertonf,bojangle,qzwxec,nikolaj,fabrizi,kagome,noncapa0,marle,popol,hahaha1,cossie,carla10,diggers,spankey,sangeeta,cucciolo,breezer,starwar1,cornholio,rastafari,spring99,yyyyyyy1,webstar,72d5tn,sasha1234,inhouse,gobuffs,civic1,redstone,234523,minnie1,rivaldo,angel5,sti2000,xenocide,11qq11,1phoenix,herman1,holly123,tallguy,sharks1,madri,superbad,ronin,jalal123,hardbody,1234567r,assman1,vivahate,buddylee,38972091,bonds25,40028922,qrhmis,wp2005,ceejay,pepper01,51842543,redrum1,renton,varadero,tvxtjk7r,vetteman,djhvbrc,curly1,fruitcak,jessicas,maduro,popmart,acuari,dirkpitt,buick1,bergerac,golfcart,pdtpljxrf,hooch1,dudelove,d9ebk7,123452000,afdjhbn,greener,123455432,parachut,mookie12,123456780,jeepcj5,potatoe,sanya,qwerty2010,waqw3p,gotika,freaky1,chihuahu,buccanee,ecstacy,crazyboy,slickric,blue88,fktdnbyf,2004rj,delta4,333222111,calient,ptbdhw,1bailey,blitz1,sheila1,master23,hoagie,pyf8ah,orbita,daveyboy,prono1,delta2,heman,1horny,tyrik123,ostrov,md2020,herve,rockfish,el546218,rfhbyjxrf,chessmaster,redmoon,lenny1,215487,tomat,guppy,amekpass,amoeba,my3girls,nottingh,kavita,natalia1,puccini,fabiana,8letters,romeos,netgear,casper2,taters,gowings,iforgot1,pokesmot,pollit,lawrun,petey1,rosebuds,007jr,gthtcnhjqrf,k9dls02a,neener,azertyu,duke11,manyak,tiger01,petros,supermar,mangas,twisty,spotter,takagi,dlanod,qcmfd454,tusymo,zz123456,chach,navyblue,gilbert1,2kash6zq,avemaria,1hxboqg2s,viviane,lhbjkjubz2957704,nowwowtg,1a2b3c4,m0rn3,kqigb7,superpuper,juehtw,gethigh,theclown,makeme,pradeep,sergik,deion21,nurik,devo2706,nbvibt,roman222,kalima,nevaeh,martin7,anathema,florian1,tamwsn3sja,dinmamma,133159,123654q,slicks,pnp0c08,yojimbo,skipp,kiran,pussyfuck,teengirl,apples12,myballs,angeli,1234a,125678,opelastra,blind1,armagedd,fish123,pitufo,chelseaf,thedevil,nugget1,cunt69,beetle1,carter15,apolon,collant,password00,fishboy,djkrjdf,deftone,celti,three11,cyrus1,lefthand,skoal1,ferndale,aries1,fred01,roberta1,chucks,cornbread,lloyd1,icecrea,cisco123,newjerse,vfhrbpf,passio,volcom1,rikimaru,yeah11,djembe,facile,a1l2e3x4,batman7,nurbol,lorenzo1,monica69,blowjob1,998899,spank1,233391,n123456,1bear,bellsout,999998,celtic67,sabre1,putas,y9enkj,alfabeta,heatwave,honey123,hard4u,insane1,xthysq,magnum1,lightsaber,123qweqwe,fisher1,pixie1,precios,benfic,thegirls,bootsman,4321rewq,nabokov,hightime,djghjc,1chelsea,junglist,august16,t3fkvkmj,1232123,lsdlsd12,chuckie1,pescado,granit,toogood,cathouse,natedawg,bmw530,123kid,hajime,198400,engine1,wessonnn,kingdom1,novembre,1rocks,kingfisher,qwerty89,jordan22,zasranec,megat,sucess,installutil,fetish01,yanshi1982,1313666,1314520,clemence,wargod,time1,newzealand,snaker,13324124,cfrehf,hepcat,mazahaka,bigjay,denisov,eastwest,1yellow,mistydog,cheetos,1596357,ginger11,mavrik,bubby1,bhbyf,pyramide,giusepp,luthien,honda250,andrewjackie,kentavr,lampoon,zaq123wsx,sonicx,davidh,1ccccc,gorodok,windsong,programm,blunt420,vlad1995,zxcvfdsa,tarasov,mrskin,sachas,mercedes1,koteczek,rawdog,honeybear,stuart1,kaktys,richard7,55555n,azalia,hockey10,scouter,francy,1xxxxxx,julie456,tequilla,penis123,schmoe,tigerwoods,1ferrari,popov,snowdrop,matthieu,smolensk,cornflak,jordan01,love2000,23wesdxc,kswiss,anna2000,geniusnet,baby2000,33ds5x,waverly,onlyone4,networkingpe,raven123,blesse,gocards,wow123,pjflkork,juicey,poorboy,freeee,billybo,shaheen,zxcvbnm.,berlit,truth1,gepard,ludovic,gunther1,bobby2,bob12345,sunmoon,septembr,bigmac1,bcnjhbz,seaking,all4u,12qw34er56ty,bassie,nokia5228,7355608,sylwia,charvel,billgate,davion,chablis,catsmeow,kjiflrf,amylynn,rfvbkkf,mizredhe,handjob,jasper12,erbol,solara,bagpipe,biffer,notime,erlan,8543852,sugaree,oshkosh,fedora,bangbus,5lyedn,longball,teresa1,bootyman,aleksand,qazwsxedc12,nujbhc,tifosi,zpxvwy,lights1,slowpoke,tiger12,kstate,password10,alex69,collins1,9632147,doglover,baseball2,security1,grunts,orange2,godloves,213qwe879,julieb,1qazxsw23edcvfr4,noidea,8uiazp,betsy1,junior2,parol123,123456zz,piehonkii,kanker,bunky,hingis,reese1,qaz123456,sidewinder,tonedup,footsie,blackpoo,jalapeno,mummy1,always1,josh1,rockyboy,plucky,chicag,nadroj,blarney,blood123,wheaties,packer1,ravens1,mrjones,gfhjkm007,anna2010,awatar,guitar12,hashish,scale1,tomwaits,amrita,fantasma,rfpfym,pass2,tigris,bigair,slicker,sylvi,shilpa,cindylou,archie1,bitches1,poppys,ontime,horney1,camaroz28,alladin,bujhm,cq2kph,alina1,wvj5np,1211123a,tetons,scorelan,concordi,morgan2,awacs,shanty,tomcat14,andrew123,bear69,vitae,fred99,chingy,octane,belgario,fatdaddy,rhodan,password23,sexxes,boomtown,joshua01,war3demo,my2kids,buck1,hot4you,monamour,12345aa,yumiko,parool,carlton1,neverland,rose12,right1,sociald,grouse,brandon0,cat222,alex00,civicex,bintang,malkav,arschloc,dodgeviper,qwerty666,goduke,dante123,boss1,ontheroc,corpsman,love14,uiegu451,hardtail,irondoor,ghjrehfnehf,36460341,konijn,h2slca,kondom25,123456ss,cfytxrf,btnjey,nando,freemail,comander,natas666,siouxsie,hummer1,biomed,dimsum,yankees0,diablo666,lesbian1,pot420,jasonm,glock23,jennyb,itsmine,lena2010,whattheh,beandip,abaddon,kishore,signup,apogee,biteme12,suzieq,vgfun4,iseeyou,rifleman,qwerta,4pussy,hawkman,guest1,june17,dicksuck,bootay,cash12,bassale,ktybyuhfl,leetch,nescafe,7ovtgimc,clapton1,auror,boonie,tracker1,john69,bellas,cabinboy,yonkers,silky1,ladyffesta,drache,kamil1,davidp,bad123,snoopy12,sanche,werthvfy,achille,nefertiti,gerald1,slage33,warszawa,macsan26,mason123,kotopes,welcome8,nascar99,kiril,77778888,hairy1,monito,comicsans,81726354,killabee,arclight,yuo67,feelme,86753099,nnssnn,monday12,88351132,88889999,websters,subito,asdf12345,vaz2108,zvbxrpl,159753456852,rezeda,multimed,noaccess,henrique,tascam,captiva,zadrot,hateyou,sophie12,123123456,snoop1,charlie8,birmingh,hardline,libert,azsxdcf,89172735872,rjpthju,bondar,philips1,olegnaruto,myword,yakman,stardog,banana12,1234567890w,farout,annick,duke01,rfj422,billard,glock19,shaolin1,master10,cinderel,deltaone,manning1,biggreen,sidney1,patty1,goforit1,766rglqy,sevendus,aristotl,armagedo,blumen,gfhfyjz,kazakov,lekbyxxx,accord1,idiota,soccer16,texas123,victoire,ololo,chris01,bobbbb,299792458,eeeeeee1,confiden,07070,clarks,techno1,kayley,stang1,wwwwww1,uuuuu1,neverdie,jasonr,cavscout,481516234,mylove1,shaitan,1qazxcvb,barbaros,123456782000,123wer,thissucks,7seven,227722,faerie,hayduke,dbacks,snorkel,zmxncbv,tiger99,unknown1,melmac,polo1234,sssssss1,1fire,369147,bandung,bluejean,nivram,stanle,ctcnhf,soccer20,blingbli,dirtball,alex2112,183461,skylin,boobman,geronto,brittany1,yyz2112,gizmo69,ktrcec,dakota12,chiken,sexy11,vg08k714,bernadet,1bulldog,beachs,hollyb,maryjoy,margo1,danielle1,chakra,alexand,hullcity,matrix12,sarenna,pablos,antler,supercar,chomsky,german1,airjordan,545ettvy,camaron,flight1,netvideo,tootall,valheru,481516,1234as,skimmer,redcross,inuyash,uthvfy,1012nw,edoardo,bjhgfi,golf11,9379992a,lagarto,socball,boopie,krazy,.adgjmptw,gaydar,kovalev,geddylee,firstone,turbodog,loveee,135711,badbo,trapdoor,opopop11,danny2,max2000,526452,kerry1,leapfrog,daisy2,134kzbip,1andrea,playa1,peekab00,heskey,pirrello,gsewfmck,dimon4ik,puppie,chelios,554433,hypnodanny,fantik,yhwnqc,ghbdtngjrf,anchorag,buffett1,fanta,sappho,024680,vialli,chiva,lucylu,hashem,exbntkm,thema,23jordan,jake11,wildside,smartie,emerica,2wj2k9oj,ventrue,timoth,lamers,baerchen,suspende,boobis,denman85,1adam12,otello,king12,dzakuni,qsawbbs,isgay,porno123,jam123,daytona1,tazzie,bunny123,amaterasu,jeffre,crocus,mastercard,bitchedup,chicago7,aynrand,intel1,tamila,alianza,mulch,merlin12,rose123,alcapone,mircea,loveher,joseph12,chelsea6,dorothy1,wolfgar,unlimite,arturik,qwerty3,paddy1,piramid,linda123,cooool,millie1,warlock1,forgotit,tort02,ilikeyou,avensis,loveislife,dumbass1,clint1,2110se,drlove,olesia,kalinina,sergey123,123423,alicia1,markova,tri5a3,media1,willia1,xxxxxxx1,beercan,smk7366,jesusislord,motherfuck,smacker,birthday5,jbaby,harley2,hyper1,a9387670a,honey2,corvet,gjmptw,rjhjkmbien,apollon,madhuri,3a5irt,cessna17,saluki,digweed,tamia1,yja3vo,cfvlehfr,1111111q,martyna,stimpy1,anjana,yankeemp,jupiler,idkfa,1blue,fromv,afric,3xbobobo,liverp00l,nikon1,amadeus1,acer123,napoleo,david7,vbhjckfdf,mojo69,percy1,pirates1,grunt1,alenushka,finbar,zsxdcf,mandy123,1fred,timewarp,747bbb,druids,julia123,123321qq,spacebar,dreads,fcbarcelona,angela12,anima,christopher1,stargazer,123123s,hockey11,brewski,marlbor,blinker,motorhead,damngood,werthrf,letmein3,moremoney,killer99,anneke,eatit,pilatus,andrew01,fiona1,maitai,blucher,zxgdqn,e5pftu,nagual,panic1,andron,openwide,alphabeta,alison1,chelsea8,fende,mmm666,1shot2,a19l1980,123456@,1black,m1chael,vagner,realgood,maxxx,vekmnbr,stifler,2509mmh,tarkan,sherzod,1234567b,gunners1,artem2010,shooby,sammie1,p123456,piggie,abcde12345,nokia6230,moldir,piter,1qaz3edc,frequenc,acuransx,1star,nikeair,alex21,dapimp,ranjan,ilovegirls,anastasiy,berbatov,manso,21436587,leafs1,106666,angelochek,ingodwetrust,123456aaa,deano,korsar,pipetka,thunder9,minka,himura,installdevic,1qqqqq,digitalprodu,suckmeoff,plonker,headers,vlasov,ktr1996,windsor1,mishanya,garfield1,korvin,littlebit,azaz09,vandamme,scripto,s4114d,passward,britt1,r1chard,ferrari5,running1,7xswzaq,falcon2,pepper76,trademan,ea53g5,graham1,volvos80,reanimator,micasa,1234554321q,kairat,escorpion,sanek94,karolina1,kolovrat,karen2,1qaz@wsx,racing1,splooge,sarah2,deadman1,creed1,nooner,minicoop,oceane,room112,charme,12345ab,summer00,wetcunt,drewman,nastyman,redfire,appels,merlin69,dolfin,bornfree,diskette,ohwell,12345678qwe,jasont,madcap,cobra2,dolemit1,whatthehell,juanit,voldemar,rocke,bianc,elendil,vtufgjkbc,hotwheels,spanis,sukram,pokerface,k1ller,freakout,dontae,realmadri,drumss,gorams,258789,snakey,jasonn,whitewolf,befree,johnny99,pooka,theghost,kennys,vfvektxrf,toby1,jumpman23,deadlock,barbwire,stellina,alexa1,dalamar,mustanggt,northwes,tesoro,chameleo,sigtau,satoshi,george11,hotcum,cornell1,golfer12,geek01d,trololo,kellym,megapolis,pepsi2,hea666,monkfish,blue52,sarajane,bowler1,skeets,ddgirls,hfccbz,bailey01,isabella1,dreday,moose123,baobab,crushme,000009,veryhot,roadie,meanone,mike18,henriett,dohcvtec,moulin,gulnur,adastra,angel9,western1,natura,sweetpe,dtnfkm,marsbar,daisys,frogger1,virus1,redwood1,streetball,fridolin,d78unhxq,midas,michelob,cantik,sk2000,kikker,macanudo,rambone,fizzle,20000,peanuts1,cowpie,stone32,astaroth,dakota01,redso,mustard1,sexylove,giantess,teaparty,bobbin,beerbong,monet1,charles3,anniedog,anna1988,cameleon,longbeach,tamere,qpful542,mesquite,waldemar,12345zx,iamhere,lowboy,canard,granp,daisymay,love33,moosejaw,nivek,ninjaman,shrike01,aaa777,88002000600,vodolei,bambush,falcor,harley69,alphaomega,severine,grappler,bosox,twogirls,gatorman,vettes,buttmunch,chyna,excelsio,crayfish,birillo,megumi,lsia9dnb9y,littlebo,stevek,hiroyuki,firehous,master5,briley2,gangste,chrisk,camaleon,bulle,troyboy,froinlaven,mybutt,sandhya,rapala,jagged,crazycat,lucky12,jetman,wavmanuk,1heather,beegee,negril,mario123,funtime1,conehead,abigai,mhorgan,patagoni,travel1,backspace,frenchfr,mudcat,dashenka,baseball3,rustys,741852kk,dickme,baller23,griffey1,suckmycock,fuhrfzgc,jenny2,spuds,berlin1,justfun,icewind,bumerang,pavlusha,minecraft123,shasta1,ranger12,123400,twisters,buthead,miked,finance1,dignity7,hello9,lvjdp383,jgthfnjh,dalmatio,paparoach,miller31,2bornot2b,fathe,monterre,theblues,satans,schaap,jasmine2,sibelius,manon,heslo,jcnhjd,shane123,natasha2,pierrot,bluecar,iloveass,harriso,red12,london20,job314,beholder,reddawg,fuckyou!,pussylick,bologna1,austintx,ole4ka,blotto,onering,jearly,balbes,lightbul,bighorn,crossfir,lee123,prapor,1ashley,gfhjkm22,wwe123,09090,sexsite,marina123,jagua,witch1,schmoo,parkview,dragon3,chilango,ultimo,abramova,nautique,2bornot2,duende,1arthur,nightwing,surfboar,quant4307,15s9pu03,karina1,shitball,walleye1,wildman1,whytesha,1morgan,my2girls,polic,baranova,berezuckiy,kkkkkk1,forzima,fornow,qwerty02,gokart,suckit69,davidlee,whatnow,edgard,tits1,bayshore,36987412,ghbphfr,daddyy,explore1,zoidberg,5qnzjx,morgane,danilov,blacksex,mickey12,balsam,83y6pv,sarahc,slaye,all4u2,slayer69,nadia1,rlzwp503,4cranker,kaylie,numberon,teremok,wolf12,deeppurple,goodbeer,aaa555,66669999,whatif,harmony1,ue8fpw,3tmnej,254xtpss,dusty197,wcksdypk,zerkalo,dfnheirf,motorol,digita,whoareyou,darksoul,manics,rounders,killer11,d2000lb,cegthgfhjkm,catdog1,beograd,pepsico,julius1,123654987,softbal,killer23,weasel1,lifeson,q123456q,444555666,bunches,andy1,darby1,service01,bear11,jordan123,amega,duncan21,yensid,lerxst,rassvet,bronco2,fortis,pornlove,paiste,198900,asdflkjh,1236547890,futur,eugene1,winnipeg261,fk8bhydb,seanjohn,brimston,matthe1,bitchedu,crisco,302731,roxydog,woodlawn,volgograd,ace1210,boy4u2ownnyc,laura123,pronger,parker12,z123456z,andrew13,longlife,sarang,drogba,gobruins,soccer4,holida,espace,almira,murmansk,green22,safina,wm00022,1chevy,schlumpf,doroth,ulises,golf99,hellyes,detlef,mydog,erkina,bastardo,mashenka,sucram,wehttam,generic1,195000,spaceboy,lopas123,scammer,skynyrd,daddy2,titani,ficker,cr250r,kbnthfnehf,takedown,sticky1,davidruiz,desant,nremtp,painter1,bogies,agamemno,kansas1,smallfry,archi,2b4dnvsx,1player,saddie,peapod,6458zn7a,qvw6n2,gfxqx686,twice2,sh4d0w3d,mayfly,375125,phitau,yqmbevgk,89211375759,kumar1,pfhfpf,toyboy,way2go,7pvn4t,pass69,chipster,spoony,buddycat,diamond3,rincewin,hobie,david01,billbo,hxp4life,matild,pokemon2,dimochka,clown1,148888,jenmt3,cuxldv,cqnwhy,cde34rfv,simone1,verynice,toobig,pasha123,mike00,maria2,lolpop,firewire,dragon9,martesana,a1234567890,birthday3,providen,kiska,pitbulls,556655,misawa,damned69,martin11,goldorak,gunship,glory1,winxclub,sixgun,splodge,agent1,splitter,dome69,ifghjb,eliza1,snaiper,wutang36,phoenix7,666425,arshavin,paulaner,namron,m69fg1w,qwert1234,terrys,zesyrmvu,joeman,scoots,dwml9f,625vrobg,sally123,gostoso,symow8,pelota,c43qpul5rz,majinbuu,lithium1,bigstuff,horndog1,kipelov,kringle,1beavis,loshara,octobe,jmzacf,12342000,qw12qw,runescape1,chargers1,krokus,piknik,jessy,778811,gjvbljh,474jdvff,pleaser,misskitty,breaker1,7f4df451,dayan,twinky,yakumo,chippers,matia,tanith,len2ski1,manni,nichol1,f00b4r,nokia3110,standart,123456789i,shami,steffie,larrywn,chucker,john99,chamois,jjjkkk,penmouse,ktnj2010,gooners,hemmelig,rodney1,merlin01,bearcat1,1yyyyy,159753z,1fffff,1ddddd,thomas11,gjkbyrf,ivanka,f1f2f3,petrovna,phunky,conair,brian2,creative1,klipsch,vbitymrf,freek,breitlin,cecili,westwing,gohabsgo,tippmann,1steve,quattro6,fatbob,sp00ky,rastas,1123581,redsea,rfnmrf,jerky1,1aaaaaa,spk666,simba123,qwert54321,123abcd,beavis69,fyfyfc,starr1,1236547,peanutbutter,sintra,12345abcde,1357246,abcde1,climbon,755dfx,mermaids,monte1,serkan,geilesau,777win,jasonc,parkside,imagine1,rockhead,producti,playhard,principa,spammer,gagher,escada,tsv1860,dbyjuhfl,cruiser1,kennyg,montgome,2481632,pompano,cum123,angel6,sooty,bear01,april6,bodyhamm,pugsly,getrich,mikes,pelusa,fosgate,jasonp,rostislav,kimberly1,128mo,dallas11,gooner1,manuel1,cocacola1,imesh,5782790,password8,daboys,1jones,intheend,e3w2q1,whisper1,madone,pjcgujrat,1p2o3i,jamesp,felicida,nemrac,phikap,firecat,jrcfyjxrf,matt12,bigfan,doedel,005500,jasonx,1234567k,badfish,goosey,utjuhfabz,wilco,artem123,igor123,spike123,jor23dan,dga9la,v2jmsz,morgan12,avery1,dogstyle,natasa,221195ws,twopac,oktober7,karthik,poop1,mightymo,davidr,zermatt,jehova,aezakmi1,dimwit,monkey5,serega123,qwerty111,blabl,casey22,boy123,1clutch,asdfjkl1,hariom,bruce10,jeep95,1smith,sm9934,karishma,bazzzz,aristo,669e53e1,nesterov,kill666,fihdfv,1abc2,anna1,silver11,mojoman,telefono,goeagles,sd3lpgdr,rfhfynby,melinda1,llcoolj,idteul,bigchief,rocky13,timberwo,ballers,gatekeep,kashif,hardass,anastasija,max777,vfuyjkbz,riesling,agent99,kappas,dalglish,tincan,orange3,turtoise,abkbvjy,mike24,hugedick,alabala,geolog,aziza,devilboy,habanero,waheguru,funboy,freedom5,natwest,seashore,impaler,qwaszx1,pastas,bmw535,tecktonik,mika00,jobsearc,pinche,puntang,aw96b6,1corvett,skorpio,foundati,zzr1100,gembird,vfnhjcrby,soccer18,vaz2110,peterp,archer1,cross1,samedi,dima1992,hunter99,lipper,hotbody,zhjckfdf,ducati1,trailer1,04325956,cheryl1,benetton,kononenko,sloneczko,rfgtkmrf,nashua,balalaika,ampere,eliston,dorsai,digge,flyrod,oxymoron,minolta,ironmike,majortom,karimov,fortun,putaria,an83546921an13,blade123,franchis,mxaigtg5,dynxyu,devlt4,brasi,terces,wqmfuh,nqdgxz,dale88,minchia,seeyou,housepen,1apple,1buddy,mariusz,bighouse,tango2,flimflam,nicola1,qwertyasd,tomek1,shumaher,kartoshka,bassss,canaries,redman1,123456789as,preciosa,allblacks,navidad,tommaso,beaudog,forrest1,green23,ryjgjxrf,go4it,ironman2,badnews,butterba,1grizzly,isaeva,rembrand,toront,1richard,bigjon,yfltymrf,1kitty,4ng62t,littlejo,wolfdog,ctvtyjd,spain1,megryan,tatertot,raven69,4809594q,tapout,stuntman,a131313,lagers,hotstuf,lfdbl11,stanley2,advokat,boloto,7894561,dooker,adxel187,cleodog,4play,0p9o8i,masterb,bimota,charlee,toystory,6820055,6666667,crevette,6031769,corsa,bingoo,dima1990,tennis11,samuri,avocado,melissa6,unicor,habari,metart,needsex,cockman,hernan,3891576,3334444,amigo1,gobuffs2,mike21,allianz,2835493,179355,midgard,joey123,oneluv,ellis1,towncar,shonuff,scouse,tool69,thomas19,chorizo,jblaze,lisa1,dima1999,sophia1,anna1989,vfvekbxrf,krasavica,redlegs,jason25,tbontb,katrine,eumesmo,vfhufhbnrf,1654321,asdfghj1,motdepas,booga,doogle,1453145,byron1,158272,kardinal,tanne,fallen1,abcd12345,ufyljy,n12345,kucing,burberry,bodger,1234578,februar,1234512,nekkid,prober,harrison1,idlewild,rfnz90,foiegras,pussy21,bigstud,denzel,tiffany2,bigwill,1234567890zzz,hello69,compute1,viper9,hellspaw,trythis,gococks,dogballs,delfi,lupine,millenia,newdelhi,charlest,basspro,1mike,joeblack,975310,1rosebud,batman11,misterio,fucknut,charlie0,august11,juancho,ilonka,jigei743ks,adam1234,889900,goonie,alicat,ggggggg1,1zzzzzzz,sexywife,northstar,chris23,888111,containe,trojan1,jason5,graikos,1ggggg,1eeeee,tigers01,indigo1,hotmale,jacob123,mishima,richard3,cjxb2014,coco123,meagain,thaman,wallst,edgewood,bundas,1power,matilda1,maradon,hookedup,jemima,r3vi3wpass,2004-10-,mudman,taz123,xswzaq,emerson1,anna21,warlord1,toering,pelle,tgwdvu,masterb8,wallstre,moppel,priora,ghjcnjrdfif,yoland,12332100,1j9e7f6f,jazzzz,yesman,brianm,42qwerty42,12345698,darkmanx,nirmal,john31,bb123456,neuspeed,billgates,moguls,fj1200,hbhlair,shaun1,ghbdfn,305pwzlr,nbu3cd,susanb,pimpdad,mangust6403,joedog,dawidek,gigante,708090,703751,700007,ikalcr,tbivbn,697769,marvi,iyaayas,karen123,jimmyboy,dozer1,e6z8jh,bigtime1,getdown,kevin12,brookly,zjduc3,nolan1,cobber,yr8wdxcq,liebe,m1garand,blah123,616879,action1,600000,sumitomo,albcaz,asian1,557799,dave69,556699,sasa123,streaker,michel1,karate1,buddy7,daulet,koks888,roadtrip,wapiti,oldguy,illini1,1234qq,mrspock,kwiatek,buterfly,august31,jibxhq,jackin,taxicab,tristram,talisker,446655,444666,chrisa,freespace,vfhbfyyf,chevell,444333,notyours,442244,christian1,seemore,sniper12,marlin1,joker666,multik,devilish,crf450,cdfoli,eastern1,asshead,duhast,voyager2,cyberia,1wizard,cybernet,iloveme1,veterok,karandash,392781,looksee,diddy,diabolic,foofight,missey,herbert1,bmw318i,premier1,zsfmpv,eric1234,dun6sm,fuck11,345543,spudman,lurker,bitem,lizzy1,ironsink,minami,339311,s7fhs127,sterne,332233,plankton,galax,azuywe,changepa,august25,mouse123,sikici,killer69,xswqaz,quovadis,gnomik,033028pw,777777a,barrakuda,spawn666,goodgod,slurp,morbius,yelnats,cujo31,norman1,fastone,earwig,aureli,wordlife,bnfkbz,yasmi,austin123,timberla,missy2,legalize,netcom,liljon,takeit,georgin,987654321z,warbird,vitalina,all4u3,mmmmmm1,bichon,ellobo,wahoos,fcazmj,aksarben,lodoss,satnam,vasili,197800,maarten,sam138989,0u812,ankita,walte,prince12,anvils,bestia,hoschi,198300,univer,jack10,ktyecbr,gr00vy,hokie,wolfman1,fuckwit,geyser,emmanue,ybrjkftd,qwerty33,karat,dblock,avocat,bobbym,womersle,1please,nostra,dayana,billyray,alternat,iloveu1,qwerty69,rammstein1,mystikal,winne,drawde,executor,craxxxs,ghjcnjnf,999888777,welshman,access123,963214785,951753852,babe69,fvcnthlfv,****me,666999666,testing2,199200,nintendo64,oscarr,guido8,zhanna,gumshoe,jbird,159357456,pasca,123452345,satan6,mithrand,fhbirf,aa1111aa,viggen,ficktjuv,radial9,davids1,rainbow7,futuro,hipho,platin,poppy123,rhenjq,fulle,rosit,chicano,scrumpy,lumpy1,seifer,uvmrysez,autumn1,xenon,susie1,7u8i9o0p,gamer1,sirene,muffy1,monkeys1,kalinin,olcrackmaster,hotmove,uconn,gshock,merson,lthtdyz,pizzaboy,peggy1,pistache,pinto1,fishka,ladydi,pandor,baileys,hungwell,redboy,rookie1,amanda01,passwrd,clean1,matty1,tarkus,jabba1,bobster,beer30,solomon1,moneymon,sesamo,fred11,sunnysid,jasmine5,thebears,putamadre,workhard,flashbac,counter1,liefde,magnat,corky1,green6,abramov,lordik,univers,shortys,david3,vip123,gnarly,1234567s,billy2,honkey,deathstar,grimmy,govinda,direktor,12345678s,linus1,shoppin,rekbrjdf,santeria,prett,berty75,mohican,daftpunk,uekmyfhf,chupa,strats,ironbird,giants56,salisbur,koldun,summer04,pondscum,jimmyj,miata1,george3,redshoes,weezie,bartman1,0p9o8i7u,s1lver,dorkus,125478,omega9,sexisgood,mancow,patric1,jetta1,074401,ghjuhtcc,gfhjk,bibble,terry2,123213,medicin,rebel2,hen3ry,4freedom,aldrin,lovesyou,browny,renwod,winnie1,belladon,1house,tyghbn,blessme,rfhfrfnbwf,haylee,deepdive,booya,phantasy,gansta,cock69,4mnveh,gazza1,redapple,structur,anakin1,manolito,steve01,poolman,chloe123,vlad1998,qazwsxe,pushit,random123,ontherocks,o236nq,brain1,dimedrol,agape,rovnogod,1balls,knigh,alliso,love01,wolf01,flintstone,beernuts,tuffguy,isengard,highfive,alex23,casper99,rubina,getreal,chinita,italian1,airsoft,qwerty23,muffdiver,willi1,grace123,orioles1,redbull1,chino1,ziggy123,breadman,estefan,ljcneg,gotoit,logan123,wideglid,mancity1,treess,qwe123456,kazumi,qweasdqwe,oddworld,naveed,protos,towson,a801016,godislov,at_asp,bambam1,soccer5,dark123,67vette,carlos123,hoser1,scouser,wesdxc,pelus,dragon25,pflhjn,abdula,1freedom,policema,tarkin,eduardo1,mackdad,gfhjkm11,lfplhfgthvf,adilet,zzzzxxxx,childre,samarkand,cegthgegth,shama,fresher,silvestr,greaser,allout,plmokn,sexdrive,nintendo1,fantasy7,oleander,fe126fd,crumpet,pingzing,dionis,hipster,yfcnz,requin,calliope,jerome1,housecat,abc123456789,doghot,snake123,augus,brillig,chronic1,gfhjkbot,expediti,noisette,master7,caliban,whitetai,favorite3,lisamari,educatio,ghjhjr,saber1,zcegth,1958proman,vtkrbq,milkdud,imajica,thehip,bailey10,hockey19,dkflbdjcnjr,j123456,bernar,aeiouy,gamlet,deltachi,endzone,conni,bcgfybz,brandi1,auckland2010,7653ajl1,mardigra,testuser,bunko18,camaro67,36936,greenie,454dfmcq,6xe8j2z4,mrgreen,ranger5,headhunt,banshee1,moonunit,zyltrc,hello3,pussyboy,stoopid,tigger11,yellow12,drums1,blue02,kils123,junkman,banyan,jimmyjam,tbbucs,sportster,badass1,joshie,braves10,lajolla,1amanda,antani,78787,antero,19216801,chich,rhett32,sarahm,beloit,sucker69,corkey,nicosnn,rccola,caracol,daffyduc,bunny2,mantas,monkies,hedonist,cacapipi,ashton1,sid123,19899891,patche,greekgod,cbr1000,leader1,19977991,ettore,chongo,113311,picass,cfif123,rhtfnbd,frances1,andy12,minnette,bigboy12,green69,alices,babcia,partyboy,javabean,freehand,qawsed123,xxx111,harold1,passwo,jonny1,kappa1,w2dlww3v5p,1merlin,222999,tomjones,jakeman,franken,markhegarty,john01,carole1,daveman,caseys,apeman,mookey,moon123,claret,titans1,residentevil,campari,curitiba,dovetail,aerostar,jackdaniels,basenji,zaq12w,glencoe,biglove,goober12,ncc170,far7766,monkey21,eclipse9,1234567v,vanechka,aristote,grumble,belgorod,abhishek,neworleans,pazzword,dummie,sashadog,diablo11,mst3000,koala1,maureen1,jake99,isaiah1,funkster,gillian1,ekaterina20,chibears,astra123,4me2no,winte,skippe,necro,windows9,vinograd,demolay,vika2010,quiksilver,19371ayj,dollar1,shecky,qzwxecrv,butterfly1,merrill1,scoreland,1crazy,megastar,mandragora,track1,dedhed,jacob2,newhope,qawsedrftgyh,shack1,samvel,gatita,shyster,clara1,telstar,office1,crickett,truls,nirmala,joselito,chrisl,lesnik,aaaabbbb,austin01,leto2010,bubbie,aaa12345,widder,234432,salinger,mrsmith,qazsedcft,newshoes,skunks,yt1300,bmw316,arbeit,smoove,123321qweewq,123qazwsx,22221111,seesaw,0987654321a,peach1,1029384756q,sereda,gerrard8,shit123,batcave,energy1,peterb,mytruck,peter12,alesya,tomato1,spirou,laputaxx,magoo1,omgkremidia,knight12,norton1,vladislava,shaddy,austin11,jlbyjxrf,kbdthgekm,punheta,fetish69,exploiter,roger2,manstein,gtnhjd,32615948worms,dogbreath,ujkjdjkjvrf,vodka1,ripcord,fatrat,kotek1,tiziana,larrybir,thunder3,nbvfnb,9kyq6fge,remembe,likemike,gavin1,shinigam,yfcnfcmz,13245678,jabbar,vampyr,ane4ka,lollipo,ashwin,scuderia,limpdick,deagle,3247562,vishenka,fdhjhf,alex02,volvov70,mandys,bioshock,caraca,tombraider,matrix69,jeff123,13579135,parazit,black3,noway1,diablos,hitmen,garden1,aminor,decembe,august12,b00ger,006900,452073t,schach,hitman1,mariner1,vbnmrf,paint1,742617000027,bitchboy,pfqxjyjr,5681392,marryher,sinnet,malik1,muffin12,aninha,piolin,lady12,traffic1,cbvjyf,6345789,june21,ivan2010,ryan123,honda99,gunny,coorslight,asd321,hunter69,7224763,sonofgod,dolphins1,1dolphin,pavlenko,woodwind,lovelov,pinkpant,gblfhfcbyf,hotel1,justinbiebe,vinter,jeff1234,mydogs,1pizza,boats1,parrothe,shawshan,brooklyn1,cbrown,1rocky,hemi426,dragon64,redwings1,porsches,ghostly,hubbahub,buttnut,b929ezzh,sorokina,flashg,fritos,b7mguk,metatron,treehous,vorpal,8902792,marcu,free123,labamba,chiefs1,zxc123zxc,keli_14,hotti,1steeler,money4,rakker,foxwoods,free1,ahjkjd,sidorova,snowwhit,neptune1,mrlover,trader1,nudelamb,baloo,power7,deltasig,bills1,trevo,7gorwell,nokia6630,nokia5320,madhatte,1cowboys,manga1,namtab,sanjar,fanny1,birdman1,adv12775,carlo1,dude1998,babyhuey,nicole11,madmike,ubvyfpbz,qawsedr,lifetec,skyhook,stalker123,toolong,robertso,ripazha,zippy123,1111111a,manol,dirtyman,analslut,jason3,dutches,minhasenha,cerise,fenrir,jayjay1,flatbush,franka,bhbyjxrf,26429vadim,lawntrax,198700,fritzy,nikhil,ripper1,harami,truckman,nemvxyheqdd5oqxyxyzi,gkfytnf,bugaboo,cableman,hairpie,xplorer,movado,hotsex69,mordred,ohyeah1,patrick3,frolov,katieh,4311111q,mochaj,presari,bigdo,753951852,freedom4,kapitan,tomas1,135795,sweet123,pokers,shagme,tane4ka,sentinal,ufgyndmv,jonnyb,skate123,123456798,123456788,very1,gerrit,damocles,dollarbi,caroline1,lloyds,pizdets,flatland,92702689,dave13,meoff,ajnjuhfabz,achmed,madison9,744744z,amonte,avrillavigne,elaine1,norma1,asseater,everlong,buddy23,cmgang1,trash1,mitsu,flyman,ulugbek,june27,magistr,fittan,sebora64,dingos,sleipnir,caterpil,cindys,212121qaz,partys,dialer,gjytltkmybr,qweqaz,janvier,rocawear,lostboy,aileron,sweety1,everest1,pornman,boombox,potter1,blackdic,44448888,eric123,112233aa,2502557i,novass,nanotech,yourname,x12345,indian1,15975300,1234567l,carla51,chicago0,coleta,cxzdsaewq,qqwweerr,marwan,deltic,hollys,qwerasd,pon32029,rainmake,nathan0,matveeva,legioner,kevink,riven,tombraid,blitzen,a54321,jackyl,chinese1,shalimar,oleg1995,beaches1,tommylee,eknock,berli,monkey23,badbob,pugwash,likewhoa,jesus2,yujyd360,belmar,shadow22,utfp5e,angelo1,minimax,pooder,cocoa1,moresex,tortue,lesbia,panthe,snoopy2,drumnbass,alway,gmcz71,6jhwmqku,leppard,dinsdale,blair1,boriqua,money111,virtuagirl,267605,rattlesn,1sunshin,monica12,veritas1,newmexic,millertime,turandot,rfvxfnrf,jaydog,kakawka,bowhunter,booboo12,deerpark,erreway,taylorma,rfkbybyf,wooglin,weegee,rexdog,iamhorny,cazzo1,vhou812,bacardi1,dctktyyfz,godpasi,peanut12,bertha1,fuckyoubitch,ghosty,altavista,jertoot,smokeit,ghjcnbvtyz,fhnehxbr,rolsen,qazxcdews,maddmaxx,redrocke,qazokm,spencer2,thekiller,asdf11,123sex,tupac1,p1234567,dbrown,1biteme,tgo4466,316769,sunghi,shakespe,frosty1,gucci1,arcana,bandit01,lyubov,poochy,dartmout,magpies1,sunnyd,mouseman,summer07,chester7,shalini,danbury,pigboy,dave99,deniss,harryb,ashley11,pppppp1,01081988m,balloon1,tkachenko,bucks1,master77,pussyca,tricky1,zzxxccvv,zoulou,doomer,mukesh,iluv69,supermax,todays,thefox,don123,dontask,diplom,piglett,shiney,fahbrf,qaz12wsx,temitope,reggin,project1,buffy2,inside1,lbpfqyth,vanilla1,lovecock,u4slpwra,fylh.irf,123211,7ertu3ds,necroman,chalky,artist1,simpso,4x7wjr,chaos666,lazyacres,harley99,ch33s3,marusa,eagle7,dilligas,computadora,lucky69,denwer,nissan350z,unforgiv,oddball,schalke0,aztec1,borisova,branden1,parkave,marie123,germa,lafayett,878kckxy,405060,cheeseca,bigwave,fred22,andreea,poulet,mercutio,psycholo,andrew88,o4izdmxu,sanctuar,newhome,milion,suckmydi,rjvgm.nth,warior,goodgame,1qwertyuiop,6339cndh,scorpio2,macker,southbay,crabcake,toadie,paperclip,fatkid,maddo,cliff1,rastafar,maries,twins1,geujdrf,anjela,wc4fun,dolina,mpetroff,rollout,zydeco,shadow3,pumpki,steeda,volvo240,terras,blowjo,blue2000,incognit,badmojo,gambit1,zhukov,station1,aaronb,graci,duke123,clipper1,qazxsw2,ledzeppe,kukareku,sexkitte,cinco,007008,lakers12,a1234b,acmilan1,afhfjy,starrr,slutty3,phoneman,kostyan,bonzo1,sintesi07,ersatz,cloud1,nephilim,nascar03,rey619,kairos,123456789e,hardon1,boeing1,juliya,hfccdtn,vgfun8,polizei,456838,keithb,minouche,ariston,savag,213141,clarkken,microwav,london2,santacla,campeo,qr5mx7,464811,mynuts,bombo,1mickey,lucky8,danger1,ironside,carter12,wyatt1,borntorun,iloveyou123,jose1,pancake1,tadmichaels,monsta,jugger,hunnie,triste,heat7777,ilovejesus,queeny,luckycharm,lieben,gordolee85,jtkirk,forever21,jetlag,skylane,taucher,neworlea,holera,000005,anhnhoem,melissa7,mumdad,massimiliano,dima1994,nigel1,madison3,slicky,shokolad,serenit,jmh1978,soccer123,chris3,drwho,rfpzdrf,1qasw23ed,free4me,wonka,sasquatc,sanan,maytag,verochka,bankone,molly12,monopoli,xfqybr,lamborgini,gondolin,candycane,needsome,jb007,scottie1,brigit,0147258369,kalamazo,lololyo123,bill1234,ilovejes,lol123123,popkorn,april13,567rntvm,downunde,charle1,angelbab,guildwars,homeworld,qazxcvbnm,superma1,dupa123,kryptoni,happyy,artyom,stormie,cool11,calvin69,saphir,konovalov,jansport,october8,liebling,druuna,susans,megans,tujhjdf,wmegrfux,jumbo1,ljb4dt7n,012345678910,kolesnik,speculum,at4gftlw,kurgan,93pn75,cahek0980,dallas01,godswill,fhifdby,chelsea4,jump23,barsoom,catinhat,urlacher,angel99,vidadi1,678910,lickme69,topaz1,westend,loveone,c12345,gold12,alex1959,mamon,barney12,1maggie,alex12345,lp2568cskt,s1234567,gjikbdctyf,anthony0,browns99,chips1,sunking,widespre,lalala1,tdutif,fucklife,master00,alino4ka,stakan,blonde1,phoebus,tenore,bvgthbz,brunos,suzjv8,uvdwgt,revenant,1banana,veroniqu,sexfun,sp1der,4g3izhox,isakov,shiva1,scooba,bluefire,wizard12,dimitris,funbags,perseus,hoodoo,keving,malboro,157953,a32tv8ls,latics,animate,mossad,yejntb,karting,qmpq39zr,busdrive,jtuac3my,jkne9y,sr20dett,4gxrzemq,keylargo,741147,rfktylfhm,toast1,skins1,xcalibur,gattone,seether,kameron,glock9mm,julio1,delenn,gameday,tommyd,str8edge,bulls123,66699,carlsberg,woodbird,adnama,45auto,codyman,truck2,1w2w3w4w,pvjegu,method1,luetdi,41d8cd98f00b,bankai,5432112345,94rwpe,reneee,chrisx,melvins,775577,sam2000,scrappy1,rachid,grizzley,margare,morgan01,winstons,gevorg,gonzal,crawdad,gfhfdjp,babilon,noneya,pussy11,barbell,easyride,c00li0,777771,311music,karla1,golions,19866891,peejay,leadfoot,hfvbkm,kr9z40sy,cobra123,isotwe,grizz,sallys,****you,aaa123a,dembel,foxs14,hillcres,webman,mudshark,alfredo1,weeded,lester1,hovepark,ratface,000777fffa,huskie,wildthing,elbarto,waikiki,masami,call911,goose2,regin,dovajb,agricola,cjytxrj,andy11,penny123,family01,a121212,1braves,upupa68,happy100,824655,cjlove,firsttim,kalel,redhair,dfhtymt,sliders,bananna,loverbo,fifa2008,crouton,chevy350,panties2,kolya1,alyona,hagrid,spagetti,q2w3e4r,867530,narkoman,nhfdvfnjkju123,1ccccccc,napolean,0072563,allay,w8sted,wigwam,jamesk,state1,parovoz,beach69,kevinb,rossella,logitech1,celula,gnocca,canucks1,loginova,marlboro1,aaaa1,kalleanka,mester,mishutka,milenko,alibek,jersey1,peterc,1mouse,nedved,blackone,ghfplybr,682regkh,beejay,newburgh,ruffian,clarets,noreaga,xenophon,hummerh2,tenshi,smeagol,soloyo,vfhnby,ereiamjh,ewq321,goomie,sportin,cellphone,sonnie,jetblack,saudan,gblfhfc,matheus,uhfvjnf,alicja,jayman1,devon1,hexagon,bailey2,vtufajy,yankees7,salty1,908070,killemal,gammas,eurocard,sydney12,tuesday1,antietam,wayfarer,beast666,19952009sa,aq12ws,eveli,hockey21,haloreach,dontcare,xxxx1,andrea11,karlmarx,jelszo,tylerb,protools,timberwolf,ruffneck,pololo,1bbbbb,waleed,sasami,twinss,fairlady,illuminati,alex007,sucks1,homerjay,scooter7,tarbaby,barmaley,amistad,vanes,randers,tigers12,dreamer2,goleafsg,googie,bernie1,as12345,godeep,james3,phanto,gwbush,cumlover,2196dc,studioworks,995511,golf56,titova,kaleka,itali,socks1,kurwamac,daisuke,hevonen,woody123,daisie,wouter,henry123,gostosa,guppie,porpoise,iamsexy,276115,paula123,1020315,38gjgeuftd,rjrfrjkf,knotty,idiot1,sasha12345,matrix13,securit,radical1,ag764ks,jsmith,coolguy1,secretar,juanas,sasha1988,itout,00000001,tiger11,1butthea,putain,cavalo,basia1,kobebryant,1232323,12345asdfg,sunsh1ne,cyfqgth,tomkat,dorota,dashit,pelmen,5t6y7u,whipit,smokeone,helloall,bonjour1,snowshoe,nilknarf,x1x2x3,lammas,1234599,lol123456,atombomb,ironchef,noclue,alekseev,gwbush1,silver2,12345678m,yesican,fahjlbnf,chapstic,alex95,open1,tiger200,lisichka,pogiako,cbr929,searchin,tanya123,alex1973,phil413,alex1991,dominati,geckos,freddi,silenthill,egroeg,vorobey,antoxa,dark666,shkola,apple22,rebellio,shamanking,7f8srt,cumsucker,partagas,bill99,22223333,arnster55,fucknuts,proxima,silversi,goblues,parcells,vfrcbvjdf,piloto,avocet,emily2,1597530,miniskir,himitsu,pepper2,juiceman,venom1,bogdana,jujube,quatro,botafogo,mama2010,junior12,derrickh,asdfrewq,miller2,chitarra,silverfox,napol,prestigio,devil123,mm111qm,ara123,max33484,sex2000,primo1,sephan,anyuta,alena2010,viborg,verysexy,hibiscus,terps,josefin,oxcart,spooker,speciali,raffaello,partyon,vfhvtkflrf,strela,a123456z,worksuck,glasss,lomonosov,dusty123,dukeblue,1winter,sergeeva,lala123,john22,cmc09,sobolev,bettylou,dannyb,gjkrjdybr,hagakure,iecnhbr,awsedr,pmdmsctsk,costco,alekseeva,fktrcttd,bazuka,flyingv,garuda,buffy16,gutierre,beer12,stomatolog,ernies,palmeiras,golf123,love269,n.kmgfy,gjkysqgbpltw,youare,joeboo,baksik,lifeguar,111a111,nascar8,mindgame,dude1,neopets,frdfkfyu,june24,phoenix8,penelopa,merlin99,mercenar,badluck,mishel,bookert,deadsexy,power9,chinchil,1234567m,alex10,skunk1,rfhkcjy,sammycat,wright1,randy2,marakesh,temppassword,elmer251,mooki,patrick0,bonoedge,1tits,chiar,kylie1,graffix,milkman1,cornel,mrkitty,nicole12,ticketmaster,beatles4,number20,ffff1,terps1,superfre,yfdbufnjh,jake1234,flblfc,1111qq,zanuda,jmol01,wpoolejr,polopol,nicolett,omega13,cannonba,123456789.,sandy69,ribeye,bo243ns,marilena,bogdan123,milla,redskins1,19733791,alias1,movie1,ducat,marzena,shadowru,56565,coolman1,pornlover,teepee,spiff,nafanya,gateway3,fuckyou0,hasher,34778,booboo69,staticx,hang10,qq12345,garnier,bosco123,1234567qw,carson1,samso,1xrg4kcq,cbr929rr,allan123,motorbik,andrew22,pussy101,miroslava,cytujdbr,camp0017,cobweb,snusmumrik,salmon1,cindy2,aliya,serendipity,co437at,tincouch,timmy123,hunter22,st1100,vvvvvv1,blanka,krondor,sweeti,nenit,kuzmich,gustavo1,bmw320i,alex2010,trees1,kyliem,essayons,april26,kumari,sprin,fajita,appletre,fghbjhb,1green,katieb,steven2,corrado1,satelite,1michell,123456789c,cfkfvfylhf,acurarsx,slut543,inhere,bob2000,pouncer,k123456789,fishie,aliso,audia8,bluetick,soccer69,jordan99,fromhell,mammoth1,fighting54,mike25,pepper11,extra1,worldwid,chaise,vfr800,sordfish,almat,nofate,listopad,hellgate,dctvghbdf,jeremia,qantas,lokiju,honker,sprint1,maral,triniti,compaq3,sixsix6,married1,loveman,juggalo1,repvtyrj,zxcasdqw,123445,whore1,123678,monkey6,west123,warcraf,pwnage,mystery1,creamyou,ant123,rehjgfnrf,corona1,coleman1,steve121,alderaan,barnaul,celeste1,junebug1,bombshel,gretzky9,tankist,targa,cachou,vaz2101,playgolf,boneyard,strateg,romawka,iforgotit,pullup,garbage1,irock,archmage,shaft1,oceano,sadies,alvin1,135135ab,psalm69,lmfao,ranger02,zaharova,33334444,perkman,realman,salguod,cmoney,astonmartin,glock1,greyfox,viper99,helpm,blackdick,46775575,family5,shazbot,dewey1,qwertyas,shivani,black22,mailman1,greenday1,57392632,red007,stanky,sanchez1,tysons,daruma,altosax,krayzie,85852008,1forever,98798798,irock.,123456654,142536789,ford22,brick1,michela,preciou,crazy4u,01telemike01,nolife,concac,safety1,annie123,brunswic,destini,123456qwer,madison0,snowball1,137946,1133557799,jarule,scout2,songohan,thedead,00009999,murphy01,spycam,hirsute,aurinko,associat,1miller,baklan,hermes1,2183rm,martie,kangoo,shweta,yvonne1,westsid,jackpot1,rotciv,maratik,fabrika,claude1,nursultan,noentry,ytnhjufnm,electra1,ghjcnjnfr1,puneet,smokey01,integrit,bugeye,trouble2,14071789,paul01,omgwtf,dmh415,ekilpool,yourmom1,moimeme,sparky11,boludo,ruslan123,kissme1,demetrio,appelsin,asshole3,raiders2,bunns,fynjybj,billygoa,p030710p$e4o,macdonal,248ujnfk,acorns,schmidt1,sparrow1,vinbylrj,weasle,jerom,ycwvrxxh,skywalk,gerlinde,solidus,postal1,poochie1,1charles,rhianna,terorist,rehnrf,omgwtfbbq,assfucke,deadend,zidan,jimboy,vengence,maroon5,7452tr,dalejr88,sombra,anatole,elodi,amazonas,147789,q12345q,gawker1,juanma,kassidy,greek1,bruces,bilbob,mike44,0o9i8u7y6t,kaligula,agentx,familie,anders1,pimpjuice,0128um,birthday10,lawncare,hownow,grandorgue,juggerna,scarfac,kensai,swatteam,123four,motorbike,repytxbr,other1,celicagt,pleomax,gen0303,godisgreat,icepick,lucifer666,heavy1,tea4two,forsure,02020,shortdog,webhead,chris13,palenque,3techsrl,knights1,orenburg,prong,nomarg,wutang1,80637852730,laika,iamfree,12345670,pillow1,12343412,bigears,peterg,stunna,rocky5,12123434,damir,feuerwehr,7418529630,danone,yanina,valenci,andy69,111222q,silvia1,1jjjjj,loveforever,passwo1,stratocaster,8928190a,motorolla,lateralu,ujujkm,chubba,ujkjdf,signon,123456789zx,serdce,stevo,wifey200,ololo123,popeye1,1pass,central1,melena,luxor,nemezida,poker123,ilovemusic,qaz1234,noodles1,lakeshow,amarill,ginseng,billiam,trento,321cba,fatback,soccer33,master13,marie2,newcar,bigtop,dark1,camron,nosgoth,155555,biglou,redbud,jordan7,159789,diversio,actros,dazed,drizzit,hjcnjd,wiktoria,justic,gooses,luzifer,darren1,chynna,tanuki,11335577,icculus,boobss,biggi,firstson,ceisi123,gatewa,hrothgar,jarhead1,happyjoy,felipe1,bebop1,medman,athena1,boneman,keiths,djljgfl,dicklick,russ120,mylady,zxcdsa,rock12,bluesea,kayaks,provista,luckies,smile4me,bootycal,enduro,123123f,heartbre,ern3sto,apple13,bigpappa,fy.njxrf,bigtom,cool69,perrito,quiet1,puszek,cious,cruella,temp1,david26,alemap,aa123123,teddies,tricolor,smokey12,kikiriki,mickey01,robert01,super5,ranman,stevenso,deliciou,money777,degauss,mozar,susanne1,asdasd12,shitbag,mommy123,wrestle1,imfree,fuckyou12,barbaris,florent,ujhijr,f8yruxoj,tefjps,anemone,toltec,2gether,left4dead2,ximen,gfkmvf,dunca,emilys,diana123,16473a,mark01,bigbro,annarbor,nikita2000,11aa11,tigres,llllll1,loser2,fbi11213,jupite,qwaszxqw,macabre,123ert,rev2000,mooooo,klapaucius,bagel1,chiquit,iyaoyas,bear101,irocz28,vfktymrfz,smokey2,love99,rfhnbyf,dracul,keith123,slicko,peacock1,orgasmic,thesnake,solder,wetass,doofer,david5,rhfcyjlfh,swanny,tammys,turkiye,tubaman,estefani,firehose,funnyguy,servo,grace17,pippa1,arbiter,jimmy69,nfymrf,asdf67nm,rjcnzy,demon123,thicknes,sexysex,kristall,michail,encarta,banderos,minty,marchenko,de1987ma,mo5kva,aircav,naomi1,bonni,tatoo,cronaldo,49ers1,mama1963,1truck,telecaster,punksnotdead,erotik,1eagles,1fender,luv269,acdeehan,tanner1,freema,1q3e5t7u,linksys,tiger6,megaman1,neophyte,australia1,mydaddy,1jeffrey,fgdfgdfg,gfgekz,1986irachka,keyman,m0b1l3,dfcz123,mikeyg,playstation2,abc125,slacker1,110491g,lordsoth,bhavani,ssecca,dctvghbdtn,niblick,hondacar,baby01,worldcom,4034407,51094didi,3657549,3630000,3578951,sweetpussy,majick,supercoo,robert11,abacabb,panda123,gfhjkm13,ford4x4,zippo1,lapin,1726354,lovesong,dude11,moebius,paravoz,1357642,matkhau,solnyshko,daniel4,multiplelog,starik,martusia,iamtheman,greentre,jetblue,motorrad,vfrcbvev,redoak,dogma1,gnorman,komlos,tonka1,1010220,666satan,losenord,lateralus,absinthe,command1,jigga1,iiiiiii1,pants1,jungfrau,926337,ufhhbgjnnth,yamakasi,888555,sunny7,gemini69,alone1,zxcvbnmz,cabezon,skyblues,zxc1234,456123a,zero00,caseih,azzurra,legolas1,menudo,murcielago,785612,779977,benidorm,viperman,dima1985,piglet1,hemligt,hotfeet,7elephants,hardup,gamess,a000000,267ksyjf,kaitlynn,sharkie,sisyphus,yellow22,667766,redvette,666420,mets69,ac2zxdty,hxxrvwcy,cdavis,alan1,noddy,579300,druss,eatshit1,555123,appleseed,simpleplan,kazak,526282,fynfyfyfhbde,birthday6,dragon6,1pookie,bluedevils,omg123,hj8z6e,x5dxwp,455445,batman23,termin,chrisbrown,animals1,lucky9,443322,kzktxrf,takayuki,fermer,assembler,zomu9q,sissyboy,sergant,felina,nokia6230i,eminem12,croco,hunt4red,festina,darknigh,cptnz062,ndshnx4s,twizzler,wnmaz7sd,aamaax,gfhfcjkmrf,alabama123,barrynov,happy5,punt0it,durandal,8xuuobe4,cmu9ggzh,bruno12,316497,crazyfrog,vfvfktyf,apple3,kasey1,mackdaddy,anthon1,sunnys,angel3,cribbage,moon1,donal,bryce1,pandabear,mwss474,whitesta,freaker,197100,bitche,p2ssw0rd,turnb,tiktonik,moonlite,ferret1,jackas,ferrum,bearclaw,liberty2,1diablo,caribe,snakeeyes,janbam,azonic,rainmaker,vetalik,bigeasy,baby1234,sureno13,blink1,kluivert,calbears,lavanda,198600,dhtlbyf,medvedeva,fox123,whirling,bonscott,freedom9,october3,manoman,segredo,cerulean,robinso,bsmith,flatus,dannon,password21,rrrrrr1,callista,romai,rainman1,trantor,mickeymo,bulldog7,g123456,pavlin,pass22,snowie,hookah,7ofnine,bubba22,cabible,nicerack,moomoo1,summer98,yoyo123,milan1,lieve27,mustang69,jackster,exocet,nadege,qaz12,bahama,watson1,libras,eclipse2,bahram,bapezm,up9x8rww,ghjcnjz,themaste,deflep27,ghost16,gattaca,fotograf,junior123,gilber,gbjyth,8vjzus,rosco1,begonia,aldebara,flower12,novastar,buzzman,manchild,lopez1,mama11,william7,yfcnz1,blackstar,spurs123,moom4242,1amber,iownyou,tightend,07931505,paquito,1johnson,smokepot,pi31415,snowmass,ayacdc,jessicam,giuliana,5tgbnhy6,harlee,giuli,bigwig,tentacle,scoubidou2,benelli,vasilina,nimda,284655,jaihind,lero4ka,1tommy,reggi,ididit,jlbyjxtcndj,mike26,qbert,wweraw,lukasz,loosee123,palantir,flint1,mapper,baldie,saturne,virgin1,meeeee,elkcit,iloveme2,blue15,themoon,radmir,number3,shyanne,missle,hannelor,jasmina,karin1,lewie622,ghjcnjqgfhjkm,blasters,oiseau,sheela,grinders,panget,rapido,positiv,twink,fltkbyf,kzsfj874,daniel01,enjoyit,nofags,doodad,rustler,squealer,fortunat,peace123,khushi,devils2,7inches,candlebo,topdawg,armen,soundman,zxcqweasd,april7,gazeta,netman,hoppers,bear99,ghbjhbntn,mantle7,bigbo,harpo,jgordon,bullshi,vinny1,krishn,star22,thunderc,galinka,phish123,tintable,nightcrawler,tigerboy,rbhgbx,messi,basilisk,masha1998,nina123,yomamma,kayla123,geemoney,0000000000d,motoman,a3jtni,ser123,owen10,italien,vintelok,12345rewq,nightime,jeepin,ch1tt1ck,mxyzptlk,bandido,ohboy,doctorj,hussar,superted,parfilev,grundle,1jack,livestrong,chrisj,matthew3,access22,moikka,fatone,miguelit,trivium,glenn1,smooches,heiko,dezember,spaghett,stason,molokai,bossdog,guitarma,waderh,boriska,photosho,path13,hfrtnf,audre,junior24,monkey24,silke,vaz21093,bigblue1,trident1,candide,arcanum,klinker,orange99,bengals1,rosebu,mjujuj,nallepuh,mtwapa1a,ranger69,level1,bissjop,leica,1tiffany,rutabega,elvis77,kellie1,sameas,barada,karabas,frank12,queenb,toutoune,surfcity,samanth1,monitor1,littledo,kazakova,fodase,mistral1,april22,carlit,shakal,batman123,fuckoff2,alpha01,5544332211,buddy3,towtruck,kenwood1,vfiekmrf,jkl123,pypsik,ranger75,sitges,toyman,bartek1,ladygirl,booman,boeing77,installsqlst,222666,gosling,bigmack,223311,bogos,kevin2,gomez1,xohzi3g4,kfnju842,klubnika,cubalibr,123456789101,kenpo,0147852369,raptor1,tallulah,boobys,jjones,1q2s3c,moogie,vid2600,almas,wombat1,extra300,xfiles1,green77,sexsex1,heyjude,sammyy,missy123,maiyeuem,nccpl25282,thicluv,sissie,raven3,fldjrfn,buster22,broncos2,laurab,letmein4,harrydog,solovey,fishlips,asdf4321,ford123,superjet,norwegen,movieman,psw333333,intoit,postbank,deepwate,ola123,geolog323,murphys,eshort,a3eilm2s2y,kimota,belous,saurus,123321qaz,i81b4u,aaa12,monkey20,buckwild,byabybnb,mapleleafs,yfcnzyfcnz,baby69,summer03,twista,246890,246824,ltcnhjth,z1z2z3,monika1,sad123,uto29321,bathory,villan,funkey,poptarts,spam967888,705499fh,sebast,porn1234,earn381,1porsche,whatthef,123456789y,polo12,brillo,soreilly,waters1,eudora,allochka,is_a_bot,winter00,bassplay,531879fiz,onemore,bjarne,red911,kot123,artur1,qazxdr,c0rvette,diamond7,matematica,klesko,beaver12,2enter,seashell,panam,chaching,edward2,browni,xenogear,cornfed,aniram,chicco22,darwin1,ancella2,sophie2,vika1998,anneli,shawn41,babie,resolute,pandora2,william8,twoone,coors1,jesusis1,teh012,cheerlea,renfield,tessa1,anna1986,madness1,bkmlfh,19719870,liebherr,ck6znp42,gary123,123654z,alsscan,eyedoc,matrix7,metalgea,chinito,4iter,falcon11,7jokx7b9du,bigfeet,tassadar,retnuh,muscle1,klimova,darion,batistuta,bigsur,1herbier,noonie,ghjrehjh,karimova,faustus,snowwhite,1manager,dasboot,michael12,analfuck,inbed,dwdrums,jaysoncj,maranell,bsheep75,164379,rolodex,166666,rrrrrrr1,almaz666,167943,russel1,negrito,alianz,goodpussy,veronik,1w2q3r4e,efremov,emb377,sdpass,william6,alanfahy,nastya1995,panther5,automag,123qwe12,vfvf2011,fishe,1peanut,speedie,qazwsx1234,pass999,171204j,ketamine,sheena1,energizer,usethis1,123abc123,buster21,thechamp,flvbhfk,frank69,chane,hopeful1,claybird,pander,anusha,bigmaxxx,faktor,housebed,dimidrol,bigball,shashi,derby1,fredy,dervish,bootycall,80988218126,killerb,cheese2,pariss,mymail,dell123,catbert,christa1,chevytru,gjgjdf,00998877,overdriv,ratten,golf01,nyyanks,dinamite,bloembol,gismo,magnus1,march2,twinkles,ryan22,duckey,118a105b,kitcat,brielle,poussin,lanzarot,youngone,ssvegeta,hero63,battle1,kiler,fktrcfylh1,newera,vika1996,dynomite,oooppp,beer4me,foodie,ljhjuf,sonshine,godess,doug1,constanc,thinkbig,steve2,damnyou,autogod,www333,kyle1,ranger7,roller1,harry2,dustin1,hopalong,tkachuk,b00bies,bill2,deep111,stuffit,fire69,redfish1,andrei123,graphix,1fishing,kimbo1,mlesp31,ifufkbyf,gurkan,44556,emily123,busman,and123,8546404,paladine,1world,bulgakov,4294967296,bball23,1wwwww,mycats,elain,delta6,36363,emilyb,color1,6060842,cdtnkfyrf,hedonism,gfgfrfhkj,5551298,scubad,gostate,sillyme,hdbiker,beardown,fishers,sektor,00000007,newbaby,rapid1,braves95,gator2,nigge,anthony3,sammmy,oou812,heffer,phishin,roxanne1,yourass,hornet1,albator,2521659,underwat,tanusha,dianas,3f3fpht7op,dragon20,bilbobag,cheroke,radiatio,dwarf1,majik,33st33,dochka,garibald,robinh,sham69,temp01,wakeboar,violet1,1w2w3w,registr,tonite,maranello,1593570,parolamea,galatasara,loranthos,1472583,asmodean,1362840,scylla,doneit,jokerr,porkypig,kungen,mercator,koolhaas,come2me,debbie69,calbear,liverpoolfc,yankees4,12344321a,kennyb,madma,85200258,dustin23,thomas13,tooling,mikasa,mistic,crfnbyf,112233445,sofia1,heinz57,colts1,price1,snowey,joakim,mark11,963147,cnhfcnm,kzinti,1bbbbbbb,rubberdu,donthate,rupert1,sasha1992,regis1,nbuhbwf,fanboy,sundial,sooner1,wayout,vjnjhjkf,deskpro,arkangel,willie12,mikeyb,celtic1888,luis1,buddy01,duane1,grandma1,aolcom,weeman,172839456,basshead,hornball,magnu,pagedown,molly2,131517,rfvtgbyhn,astonmar,mistery,madalina,cash1,1happy,shenlong,matrix01,nazarova,369874125,800500,webguy,rse2540,ashley2,briank,789551,786110,chunli,j0nathan,greshnik,courtne,suckmyco,mjollnir,789632147,asdfg1234,754321,odelay,ranma12,zebedee,artem777,bmw318is,butt1,rambler1,yankees9,alabam,5w76rnqp,rosies,mafioso,studio1,babyruth,tranzit,magical123,gfhjkm135,12345$,soboleva,709394,ubique,drizzt1,elmers,teamster,pokemons,1472583690,1597532486,shockers,merckx,melanie2,ttocs,clarisse,earth1,dennys,slobber,flagman,farfalla,troika,4fa82hyx,hakan,x4ww5qdr,cumsuck,leather1,forum1,july20,barbel,zodiak,samuel12,ford01,rushfan,bugsy1,invest1,tumadre,screwme,a666666,money5,henry8,tiddles,sailaway,starburs,100years,killer01,comando,hiromi,ranetka,thordog,blackhole,palmeira,verboten,solidsna,q1w1e1,humme,kevinc,gbrfxe,gevaudan,hannah11,peter2,vangar,sharky7,talktome,jesse123,chuchi,pammy,!qazxsw2,siesta,twenty1,wetwilly,477041,natural1,sun123,daniel3,intersta,shithead1,hellyea,bonethugs,solitair,bubbles2,father1,nick01,444000,adidas12,dripik,cameron2,442200,a7nz8546,respublika,fkojn6gb,428054,snoppy,rulez1,haslo,rachael1,purple01,zldej102,ab12cd34,cytuehjxrf,madhu,astroman,preteen,handsoff,mrblonde,biggio,testin,vfdhif,twolves,unclesam,asmara,kpydskcw,lg2wmgvr,grolsch,biarritz,feather1,williamm,s62i93,bone1,penske,337733,336633,taurus1,334433,billet,diamondd,333000,nukem,fishhook,godogs,thehun,lena1982,blue00,smelly1,unb4g9ty,65pjv22,applegat,mikehunt,giancarlo,krillin,felix123,december1,soapy,46doris,nicole23,bigsexy1,justin10,pingu,bambou,falcon12,dgthtl,1surfer,qwerty01,estrellit,nfqcjy,easygo,konica,qazqwe,1234567890m,stingers,nonrev,3e4r5t,champio,bbbbbb99,196400,allen123,seppel,simba2,rockme,zebra3,tekken3,endgame,sandy2,197300,fitte,monkey00,eldritch,littleone,rfyfgkz,1member,66chevy,oohrah,cormac,hpmrbm41,197600,grayfox,elvis69,celebrit,maxwell7,rodders,krist,1camaro,broken1,kendall1,silkcut,katenka,angrick,maruni,17071994a,tktyf,kruemel,snuffles,iro4ka,baby12,alexis01,marryme,vlad1994,forward1,culero,badaboom,malvin,hardtoon,hatelove,molley,knopo4ka,duchess1,mensuck,cba321,kickbutt,zastava,wayner,fuckyou6,eddie123,cjkysir,john33,dragonfi,cody1,jabell,cjhjrf,badseed,sweden1,marihuana,brownlov,elland,nike1234,kwiettie,jonnyboy,togepi,billyk,robert123,bb334,florenci,ssgoku,198910,bristol1,bob007,allister,yjdujhjl,gauloise,198920,bellaboo,9lives,aguilas,wltfg4ta,foxyroxy,rocket69,fifty50,babalu,master21,malinois,kaluga,gogosox,obsessio,yeahrigh,panthers1,capstan,liza2000,leigh1,paintball1,blueskie,cbr600f3,bagdad,jose98,mandreki,shark01,wonderbo,muledeer,xsvnd4b2,hangten,200001,grenden,anaell,apa195,model1,245lufpq,zip100,ghjcgtrn,wert1234,misty2,charro,juanjose,fkbcrf,frostbit,badminto,buddyy,1doctor,vanya,archibal,parviz,spunky1,footboy,dm6tzsgp,legola,samadhi,poopee,ytdxz2ca,hallowboy,dposton,gautie,theworm,guilherme,dopehead,iluvtits,bobbob1,ranger6,worldwar,lowkey,chewbaca,oooooo99,ducttape,dedalus,celular,8i9o0p,borisenko,taylor01,111111z,arlingto,p3nnywiz,rdgpl3ds,boobless,kcmfwesg,blacksab,mother2,markus1,leachim,secret2,s123456789,1derful,espero,russell2,tazzer,marykate,freakme,mollyb,lindros8,james00,gofaster,stokrotka,kilbosik,aquamann,pawel1,shedevil,mousie,slot2009,october6,146969,mm259up,brewcrew,choucho,uliana,sexfiend,fktirf,pantss,vladimi,starz,sheeps,12341234q,bigun,tiggers,crjhjcnm,libtech,pudge1,home12,zircon,klaus1,jerry2,pink1,lingus,monkey66,dumass,polopolo09,feuerweh,rjyatnf,chessy,beefer,shamen,poohbear1,4jjcho,bennevis,fatgirls,ujnbrf,cdexswzaq,9noize9,rich123,nomoney,racecar1,hacke,clahay,acuario,getsum,hondacrv,william0,cheyenn,techdeck,atljhjdf,wtcacq,suger,fallenangel,bammer,tranquil,carla123,relayer,lespaul1,portvale,idontno,bycnbnen,trooper2,gennadiy,pompon,billbob,amazonka,akitas,chinatow,atkbrc,busters,fitness1,cateye,selfok2013,1murphy,fullhous,mucker,bajskorv,nectarin,littlebitch,love24,feyenoor,bigal37,lambo1,pussybitch,icecube1,biged,kyocera,ltybcjdf,boodle,theking1,gotrice,sunset1,abm1224,fromme,sexsells,inheat,kenya1,swinger1,aphrodit,kurtcobain,rhind101,poidog,poiulkjh,kuzmina,beantown,tony88,stuttgar,drumer,joaqui,messenge,motorman,amber2,nicegirl,rachel69,andreia,faith123,studmuffin,jaiden,red111,vtkmybr,gamecocks,gumper,bosshogg,4me2know,tokyo1,kleaner,roadhog,fuckmeno,phoenix3,seeme,buttnutt,boner69,andreyka,myheart,katerin,rugburn,jvtuepip,dc3ubn,chile1,ashley69,happy99,swissair,balls2,fylhttdf,jimboo,55555d,mickey11,voronin,m7hsqstm,stufff,merete,weihnachte,dowjones,baloo1,freeones,bears34,auburn1,beverl,timberland,1elvis,guinness1,bombadil,flatron1,logging7,telefoon,merl1n,masha1,andrei1,cowabung,yousuck1,1matrix,peopl,asd123qwe,sweett,mirror1,torrente,joker12,diamond6,jackaroo,00000a,millerlite,ironhorse,2twins,stryke,gggg1,zzzxxxccc,roosevel,8363eddy,angel21,depeche1,d0ct0r,blue14,areyou,veloce,grendal,frederiksberg,cbcntvf,cb207sl,sasha2000,was.here,fritzz,rosedale,spinoza,cokeisit,gandalf3,skidmark,ashley01,12345j,1234567890qaz,sexxxxxx,beagles,lennart,12345789,pass10,politic,max007,gcheckou,12345611,tiffy,lightman,mushin,velosiped,brucewayne,gauthie,elena123,greenegg,h2oski,clocker,nitemare,123321s,megiddo,cassidy1,david13,boywonde,flori,peggy12,pgszt6md,batterie,redlands,scooter6,bckhere,trueno,bailey11,maxwell2,bandana,timoth1,startnow,ducati74,tiern,maxine1,blackmetal,suzyq,balla007,phatfarm,kirsten1,titmouse,benhogan,culito,forbin,chess1,warren1,panman,mickey7,24lover,dascha,speed2,redlion,andrew10,johnwayn,nike23,chacha1,bendog,bullyboy,goldtree,spookie,tigger99,1cookie,poutine,cyclone1,woodpony,camaleun,bluesky1,dfadan,eagles20,lovergirl,peepshow,mine1,dima1989,rjdfkmxer,11111aaaaa,machina,august17,1hhhhh,0773417k,1monster,freaksho,jazzmin,davidw,kurupt,chumly,huggies,sashenka,ccccccc1,bridge1,giggalo,cincinna,pistol1,hello22,david77,lightfoo,lucky6,jimmy12,261397,lisa12,tabaluga,mysite,belo4ka,greenn,eagle99,punkrawk,salvado,slick123,wichsen,knight99,dummys,fefolico,contrera,kalle1,anna1984,delray,robert99,garena,pretende,racefan,alons,serenada,ludmilla,cnhtkjr,l0swf9gx,hankster,dfktynbyrf,sheep1,john23,cv141ab,kalyani,944turbo,crystal2,blackfly,zrjdktdf,eus1sue1,mario5,riverplate,harddriv,melissa3,elliott1,sexybitc,cnhfyybr,jimdavis,bollix,beta1,amberlee,skywalk1,natala,1blood,brattax,shitty1,gb15kv99,ronjon,rothmans,thedoc,joey21,hotboi,firedawg,bimbo38,jibber,aftermat,nomar,01478963,phishing,domodo,anna13,materia,martha1,budman1,gunblade,exclusiv,sasha1997,anastas,rebecca2,fackyou,kallisti,fuckmyass,norseman,ipswich1,151500,1edward,intelinside,darcy1,bcrich,yjdjcnbf,failte,buzzzz,cream1,tatiana1,7eleven,green8,153351,1a2s3d4f5g6h,154263,milano1,bambi1,bruins77,rugby2,jamal1,bolita,sundaypunch,bubba12,realmadr,vfyxtcnth,iwojima,notlob,black666,valkiria,nexus1,millerti,birthday100,swiss1,appollo,gefest,greeneyes,celebrat,tigerr,slava123,izumrud,bubbabub,legoman,joesmith,katya123,sweetdream,john44,wwwwwww1,oooooo1,socal,lovespor,s5r8ed67s,258147,heidis,cowboy22,wachovia,michaelb,qwe1234567,i12345,255225,goldie1,alfa155,45colt,safeu851,antonova,longtong,1sparky,gfvznm,busen,hjlbjy,whateva,rocky4,cokeman,joshua3,kekskek1,sirocco,jagman,123456qwert,phinupi,thomas10,loller,sakur,vika2011,fullred,mariska,azucar,ncstate,glenn74,halima,aleshka,ilovemylife,verlaat,baggie,scoubidou6,phatboy,jbruton,scoop1,barney11,blindman,def456,maximus2,master55,nestea,11223355,diego123,sexpistols,sniffy,philip1,f12345,prisonbreak,nokia2700,ajnjuhfa,yankees3,colfax,ak470000,mtnman,bdfyeirf,fotball,ichbin,trebla,ilusha,riobravo,beaner1,thoradin,polkaudi,kurosawa,honda123,ladybu,valerik,poltava,saviola,fuckyouguys,754740g0,anallove,microlab1,juris01,ncc1864,garfild,shania1,qagsud,makarenko,cindy69,lebedev,andrew11,johnnybo,groovy1,booster1,sanders1,tommyb,johnson4,kd189nlcih,hondaman,vlasova,chick1,sokada,sevisgur,bear2327,chacho,sexmania,roma1993,hjcnbckfd,valley1,howdie,tuppence,jimandanne,strike3,y4kuz4,nhfnfnf,tsubasa,19955991,scabby,quincunx,dima1998,uuuuuu1,logica,skinner1,pinguino,lisa1234,xpressmusic,getfucked,qqqq1,bbbb1,matulino,ulyana,upsman,johnsmith,123579,co2000,spanner1,todiefor,mangoes,isabel1,123852,negra,snowdon,nikki123,bronx1,booom,ram2500,chuck123,fireboy,creek1,batman13,princesse,az12345,maksat,1knight,28infern,241455,r7112s,muselman,mets1986,katydid,vlad777,playme,kmfdm1,asssex,1prince,iop890,bigbroth,mollymoo,waitron,lizottes,125412,juggler,quinta,0sister0,zanardi,nata123,heckfyxbr,22q04w90e,engine2,nikita95,zamira,hammer22,lutscher,carolina1,zz6319,sanman,vfuflfy,buster99,rossco,kourniko,aggarwal,tattoo1,janice1,finger1,125521,19911992,shdwlnds,rudenko,vfvfgfgf123,galatea,monkeybu,juhani,premiumcash,classact,devilmay,helpme2,knuddel,hardpack,ramil,perrit,basil1,zombie13,stockcar,tos8217,honeypie,nowayman,alphadog,melon1,talula,125689,tiribon12,tornike,haribol,telefone,tiger22,sucka,lfytxrf,chicken123,muggins,a23456,b1234567,lytdybr,otter1,pippa,vasilisk,cooking1,helter,78978,bestboy,viper7,ahmed1,whitewol,mommys,apple5,shazam1,chelsea7,kumiko,masterma,rallye,bushmast,jkz123,entrar,andrew6,nathan01,alaric,tavasz,heimdall,gravy1,jimmy99,cthlwt,powerr,gthtrhtcnjr,canesfan,sasha11,ybrbnf_25,august9,brucie,artichok,arnie1,superdude,tarelka,mickey22,dooper,luners,holeshot,good123,gettysbu,bicho,hammer99,divine5,1zxcvbn,stronzo,q22222,disne,bmw750il,godhead,hallodu,aerith,nastik,differen,cestmoi,amber69,5string,pornosta,dirtygirl,ginger123,formel1,scott12,honda200,hotspurs,johnatha,firstone123,lexmark1,msconfig,karlmasc,l123456,123qweasdzx,baldman,sungod,furka,retsub,9811020,ryder1,tcglyued,astron,lbvfcbr,minddoc,dirt49,baseball12,tbear,simpl,schuey,artimus,bikman,plat1num,quantex,gotyou,hailey1,justin01,ellada,8481068,000002,manimal,dthjybxrf,buck123,dick123,6969696,nospam,strong1,kodeord,bama12,123321w,superman123,gladiolus,nintend,5792076,dreamgirl,spankme1,gautam,arianna1,titti,tetas,cool1234,belladog,importan,4206969,87e5nclizry,teufelo7,doller,yfl.irf,quaresma,3440172,melis,bradle,nnmaster,fast1,iverso,blargh,lucas12,chrisg,iamsam,123321az,tomjerry,kawika,2597174,standrew,billyg,muskan,gizmodo2,rz93qpmq,870621345,sathya,qmezrxg4,januari,marthe,moom4261,cum2me,hkger286,lou1988,suckit1,croaker,klaudia1,753951456,aidan1,fsunoles,romanenko,abbydog,isthebes,akshay,corgi,fuck666,walkman555,ranger98,scorpian,hardwareid,bluedragon,fastman,2305822q,iddqdiddqd,1597532,gopokes,zvfrfcb,w1234567,sputnik1,tr1993,pa$$w0rd,2i5fdruv,havvoc,1357913,1313131,bnm123,cowd00d,flexscan,thesims2,boogiema,bigsexxy,powerstr,ngc4565,joshman,babyboy1,123jlb,funfunfu,qwe456,honor1,puttana,bobbyj,daniel21,pussy12,shmuck,1232580,123578951,maxthedo,hithere1,bond0007,gehenna,nomames,blueone,r1234567,bwana,gatinho,1011111,torrents,cinta,123451234,tiger25,money69,edibey,pointman,mmcm19,wales1,caffreys,phaedra,bloodlus,321ret32,rufuss,tarbit,joanna1,102030405,stickboy,lotrfotr34,jamshid,mclarenf1,ataman,99ford,yarrak,logan2,ironlung,pushistik,dragoon1,unclebob,tigereye,pinokio,tylerj,mermaid1,stevie1,jaylen,888777,ramana,roman777,brandon7,17711771s,thiago,luigi1,edgar1,brucey,videogam,classi,birder,faramir,twiddle,cubalibre,grizzy,fucky,jjvwd4,august15,idinahui,ranita,nikita1998,123342,w1w2w3,78621323,4cancel,789963,(null,vassago,jaydog472,123452,timt42,canada99,123589,rebenok,htyfnf,785001,osipov,maks123,neverwinter,love2010,777222,67390436,eleanor1,bykemo,aquemini,frogg,roboto,thorny,shipmate,logcabin,66005918,nokian,gonzos,louisian,1abcdefg,triathlo,ilovemar,couger,letmeino,supera,runvs,fibonacci,muttly,58565254,5thgbqi,vfnehsv,electr,jose12,artemis1,newlove,thd1shr,hawkey,grigoryan,saisha,tosca,redder,lifesux,temple1,bunnyman,thekids,sabbeth,tarzan1,182838,158uefas,dell50,1super,666222,47ds8x,jackhamm,mineonly,rfnfhbyf,048ro,665259,kristina1,bombero,52545856,secure1,bigloser,peterk,alex2,51525354,anarchy1,superx,teenslut,money23,sigmapi,sanfrancisco,acme34,private5,eclips,qwerttrewq,axelle,kokain,hardguy,peter69,jesuschr,dyanna,dude69,sarah69,toyota91,amberr,45645645,bugmenot,bigted,44556677,556644,wwr8x9pu,alphaome,harley13,kolia123,wejrpfpu,revelati,nairda,sodoff,cityboy,pinkpussy,dkalis,miami305,wow12345,triplet,tannenbau,asdfasdf1,darkhors,527952,retired1,soxfan,nfyz123,37583867,goddes,515069,gxlmxbewym,1warrior,36925814,dmb2011,topten,karpova,89876065093rax,naturals,gateway9,cepseoun,turbot,493949,cock22,italia1,sasafras,gopnik,stalke,1qazxdr5,wm2006,ace1062,alieva,blue28,aracel,sandia,motoguzz,terri1,emmajane,conej,recoba,alex1995,jerkyboy,cowboy12,arenrone,precisio,31415927,scsa316,panzer1,studly1,powerhou,bensam,mashoutq,billee,eeyore1,reape,thebeatl,rul3z,montesa,doodle1,cvzefh1gk,424365,a159753,zimmerma,gumdrop,ashaman,grimreap,icandoit,borodina,branca,dima2009,keywest1,vaders,bubluk,diavolo,assss,goleta,eatass,napster1,382436,369741,5411pimo,lenchik,pikach,gilgamesh,kalimera,singer1,gordon2,rjycnbnewbz,maulwurf,joker13,2much4u,bond00,alice123,robotec,fuckgirl,zgjybz,redhorse,margaret1,brady1,pumpkin2,chinky,fourplay,1booger,roisin,1brandon,sandan,blackheart,cheez,blackfin,cntgfyjdf,mymoney1,09080706,goodboss,sebring1,rose1,kensingt,bigboner,marcus12,ym3cautj,struppi,thestone,lovebugs,stater,silver99,forest99,qazwsx12345,vasile,longboar,mkonji,huligan,rhfcbdfz,airmail,porn11,1ooooo,sofun,snake2,msouthwa,dougla,1iceman,shahrukh,sharona,dragon666,france98,196800,196820,ps253535,zjses9evpa,sniper01,design1,konfeta,jack99,drum66,good4you,station2,brucew,regedit,school12,mvtnr765,pub113,fantas,tiburon1,king99,ghjcnjgbpltw,checkito,308win,1ladybug,corneliu,svetasveta,197430,icicle,imaccess,ou81269,jjjdsl,brandon6,bimbo1,smokee,piccolo1,3611jcmg,children2,cookie2,conor1,darth1,margera,aoi856,paully,ou812345,sklave,eklhigcz,30624700,amazing1,wahooo,seau55,1beer,apples2,chulo,dolphin9,heather6,198206,198207,hergood,miracle1,njhyflj,4real,milka,silverfi,fabfive,spring12,ermine,mammy,jumpjet,adilbek,toscana,caustic,hotlove,sammy69,lolita1,byoung,whipme,barney01,mistys,tree1,buster3,kaylin,gfccgjhn,132333,aishiteru,pangaea,fathead1,smurph,198701,ryslan,gasto,xexeylhf,anisimov,chevyss,saskatoo,brandy12,tweaker,irish123,music2,denny1,palpatin,outlaw1,lovesuck,woman1,mrpibb,diadora,hfnfneq,poulette,harlock,mclaren1,cooper12,newpass3,bobby12,rfgecnfcerf,alskdjfh,mini14,dukers,raffael,199103,cleo123,1234567qwertyu,mossberg,scoopy,dctulf,starline,hjvjxrf,misfits1,rangers2,bilbos,blackhea,pappnase,atwork,purple2,daywalker,summoner,1jjjjjjj,swansong,chris10,laluna,12345qqq,charly1,lionsden,money99,silver33,hoghead,bdaddy,199430,saisg002,nosaints,tirpitz,1gggggg,jason13,kingss,ernest1,0cdh0v99ue,pkunzip,arowana,spiri,deskjet1,armine,lances,magic2,thetaxi,14159265,cacique,14142135,orange10,richard0,backdraf,255ooo,humtum,kohsamui,c43dae874d,wrestling1,cbhtym,sorento,megha,pepsiman,qweqwe12,bliss7,mario64,korolev,balls123,schlange,gordit,optiquest,fatdick,fish99,richy,nottoday,dianne1,armyof1,1234qwerasdfzxcv,bbonds,aekara,lidiya,baddog1,yellow5,funkie,ryan01,greentree,gcheckout,marshal1,liliput,000000z,rfhbyrf,gtogto43,rumpole,tarado,marcelit,aqwzsxedc,kenshin1,sassydog,system12,belly1,zilla,kissfan,tools1,desember,donsdad,nick11,scorpio6,poopoo1,toto99,steph123,dogfuck,rocket21,thx113,dude12,sanek,sommar,smacky,pimpsta,letmego,k1200rs,lytghjgtnhjdcr,abigale,buddog,deles,baseball9,roofus,carlsbad,hamzah,hereiam,genial,schoolgirlie,yfz450,breads,piesek,washear,chimay,apocalyp,nicole18,gfgf1234,gobulls,dnevnik,wonderwall,beer1234,1moose,beer69,maryann1,adpass,mike34,birdcage,hottuna,gigant,penquin,praveen,donna123,123lol123,thesame,fregat,adidas11,selrahc,pandoras,test3,chasmo,111222333000,pecos,daniel11,ingersol,shana1,mama12345,cessna15,myhero,1simpson,nazarenko,cognit,seattle2,irina1,azfpc310,rfycthdf,hardy1,jazmyn,sl1200,hotlanta,jason22,kumar123,sujatha,fsd9shtyu,highjump,changer,entertai,kolding,mrbig,sayuri,eagle21,qwertzu,jorge1,0101dd,bigdong,ou812a,sinatra1,htcnjhfy,oleg123,videoman,pbyfblf,tv612se,bigbird1,kenaidog,gunite,silverma,ardmore,123123qq,hotbot,cascada,cbr600f4,harakiri,chico123,boscos,aaron12,glasgow1,kmn5hc,lanfear,1light,liveoak,fizika,ybrjkftdyf,surfside,intermilan,multipas,redcard,72chevy,balata,coolio1,schroede,kanat,testerer,camion,kierra,hejmeddig,antonio2,tornados,isidor,pinkey,n8skfswa,ginny1,houndog,1bill,chris25,hastur,1marine,greatdan,french1,hatman,123qqq,z1z2z3z4,kicker1,katiedog,usopen,smith22,mrmagoo,1234512i,assa123,7seven7,monster7,june12,bpvtyf,149521,guenter,alex1985,voronina,mbkugegs,zaqwsxcderfv,rusty5,mystic1,master0,abcdef12,jndfkb,r4zpm3,cheesey,skripka,blackwhite,sharon69,dro8smwq,lektor,techman,boognish,deidara,heckfyf,quietkey,authcode,monkey4,jayboy,pinkerto,merengue,chulita,bushwick,turambar,kittykit,joseph2,dad123,kristo,pepote,scheiss,hambone1,bigballa,restaura,tequil,111luzer,euro2000,motox,denhaag,chelsi,flaco1,preeti,lillo,1001sin,passw,august24,beatoff,555555d,willis1,kissthis,qwertyz,rvgmw2gl,iloveboobies,timati,kimbo,msinfo,dewdrop,sdbaker,fcc5nky2,messiah1,catboy,small1,chode,beastie1,star77,hvidovre,short1,xavie,dagobah,alex1987,papageno,dakota2,toonami,fuerte,jesus33,lawina,souppp,dirtybir,chrish,naturist,channel1,peyote,flibble,gutentag,lactate,killem,zucchero,robinho,ditka,grumpy1,avr7000,boxxer,topcop,berry1,mypass1,beverly1,deuce1,9638527410,cthuttdf,kzkmrf,lovethem,band1t,cantona1,purple11,apples123,wonderwo,123a456,fuzzie,lucky99,dancer2,hoddling,rockcity,winner12,spooty,mansfiel,aimee1,287hf71h,rudiger,culebra,god123,agent86,daniel0,bunky1,notmine,9ball,goofus,puffy1,xyh28af4,kulikov,bankshot,vurdf5i2,kevinm,ercole,sexygirls,razvan,october7,goater,lollie,raissa,thefrog,mdmaiwa3,mascha,jesussaves,union1,anthony9,crossroa,brother2,areyuke,rodman91,toonsex,dopeman,gericom,vaz2115,cockgobbler,12356789,12345699,signatur,alexandra1,coolwhip,erwin1,awdrgyjilp,pens66,ghjrjgtyrj,linkinpark,emergenc,psych0,blood666,bootmort,wetworks,piroca,johnd,iamthe1,supermario,homer69,flameon,image1,bebert,fylhtq1,annapoli,apple11,hockey22,10048,indahouse,mykiss,1penguin,markp,misha123,foghat,march11,hank1,santorin,defcon4,tampico,vbnhjafy,robert22,bunkie,athlon64,sex777,nextdoor,koskesh,lolnoob,seemnemaailm,black23,march15,yeehaa,chiqui,teagan,siegheil,monday2,cornhusk,mamusia,chilis,sthgrtst,feldspar,scottm,pugdog,rfghjy,micmac,gtnhjdyf,terminato,1jackson,kakosja,bogomol,123321aa,rkbvtyrj,tresor,tigertig,fuckitall,vbkkbjy,caramon,zxc12,balin,dildo1,soccer09,avata,abby123,cheetah1,marquise,jennyc,hondavfr,tinti,anna1985,dennis2,jorel,mayflowe,icema,hal2000,nikkis,bigmouth,greenery,nurjan,leonov,liberty7,fafnir,larionov,sat321321,byteme1,nausicaa,hjvfynbrf,everto,zebra123,sergio1,titone,wisdom1,kahala,104328q,marcin1,salima,pcitra,1nnnnn,nalini,galvesto,neeraj,rick1,squeeky,agnes1,jitterbu,agshar,maria12,0112358,traxxas,stivone,prophet1,bananza,sommer1,canoneos,hotfun,redsox11,1bigmac,dctdjkjl,legion1,everclea,valenok,black9,danny001,roxie1,1theman,mudslide,july16,lechef,chula,glamis,emilka,canbeef,ioanna,cactus1,rockshox,im2cool,ninja9,thvfrjdf,june28,milo17,missyou,micky1,nbibyf,nokiaa,goldi,mattias,fuckthem,asdzxc123,ironfist,junior01,nesta,crazzy,killswit,hygge,zantac,kazama,melvin1,allston,maandag,hiccup,prototyp,specboot,dwl610,hello6,159456,baldhead,redwhite,calpoly,whitetail,agile1,cousteau,matt01,aust1n,malcolmx,gjlfhjr,semperf1,ferarri,a1b2c3d,vangelis,mkvdari,bettis36,andzia,comand,tazzman,morgaine,pepluv,anna1990,inandout,anetka,anna1997,wallpape,moonrake,huntress,hogtie,cameron7,sammy7,singe11,clownboy,newzeala,wilmar,safrane,rebeld,poopi,granat,hammertime,nermin,11251422,xyzzy1,bogeys,jkmxbr,fktrcfyl,11223311,nfyrbcn,11223300,powerpla,zoedog,ybrbnbyf,zaphod42,tarawa,jxfhjdfirf,dude1234,g5wks9,goobe,czekolada,blackros,amaranth,medical1,thereds,julija,nhecsyfujkjdt,promopas,buddy4,marmalad,weihnachten,tronic,letici,passthief,67mustan,ds7zamnw,morri,w8woord,cheops,pinarell,sonofsam,av473dv,sf161pn,5c92v5h6,purple13,tango123,plant1,1baby,xufrgemw,fitta,1rangers,spawns,kenned,taratata,19944991,11111118,coronas,4ebouux8,roadrash,corvette1,dfyjdf846,marley12,qwaszxerdfcv,68stang,67stang,racin,ellehcim,sofiko,nicetry,seabass1,jazzman1,zaqwsx1,laz2937,uuuuuuu1,vlad123,rafale,j1234567,223366,nnnnnn1,226622,junkfood,asilas,cer980,daddymac,persepho,neelam,00700,shithappens,255555,qwertyy,xbox36,19755791,qweasd1,bearcub,jerryb,a1b1c1,polkaudio,basketball1,456rty,1loveyou,marcus2,mama1961,palace1,transcend,shuriken,sudhakar,teenlove,anabelle,matrix99,pogoda,notme,bartend,jordana,nihaoma,ataris,littlegi,ferraris,redarmy,giallo,fastdraw,accountbloc,peludo,pornostar,pinoyako,cindee,glassjaw,dameon,johnnyd,finnland,saudade,losbravo,slonko,toplay,smalltit,nicksfun,stockhol,penpal,caraj,divedeep,cannibus,poppydog,pass88,viktory,walhalla,arisia,lucozade,goldenbo,tigers11,caball,ownage123,tonna,handy1,johny,capital5,faith2,stillher,brandan,pooky1,antananarivu,hotdick,1justin,lacrimos,goathead,bobrik,cgtwbfkbcn,maywood,kamilek,gbplf123,gulnar,beanhead,vfvjyn,shash,viper69,ttttttt1,hondacr,kanako,muffer,dukies,justin123,agapov58,mushka,bad11bad,muleman,jojo123,andreika,makeit,vanill,boomers,bigals,merlin11,quacker,aurelien,spartak1922,ligeti,diana2,lawnmowe,fortune1,awesom,rockyy,anna1994,oinker,love88,eastbay,ab55484,poker0,ozzy666,papasmurf,antihero,photogra,ktm250,painkill,jegr2d2,p3orion,canman,dextur,qwest123,samboy,yomismo,sierra01,herber,vfrcbvvfrcbv,gloria1,llama1,pie123,bobbyjoe,buzzkill,skidrow,grabber,phili,javier1,9379992q,geroin,oleg1994,sovereig,rollover,zaq12qaz,battery1,killer13,alina123,groucho1,mario12,peter22,butterbean,elise1,lucycat,neo123,ferdi,golfer01,randie,gfhfyjbr,ventura1,chelsea3,pinoy,mtgox,yrrim7,shoeman,mirko,ffggyyo,65mustan,ufdibyjd,john55,suckfuck,greatgoo,fvfnjhb,mmmnnn,love20,1bullshi,sucesso,easy1234,robin123,rockets1,diamondb,wolfee,nothing0,joker777,glasnost,richar1,guille,sayan,koresh,goshawk,alexx,batman21,a123456b,hball,243122,rockandr,coolfool,isaia,mary1,yjdbrjdf,lolopc,cleocat,cimbo,lovehina,8vfhnf,passking,bonapart,diamond2,bigboys,kreator,ctvtyjdf,sassy123,shellac,table54781,nedkelly,philbert,sux2bu,nomis,sparky99,python1,littlebear,numpty,silmaril,sweeet,jamesw,cbufhtnf,peggysue,wodahs,luvsex,wizardry,venom123,love4you,bama1,samat,reviewpass,ned467,cjkjdtq,mamula,gijoe,amersham,devochka,redhill,gisel,preggo,polock,cando,rewster,greenlantern,panasonik,dave1234,mikeee,1carlos,miledi,darkness1,p0o9i8u7y6,kathryn1,happyguy,dcp500,assmaster,sambuka,sailormo,antonio3,logans,18254288,nokiax2,qwertzuiop,zavilov,totti,xenon1,edward11,targa1,something1,tony_t,q1w2e3r4t5y6u7i8o9p0,02551670,vladimir1,monkeybutt,greenda,neel21,craiger,saveliy,dei008,honda450,fylhtq95,spike2,fjnq8915,passwordstandard,vova12345,talonesi,richi,gigemags,pierre1,westin,trevoga,dorothee,bastogne,25563o,brandon3,truegrit,krimml,iamgreat,servis,a112233,paulinka,azimuth,corperfmonsy,358hkyp,homerun1,dogbert1,eatmyass,cottage1,savina,baseball7,bigtex,gimmesum,asdcxz,lennon1,a159357,1bastard,413276191q,pngfilt,pchealth,netsnip,bodiroga,1matt,webtvs,ravers,adapters,siddis,mashamasha,coffee2,myhoney,anna1982,marcia1,fairchil,maniek,iloveluc,batmonh,wildon,bowie1,netnwlnk,fancy1,tom204,olga1976,vfif123,queens1,ajax01,lovess,mockba,icam4usb,triada,odinthor,rstlne,exciter,sundog,anchorat,girls69,nfnmzyrf,soloma,gti16v,shadowman,ottom,rataros,tonchin,vishal,chicken0,pornlo,christiaan,volante,likesit,mariupol,runfast,gbpltw123,missys,villevalo,kbpjxrf,ghibli,calla,cessna172,kinglear,dell11,swift1,walera,1cricket,pussy5,turbo911,tucke,maprchem56458,rosehill,thekiwi1,ygfxbkgt,mandarinka,98xa29,magnit,cjfrf,paswoord,grandam1,shenmue,leedsuni,hatrick,zagadka,angeldog,michaell,dance123,koichi,bballs,29palms,xanth,228822,ppppppp1,1kkkkk,1lllll,mynewbots,spurss,madmax1,224455,city1,mmmmmmm1,nnnnnnn1,biedronka,thebeatles,elessar,f14tomcat,jordan18,bobo123,ayi000,tedbear,86chevyx,user123,bobolink,maktub,elmer1,flyfishi,franco1,gandalf0,traxdata,david21,enlighte,dmitrij,beckys,1giants,flippe,12345678w,jossie,rugbyman,snowcat,rapeme,peanut11,gemeni,udders,techn9ne,armani1,chappie,war123,vakantie,maddawg,sewanee,jake5253,tautt1,anthony5,letterma,jimbo2,kmdtyjr,hextall,jessica6,amiga500,hotcunt,phoenix9,veronda,saqartvelo,scubas,sixer3,williamj,nightfal,shihan,melnikova,kosssss,handily,killer77,jhrl0821,march17,rushman,6gcf636i,metoyou,irina123,mine11,primus1,formatters,matthew5,infotech,gangster1,jordan45,moose69,kompas,motoxxx,greatwhi,cobra12,kirpich,weezer1,hello23,montse,tracy123,connecte,cjymrf,hemingwa,azreal,gundam00,mobila,boxman,slayers1,ravshan,june26,fktrcfylhjd,bermuda1,tylerd,maersk,qazwsx11,eybdthcbntn,ash123,camelo,kat123,backd00r,cheyenne1,1king,jerkin,tnt123,trabant,warhammer40k,rambos,punto,home77,pedrito,1frank,brille,guitarman,george13,rakas,tgbxtcrbq,flute1,bananas1,lovezp1314,thespot,postie,buster69,sexytime,twistys,zacharia,sportage,toccata,denver7,terry123,bogdanova,devil69,higgins1,whatluck,pele10,kkk666,jeffery1,1qayxsw2,riptide1,chevy11,munchy,lazer1,hooker1,ghfgjh,vergesse,playgrou,4077mash,gusev,humpin,oneputt,hydepark,monster9,tiger8,tangsoo,guy123,hesoyam1,uhtqneyu,thanku,lomond,ortezza,kronik,geetha,rabbit66,killas,qazxswe,alabaste,1234567890qwerty,capone1,andrea12,geral,beatbox,slutfuck,booyaka,jasmine7,ostsee,maestro1,beatme,tracey1,buster123,donaldduck,ironfish,happy6,konnichi,gintonic,momoney1,dugan1,today2,enkidu,destiny2,trim7gun,katuha,fractals,morganstanley,polkadot,gotime,prince11,204060,fifa2010,bobbyt,seemee,amanda10,airbrush,bigtitty,heidie,layla1,cotton1,5speed,fyfnjkmtdyf,flynavy,joxury8f,meeko,akuma,dudley1,flyboy1,moondog1,trotters,mariami,signin,chinna,legs11,pussy4,1s1h1e1f1,felici,optimus1,iluvu,marlins1,gavaec,balance1,glock40,london01,kokot,southwes,comfort1,sammy11,rockbottom,brianc,litebeer,homero,chopsuey,greenlan,charit,freecell,hampster,smalldog,viper12,blofeld,1234567890987654321,realsex,romann,cartman2,cjdthitycndj,nelly1,bmw528,zwezda,masterba,jeep99,turtl,america2,sunburst,sanyco,auntjudy,125wm,blue10,qwsazx,cartma,toby12,robbob,red222,ilovecock,losfix16,1explore,helge,vaz2114,whynotme,baba123,mugen,1qazwsxedc,albertjr,0101198,sextime,supras,nicolas2,wantsex,pussy6,checkm8,winam,24gordon,misterme,curlew,gbljhfcs,medtech,franzi,butthea,voivod,blackhat,egoiste,pjkeirf,maddog69,pakalolo,hockey4,igor1234,rouges,snowhite,homefree,sexfreak,acer12,dsmith,blessyou,199410,vfrcbvjd,falco02,belinda1,yaglasph,april21,groundho,jasmin1,nevergiveup,elvir,gborv526,c00kie,emma01,awesome2,larina,mike12345,maximu,anupam,bltynbabrfwbz,tanushka,sukkel,raptor22,josh12,schalke04,cosmodog,fuckyou8,busybee,198800,bijoux,frame1,blackmor,giveit,issmall,bear13,123-123,bladez,littlegirl,ultra123,fletch1,flashnet,loploprock,rkelly,12step,lukas1,littlewhore,cuntfinger,stinkyfinger,laurenc,198020,n7td4bjl,jackie69,camel123,ben1234,1gateway,adelheid,fatmike,thuglove,zzaaqq,chivas1,4815162342q,mamadou,nadano,james22,benwin,andrea99,rjirf,michou,abkbgg,d50gnn,aaazzz,a123654,blankman,booboo11,medicus,bigbone,197200,justine1,bendix,morphius,njhvjp,44mag,zsecyus56,goodbye1,nokiadermo,a333444,waratsea,4rzp8ab7,fevral,brillian,kirbys,minim,erathia,grazia,zxcvb1234,dukey,snaggle,poppi,hymen,1video,dune2000,jpthjdf,cvbn123,zcxfcnkbdfz,astonv,ginnie,316271,engine3,pr1ncess,64chevy,glass1,laotzu,hollyy,comicbooks,assasins,nuaddn9561,scottsda,hfcnfvfy,accobra,7777777z,werty123,metalhead,romanson,redsand,365214,shalo,arsenii,1989cc,sissi,duramax,382563,petera,414243,mamapap,jollymon,field1,fatgirl,janets,trompete,matchbox20,rambo2,nepenthe,441232,qwertyuiop10,bozo123,phezc419hv,romantika,lifestyl,pengui,decembre,demon6,panther6,444888,scanman,ghjcnjabkz,pachanga,buzzword,indianer,spiderman3,tony12,startre,frog1,fyutk,483422,tupacshakur,albert12,1drummer,bmw328i,green17,aerdna,invisibl,summer13,calimer,mustaine,lgnu9d,morefun,hesoyam123,escort1,scrapland,stargat,barabbas,dead13,545645,mexicali,sierr,gfhfpbn,gonchar,moonstafa,searock,counte,foster1,jayhawk1,floren,maremma,nastya2010,softball1,adaptec,halloo,barrabas,zxcasd123,hunny,mariana1,kafedra,freedom0,green420,vlad1234,method7,665566,tooting,hallo12,davinchi,conducto,medias,666444,invernes,madhatter,456asd,12345678i,687887,le33px,spring00,help123,bellybut,billy5,vitalik1,river123,gorila,bendis,power666,747200,footslav,acehigh,qazxswedc123,q1a1z1,richard9,peterburg,tabletop,gavrilov,123qwe1,kolosov,fredrau,run4fun,789056,jkbvgbflf,chitra,87654321q,steve22,wideopen,access88,surfe,tdfyutkbjy,impossib,kevin69,880888,cantina,887766,wxcvb,dontforg,qwer1209,asslicke,mamma123,indig,arkasha,scrapp,morelia,vehxbr,jones2,scratch1,cody11,cassie12,gerbera,dontgotm,underhil,maks2010,hollywood1,hanibal,elena2010,jason11,1010321,stewar,elaman,fireplug,goodby,sacrific,babyphat,bobcat12,bruce123,1233215,tony45,tiburo,love15,bmw750,wallstreet,2h0t4me,1346795,lamerz,munkee,134679q,granvill,1512198,armastus,aiden1,pipeutvj,g1234567,angeleyes,usmc1,102030q,putangina,brandnew,shadowfax,eagles12,1falcon,brianw,lokomoti,2022958,scooper,pegas,jabroni1,2121212,buffal,siffredi,wewiz,twotone,rosebudd,nightwis,carpet1,mickey2,2525252,sleddog,red333,jamesm,2797349,jeff12,onizuka,felixxxx,rf6666,fine1,ohlala,forplay,chicago5,muncho,scooby11,ptichka,johnnn,19851985p,dogphil3650,totenkopf,monitor2,macross7,3816778,dudder,semaj1,bounder,racerx1,5556633,7085506,ofclr278,brody1,7506751,nantucke,hedj2n4q,drew1,aessedai,trekbike,pussykat,samatron,imani,9124852,wiley1,dukenukem,iampurehaha2,9556035,obvious1,mccool24,apache64,kravchenko,justforf,basura,jamese,s0ccer,safado,darksta,surfer69,damian1,gjpbnbd,gunny1,wolley,sananton,zxcvbn123456,odt4p6sv8,sergei1,modem1,mansikka,zzzz1,rifraf,dima777,mary69,looking4,donttell,red100,ninjutsu,uaeuaeman,bigbri,brasco,queenas8151,demetri,angel007,bubbl,kolort,conny,antonia1,avtoritet,kaka22,kailayu,sassy2,wrongway,chevy3,1nascar,patriots1,chrisrey,mike99,sexy22,chkdsk,sd3utre7,padawan,a6pihd,doming,mesohorny,tamada,donatello,emma22,eather,susan69,pinky123,stud69,fatbitch,pilsbury,thc420,lovepuss,1creativ,golf1234,hurryup,1honda,huskerdu,marino1,gowron,girl1,fucktoy,gtnhjpfdjlcr,dkjfghdk,pinkfl,loreli,7777777s,donkeykong,rockytop,staples1,sone4ka,xxxjay,flywheel,toppdogg,bigbubba,aaa123456,2letmein,shavkat,paule,dlanor,adamas,0147852,aassaa,dixon1,bmw328,mother12,ilikepussy,holly2,tsmith,excaliber,fhutynbyf,nicole3,tulipan,emanue,flyvholm,currahee,godsgift,antonioj,torito,dinky1,sanna,yfcnzvjz,june14,anime123,123321456654,hanswurst,bandman,hello101,xxxyyy,chevy69,technica,tagada,arnol,v00d00,lilone,filles,drumandbass,dinamit,a1234a,eatmeat,elway07,inout,james6,dawid1,thewolf,diapason,yodaddy,qscwdv,fuckit1,liljoe,sloeber,simbacat,sascha1,qwe1234,1badger,prisca,angel17,gravedig,jakeyboy,longboard,truskawka,golfer11,pyramid7,highspee,pistola,theriver,hammer69,1packers,dannyd,alfonse,qwertgfdsa,11119999,basket1,ghjtrn,saralee,12inches,paolo1,zse4xdr5,taproot,sophieh6,grizzlie,hockey69,danang,biggums,hotbitch,5alive,beloved1,bluewave,dimon95,koketka,multiscan,littleb,leghorn,poker2,delite,skyfir,bigjake,persona1,amberdog,hannah12,derren,ziffle,1sarah,1assword,sparky01,seymur,tomtom1,123321qw,goskins,soccer19,luvbekki,bumhole,2balls,1muffin,borodin,monkey9,yfeiybrb,1alex,betmen,freder,nigger123,azizbek,gjkzrjdf,lilmike,1bigdadd,1rock,taganrog,snappy1,andrey1,kolonka,bunyan,gomango,vivia,clarkkent,satur,gaudeamus,mantaray,1month,whitehea,fargus,andrew99,ray123,redhawks,liza2009,qw12345,den12345,vfhnsyjdf,147258369a,mazepa,newyorke,1arsenal,hondas2000,demona,fordgt,steve12,birthday2,12457896,dickster,edcwsxqaz,sahalin,pantyman,skinny1,hubertus,cumshot1,chiro,kappaman,mark3434,canada12,lichking,bonkers1,ivan1985,sybase,valmet,doors1,deedlit,kyjelly,bdfysx,ford11,throatfuck,backwood,fylhsq,lalit,boss429,kotova,bricky,steveh,joshua19,kissa,imladris,star1234,lubimka,partyman,crazyd,tobias1,ilike69,imhome,whome,fourstar,scanner1,ujhjl312,anatoli,85bears,jimbo69,5678ytr,potapova,nokia7070,sunday1,kalleank,1996gta,refinnej,july1,molodec,nothanks,enigm,12play,sugardog,nhfkbdfkb,larousse,cannon1,144444,qazxcdew,stimorol,jhereg,spawn7,143000,fearme,hambur,merlin21,dobie,is3yeusc,partner1,dekal,varsha,478jfszk,flavi,hippo1,9hmlpyjd,july21,7imjfstw,lexxus,truelov,nokia5200,carlos6,anais,mudbone,anahit,taylorc,tashas,larkspur,animal2000,nibiru,jan123,miyvarxar,deflep,dolore,communit,ifoptfcor,laura2,anadrol,mamaliga,mitzi1,blue92,april15,matveev,kajlas,wowlook1,1flowers,shadow14,alucard1,1golf,bantha,scotlan,singapur,mark13,manchester1,telus01,superdav,jackoff1,madnes,bullnuts,world123,clitty,palmer1,david10,spider10,sargsyan,rattlers,david4,windows2,sony12,visigoth,qqqaaa,penfloor,cabledog,camilla1,natasha123,eagleman,softcore,bobrov,dietmar,divad,sss123,d1234567,tlbyjhju,1q1q1q1,paraiso,dav123,lfiekmrf,drachen,lzhan16889,tplate,gfghbrf,casio1,123boots1,123test,sys64738,heavymetal,andiamo,meduza,soarer,coco12,negrita,amigas,heavymet,bespin,1asdfghj,wharfrat,wetsex,tight1,janus1,sword123,ladeda,dragon98,austin2,atep1,jungle1,12345abcd,lexus300,pheonix1,alex1974,123qw123,137955,bigtim,shadow88,igor1994,goodjob,arzen,champ123,121ebay,changeme1,brooksie,frogman1,buldozer,morrowin,achim,trish1,lasse,festiva,bubbaman,scottb,kramit,august22,tyson123,passsword,oompah,al123456,fucking1,green45,noodle1,looking1,ashlynn,al1716,stang50,coco11,greese,bob111,brennan1,jasonj,1cherry,1q2345,1xxxxxxx,fifa2011,brondby,zachar1,satyam,easy1,magic7,1rainbow,cheezit,1eeeeeee,ashley123,assass1,amanda123,jerbear,1bbbbbb,azerty12,15975391,654321z,twinturb,onlyone1,denis1988,6846kg3r,jumbos,pennydog,dandelion,haileris,epervier,snoopy69,afrodite,oldpussy,green55,poopypan,verymuch,katyusha,recon7,mine69,tangos,contro,blowme2,jade1,skydive1,fiveiron,dimo4ka,bokser,stargirl,fordfocus,tigers2,platina,baseball11,raque,pimper,jawbreak,buster88,walter34,chucko,penchair,horizon1,thecure1,scc1975,adrianna1,kareta,duke12,krille,dumbfuck,cunt1,aldebaran,laverda,harumi,knopfler,pongo1,pfhbyf,dogman1,rossigno,1hardon,scarlets,nuggets1,ibelieve,akinfeev,xfhkbr,athene,falcon69,happie,billly,nitsua,fiocco,qwerty09,gizmo2,slava2,125690,doggy123,craigs,vader123,silkeborg,124365,peterm,123978,krakatoa,123699,123592,kgvebmqy,pensacol,d1d2d3,snowstor,goldenboy,gfg65h7,ev700,church1,orange11,g0dz1ll4,chester3,acheron,cynthi,hotshot1,jesuschris,motdepass,zymurgy,one2one,fietsbel,harryp,wisper,pookster,nn527hp,dolla,milkmaid,rustyboy,terrell1,epsilon1,lillian1,dale3,crhbgrf,maxsim,selecta,mamada,fatman1,ufkjxrf,shinchan,fuckuall,women1,000008,bossss,greta1,rbhjxrf,mamasboy,purple69,felicidade,sexy21,cathay,hunglow,splatt,kahless,shopping1,1gandalf,themis,delta7,moon69,blue24,parliame,mamma1,miyuki,2500hd,jackmeof,razer,rocker1,juvis123,noremac,boing747,9z5ve9rrcz,icewater,titania,alley1,moparman,christo1,oliver2,vinicius,tigerfan,chevyy,joshua99,doda99,matrixx,ekbnrf,jackfrost,viper01,kasia,cnfhsq,triton1,ssbt8ae2,rugby8,ramman,1lucky,barabash,ghtlfntkm,junaid,apeshit,enfant,kenpo1,shit12,007000,marge1,shadow10,qwerty789,richard8,vbitkm,lostboys,jesus4me,richard4,hifive,kolawole,damilola,prisma,paranoya,prince2,lisaann,happyness,cardss,methodma,supercop,a8kd47v5,gamgee,polly123,irene1,number8,hoyasaxa,1digital,matthew0,dclxvi,lisica,roy123,2468013579,sparda,queball,vaffanculo,pass1wor,repmvbx,999666333,freedom8,botanik,777555333,marcos1,lubimaya,flash2,einstei,08080,123456789j,159951159,159357123,carrot1,alina1995,sanjos,dilara,mustang67,wisteria,jhnjgtl12,98766789,darksun,arxangel,87062134,creativ1,malyshka,fuckthemall,barsic,rocksta,2big4u,5nizza,genesis2,romance1,ofcourse,1horse,latenite,cubana,sactown,789456123a,milliona,61808861,57699434,imperia,bubba11,yellow3,change12,55495746,flappy,jimbo123,19372846,19380018,cutlass1,craig123,klepto,beagle1,solus,51502112,pasha1,19822891,46466452,19855891,petshop,nikolaevna,119966,nokia6131,evenpar,hoosier1,contrasena,jawa350,gonzo123,mouse2,115511,eetfuk,gfhfvgfvgfv,1crystal,sofaking,coyote1,kwiatuszek,fhrflbq,valeria1,anthro,0123654789,alltheway,zoltar,maasikas,wildchil,fredonia,earlgrey,gtnhjczy,matrix123,solid1,slavko,12monkeys,fjdksl,inter1,nokia6500,59382113kevinp,spuddy,cachero,coorslit,password!,kiba1z,karizma,vova1994,chicony,english1,bondra12,1rocket,hunden,jimbob1,zpflhjn1,th0mas,deuce22,meatwad,fatfree,congas,sambora,cooper2,janne,clancy1,stonie,busta,kamaz,speedy2,jasmine3,fahayek,arsenal0,beerss,trixie1,boobs69,luansantana,toadman,control2,ewing33,maxcat,mama1964,diamond4,tabaco,joshua0,piper2,music101,guybrush,reynald,pincher,katiebug,starrs,pimphard,frontosa,alex97,cootie,clockwor,belluno,skyeseth,booty69,chaparra,boochie,green4,bobcat1,havok,saraann,pipeman,aekdb,jumpshot,wintermu,chaika,1chester,rjnjatq,emokid,reset1,regal1,j0shua,134679a,asmodey,sarahh,zapidoo,ciccione,sosexy,beckham23,hornets1,alex1971,delerium,manageme,connor11,1rabbit,sane4ek,caseyboy,cbljhjdf,redsox20,tttttt99,haustool,ander,pantera6,passwd1,journey1,9988776655,blue135,writerspace,xiaoyua123,justice2,niagra,cassis,scorpius,bpgjldsgjldthnf,gamemaster,bloody1,retrac,stabbin,toybox,fight1,ytpyf.,glasha,va2001,taylor11,shameles,ladylove,10078,karmann,rodeos,eintritt,lanesra,tobasco,jnrhjqcz,navyman,pablit,leshka,jessica3,123vika,alena1,platinu,ilford,storm7,undernet,sasha777,1legend,anna2002,kanmax1994,porkpie,thunder0,gundog,pallina,easypass,duck1,supermom,roach1,twincam,14028,tiziano,qwerty32,123654789a,evropa,shampoo1,yfxfkmybr,cubby1,tsunami1,fktrcttdf,yasacrac,17098,happyhap,bullrun,rodder,oaktown,holde,isbest,taylor9,reeper,hammer11,julias,rolltide1,compaq123,fourx4,subzero1,hockey9,7mary3,busines,ybrbnjcbr,wagoneer,danniash,portishead,digitex,alex1981,david11,infidel,1snoopy,free30,jaden,tonto1,redcar27,footie,moskwa,thomas21,hammer12,burzum,cosmo123,50000,burltree,54343,54354,vwpassat,jack5225,cougars1,burlpony,blackhorse,alegna,petert,katemoss,ram123,nels0n,ferrina,angel77,cstock,1christi,dave55,abc123a,alex1975,av626ss,flipoff,folgore,max1998,science1,si711ne,yams7,wifey1,sveiks,cabin1,volodia,ox3ford,cartagen,platini,picture1,sparkle1,tiedomi,service321,wooody,christi1,gnasher,brunob,hammie,iraffert,bot2010,dtcyeirf,1234567890p,cooper11,alcoholi,savchenko,adam01,chelsea5,niewiem,icebear,lllooottt,ilovedick,sweetpus,money8,cookie13,rfnthbyf1988,booboo2,angus123,blockbus,david9,chica1,nazaret,samsung9,smile4u,daystar,skinnass,john10,thegirl,sexybeas,wasdwasd1,sigge1,1qa2ws3ed4rf5tg,czarny,ripley1,chris5,ashley19,anitha,pokerman,prevert,trfnthby,tony69,georgia2,stoppedb,qwertyuiop12345,miniclip,franky1,durdom,cabbages,1234567890o,delta5,liudmila,nhfycajhvths,court1,josiew,abcd1,doghead,diman,masiania,songline,boogle,triston,deepika,sexy4me,grapple,spacebal,ebonee,winter0,smokewee,nargiza,dragonla,sassys,andy2000,menards,yoshio,massive1,suckmy1k,passat99,sexybo,nastya1996,isdead,stratcat,hokuto,infix,pidoras,daffyduck,cumhard,baldeagl,kerberos,yardman,shibainu,guitare,cqub6553,tommyy,bk.irf,bigfoo,hecto,july27,james4,biggus,esbjerg,isgod,1irish,phenmarr,jamaic,roma1990,diamond0,yjdbrjd,girls4me,tampa1,kabuto,vaduz,hanse,spieng,dianochka,csm101,lorna1,ogoshi,plhy6hql,2wsx4rfv,cameron0,adebayo,oleg1996,sharipov,bouboule,hollister1,frogss,yeababy,kablam,adelante,memem,howies,thering,cecilia1,onetwo12,ojp123456,jordan9,msorcloledbr,neveraga,evh5150,redwin,1august,canno,1mercede,moody1,mudbug,chessmas,tiikeri,stickdaddy77,alex15,kvartira,7654321a,lollol123,qwaszxedc,algore,solana,vfhbyfvfhbyf,blue72,misha1111,smoke20,junior13,mogli,threee,shannon2,fuckmylife,kevinh,saransk,karenw,isolde,sekirarr,orion123,thomas0,debra1,laketaho,alondra,curiva,jazz1234,1tigers,jambos,lickme2,suomi,gandalf7,028526,zygote,brett123,br1ttany,supafly,159000,kingrat,luton1,cool-ca,bocman,thomasd,skiller,katter,mama777,chanc,tomass,1rachel,oldno7,rfpfyjdf,bigkev,yelrah,primas,osito,kipper1,msvcr71,bigboy11,thesun,noskcaj,chicc,sonja1,lozinka,mobile1,1vader,ummagumma,waves1,punter12,tubgtn,server1,irina1991,magic69,dak001,pandemonium,dead1,berlingo,cherrypi,1montana,lohotron,chicklet,asdfgh123456,stepside,ikmvw103,icebaby,trillium,1sucks,ukrnet,glock9,ab12345,thepower,robert8,thugstools,hockey13,buffon,livefree,sexpics,dessar,ja0000,rosenrot,james10,1fish,svoloch,mykitty,muffin11,evbukb,shwing,artem1992,andrey1992,sheldon1,passpage,nikita99,fubar123,vannasx,eight888,marial,max2010,express2,violentj,2ykn5ccf,spartan11,brenda69,jackiech,abagail,robin2,grass1,andy76,bell1,taison,superme,vika1995,xtr451,fred20,89032073168,denis1984,2000jeep,weetabix,199020,daxter,tevion,panther8,h9iymxmc,bigrig,kalambur,tsalagi,12213443,racecar02,jeffrey4,nataxa,bigsam,purgator,acuracl,troutbum,potsmoke,jimmyz,manutd1,nytimes,pureevil,bearss,cool22,dragonage,nodnarb,dbrbyu,4seasons,freude,elric1,werule,hockey14,12758698,corkie,yeahright,blademan,tafkap,clave,liziko,hofner,jeffhardy,nurich,runne,stanisla,lucy1,monk3y,forzaroma,eric99,bonaire,blackwoo,fengshui,1qaz0okm,newmoney,pimpin69,07078,anonymer,laptop1,cherry12,ace111,salsa1,wilbur1,doom12,diablo23,jgtxzbhr,under1,honda01,breadfan,megan2,juancarlos,stratus1,ackbar,love5683,happytim,lambert1,cbljhtyrj,komarov,spam69,nfhtkrf,brownn,sarmat,ifiksr,spike69,hoangen,angelz,economia,tanzen,avogadro,1vampire,spanners,mazdarx,queequeg,oriana,hershil,sulaco,joseph11,8seconds,aquariu,cumberla,heather9,anthony8,burton12,crystal0,maria3,qazwsxc,snow123,notgood,198520,raindog,heehaw,consulta,dasein,miller01,cthulhu1,dukenuke,iubire,baytown,hatebree,198505,sistem,lena12,welcome01,maraca,middleto,sindhu,mitsou,phoenix5,vovan,donaldo,dylandog,domovoy,lauren12,byrjuybnj,123llll,stillers,sanchin,tulpan,smallvill,1mmmmm,patti1,folgers,mike31,colts18,123456rrr,njkmrjz,phoenix0,biene,ironcity,kasperok,password22,fitnes,matthew6,spotligh,bujhm123,tommycat,hazel5,guitar11,145678,vfcmrf,compass1,willee,1barney,jack2000,littleminge,shemp,derrek,xxx12345,littlefuck,spuds1,karolinka,camneely,qwertyu123,142500,brandon00,munson15,falcon3,passssap,z3cn2erv,goahead,baggio10,141592,denali1,37kazoo,copernic,123456789asd,orange88,bravada,rush211,197700,pablo123,uptheass,samsam1,demoman,mattylad10,heydude,mister2,werken,13467985,marantz,a22222,f1f2f3f4,fm12mn12,gerasimova,burrito1,sony1,glenny,baldeagle,rmfidd,fenomen,verbati,forgetme,5element,wer138,chanel1,ooicu812,10293847qp,minicooper,chispa,myturn,deisel,vthrehbq,boredboi4u,filatova,anabe,poiuyt1,barmalei,yyyy1,fourkids,naumenko,bangbros,pornclub,okaykk,euclid90,warrior3,kornet,palevo,patatina,gocart,antanta,jed1054,clock1,111111w,dewars,mankind1,peugeot406,liten,tahira,howlin,naumov,rmracing,corone,cunthole,passit,rock69,jaguarxj,bumsen,197101,sweet2,197010,whitecat,sawadee,money100,yfhrjnbrb,andyboy,9085603566,trace1,fagget,robot1,angel20,6yhn7ujm,specialinsta,kareena,newblood,chingada,boobies2,bugger1,squad51,133andre,call06,ashes1,ilovelucy,success2,kotton,cavalla,philou,deebee,theband,nine09,artefact,196100,kkkkkkk1,nikolay9,onelov,basia,emilyann,sadman,fkrjujkbr,teamomuch,david777,padrino,money21,firdaus,orion3,chevy01,albatro,erdfcv,2legit,sarah7,torock,kevinn,holio,soloy,enron714,starfleet,qwer11,neverman,doctorwh,lucy11,dino12,trinity7,seatleon,o123456,pimpman,1asdfgh,snakebit,chancho,prorok,bleacher,ramire,darkseed,warhorse,michael123,1spanky,1hotdog,34erdfcv,n0th1ng,dimanche,repmvbyf,michaeljackson,login1,icequeen,toshiro,sperme,racer2,veget,birthday26,daniel9,lbvekmrf,charlus,bryan123,wspanic,schreibe,1andonly,dgoins,kewell,apollo12,egypt1,fernie,tiger21,aa123456789,blowj,spandau,bisquit,12345678d,deadmau5,fredie,311420,happyface,samant,gruppa,filmstar,andrew17,bakesale,sexy01,justlook,cbarkley,paul11,bloodred,rideme,birdbath,nfkbcvfy,jaxson,sirius1,kristof,virgos,nimrod1,hardc0re,killerbee,1abcdef,pitcher1,justonce,vlada,dakota99,vespucci,wpass,outside1,puertori,rfvbkf,teamlosi,vgfun2,porol777,empire11,20091989q,jasong,webuivalidat,escrima,lakers08,trigger2,addpass,342500,mongini,dfhtybr,horndogg,palermo1,136900,babyblu,alla98,dasha2010,jkelly,kernow,yfnecz,rockhopper,toeman,tlaloc,silver77,dave01,kevinr,1234567887654321,135642,me2you,8096468644q,remmus,spider7,jamesa,jilly,samba1,drongo,770129ji,supercat,juntas,tema1234,esthe,1234567892000,drew11,qazqaz123,beegees,blome,rattrace,howhigh,tallboy,rufus2,sunny2,sou812,miller12,indiana7,irnbru,patch123,letmeon,welcome5,nabisco,9hotpoin,hpvteb,lovinit,stormin,assmonke,trill,atlanti,money1234,cubsfan,mello1,stars2,ueptkm,agate,dannym88,lover123,wordz,worldnet,julemand,chaser1,s12345678,pissword,cinemax,woodchuc,point1,hotchkis,packers2,bananana,kalender,420666,penguin8,awo8rx3wa8t,hoppie,metlife,ilovemyfamily,weihnachtsbau,pudding1,luckystr,scully1,fatboy1,amizade,dedham,jahbless,blaat,surrende,****er,1panties,bigasses,ghjuhfvbcn,asshole123,dfktyrb,likeme,nickers,plastik,hektor,deeman,muchacha,cerebro,santana5,testdrive,dracula1,canalc,l1750sq,savannah1,murena,1inside,pokemon00,1iiiiiii,jordan20,sexual1,mailliw,calipso,014702580369,1zzzzzz,1jjjjjj,break1,15253545,yomama1,katinka,kevin11,1ffffff,martijn,sslazio,daniel5,porno2,nosmas,leolion,jscript,15975312,pundai,kelli1,kkkddd,obafgkm,marmaris,lilmama,london123,rfhfnt,elgordo,talk87,daniel7,thesims3,444111,bishkek,afrika2002,toby22,1speedy,daishi,2children,afroman,qqqqwwww,oldskool,hawai,v55555,syndicat,pukimak,fanatik,tiger5,parker01,bri5kev6,timexx,wartburg,love55,ecosse,yelena03,madinina,highway1,uhfdbwfgf,karuna,buhjvfybz,wallie,46and2,khalif,europ,qaz123wsx456,bobbybob,wolfone,falloutboy,manning18,scuba10,schnuff,ihateyou1,lindam,sara123,popcor,fallengun,divine1,montblanc,qwerty8,rooney10,roadrage,bertie1,latinus,lexusis,rhfvfnjhcr,opelgt,hitme,agatka,1yamaha,dmfxhkju,imaloser,michell1,sb211st,silver22,lockedup,andrew9,monica01,sassycat,dsobwick,tinroof,ctrhtnyj,bultaco,rhfcyjzhcr,aaaassss,14ss88,joanne1,momanddad,ahjkjdf,yelhsa,zipdrive,telescop,500600,1sexsex,facial1,motaro,511647,stoner1,temujin,elephant1,greatman,honey69,kociak,ukqmwhj6,altezza,cumquat,zippos,kontiki,123max,altec1,bibigon,tontos,qazsew,nopasaran,militar,supratt,oglala,kobayash,agathe,yawetag,dogs1,cfiekmrf,megan123,jamesdea,porosenok,tiger23,berger1,hello11,seemann,stunner1,walker2,imissu,jabari,minfd,lollol12,hjvfy,1-oct,stjohns,2278124q,123456789qwer,alex1983,glowworm,chicho,mallards,bluedevil,explorer1,543211,casita,1time,lachesis,alex1982,airborn1,dubesor,changa,lizzie1,captaink,socool,bidule,march23,1861brr,k.ljxrf,watchout,fotze,1brian,keksa2,aaaa1122,matrim,providian,privado,dreame,merry1,aregdone,davidt,nounour,twenty2,play2win,artcast2,zontik,552255,shit1,sluggy,552861,dr8350,brooze,alpha69,thunder6,kamelia2011,caleb123,mmxxmm,jamesh,lfybkjd,125267,125000,124536,bliss1,dddsss,indonesi,bob69,123888,tgkbxfgy,gerar,themack,hijodeputa,good4now,ddd123,clk430,kalash,tolkien1,132forever,blackb,whatis,s1s2s3s4,lolkin09,yamahar,48n25rcc,djtiesto,111222333444555,bigbull,blade55,coolbree,kelse,ichwill,yamaha12,sakic,bebeto,katoom,donke,sahar,wahine,645202,god666,berni,starwood,june15,sonoio,time123,llbean,deadsoul,lazarev,cdtnf,ksyusha,madarchod,technik,jamesy,4speed,tenorsax,legshow,yoshi1,chrisbl,44e3ebda,trafalga,heather7,serafima,favorite4,havefun1,wolve,55555r,james13,nosredna,bodean,jlettier,borracho,mickael,marinus,brutu,sweet666,kiborg,rollrock,jackson6,macross1,ousooner,9085084232,takeme,123qwaszx,firedept,vfrfhjd,jackfros,123456789000,briane,cookie11,baby22,bobby18,gromova,systemofadown,martin01,silver01,pimaou,darthmaul,hijinx,commo,chech,skyman,sunse,2vrd6,vladimirovna,uthvfybz,nicole01,kreker,bobo1,v123456789,erxtgb,meetoo,drakcap,vfvf12,misiek1,butane,network2,flyers99,riogrand,jennyk,e12345,spinne,avalon11,lovejone,studen,maint,porsche2,qwerty100,chamberl,bluedog1,sungam,just4u,andrew23,summer22,ludic,musiclover,aguil,beardog1,libertin,pippo1,joselit,patito,bigberth,digler,sydnee,jockstra,poopo,jas4an,nastya123,profil,fuesse,default1,titan2,mendoz,kpcofgs,anamika,brillo021,bomberman,guitar69,latching,69pussy,blues2,phelge,ninja123,m7n56xo,qwertasd,alex1976,cunningh,estrela,gladbach,marillion,mike2000,258046,bypop,muffinman,kd5396b,zeratul,djkxbwf,john77,sigma2,1linda,selur,reppep,quartz1,teen1,freeclus,spook1,kudos4ever,clitring,sexiness,blumpkin,macbook,tileman,centra,escaflowne,pentable,shant,grappa,zverev,1albert,lommerse,coffee11,777123,polkilo,muppet1,alex74,lkjhgfdsazx,olesica,april14,ba25547,souths,jasmi,arashi,smile2,2401pedro,mybabe,alex111,quintain,pimp1,tdeir8b2,makenna,122333444455555,%e2%82%ac,tootsie1,pass111,zaqxsw123,gkfdfybt,cnfnbcnbrf,usermane,iloveyou12,hard69,osasuna,firegod,arvind,babochka,kiss123,cookie123,julie123,kamakazi,dylan2,223355,tanguy,nbhtqa,tigger13,tubby1,makavel,asdflkj,sambo1,mononoke,mickeys,gayguy,win123,green33,wcrfxtvgbjy,bigsmall,1newlife,clove,babyfac,bigwaves,mama1970,shockwav,1friday,bassey,yarddog,codered1,victory7,bigrick,kracker,gulfstre,chris200,sunbanna,bertuzzi,begemotik,kuolema,pondus,destinee,123456789zz,abiodun,flopsy,amadeusptfcor,geronim,yggdrasi,contex,daniel6,suck1,adonis1,moorea,el345612,f22raptor,moviebuf,raunchy,6043dkf,zxcvbnm123456789,eric11,deadmoin,ratiug,nosliw,fannies,danno,888889,blank1,mikey2,gullit,thor99,mamiya,ollieb,thoth,dagger1,websolutionssu,bonker,prive,1346798520,03038,q1234q,mommy2,contax,zhipo,gwendoli,gothic1,1234562000,lovedick,gibso,digital2,space199,b26354,987654123,golive,serious1,pivkoo,better1,824358553,794613258,nata1980,logout,fishpond,buttss,squidly,good4me,redsox19,jhonny,zse45rdx,matrixxx,honey12,ramina,213546879,motzart,fall99,newspape,killit,gimpy,photowiz,olesja,thebus,marco123,147852963,bedbug,147369258,hellbound,gjgjxrf,123987456,lovehurt,five55,hammer01,1234554321a,alina2011,peppino,ang238,questor,112358132,alina1994,alina1998,money77,bobjones,aigerim,cressida,madalena,420smoke,tinchair,raven13,mooser,mauric,lovebu,adidas69,krypton1,1111112,loveline,divin,voshod,michaelm,cocotte,gbkbuhbv,76689295,kellyj,rhonda1,sweetu70,steamforums,geeque,nothere,124c41,quixotic,steam181,1169900,rfcgthcrbq,rfvbkm,sexstuff,1231230,djctvm,rockstar1,fulhamfc,bhecbr,rfntyf,quiksilv,56836803,jedimaster,pangit,gfhjkm777,tocool,1237654,stella12,55378008,19216811,potte,fender12,mortalkombat,ball1,nudegirl,palace22,rattrap,debeers,lickpussy,jimmy6,not4u2c,wert12,bigjuggs,sadomaso,1357924,312mas,laser123,arminia,branford,coastie,mrmojo,19801982,scott11,banaan123,ingres,300zxtt,hooters6,sweeties,19821983,19831985,19833891,sinnfein,welcome4,winner69,killerman,tachyon,tigre1,nymets1,kangol,martinet,sooty1,19921993,789qwe,harsingh,1597535,thecount,phantom3,36985214,lukas123,117711,pakistan1,madmax11,willow01,19932916,fucker12,flhrci,opelagila,theword,ashley24,tigger3,crazyj,rapide,deadfish,allana,31359092,sasha1993,sanders2,discman,zaq!2wsx,boilerma,mickey69,jamesg,babybo,jackson9,orion7,alina2010,indien,breeze1,atease,warspite,bazongaz,1celtic,asguard,mygal,fitzgera,1secret,duke33,cyklone,dipascuc,potapov,1escobar2,c0l0rad0,kki177hk,1little,macondo,victoriya,peter7,red666,winston6,kl?benhavn,muneca,jackme,jennan,happylife,am4h39d8nh,bodybuil,201980,dutchie,biggame,lapo4ka,rauchen,black10,flaquit,water12,31021364,command2,lainth88,mazdamx5,typhon,colin123,rcfhlfc,qwaszx11,g0away,ramir,diesirae,hacked1,cessna1,woodfish,enigma2,pqnr67w5,odgez8j3,grisou,hiheels,5gtgiaxm,2580258,ohotnik,transits,quackers,serjik,makenzie,mdmgatew,bryana,superman12,melly,lokit,thegod,slickone,fun4all,netpass,penhorse,1cooper,nsync,asdasd22,otherside,honeydog,herbie1,chiphi,proghouse,l0nd0n,shagg,select1,frost1996,casper123,countr,magichat,greatzyo,jyothi,3bears,thefly,nikkita,fgjcnjk,nitros,hornys,san123,lightspe,maslova,kimber1,newyork2,spammm,mikejone,pumpk1n,bruiser1,bacons,prelude9,boodie,dragon4,kenneth2,love98,power5,yodude,pumba,thinline,blue30,sexxybj,2dumb2live,matt21,forsale,1carolin,innova,ilikeporn,rbgtkjd,a1s2d3f,wu9942,ruffus,blackboo,qwerty999,draco1,marcelin,hideki,gendalf,trevon,saraha,cartmen,yjhbkmcr,time2go,fanclub,ladder1,chinni,6942987,united99,lindac,quadra,paolit,mainstre,beano002,lincoln7,bellend,anomie,8520456,bangalor,goodstuff,chernov,stepashka,gulla,mike007,frasse,harley03,omnislash,8538622,maryjan,sasha2011,gineok,8807031,hornier,gopinath,princesit,bdr529,godown,bosslady,hakaone,1qwe2,madman1,joshua11,lovegame,bayamon,jedi01,stupid12,sport123,aaa666,tony44,collect1,charliem,chimaira,cx18ka,trrim777,chuckd,thedream,redsox99,goodmorning,delta88,iloveyou11,newlife2,figvam,chicago3,jasonk,12qwer,9875321,lestat1,satcom,conditio,capri50,sayaka,9933162,trunks1,chinga,snooch,alexand1,findus,poekie,cfdbyf,kevind,mike1969,fire13,leftie,bigtuna,chinnu,silence1,celos1,blackdra,alex24,gfgfif,2boobs,happy8,enolagay,sataniv1993,turner1,dylans,peugeo,sasha1994,hoppel,conno,moonshot,santa234,meister1,008800,hanako,tree123,qweras,gfitymrf,reggie31,august29,supert,joshua10,akademia,gbljhfc,zorro123,nathalia,redsox12,hfpdjl,mishmash,nokiae51,nyyankees,tu190022,strongbo,none1,not4u2no,katie2,popart,harlequi,santan,michal1,1therock,screwu,csyekmrf,olemiss1,tyrese,hoople,sunshin1,cucina,starbase,topshelf,fostex,california1,castle1,symantec,pippolo,babare,turntabl,1angela,moo123,ipvteb,gogolf,alex88,cycle1,maxie1,phase2,selhurst,furnitur,samfox,fromvermine,shaq34,gators96,captain2,delonge,tomatoe,bisous,zxcvbnma,glacius,pineapple1,cannelle,ganibal,mko09ijn,paraklast1974,hobbes12,petty43,artema,junior8,mylover,1234567890d,fatal1ty,prostreet,peruan,10020,nadya,caution1,marocas,chanel5,summer08,metal123,111lox,scrapy,thatguy,eddie666,washingto,yannis,minnesota_hp,lucky4,playboy6,naumova,azzurro,patat,dale33,pa55wd,speedster,zemanova,saraht,newto,tony22,qscesz,arkady,1oliver,death6,vkfwx046,antiflag,stangs,jzf7qf2e,brianp,fozzy,cody123,startrek1,yoda123,murciela,trabajo,lvbnhbtdf,canario,fliper,adroit,henry5,goducks,papirus,alskdj,soccer6,88mike,gogetter,tanelorn,donking,marky1,leedsu,badmofo,al1916,wetdog,akmaral,pallet,april24,killer00,nesterova,rugby123,coffee12,browseui,ralliart,paigow,calgary1,armyman,vtldtltd,frodo2,frxtgb,iambigal,benno,jaytee,2hot4you,askar,bigtee,brentwoo,palladin,eddie2,al1916w,horosho,entrada,ilovetits,venture1,dragon19,jayde,chuvak,jamesl,fzr600,brandon8,vjqvbh,snowbal,snatch1,bg6njokf,pudder,karolin,candoo,pfuflrf,satchel1,manteca,khongbiet,critter1,partridg,skyclad,bigdon,ginger69,brave1,anthony4,spinnake,chinadol,passout,cochino,nipples1,15058,lopesk,sixflags,lloo999,parkhead,breakdance,cia123,fidodido,yuitre12,fooey,artem1995,gayathri,medin,nondriversig,l12345,bravo7,happy13,kazuya,camster,alex1998,luckyy,zipcode,dizzle,boating1,opusone,newpassw,movies23,kamikazi,zapato,bart316,cowboys0,corsair1,kingshit,hotdog12,rolyat,h200svrm,qwerty4,boofer,rhtyltkm,chris999,vaz21074,simferopol,pitboss,love3,britania,tanyshka,brause,123qwerty123,abeille,moscow1,ilkaev,manut,process1,inetcfg,dragon05,fortknox,castill,rynner,mrmike,koalas,jeebus,stockpor,longman,juanpabl,caiman,roleplay,jeremi,26058,prodojo,002200,magical1,black5,bvlgari,doogie1,cbhtqa,mahina,a1s2d3f4g5h6,jblpro,usmc01,bismilah,guitar01,april9,santana1,1234aa,monkey14,sorokin,evan1,doohan,animalsex,pfqxtyjr,dimitry,catchme,chello,silverch,glock45,dogleg,litespee,nirvana9,peyton18,alydar,warhamer,iluvme,sig229,minotavr,lobzik,jack23,bushwack,onlin,football123,joshua5,federov,winter2,bigmax,fufnfrhbcnb,hfpldfnhb,1dakota,f56307,chipmonk,4nick8,praline,vbhjh123,king11,22tango,gemini12,street1,77879,doodlebu,homyak,165432,chuluthu,trixi,karlito,salom,reisen,cdtnkzxjr,pookie11,tremendo,shazaam,welcome0,00000ty,peewee51,pizzle,gilead,bydand,sarvar,upskirt,legends1,freeway1,teenfuck,ranger9,darkfire,dfymrf,hunt0802,justme1,buffy1ma,1harry,671fsa75yt,burrfoot,budster,pa437tu,jimmyp,alina2006,malacon,charlize,elway1,free12,summer02,gadina,manara,gomer1,1cassie,sanja,kisulya,money3,pujols,ford50,midiland,turga,orange6,demetriu,freakboy,orosie1,radio123,open12,vfufpby,mustek,chris33,animes,meiling,nthtvjr,jasmine9,gfdkjd,oligarh,marimar,chicago9,.kzirf,bugssgub,samuraix,jackie01,pimpjuic,macdad,cagiva,vernost,willyboy,fynjyjdf,tabby1,privet123,torres9,retype,blueroom,raven11,q12we3,alex1989,bringiton,ridered,kareltje,ow8jtcs8t,ciccia,goniners,countryb,24688642,covingto,24861793,beyblade,vikin,badboyz,wlafiga,walstib,mirand,needajob,chloes,balaton,kbpfdtnf,freyja,bond9007,gabriel12,stormbri,hollage,love4eve,fenomeno,darknite,dragstar,kyle123,milfhunter,ma123123123,samia,ghislain,enrique1,ferien12,xjy6721,natalie2,reglisse,wilson2,wesker,rosebud7,amazon1,robertr,roykeane,xtcnth,mamatata,crazyc,mikie,savanah,blowjob69,jackie2,forty1,1coffee,fhbyjxrf,bubbah,goteam,hackedit,risky1,logoff,h397pnvr,buck13,robert23,bronc,st123st,godflesh,pornog,iamking,cisco69,septiembr,dale38,zhongguo,tibbar,panther9,buffa1,bigjohn1,mypuppy,vehvfycr,april16,shippo,fire1234,green15,q123123,gungadin,steveg,olivier1,chinaski,magnoli,faithy,storm12,toadfrog,paul99,78791,august20,automati,squirtle,cheezy,positano,burbon,nunya,llebpmac,kimmi,turtle2,alan123,prokuror,violin1,durex,pussygal,visionar,trick1,chicken6,29024,plowboy,rfybreks,imbue,sasha13,wagner1,vitalogy,cfymrf,thepro,26028,gorbunov,dvdcom,letmein5,duder,fastfun,pronin,libra1,conner1,harley20,stinker1,20068,20038,amitech,syoung,dugway,18068,welcome7,jimmypag,anastaci,kafka1,pfhfnecnhf,catsss,campus100,shamal,nacho1,fire12,vikings2,brasil1,rangerover,mohamma,peresvet,14058,cocomo,aliona,14038,qwaser,vikes,cbkmdf,skyblue1,ou81234,goodlove,dfkmltvfh,108888,roamer,pinky2,static1,zxcv4321,barmen,rock22,shelby2,morgans,1junior,pasword1,logjam,fifty5,nhfrnjhbcn,chaddy,philli,nemesis2,ingenier,djkrjd,ranger3,aikman8,knothead,daddy69,love007,vsythb,ford350,tiger00,renrut,owen11,energy12,march14,alena123,robert19,carisma,orange22,murphy11,podarok,prozak,kfgeirf,wolf13,lydia1,shazza,parasha,akimov,tobbie,pilote,heather4,baster,leones,gznfxjr,megama,987654321g,bullgod,boxster1,minkey,wombats,vergil,colegiata,lincol,smoothe,pride1,carwash1,latrell,bowling3,fylhtq123,pickwick,eider,bubblebox,bunnies1,loquit,slipper1,nutsac,purina,xtutdfhf,plokiju,1qazxs,uhjpysq,zxcvbasdfg,enjoy1,1pumpkin,phantom7,mama22,swordsma,wonderbr,dogdays,milker,u23456,silvan,dfkthbr,slagelse,yeahman,twothree,boston11,wolf100,dannyg,troll1,fynjy123,ghbcnfd,bftest,ballsdeep,bobbyorr,alphasig,cccdemo,fire123,norwest,claire2,august10,lth1108,problemas,sapito,alex06,1rusty,maccom,goirish1,ohyes,bxdumb,nabila,boobear1,rabbit69,princip,alexsander,travail,chantal1,dogggy,greenpea,diablo69,alex2009,bergen09,petticoa,classe,ceilidh,vlad2011,kamakiri,lucidity,qaz321,chileno,cexfhf,99ranger,mcitra,estoppel,volvos60,carter80,webpass,temp12,touareg,fcgbhby,bubba8,sunitha,200190ru,bitch2,shadow23,iluvit,nicole0,ruben1,nikki69,butttt,shocker1,souschef,lopotok01,kantot,corsano,cfnfyf,riverat,makalu,swapna,all4u9,cdtnkfy,ntktgepbr,ronaldo99,thomasj,bmw540i,chrisw,boomba,open321,z1x2c3v4b5n6m7,gaviota,iceman44,frosya,chris100,chris24,cosette,clearwat,micael,boogyman,pussy9,camus1,chumpy,heccrbq,konoplya,chester8,scooter5,ghjgfufylf,giotto,koolkat,zero000,bonita1,ckflrbq,j1964,mandog,18n28n24a,renob,head1,shergar,ringo123,tanita,sex4free,johnny12,halberd,reddevils,biolog,dillinge,fatb0y,c00per,hyperlit,wallace2,spears1,vitamine,buheirf,sloboda,alkash,mooman,marion1,arsenal7,sunder,nokia5610,edifier,pippone,fyfnjkmtdbx,fujimo,pepsi12,kulikova,bolat,duetto,daimon,maddog01,timoshka,ezmoney,desdemon,chesters,aiden,hugues,patrick5,aikman08,robert4,roenick,nyranger,writer1,36169544,foxmulder,118801,kutter,shashank,jamjar,118811,119955,aspirina,dinkus,1sailor,nalgene,19891959,snarf,allie1,cracky,resipsa,45678912,kemerovo,19841989,netware1,alhimik,19801984,nicole123,19761977,51501984,malaka1,montella,peachfuz,jethro1,cypress1,henkie,holdon,esmith,55443322,1friend,quique,bandicoot,statistika,great123,death13,ucht36,master4,67899876,bobsmith,nikko1,jr1234,hillary1,78978978,rsturbo,lzlzdfcz,bloodlust,shadow00,skagen,bambina,yummies,88887777,91328378,matthew4,itdoes,98256518,102938475,alina2002,123123789,fubared,dannys,123456321,nikifor,suck69,newmexico,scubaman,rhbcnb,fifnfy,puffdadd,159357852,dtheyxbr,theman22,212009164,prohor,shirle,nji90okm,newmedia,goose5,roma1995,letssee,iceman11,aksana,wirenut,pimpdady,1212312121,tamplier,pelican1,domodedovo,1928374655,fiction6,duckpond,ybrecz,thwack,onetwo34,gunsmith,murphydo,fallout1,spectre1,jabberwo,jgjesq,turbo6,bobo12,redryder,blackpus,elena1971,danilova,antoin,bobo1234,bobob,bobbobbo,dean1,222222a,jesusgod,matt23,musical1,darkmage,loppol,werrew,josepha,rebel12,toshka,gadfly,hawkwood,alina12,dnomyar,sexaddict,dangit,cool23,yocrack,archimed,farouk,nhfkzkz,lindalou,111zzzzz,ghjatccjh,wethepeople,m123456789,wowsers,kbkbxrf,bulldog5,m_roesel,sissinit,yamoon6,123ewqasd,dangel,miruvor79,kaytee,falcon7,bandit11,dotnet,dannii,arsenal9,miatamx5,1trouble,strip4me,dogpile,sexyred1,rjdfktdf,google10,shortman,crystal7,awesome123,cowdog,haruka,birthday28,jitter,diabolik,boomer12,dknight,bluewate,hockey123,crm0624,blueboys,willy123,jumpup,google2,cobra777,llabesab,vicelord,hopper1,gerryber,remmah,j10e5d4,qqqqqqw,agusti,fre_ak8yj,nahlik,redrobin,scott3,epson1,dumpy,bundao,aniolek,hola123,jergens,itsasecret,maxsam,bluelight,mountai1,bongwater,1london,pepper14,freeuse,dereks,qweqw,fordgt40,rfhfdfy,raider12,hunnybun,compac,splicer,megamon,tuffgong,gymnast1,butter11,modaddy,wapbbs_1,dandelio,soccer77,ghjnbdjcnjzybt,123xyi2,fishead,x002tp00,whodaman,555aaa,oussama,brunodog,technici,pmtgjnbl,qcxdw8ry,schweden,redsox3,throbber,collecto,japan10,dbm123dm,hellhoun,tech1,deadzone,kahlan,wolf123,dethklok,xzsawq,bigguy1,cybrthc,chandle,buck01,qq123123,secreta,williams1,c32649135,delta12,flash33,123joker,spacejam,polopo,holycrap,daman1,tummybed,financia,nusrat,euroline,magicone,jimkirk,ameritec,daniel26,sevenn,topazz,kingpins,dima1991,macdog,spencer5,oi812,geoffre,music11,baffle,123569,usagi,cassiope,polla,lilcrowe,thecakeisalie,vbhjndjhtw,vthokies,oldmans,sophie01,ghoster,penny2,129834,locutus1,meesha,magik,jerry69,daddysgirl,irondesk,andrey12,jasmine123,vepsrfyn,likesdick,1accord,jetboat,grafix,tomuch,showit,protozoa,mosias98,taburetka,blaze420,esenin,anal69,zhv84kv,puissant,charles0,aishwarya,babylon6,bitter1,lenina,raleigh1,lechat,access01,kamilka,fynjy,sparkplu,daisy3112,choppe,zootsuit,1234567j,rubyrose,gorilla9,nightshade,alternativa,cghfdjxybr,snuggles1,10121v,vova1992,leonardo1,dave2,matthewd,vfhfnbr,1986mets,nobull,bacall,mexican1,juanjo,mafia1,boomer22,soylent,edwards1,jordan10,blackwid,alex86,gemini13,lunar2,dctvcjcfnm,malaki,plugger,eagles11,snafu2,1shelly,cintaku,hannah22,tbird1,maks5843,irish88,homer22,amarok,fktrcfylhjdf,lincoln2,acess,gre69kik,need4speed,hightech,core2duo,blunt1,ublhjgjybrf,dragon33,1autopas,autopas1,wwww1,15935746,daniel20,2500aa,massim,1ggggggg,96ford,hardcor1,cobra5,blackdragon,vovan_lt,orochimaru,hjlbntkb,qwertyuiop12,tallen,paradoks,frozenfish,ghjuhfvvbcn,gerri1,nuggett,camilit,doright,trans1,serena1,catch2,bkmyeh,fireston,afhvfwtdn,purple3,figure8,fuckya,scamp1,laranja,ontheoutside,louis123,yellow7,moonwalk,mercury2,tolkein,raide,amenra,a13579,dranreb,5150vh,harish,tracksta,sexking,ozzmosis,katiee,alomar,matrix19,headroom,jahlove,ringding,apollo8,132546,132613,12345672000,saretta,135798,136666,thomas7,136913,onetwothree,hockey33,calida,nefertit,bitwise,tailhook,boop4,kfgecbr,bujhmbujhm,metal69,thedark,meteoro,felicia1,house12,tinuviel,istina,vaz2105,pimp13,toolfan,nina1,tuesday2,maxmotives,lgkp500,locksley,treech,darling1,kurama,aminka,ramin,redhed,dazzler,jager1,stpiliot,cardman,rfvtym,cheeser,14314314,paramoun,samcat,plumpy,stiffie,vsajyjr,panatha,qqq777,car12345,098poi,asdzx,keegan1,furelise,kalifornia,vbhjckfd,beast123,zcfvfzkexifz,harry5,1birdie,96328i,escola,extra330,henry12,gfhfyjqz,14u2nv,max1234,templar1,1dave,02588520,catrin,pangolin,marhaba,latin1,amorcito,dave22,escape1,advance1,yasuhiro,grepw,meetme,orange01,ernes,erdna,zsergn,nautica1,justinb,soundwav,miasma,greg78,nadine1,sexmad,lovebaby,promo1,excel1,babys,dragonma,camry1,sonnenschein,farooq,wazzkaprivet,magal,katinas,elvis99,redsox24,rooney1,chiefy,peggys,aliev,pilsung,mudhen,dontdoit,dennis12,supercal,energia,ballsout,funone,claudiu,brown2,amoco,dabl1125,philos,gjdtkbntkm,servette,13571113,whizzer,nollie,13467982,upiter,12string,bluejay1,silkie,william4,kosta1,143333,connor12,sustanon,06068,corporat,ssnake,laurita,king10,tahoes,arsenal123,sapato,charless,jeanmarc,levent,algerie,marine21,jettas,winsome,dctvgbplf,1701ab,xxxp455w0rd5,lllllll1,ooooooo1,monalis,koufax32,anastasya,debugger,sarita2,jason69,ufkxjyjr,gjlcnfdf,1jerry,daniel10,balinor,sexkitten,death2,qwertasdfgzxcvb,s9te949f,vegeta1,sysman,maxxam,dimabilan,mooose,ilovetit,june23,illest,doesit,mamou,abby12,longjump,transalp,moderato,littleguy,magritte,dilnoza,hawaiiguy,winbig,nemiroff,kokaine,admira,myemail,dream2,browneyes,destiny7,dragonss,suckme1,asa123,andranik,suckem,fleshbot,dandie,timmys,scitra,timdog,hasbeen,guesss,smellyfe,arachne,deutschl,harley88,birthday27,nobody1,papasmur,home1,jonass,bunia3,epatb1,embalm,vfvekmrf,apacer,12345656,estreet,weihnachtsbaum,mrwhite,admin12,kristie1,kelebek,yoda69,socken,tima123,bayern1,fktrcfylth,tamiya,99strenght,andy01,denis2011,19delta,stokecit,aotearoa,stalker2,nicnac,conrad1,popey,agusta,bowl36,1bigfish,mossyoak,1stunner,getinnow,jessejames,gkfnjy,drako,1nissan,egor123,hotness,1hawaii,zxc123456,cantstop,1peaches,madlen,west1234,jeter1,markis,judit,attack1,artemi,silver69,153246,crazy2,green9,yoshimi,1vette,chief123,jasper2,1sierra,twentyon,drstrang,aspirant,yannic,jenna123,bongtoke,slurpy,1sugar,civic97,rusty21,shineon,james19,anna12345,wonderwoman,1kevin,karol1,kanabis,wert21,fktif6115,evil1,kakaha,54gv768,826248s,tyrone1,1winston,sugar2,falcon01,adelya,mopar440,zasxcd,leecher,kinkysex,mercede1,travka,11234567,rebon,geekboy\".split(\",\"),\n  english_wikipedia: \"the,of,and,in,was,is,for,as,on,with,by,he,at,from,his,an,were,are,which,doc,https,also,or,has,had,first,one,their,its,after,new,who,they,two,her,she,been,other,when,time,during,there,into,school,more,may,years,over,only,year,most,would,world,city,some,where,between,later,three,state,such,then,national,used,made,known,under,many,university,united,while,part,season,team,these,american,than,film,second,born,south,became,states,war,through,being,including,both,before,north,high,however,people,family,early,history,album,area,them,series,against,until,since,district,county,name,work,life,group,music,following,number,company,several,four,called,played,released,career,league,game,government,house,each,based,day,same,won,use,station,club,international,town,located,population,general,college,east,found,age,march,end,september,began,home,public,church,line,june,river,member,system,place,century,band,july,york,january,october,song,august,best,former,british,party,named,held,village,show,local,november,took,service,december,built,another,major,within,along,members,five,single,due,although,small,old,left,final,large,include,building,served,president,received,games,death,february,main,third,set,children,own,order,species,park,law,air,published,road,died,book,men,women,army,often,according,education,central,country,division,english,top,included,development,french,community,among,water,play,side,list,times,near,late,form,original,different,center,power,led,students,german,moved,court,six,land,council,island,u.s.,record,million,research,art,established,award,street,military,television,given,region,support,western,production,non,political,point,cup,period,business,title,started,various,election,using,england,role,produced,become,program,works,field,total,office,class,written,association,radio,union,level,championship,director,few,force,created,department,founded,services,married,though,per,n't,site,open,act,short,society,version,royal,present,northern,worked,professional,full,returned,joined,story,france,european,currently,language,social,california,india,days,design,st.,further,round,australia,wrote,san,project,control,southern,railway,board,popular,continued,free,battle,considered,video,common,position,living,half,playing,recorded,red,post,described,average,records,special,modern,appeared,announced,areas,rock,release,elected,others,example,term,opened,similar,formed,route,census,current,schools,originally,lake,developed,race,himself,forces,addition,information,upon,province,match,event,songs,result,events,win,eastern,track,lead,teams,science,human,construction,minister,germany,awards,available,throughout,training,style,body,museum,australian,health,seven,signed,chief,eventually,appointed,sea,centre,debut,tour,points,media,light,range,character,across,features,families,largest,indian,network,less,performance,players,refer,europe,sold,festival,usually,taken,despite,designed,committee,process,return,official,episode,institute,stage,followed,performed,japanese,personal,thus,arts,space,low,months,includes,china,study,middle,magazine,leading,japan,groups,aircraft,featured,federal,civil,rights,model,coach,canadian,books,remained,eight,type,independent,completed,capital,academy,instead,kingdom,organization,countries,studies,competition,sports,size,above,section,finished,gold,involved,reported,management,systems,industry,directed,market,fourth,movement,technology,bank,ground,campaign,base,lower,sent,rather,added,provided,coast,grand,historic,valley,conference,bridge,winning,approximately,films,chinese,awarded,degree,russian,shows,native,female,replaced,municipality,square,studio,medical,data,african,successful,mid,bay,attack,previous,operations,spanish,theatre,student,republic,beginning,provide,ship,primary,owned,writing,tournament,culture,introduced,texas,related,natural,parts,governor,reached,ireland,units,senior,decided,italian,whose,higher,africa,standard,income,professor,placed,regional,los,buildings,championships,active,novel,energy,generally,interest,via,economic,previously,stated,itself,channel,below,operation,leader,traditional,trade,structure,limited,runs,prior,regular,famous,saint,navy,foreign,listed,artist,catholic,airport,results,parliament,collection,unit,officer,goal,attended,command,staff,commission,lived,location,plays,commercial,places,foundation,significant,older,medal,self,scored,companies,highway,activities,programs,wide,musical,notable,library,numerous,paris,towards,individual,allowed,plant,property,annual,contract,whom,highest,initially,required,earlier,assembly,artists,rural,seat,practice,defeated,ended,soviet,length,spent,manager,press,associated,author,issues,additional,characters,lord,zealand,policy,engine,township,noted,historical,complete,financial,religious,mission,contains,nine,recent,represented,pennsylvania,administration,opening,secretary,lines,report,executive,youth,closed,theory,writer,italy,angeles,appearance,feature,queen,launched,legal,terms,entered,issue,edition,singer,greek,majority,background,source,anti,cultural,complex,changes,recording,stadium,islands,operated,particularly,basketball,month,uses,port,castle,mostly,names,fort,selected,increased,status,earth,subsequently,pacific,cover,variety,certain,goals,remains,upper,congress,becoming,studied,irish,nature,particular,loss,caused,chart,dr.,forced,create,era,retired,material,review,rate,singles,referred,larger,individuals,shown,provides,products,speed,democratic,poland,parish,olympics,cities,themselves,temple,wing,genus,households,serving,cost,wales,stations,passed,supported,view,cases,forms,actor,male,matches,males,stars,tracks,females,administrative,median,effect,biography,train,engineering,camp,offered,chairman,houses,mainly,19th,surface,therefore,nearly,score,ancient,subject,prime,seasons,claimed,experience,specific,jewish,failed,overall,believed,plot,troops,greater,spain,consists,broadcast,heavy,increase,raised,separate,campus,1980s,appears,presented,lies,composed,recently,influence,fifth,nations,creek,references,elections,britain,double,cast,meaning,earned,carried,producer,latter,housing,brothers,attempt,article,response,border,remaining,nearby,direct,ships,value,workers,politician,academic,label,1970s,commander,rule,fellow,residents,authority,editor,transport,dutch,projects,responsible,covered,territory,flight,races,defense,tower,emperor,albums,facilities,daily,stories,assistant,managed,primarily,quality,function,proposed,distribution,conditions,prize,journal,code,vice,newspaper,corps,highly,constructed,mayor,critical,secondary,corporation,rugby,regiment,ohio,appearances,serve,allow,nation,multiple,discovered,directly,scene,levels,growth,elements,acquired,1990s,officers,physical,20th,latin,host,jersey,graduated,arrived,issued,literature,metal,estate,vote,immediately,quickly,asian,competed,extended,produce,urban,1960s,promoted,contemporary,global,formerly,appear,industrial,types,opera,ministry,soldiers,commonly,mass,formation,smaller,typically,drama,shortly,density,senate,effects,iran,polish,prominent,naval,settlement,divided,basis,republican,languages,distance,treatment,continue,product,mile,sources,footballer,format,clubs,leadership,initial,offers,operating,avenue,officially,columbia,grade,squadron,fleet,percent,farm,leaders,agreement,likely,equipment,website,mount,grew,method,transferred,intended,renamed,iron,asia,reserve,capacity,politics,widely,activity,advanced,relations,scottish,dedicated,crew,founder,episodes,lack,amount,build,efforts,concept,follows,ordered,leaves,positive,economy,entertainment,affairs,memorial,ability,illinois,communities,color,text,railroad,scientific,focus,comedy,serves,exchange,environment,cars,direction,organized,firm,description,agency,analysis,purpose,destroyed,reception,planned,revealed,infantry,architecture,growing,featuring,household,candidate,removed,situated,models,knowledge,solo,technical,organizations,assigned,conducted,participated,largely,purchased,register,gained,combined,headquarters,adopted,potential,protection,scale,approach,spread,independence,mountains,titled,geography,applied,safety,mixed,accepted,continues,captured,rail,defeat,principal,recognized,lieutenant,mentioned,semi,owner,joint,liberal,actress,traffic,creation,basic,notes,unique,supreme,declared,simply,plants,sales,massachusetts,designated,parties,jazz,compared,becomes,resources,titles,concert,learning,remain,teaching,versions,content,alongside,revolution,sons,block,premier,impact,champions,districts,generation,estimated,volume,image,sites,account,roles,sport,quarter,providing,zone,yard,scoring,classes,presence,performances,representatives,hosted,split,taught,origin,olympic,claims,critics,facility,occurred,suffered,municipal,damage,defined,resulted,respectively,expanded,platform,draft,opposition,expected,educational,ontario,climate,reports,atlantic,surrounding,performing,reduced,ranked,allows,birth,nominated,younger,newly,kong,positions,theater,philadelphia,heritage,finals,disease,sixth,laws,reviews,constitution,tradition,swedish,theme,fiction,rome,medicine,trains,resulting,existing,deputy,environmental,labour,classical,develop,fans,granted,receive,alternative,begins,nuclear,fame,buried,connected,identified,palace,falls,letters,combat,sciences,effort,villages,inspired,regions,towns,conservative,chosen,animals,labor,attacks,materials,yards,steel,representative,orchestra,peak,entitled,officials,returning,reference,northwest,imperial,convention,examples,ocean,publication,painting,subsequent,frequently,religion,brigade,fully,sides,acts,cemetery,relatively,oldest,suggested,succeeded,achieved,application,programme,cells,votes,promotion,graduate,armed,supply,flying,communist,figures,literary,netherlands,korea,worldwide,citizens,1950s,faculty,draw,stock,seats,occupied,methods,unknown,articles,claim,holds,authorities,audience,sweden,interview,obtained,covers,settled,transfer,marked,allowing,funding,challenge,southeast,unlike,crown,rise,portion,transportation,sector,phase,properties,edge,tropical,standards,institutions,philosophy,legislative,hills,brand,fund,conflict,unable,founding,refused,attempts,metres,permanent,starring,applications,creating,effective,aired,extensive,employed,enemy,expansion,billboard,rank,battalion,multi,vehicle,fought,alliance,category,perform,federation,poetry,bronze,bands,entry,vehicles,bureau,maximum,billion,trees,intelligence,greatest,screen,refers,commissioned,gallery,injury,confirmed,setting,treaty,adult,americans,broadcasting,supporting,pilot,mobile,writers,programming,existence,squad,minnesota,copies,korean,provincial,sets,defence,offices,agricultural,internal,core,northeast,retirement,factory,actions,prevent,communications,ending,weekly,containing,functions,attempted,interior,weight,bowl,recognition,incorporated,increasing,ultimately,documentary,derived,attacked,lyrics,mexican,external,churches,centuries,metropolitan,selling,opposed,personnel,mill,visited,presidential,roads,pieces,norwegian,controlled,18th,rear,influenced,wrestling,weapons,launch,composer,locations,developing,circuit,specifically,studios,shared,canal,wisconsin,publishing,approved,domestic,consisted,determined,comic,establishment,exhibition,southwest,fuel,electronic,cape,converted,educated,melbourne,hits,wins,producing,norway,slightly,occur,surname,identity,represent,constituency,funds,proved,links,structures,athletic,birds,contest,users,poet,institution,display,receiving,rare,contained,guns,motion,piano,temperature,publications,passenger,contributed,toward,cathedral,inhabitants,architect,exist,athletics,muslim,courses,abandoned,signal,successfully,disambiguation,tennessee,dynasty,heavily,maryland,jews,representing,budget,weather,missouri,introduction,faced,pair,chapel,reform,height,vietnam,occurs,motor,cambridge,lands,focused,sought,patients,shape,invasion,chemical,importance,communication,selection,regarding,homes,voivodeship,maintained,borough,failure,aged,passing,agriculture,oregon,teachers,flow,philippines,trail,seventh,portuguese,resistance,reaching,negative,fashion,scheduled,downtown,universities,trained,skills,scenes,views,notably,typical,incident,candidates,engines,decades,composition,commune,chain,inc.,austria,sale,values,employees,chamber,regarded,winners,registered,task,investment,colonial,swiss,user,entirely,flag,stores,closely,entrance,laid,journalist,coal,equal,causes,turkish,quebec,techniques,promote,junction,easily,dates,kentucky,singapore,residence,violence,advance,survey,humans,expressed,passes,streets,distinguished,qualified,folk,establish,egypt,artillery,visual,improved,actual,finishing,medium,protein,switzerland,productions,operate,poverty,neighborhood,organisation,consisting,consecutive,sections,partnership,extension,reaction,factor,costs,bodies,device,ethnic,racial,flat,objects,chapter,improve,musicians,courts,controversy,membership,merged,wars,expedition,interests,arab,comics,gain,describes,mining,bachelor,crisis,joining,decade,1930s,distributed,habitat,routes,arena,cycle,divisions,briefly,vocals,directors,degrees,object,recordings,installed,adjacent,demand,voted,causing,businesses,ruled,grounds,starred,drawn,opposite,stands,formal,operates,persons,counties,compete,wave,israeli,ncaa,resigned,brief,greece,combination,demographics,historian,contain,commonwealth,musician,collected,argued,louisiana,session,cabinet,parliamentary,electoral,loan,profit,regularly,conservation,islamic,purchase,17th,charts,residential,earliest,designs,paintings,survived,moth,items,goods,grey,anniversary,criticism,images,discovery,observed,underground,progress,additionally,participate,thousands,reduce,elementary,owners,stating,iraq,resolution,capture,tank,rooms,hollywood,finance,queensland,reign,maintain,iowa,landing,broad,outstanding,circle,path,manufacturing,assistance,sequence,gmina,crossing,leads,universal,shaped,kings,attached,medieval,ages,metro,colony,affected,scholars,oklahoma,coastal,soundtrack,painted,attend,definition,meanwhile,purposes,trophy,require,marketing,popularity,cable,mathematics,mississippi,represents,scheme,appeal,distinct,factors,acid,subjects,roughly,terminal,economics,senator,diocese,prix,contrast,argentina,czech,wings,relief,stages,duties,16th,novels,accused,whilst,equivalent,charged,measure,documents,couples,request,danish,defensive,guide,devices,statistics,credited,tries,passengers,allied,frame,puerto,peninsula,concluded,instruments,wounded,differences,associate,forests,afterwards,replace,requirements,aviation,solution,offensive,ownership,inner,legislation,hungarian,contributions,actors,translated,denmark,steam,depending,aspects,assumed,injured,severe,admitted,determine,shore,technique,arrival,measures,translation,debuted,delivered,returns,rejected,separated,visitors,damaged,storage,accompanied,markets,industries,losses,gulf,charter,strategy,corporate,socialist,somewhat,significantly,physics,mounted,satellite,experienced,constant,relative,pattern,restored,belgium,connecticut,partners,harvard,retained,networks,protected,mode,artistic,parallel,collaboration,debate,involving,journey,linked,salt,authors,components,context,occupation,requires,occasionally,policies,tamil,ottoman,revolutionary,hungary,poem,versus,gardens,amongst,audio,makeup,frequency,meters,orthodox,continuing,suggests,legislature,coalition,guitarist,eighth,classification,practices,soil,tokyo,instance,limit,coverage,considerable,ranking,colleges,cavalry,centers,daughters,twin,equipped,broadway,narrow,hosts,rates,domain,boundary,arranged,12th,whereas,brazilian,forming,rating,strategic,competitions,trading,covering,baltimore,commissioner,infrastructure,origins,replacement,praised,disc,collections,expression,ukraine,driven,edited,austrian,solar,ensure,premiered,successor,wooden,operational,hispanic,concerns,rapid,prisoners,childhood,meets,influential,tunnel,employment,tribe,qualifying,adapted,temporary,celebrated,appearing,increasingly,depression,adults,cinema,entering,laboratory,script,flows,romania,accounts,fictional,pittsburgh,achieve,monastery,franchise,formally,tools,newspapers,revival,sponsored,processes,vienna,springs,missions,classified,13th,annually,branches,lakes,gender,manner,advertising,normally,maintenance,adding,characteristics,integrated,decline,modified,strongly,critic,victims,malaysia,arkansas,nazi,restoration,powered,monument,hundreds,depth,15th,controversial,admiral,criticized,brick,honorary,initiative,output,visiting,birmingham,progressive,existed,carbon,1920s,credits,colour,rising,hence,defeating,superior,filmed,listing,column,surrounded,orleans,principles,territories,struck,participation,indonesia,movements,index,commerce,conduct,constitutional,spiritual,ambassador,vocal,completion,edinburgh,residing,tourism,finland,bears,medals,resident,themes,visible,indigenous,involvement,basin,electrical,ukrainian,concerts,boats,styles,processing,rival,drawing,vessels,experimental,declined,touring,supporters,compilation,coaching,cited,dated,roots,string,explained,transit,traditionally,poems,minimum,representation,14th,releases,effectively,architectural,triple,indicated,greatly,elevation,clinical,printed,10th,proposal,peaked,producers,romanized,rapidly,stream,innings,meetings,counter,householder,honour,lasted,agencies,document,exists,surviving,experiences,honors,landscape,hurricane,harbor,panel,competing,profile,vessel,farmers,lists,revenue,exception,customers,11th,participants,wildlife,utah,bible,gradually,preserved,replacing,symphony,begun,longest,siege,provinces,mechanical,genre,transmission,agents,executed,videos,benefits,funded,rated,instrumental,ninth,similarly,dominated,destruction,passage,technologies,thereafter,outer,facing,affiliated,opportunities,instrument,governments,scholar,evolution,channels,shares,sessions,widespread,occasions,engineers,scientists,signing,battery,competitive,alleged,eliminated,supplies,judges,hampshire,regime,portrayed,penalty,taiwan,denied,submarine,scholarship,substantial,transition,victorian,http,nevertheless,filed,supports,continental,tribes,ratio,doubles,useful,honours,blocks,principle,retail,departure,ranks,patrol,yorkshire,vancouver,inter,extent,afghanistan,strip,railways,component,organ,symbol,categories,encouraged,abroad,civilian,periods,traveled,writes,struggle,immediate,recommended,adaptation,egyptian,graduating,assault,drums,nomination,historically,voting,allies,detailed,achievement,percentage,arabic,assist,frequent,toured,apply,and/or,intersection,maine,touchdown,throne,produces,contribution,emerged,obtain,archbishop,seek,researchers,remainder,populations,clan,finnish,overseas,fifa,licensed,chemistry,festivals,mediterranean,injuries,animated,seeking,publisher,volumes,limits,venue,jerusalem,generated,trials,islam,youngest,ruling,glasgow,germans,songwriter,persian,municipalities,donated,viewed,belgian,cooperation,posted,tech,dual,volunteer,settlers,commanded,claiming,approval,delhi,usage,terminus,partly,electricity,locally,editions,premiere,absence,belief,traditions,statue,indicate,manor,stable,attributed,possession,managing,viewers,chile,overview,seed,regulations,essential,minority,cargo,segment,endemic,forum,deaths,monthly,playoffs,erected,practical,machines,suburb,relation,mrs.,descent,indoor,continuous,characterized,solutions,caribbean,rebuilt,serbian,summary,contested,psychology,pitch,attending,muhammad,tenure,drivers,diameter,assets,venture,punk,airlines,concentration,athletes,volunteers,pages,mines,influences,sculpture,protest,ferry,behalf,drafted,apparent,furthermore,ranging,romanian,democracy,lanka,significance,linear,d.c.,certified,voters,recovered,tours,demolished,boundaries,assisted,identify,grades,elsewhere,mechanism,1940s,reportedly,aimed,conversion,suspended,photography,departments,beijing,locomotives,publicly,dispute,magazines,resort,conventional,platforms,internationally,capita,settlements,dramatic,derby,establishing,involves,statistical,implementation,immigrants,exposed,diverse,layer,vast,ceased,connections,belonged,interstate,uefa,organised,abuse,deployed,cattle,partially,filming,mainstream,reduction,automatic,rarely,subsidiary,decides,merger,comprehensive,displayed,amendment,guinea,exclusively,manhattan,concerning,commons,radical,serbia,baptist,buses,initiated,portrait,harbour,choir,citizen,sole,unsuccessful,manufactured,enforcement,connecting,increases,patterns,sacred,muslims,clothing,hindu,unincorporated,sentenced,advisory,tanks,campaigns,fled,repeated,remote,rebellion,implemented,texts,fitted,tribute,writings,sufficient,ministers,21st,devoted,jurisdiction,coaches,interpretation,pole,businessman,peru,sporting,prices,cuba,relocated,opponent,arrangement,elite,manufacturer,responded,suitable,distinction,calendar,dominant,tourist,earning,prefecture,ties,preparation,anglo,pursue,worship,archaeological,chancellor,bangladesh,scores,traded,lowest,horror,outdoor,biology,commented,specialized,loop,arriving,farming,housed,historians,'the,patent,pupils,christianity,opponents,athens,northwestern,maps,promoting,reveals,flights,exclusive,lions,norfolk,hebrew,extensively,eldest,shops,acquisition,virtual,renowned,margin,ongoing,essentially,iranian,alternate,sailed,reporting,conclusion,originated,temperatures,exposure,secured,landed,rifle,framework,identical,martial,focuses,topics,ballet,fighters,belonging,wealthy,negotiations,evolved,bases,oriented,acres,democrat,heights,restricted,vary,graduation,aftermath,chess,illness,participating,vertical,collective,immigration,demonstrated,leaf,completing,organic,missile,leeds,eligible,grammar,confederate,improvement,congressional,wealth,cincinnati,spaces,indicates,corresponding,reaches,repair,isolated,taxes,congregation,ratings,leagues,diplomatic,submitted,winds,awareness,photographs,maritime,nigeria,accessible,animation,restaurants,philippine,inaugural,dismissed,armenian,illustrated,reservoir,speakers,programmes,resource,genetic,interviews,camps,regulation,computers,preferred,travelled,comparison,distinctive,recreation,requested,southeastern,dependent,brisbane,breeding,playoff,expand,bonus,gauge,departed,qualification,inspiration,shipping,slaves,variations,shield,theories,munich,recognised,emphasis,favour,variable,seeds,undergraduate,territorial,intellectual,qualify,mini,banned,pointed,democrats,assessment,judicial,examination,attempting,objective,partial,characteristic,hardware,pradesh,execution,ottawa,metre,drum,exhibitions,withdrew,attendance,phrase,journalism,logo,measured,error,christians,trio,protestant,theology,respective,atmosphere,buddhist,substitute,curriculum,fundamental,outbreak,rabbi,intermediate,designation,globe,liberation,simultaneously,diseases,experiments,locomotive,difficulties,mainland,nepal,relegated,contributing,database,developments,veteran,carries,ranges,instruction,lodge,protests,obama,newcastle,experiment,physician,describing,challenges,corruption,delaware,adventures,ensemble,succession,renaissance,tenth,altitude,receives,approached,crosses,syria,croatia,warsaw,professionals,improvements,worn,airline,compound,permitted,preservation,reducing,printing,scientist,activist,comprises,sized,societies,enters,ruler,gospel,earthquake,extend,autonomous,croatian,serial,decorated,relevant,ideal,grows,grass,tier,towers,wider,welfare,columns,alumni,descendants,interface,reserves,banking,colonies,manufacturers,magnetic,closure,pitched,vocalist,preserve,enrolled,cancelled,equation,2000s,nickname,bulgaria,heroes,exile,mathematical,demands,input,structural,tube,stem,approaches,argentine,axis,manuscript,inherited,depicted,targets,visits,veterans,regard,removal,efficiency,organisations,concepts,lebanon,manga,petersburg,rally,supplied,amounts,yale,tournaments,broadcasts,signals,pilots,azerbaijan,architects,enzyme,literacy,declaration,placing,batting,incumbent,bulgarian,consistent,poll,defended,landmark,southwestern,raid,resignation,travels,casualties,prestigious,namely,aims,recipient,warfare,readers,collapse,coached,controls,volleyball,coup,lesser,verse,pairs,exhibited,proteins,molecular,abilities,integration,consist,aspect,advocate,administered,governing,hospitals,commenced,coins,lords,variation,resumed,canton,artificial,elevated,palm,difficulty,civic,efficient,northeastern,inducted,radiation,affiliate,boards,stakes,byzantine,consumption,freight,interaction,oblast,numbered,seminary,contracts,extinct,predecessor,bearing,cultures,functional,neighboring,revised,cylinder,grants,narrative,reforms,athlete,tales,reflect,presidency,compositions,specialist,cricketer,founders,sequel,widow,disbanded,associations,backed,thereby,pitcher,commanding,boulevard,singers,crops,militia,reviewed,centres,waves,consequently,fortress,tributary,portions,bombing,excellence,nest,payment,mars,plaza,unity,victories,scotia,farms,nominations,variant,attacking,suspension,installation,graphics,estates,comments,acoustic,destination,venues,surrender,retreat,libraries,quarterback,customs,berkeley,collaborated,gathered,syndrome,dialogue,recruited,shanghai,neighbouring,psychological,saudi,moderate,exhibit,innovation,depot,binding,brunswick,situations,certificate,actively,shakespeare,editorial,presentation,ports,relay,nationalist,methodist,archives,experts,maintains,collegiate,bishops,maintaining,temporarily,embassy,essex,wellington,connects,reformed,bengal,recalled,inches,doctrine,deemed,legendary,reconstruction,statements,palestinian,meter,achievements,riders,interchange,spots,auto,accurate,chorus,dissolved,missionary,thai,operators,e.g.,generations,failing,delayed,cork,nashville,perceived,venezuela,cult,emerging,tomb,abolished,documented,gaining,canyon,episcopal,stored,assists,compiled,kerala,kilometers,mosque,grammy,theorem,unions,segments,glacier,arrives,theatrical,circulation,conferences,chapters,displays,circular,authored,conductor,fewer,dimensional,nationwide,liga,yugoslavia,peer,vietnamese,fellowship,armies,regardless,relating,dynamic,politicians,mixture,serie,somerset,imprisoned,posts,beliefs,beta,layout,independently,electronics,provisions,fastest,logic,headquartered,creates,challenged,beaten,appeals,plains,protocol,graphic,accommodate,iraqi,midfielder,span,commentary,freestyle,reflected,palestine,lighting,burial,virtually,backing,prague,tribal,heir,identification,prototype,criteria,dame,arch,tissue,footage,extending,procedures,predominantly,updated,rhythm,preliminary,cafe,disorder,prevented,suburbs,discontinued,retiring,oral,followers,extends,massacre,journalists,conquest,larvae,pronounced,behaviour,diversity,sustained,addressed,geographic,restrictions,voiced,milwaukee,dialect,quoted,grid,nationally,nearest,roster,twentieth,separation,indies,manages,citing,intervention,guidance,severely,migration,artwork,focusing,rivals,trustees,varied,enabled,committees,centered,skating,slavery,cardinals,forcing,tasks,auckland,youtube,argues,colored,advisor,mumbai,requiring,theological,registration,refugees,nineteenth,survivors,runners,colleagues,priests,contribute,variants,workshop,concentrated,creator,lectures,temples,exploration,requirement,interactive,navigation,companion,perth,allegedly,releasing,citizenship,observation,stationed,ph.d.,sheep,breed,discovers,encourage,kilometres,journals,performers,isle,saskatchewan,hybrid,hotels,lancashire,dubbed,airfield,anchor,suburban,theoretical,sussex,anglican,stockholm,permanently,upcoming,privately,receiver,optical,highways,congo,colours,aggregate,authorized,repeatedly,varies,fluid,innovative,transformed,praise,convoy,demanded,discography,attraction,export,audiences,ordained,enlisted,occasional,westminster,syrian,heavyweight,bosnia,consultant,eventual,improving,aires,wickets,epic,reactions,scandal,i.e.,discrimination,buenos,patron,investors,conjunction,testament,construct,encountered,celebrity,expanding,georgian,brands,retain,underwent,algorithm,foods,provision,orbit,transformation,associates,tactical,compact,varieties,stability,refuge,gathering,moreover,manila,configuration,gameplay,discipline,entity,comprising,composers,skill,monitoring,ruins,museums,sustainable,aerial,altered,codes,voyage,friedrich,conflicts,storyline,travelling,conducting,merit,indicating,referendum,currency,encounter,particles,automobile,workshops,acclaimed,inhabited,doctorate,cuban,phenomenon,dome,enrollment,tobacco,governance,trend,equally,manufacture,hydrogen,grande,compensation,download,pianist,grain,shifted,neutral,evaluation,define,cycling,seized,array,relatives,motors,firms,varying,automatically,restore,nicknamed,findings,governed,investigate,manitoba,administrator,vital,integral,indonesian,confusion,publishers,enable,geographical,inland,naming,civilians,reconnaissance,indianapolis,lecturer,deer,tourists,exterior,rhode,bassist,symbols,scope,ammunition,yuan,poets,punjab,nursing,cent,developers,estimates,presbyterian,nasa,holdings,generate,renewed,computing,cyprus,arabia,duration,compounds,gastropod,permit,valid,touchdowns,facade,interactions,mineral,practiced,allegations,consequence,goalkeeper,baronet,copyright,uprising,carved,targeted,competitors,mentions,sanctuary,fees,pursued,tampa,chronicle,capabilities,specified,specimens,toll,accounting,limestone,staged,upgraded,philosophical,streams,guild,revolt,rainfall,supporter,princeton,terrain,hometown,probability,assembled,paulo,surrey,voltage,developer,destroyer,floors,lineup,curve,prevention,potentially,onwards,trips,imposed,hosting,striking,strict,admission,apartments,solely,utility,proceeded,observations,euro,incidents,vinyl,profession,haven,distant,expelled,rivalry,runway,torpedo,zones,shrine,dimensions,investigations,lithuania,idaho,pursuit,copenhagen,considerably,locality,wireless,decrease,genes,thermal,deposits,hindi,habitats,withdrawn,biblical,monuments,casting,plateau,thesis,managers,flooding,assassination,acknowledged,interim,inscription,guided,pastor,finale,insects,transported,activists,marshal,intensity,airing,cardiff,proposals,lifestyle,prey,herald,capitol,aboriginal,measuring,lasting,interpreted,occurring,desired,drawings,healthcare,panels,elimination,oslo,ghana,blog,sabha,intent,superintendent,governors,bankruptcy,p.m.,equity,disk,layers,slovenia,prussia,quartet,mechanics,graduates,politically,monks,screenplay,nato,absorbed,topped,petition,bold,morocco,exhibits,canterbury,publish,rankings,crater,dominican,enhanced,planes,lutheran,governmental,joins,collecting,brussels,unified,streak,strategies,flagship,surfaces,oval,archive,etymology,imprisonment,instructor,noting,remix,opposing,servant,rotation,width,trans,maker,synthesis,excess,tactics,snail,ltd.,lighthouse,sequences,cornwall,plantation,mythology,performs,foundations,populated,horizontal,speedway,activated,performer,diving,conceived,edmonton,subtropical,environments,prompted,semifinals,caps,bulk,treasury,recreational,telegraph,continent,portraits,relegation,catholics,graph,velocity,rulers,endangered,secular,observer,learns,inquiry,idol,dictionary,certification,estimate,cluster,armenia,observatory,revived,nadu,consumers,hypothesis,manuscripts,contents,arguments,editing,trails,arctic,essays,belfast,acquire,promotional,undertaken,corridor,proceedings,antarctic,millennium,labels,delegates,vegetation,acclaim,directing,substance,outcome,diploma,philosopher,malta,albanian,vicinity,degc,legends,regiments,consent,terrorist,scattered,presidents,gravity,orientation,deployment,duchy,refuses,estonia,crowned,separately,renovation,rises,wilderness,objectives,agreements,empress,slopes,inclusion,equality,decree,ballot,criticised,rochester,recurring,struggled,disabled,henri,poles,prussian,convert,bacteria,poorly,sudan,geological,wyoming,consistently,minimal,withdrawal,interviewed,proximity,repairs,initiatives,pakistani,republicans,propaganda,viii,abstract,commercially,availability,mechanisms,naples,discussions,underlying,lens,proclaimed,advised,spelling,auxiliary,attract,lithuanian,editors,o'brien,accordance,measurement,novelist,ussr,formats,councils,contestants,indie,facebook,parishes,barrier,battalions,sponsor,consulting,terrorism,implement,uganda,crucial,unclear,notion,distinguish,collector,attractions,filipino,ecology,investments,capability,renovated,iceland,albania,accredited,scouts,armor,sculptor,cognitive,errors,gaming,condemned,successive,consolidated,baroque,entries,regulatory,reserved,treasurer,variables,arose,technological,rounded,provider,rhine,agrees,accuracy,genera,decreased,frankfurt,ecuador,edges,particle,rendered,calculated,careers,faction,rifles,americas,gaelic,portsmouth,resides,merchants,fiscal,premises,coin,draws,presenter,acceptance,ceremonies,pollution,consensus,membrane,brigadier,nonetheless,genres,supervision,predicted,magnitude,finite,differ,ancestry,vale,delegation,removing,proceeds,placement,emigrated,siblings,molecules,payments,considers,demonstration,proportion,newer,valve,achieving,confederation,continuously,luxury,notre,introducing,coordinates,charitable,squadrons,disorders,geometry,winnipeg,ulster,loans,longtime,receptor,preceding,belgrade,mandate,wrestler,neighbourhood,factories,buddhism,imported,sectors,protagonist,steep,elaborate,prohibited,artifacts,prizes,pupil,cooperative,sovereign,subspecies,carriers,allmusic,nationals,settings,autobiography,neighborhoods,analog,facilitate,voluntary,jointly,newfoundland,organizing,raids,exercises,nobel,machinery,baltic,crop,granite,dense,websites,mandatory,seeks,surrendered,anthology,comedian,bombs,slot,synopsis,critically,arcade,marking,equations,halls,indo,inaugurated,embarked,speeds,clause,invention,premiership,likewise,presenting,demonstrate,designers,organize,examined,km/h,bavaria,troop,referee,detection,zurich,prairie,rapper,wingspan,eurovision,luxembourg,slovakia,inception,disputed,mammals,entrepreneur,makers,evangelical,yield,clergy,trademark,defunct,allocated,depicting,volcanic,batted,conquered,sculptures,providers,reflects,armoured,locals,walt,herzegovina,contracted,entities,sponsorship,prominence,flowing,ethiopia,marketed,corporations,withdraw,carnegie,induced,investigated,portfolio,flowering,opinions,viewing,classroom,donations,bounded,perception,leicester,fruits,charleston,academics,statute,complaints,smallest,deceased,petroleum,resolved,commanders,algebra,southampton,modes,cultivation,transmitter,spelled,obtaining,sizes,acre,pageant,bats,abbreviated,correspondence,barracks,feast,tackles,raja,derives,geology,disputes,translations,counted,constantinople,seating,macedonia,preventing,accommodation,homeland,explored,invaded,provisional,transform,sphere,unsuccessfully,missionaries,conservatives,highlights,traces,organisms,openly,dancers,fossils,absent,monarchy,combining,lanes,stint,dynamics,chains,missiles,screening,module,tribune,generating,miners,nottingham,seoul,unofficial,owing,linking,rehabilitation,citation,louisville,mollusk,depicts,differential,zimbabwe,kosovo,recommendations,responses,pottery,scorer,aided,exceptions,dialects,telecommunications,defines,elderly,lunar,coupled,flown,25th,espn,formula_1,bordered,fragments,guidelines,gymnasium,valued,complexity,papal,presumably,maternal,challenging,reunited,advancing,comprised,uncertain,favorable,twelfth,correspondent,nobility,livestock,expressway,chilean,tide,researcher,emissions,profits,lengths,accompanying,witnessed,itunes,drainage,slope,reinforced,feminist,sanskrit,develops,physicians,outlets,isbn,coordinator,averaged,termed,occupy,diagnosed,yearly,humanitarian,prospect,spacecraft,stems,enacted,linux,ancestors,karnataka,constitute,immigrant,thriller,ecclesiastical,generals,celebrations,enhance,heating,advocated,evident,advances,bombardment,watershed,shuttle,wicket,twitter,adds,branded,teaches,schemes,pension,advocacy,conservatory,cairo,varsity,freshwater,providence,seemingly,shells,cuisine,specially,peaks,intensive,publishes,trilogy,skilled,nacional,unemployment,destinations,parameters,verses,trafficking,determination,infinite,savings,alignment,linguistic,countryside,dissolution,measurements,advantages,licence,subfamily,highlands,modest,regent,algeria,crest,teachings,knockout,brewery,combine,conventions,descended,chassis,primitive,fiji,explicitly,cumberland,uruguay,laboratories,bypass,elect,informal,preceded,holocaust,tackle,minneapolis,quantity,securities,console,doctoral,religions,commissioners,expertise,unveiled,precise,diplomat,standings,infant,disciplines,sicily,endorsed,systematic,charted,armored,mild,lateral,townships,hurling,prolific,invested,wartime,compatible,galleries,moist,battlefield,decoration,convent,tubes,terrestrial,nominee,requests,delegate,leased,dubai,polar,applying,addresses,munster,sings,commercials,teamed,dances,eleventh,midland,cedar,flee,sandstone,snails,inspection,divide,asset,themed,comparable,paramount,dairy,archaeology,intact,institutes,rectangular,instances,phases,reflecting,substantially,applies,vacant,lacked,copa,coloured,encounters,sponsors,encoded,possess,revenues,ucla,chaired,a.m.,enabling,playwright,stoke,sociology,tibetan,frames,motto,financing,illustrations,gibraltar,chateau,bolivia,transmitted,enclosed,persuaded,urged,folded,suffolk,regulated,bros.,submarines,myth,oriental,malaysian,effectiveness,narrowly,acute,sunk,replied,utilized,tasmania,consortium,quantities,gains,parkway,enlarged,sided,employers,adequate,accordingly,assumption,ballad,mascot,distances,peaking,saxony,projected,affiliation,limitations,metals,guatemala,scots,theaters,kindergarten,verb,employer,differs,discharge,controller,seasonal,marching,guru,campuses,avoided,vatican,maori,excessive,chartered,modifications,caves,monetary,sacramento,mixing,institutional,celebrities,irrigation,shapes,broadcaster,anthem,attributes,demolition,offshore,specification,surveys,yugoslav,contributor,auditorium,lebanese,capturing,airports,classrooms,chennai,paths,tendency,determining,lacking,upgrade,sailors,detected,kingdoms,sovereignty,freely,decorative,momentum,scholarly,georges,gandhi,speculation,transactions,undertook,interact,similarities,cove,teammate,constituted,painters,tends,madagascar,partnerships,afghan,personalities,attained,rebounds,masses,synagogue,reopened,asylum,embedded,imaging,catalogue,defenders,taxonomy,fiber,afterward,appealed,communists,lisbon,rica,judaism,adviser,batsman,ecological,commands,lgbt,cooling,accessed,wards,shiva,employs,thirds,scenic,worcester,tallest,contestant,humanities,economist,textile,constituencies,motorway,tram,percussion,cloth,leisure,1880s,baden,flags,resemble,riots,coined,sitcom,composite,implies,daytime,tanzania,penalties,optional,competitor,excluded,steering,reversed,autonomy,reviewer,breakthrough,professionally,damages,pomeranian,deputies,valleys,ventures,highlighted,electorate,mapping,shortened,executives,tertiary,specimen,launching,bibliography,sank,pursuing,binary,descendant,marched,natives,ideology,turks,adolf,archdiocese,tribunal,exceptional,nigerian,preference,fails,loading,comeback,vacuum,favored,alter,remnants,consecrated,spectators,trends,patriarch,feedback,paved,sentences,councillor,astronomy,advocates,broader,commentator,commissions,identifying,revealing,theatres,incomplete,enables,constituent,reformation,tract,haiti,atmospheric,screened,explosive,czechoslovakia,acids,symbolic,subdivision,liberals,incorporate,challenger,erie,filmmaker,laps,kazakhstan,organizational,evolutionary,chemicals,dedication,riverside,fauna,moths,maharashtra,annexed,gen.,resembles,underwater,garnered,timeline,remake,suited,educator,hectares,automotive,feared,latvia,finalist,narrator,portable,airways,plaque,designing,villagers,licensing,flank,statues,struggles,deutsche,migrated,cellular,jacksonville,wimbledon,defining,highlight,preparatory,planets,cologne,employ,frequencies,detachment,readily,libya,resign,halt,helicopters,reef,landmarks,collaborative,irregular,retaining,helsinki,folklore,weakened,viscount,interred,professors,memorable,mega,repertoire,rowing,dorsal,albeit,progressed,operative,coronation,liner,telugu,domains,philharmonic,detect,bengali,synthetic,tensions,atlas,dramatically,paralympics,xbox,shire,kiev,lengthy,sued,notorious,seas,screenwriter,transfers,aquatic,pioneers,unesco,radius,abundant,tunnels,syndicated,inventor,accreditation,janeiro,exeter,ceremonial,omaha,cadet,predators,resided,prose,slavic,precision,abbot,deity,engaging,cambodia,estonian,compliance,demonstrations,protesters,reactor,commodore,successes,chronicles,mare,extant,listings,minerals,tonnes,parody,cultivated,traders,pioneering,supplement,slovak,preparations,collision,partnered,vocational,atoms,malayalam,welcomed,documentation,curved,functioning,presently,formations,incorporates,nazis,botanical,nucleus,ethical,greeks,metric,automated,whereby,stance,europeans,duet,disability,purchasing,email,telescope,displaced,sodium,comparative,processor,inning,precipitation,aesthetic,import,coordination,feud,alternatively,mobility,tibet,regained,succeeding,hierarchy,apostolic,catalog,reproduction,inscriptions,vicar,clusters,posthumously,rican,loosely,additions,photographic,nowadays,selective,derivative,keyboards,guides,collectively,affecting,combines,operas,networking,decisive,terminated,continuity,finishes,ancestor,consul,heated,simulation,leipzig,incorporating,georgetown,formula_2,circa,forestry,portrayal,councillors,advancement,complained,forewings,confined,transaction,definitions,reduces,televised,1890s,rapids,phenomena,belarus,alps,landscapes,quarterly,specifications,commemorate,continuation,isolation,antenna,downstream,patents,ensuing,tended,saga,lifelong,columnist,labeled,gymnastics,papua,anticipated,demise,encompasses,madras,antarctica,interval,icon,rams,midlands,ingredients,priory,strengthen,rouge,explicit,gaza,aging,securing,anthropology,listeners,adaptations,underway,vista,malay,fortified,lightweight,violations,concerto,financed,jesuit,observers,trustee,descriptions,nordic,resistant,opted,accepts,prohibition,andhra,inflation,negro,wholly,imagery,spur,instructed,gloucester,cycles,middlesex,destroyers,statewide,evacuated,hyderabad,peasants,mice,shipyard,coordinate,pitching,colombian,exploring,numbering,compression,countess,hiatus,exceed,raced,archipelago,traits,soils,o'connor,vowel,android,facto,angola,amino,holders,logistics,circuits,emergence,kuwait,partition,emeritus,outcomes,submission,promotes,barack,negotiated,loaned,stripped,50th,excavations,treatments,fierce,participant,exports,decommissioned,cameo,remarked,residences,fuselage,mound,undergo,quarry,node,midwest,specializing,occupies,etc.,showcase,molecule,offs,modules,salon,exposition,revision,peers,positioned,hunters,competes,algorithms,reside,zagreb,calcium,uranium,silicon,airs,counterpart,outlet,collectors,sufficiently,canberra,inmates,anatomy,ensuring,curves,aviv,firearms,basque,volcano,thrust,sheikh,extensions,installations,aluminum,darker,sacked,emphasized,aligned,asserted,pseudonym,spanning,decorations,eighteenth,orbital,spatial,subdivided,notation,decay,macedonian,amended,declining,cyclist,feat,unusually,commuter,birthplace,latitude,activation,overhead,30th,finalists,whites,encyclopedia,tenor,qatar,survives,complement,concentrations,uncommon,astronomical,bangalore,pius,genome,memoir,recruit,prosecutor,modification,paired,container,basilica,arlington,displacement,germanic,mongolia,proportional,debates,matched,calcutta,rows,tehran,aerospace,prevalent,arise,lowland,24th,spokesman,supervised,advertisements,clash,tunes,revelation,wanderers,quarterfinals,fisheries,steadily,memoirs,pastoral,renewable,confluence,acquiring,strips,slogan,upstream,scouting,analyst,practitioners,turbine,strengthened,heavier,prehistoric,plural,excluding,isles,persecution,turin,rotating,villain,hemisphere,unaware,arabs,corpus,relied,singular,unanimous,schooling,passive,angles,dominance,instituted,aria,outskirts,balanced,beginnings,financially,structured,parachute,viewer,attitudes,subjected,escapes,derbyshire,erosion,addressing,styled,declaring,originating,colts,adjusted,stained,occurrence,fortifications,baghdad,nitrogen,localities,yemen,galway,debris,lodz,victorious,pharmaceutical,substances,unnamed,dwelling,atop,developmental,activism,voter,refugee,forested,relates,overlooking,genocide,kannada,insufficient,oversaw,partisan,dioxide,recipients,factions,mortality,capped,expeditions,receptors,reorganized,prominently,atom,flooded,flute,orchestral,scripts,mathematician,airplay,detached,rebuilding,dwarf,brotherhood,salvation,expressions,arabian,cameroon,poetic,recruiting,bundesliga,inserted,scrapped,disabilities,evacuation,pasha,undefeated,crafts,rituals,aluminium,norm,pools,submerged,occupying,pathway,exams,prosperity,wrestlers,promotions,basal,permits,nationalism,trim,merge,gazette,tributaries,transcription,caste,porto,emerge,modeled,adjoining,counterparts,paraguay,redevelopment,renewal,unreleased,equilibrium,similarity,minorities,soviets,comprise,nodes,tasked,unrelated,expired,johan,precursor,examinations,electrons,socialism,exiled,admiralty,floods,wigan,nonprofit,lacks,brigades,screens,repaired,hanover,fascist,labs,osaka,delays,judged,statutory,colt,col.,offspring,solving,bred,assisting,retains,somalia,grouped,corresponds,tunisia,chaplain,eminent,chord,22nd,spans,viral,innovations,possessions,mikhail,kolkata,icelandic,implications,introduces,racism,workforce,alto,compulsory,admits,censorship,onset,reluctant,inferior,iconic,progression,liability,turnout,satellites,behavioral,coordinated,exploitation,posterior,averaging,fringe,krakow,mountainous,greenwich,para,plantations,reinforcements,offerings,famed,intervals,constraints,individually,nutrition,1870s,taxation,threshold,tomatoes,fungi,contractor,ethiopian,apprentice,diabetes,wool,gujarat,honduras,norse,bucharest,23rd,arguably,accompany,prone,teammates,perennial,vacancy,polytechnic,deficit,okinawa,functionality,reminiscent,tolerance,transferring,myanmar,concludes,neighbours,hydraulic,economically,slower,plots,charities,synod,investor,catholicism,identifies,bronx,interpretations,adverse,judiciary,hereditary,nominal,sensor,symmetry,cubic,triangular,tenants,divisional,outreach,representations,passages,undergoing,cartridge,testified,exceeded,impacts,limiting,railroads,defeats,regain,rendering,humid,retreated,reliability,governorate,antwerp,infamous,implied,packaging,lahore,trades,billed,extinction,ecole,rejoined,recognizes,projection,qualifications,stripes,forts,socially,lexington,accurately,sexuality,westward,wikipedia,pilgrimage,abolition,choral,stuttgart,nests,expressing,strikeouts,assessed,monasteries,reconstructed,humorous,marxist,fertile,consort,urdu,patronage,peruvian,devised,lyric,baba,nassau,communism,extraction,popularly,markings,inability,litigation,accounted,processed,emirates,tempo,cadets,eponymous,contests,broadly,oxide,courtyard,frigate,directory,apex,outline,regency,chiefly,patrols,secretariat,cliffs,residency,privy,armament,australians,dorset,geometric,genetics,scholarships,fundraising,flats,demographic,multimedia,captained,documentaries,updates,canvas,blockade,guerrilla,songwriting,administrators,intake,drought,implementing,fraction,cannes,refusal,inscribed,meditation,announcing,exported,ballots,formula_3,curator,basel,arches,flour,subordinate,confrontation,gravel,simplified,berkshire,patriotic,tuition,employing,servers,castile,posting,combinations,discharged,miniature,mutations,constellation,incarnation,ideals,necessity,granting,ancestral,crowds,pioneered,mormon,methodology,rama,indirect,complexes,bavarian,patrons,uttar,skeleton,bollywood,flemish,viable,bloc,breeds,triggered,sustainability,tailed,referenced,comply,takeover,latvian,homestead,platoon,communal,nationality,excavated,targeting,sundays,posed,physicist,turret,endowment,marginal,dispatched,commentators,renovations,attachment,collaborations,ridges,barriers,obligations,shareholders,prof.,defenses,presided,rite,backgrounds,arbitrary,affordable,gloucestershire,thirteenth,inlet,miniseries,possesses,detained,pressures,subscription,realism,solidarity,proto,postgraduate,noun,burmese,abundance,homage,reasoning,anterior,robust,fencing,shifting,vowels,garde,profitable,loch,anchored,coastline,samoa,terminology,prostitution,magistrate,venezuelan,speculated,regulate,fixture,colonists,digit,induction,manned,expeditionary,computational,centennial,principally,vein,preserving,engineered,numerical,cancellation,conferred,continually,borne,seeded,advertisement,unanimously,treaties,infections,ions,sensors,lowered,amphibious,lava,fourteenth,bahrain,niagara,nicaragua,squares,congregations,26th,periodic,proprietary,1860s,contributors,seller,overs,emission,procession,presumed,illustrator,zinc,gases,tens,applicable,stretches,reproductive,sixteenth,apparatus,accomplishments,canoe,guam,oppose,recruitment,accumulated,limerick,namibia,staging,remixes,ordnance,uncertainty,pedestrian,temperate,treason,deposited,registry,cerambycidae,attracting,lankan,reprinted,shipbuilding,homosexuality,neurons,eliminating,1900s,resume,ministries,beneficial,blackpool,surplus,northampton,licenses,constructing,announcer,standardized,alternatives,taipei,inadequate,failures,yields,medalist,titular,obsolete,torah,burlington,predecessors,lublin,retailers,castles,depiction,issuing,gubernatorial,propulsion,tiles,damascus,discs,alternating,pomerania,peasant,tavern,redesignated,27th,illustration,focal,mans,codex,specialists,productivity,antiquity,controversies,promoter,pits,companions,behaviors,lyrical,prestige,creativity,swansea,dramas,approximate,feudal,tissues,crude,campaigned,unprecedented,chancel,amendments,surroundings,allegiance,exchanges,align,firmly,optimal,commenting,reigning,landings,obscure,1850s,contemporaries,paternal,devi,endurance,communes,incorporation,denominations,exchanged,routing,resorts,amnesty,slender,explores,suppression,heats,pronunciation,centred,coupe,stirling,freelance,treatise,linguistics,laos,informs,discovering,pillars,encourages,halted,robots,definitive,maturity,tuberculosis,venetian,silesian,unchanged,originates,mali,lincolnshire,quotes,seniors,premise,contingent,distribute,danube,gorge,logging,dams,curling,seventeenth,specializes,wetlands,deities,assess,thickness,rigid,culminated,utilities,substrate,insignia,nile,assam,shri,currents,suffrage,canadians,mortar,asteroid,bosnian,discoveries,enzymes,sanctioned,replica,hymn,investigators,tidal,dominate,derivatives,converting,leinster,verbs,honoured,criticisms,dismissal,discrete,masculine,reorganization,unlimited,wurttemberg,sacks,allocation,bahn,jurisdictions,participates,lagoon,famine,communion,culminating,surveyed,shortage,cables,intersects,cassette,foremost,adopting,solicitor,outright,bihar,reissued,farmland,dissertation,turnpike,baton,photographed,christchurch,kyoto,finances,rails,histories,linebacker,kilkenny,accelerated,dispersed,handicap,absorption,rancho,ceramic,captivity,cites,font,weighed,mater,utilize,bravery,extract,validity,slovenian,seminars,discourse,ranged,duel,ironically,warships,sega,temporal,surpassed,prolonged,recruits,northumberland,greenland,contributes,patented,eligibility,unification,discusses,reply,translates,beirut,relies,torque,northward,reviewers,monastic,accession,neural,tramway,heirs,sikh,subscribers,amenities,taliban,audit,rotterdam,wagons,kurdish,favoured,combustion,meanings,persia,browser,diagnostic,niger,formula_4,denomination,dividing,parameter,branding,badminton,leningrad,sparked,hurricanes,beetles,propeller,mozambique,refined,diagram,exhaust,vacated,readings,markers,reconciliation,determines,concurrent,imprint,primera,organism,demonstrating,filmmakers,vanderbilt,affiliates,traction,evaluated,defendants,megachile,investigative,zambia,assassinated,rewarded,probable,staffordshire,foreigners,directorate,nominees,consolidation,commandant,reddish,differing,unrest,drilling,bohemia,resembling,instrumentation,considerations,haute,promptly,variously,dwellings,clans,tablet,enforced,cockpit,semifinal,hussein,prisons,ceylon,emblem,monumental,phrases,correspond,crossover,outlined,characterised,acceleration,caucus,crusade,protested,composing,rajasthan,habsburg,rhythmic,interception,inherent,cooled,ponds,spokesperson,gradual,consultation,kuala,globally,suppressed,builders,avengers,suffix,integer,enforce,fibers,unionist,proclamation,uncovered,infrared,adapt,eisenhower,utilizing,captains,stretched,observing,assumes,prevents,analyses,saxophone,caucasus,notices,villains,dartmouth,mongol,hostilities,stretching,veterinary,lenses,texture,prompting,overthrow,excavation,islanders,masovian,battleship,biographer,replay,degradation,departing,luftwaffe,fleeing,oversight,immigrated,serbs,fishermen,strengthening,respiratory,italians,denotes,radial,escorted,motif,wiltshire,expresses,accessories,reverted,establishments,inequality,protocols,charting,famously,satirical,entirety,trench,friction,atletico,sampling,subset,weekday,upheld,sharply,correlation,incorrect,mughal,travelers,hasan,earnings,offset,evaluate,specialised,recognizing,flexibility,nagar,postseason,algebraic,capitalism,crystals,melodies,polynomial,racecourse,defences,austro,wembley,attracts,anarchist,resurrection,reviewing,decreasing,prefix,ratified,mutation,displaying,separating,restoring,assemblies,ordinance,priesthood,cruisers,appoint,moldova,imports,directive,epidemic,militant,senegal,signaling,restriction,critique,retrospective,nationalists,undertake,sioux,canals,algerian,redesigned,philanthropist,depict,conceptual,turbines,intellectuals,eastward,applicants,contractors,vendors,undergone,namesake,ensured,tones,substituted,hindwings,arrests,tombs,transitional,principality,reelection,taiwanese,cavity,manifesto,broadcasters,spawned,thoroughbred,identities,generators,proposes,hydroelectric,johannesburg,cortex,scandinavian,killings,aggression,boycott,catalyst,physiology,fifteenth,waterfront,chromosome,organist,costly,calculation,cemeteries,flourished,recognise,juniors,merging,disciples,ashore,workplace,enlightenment,diminished,debated,hailed,podium,educate,mandated,distributor,litre,electromagnetic,flotilla,estuary,peterborough,staircase,selections,melodic,confronts,wholesale,integrate,intercepted,catalonia,unite,immense,palatinate,switches,earthquakes,occupational,successors,praising,concluding,faculties,firstly,overhaul,empirical,metacritic,inauguration,evergreen,laden,winged,philosophers,amalgamated,geoff,centimeters,napoleonic,upright,planting,brewing,fined,sensory,migrants,wherein,inactive,headmaster,warwickshire,siberia,terminals,denounced,academia,divinity,bilateral,clive,omitted,peerage,relics,apartheid,syndicate,fearing,fixtures,desirable,dismantled,ethnicity,valves,biodiversity,aquarium,ideological,visibility,creators,analyzed,tenant,balkan,postwar,supplier,smithsonian,risen,morphology,digits,bohemian,wilmington,vishnu,demonstrates,aforementioned,biographical,mapped,khorasan,phosphate,presentations,ecosystem,processors,calculations,mosaic,clashes,penned,recalls,coding,angular,lattice,macau,accountability,extracted,pollen,therapeutic,overlap,violinist,deposed,candidacy,infants,covenant,bacterial,restructuring,dungeons,ordination,conducts,builds,invasive,customary,concurrently,relocation,cello,statutes,borneo,entrepreneurs,sanctions,packet,rockefeller,piedmont,comparisons,waterfall,receptions,glacial,surge,signatures,alterations,advertised,enduring,somali,botanist,100th,canonical,motifs,longitude,circulated,alloy,indirectly,margins,preserves,internally,besieged,shale,peripheral,drained,baseman,reassigned,tobago,soloist,socio,grazing,contexts,roofs,portraying,ottomans,shrewsbury,noteworthy,lamps,supplying,beams,qualifier,portray,greenhouse,stronghold,hitter,rites,cretaceous,urging,derive,nautical,aiming,fortunes,verde,donors,reliance,exceeding,exclusion,exercised,simultaneous,continents,guiding,pillar,gradient,poznan,eruption,clinics,moroccan,indicator,trams,piers,parallels,fragment,teatro,potassium,satire,compressed,businessmen,influx,seine,perspectives,shelters,decreases,mounting,formula_5,confederacy,equestrian,expulsion,mayors,liberia,resisted,affinity,shrub,unexpectedly,stimulus,amtrak,deported,perpendicular,statesman,wharf,storylines,romanesque,weights,surfaced,interceptions,dhaka,crambidae,orchestras,rwanda,conclude,constitutes,subsidiaries,admissions,prospective,shear,bilingual,campaigning,presiding,domination,commemorative,trailing,confiscated,petrol,acquisitions,polymer,onlyinclude,chloride,elevations,resolutions,hurdles,pledged,likelihood,objected,erect,encoding,databases,aristotle,hindus,marshes,bowled,ministerial,grange,acronym,annexation,squads,ambient,pilgrims,botany,sofla,astronomer,planetary,descending,bestowed,ceramics,diplomacy,metabolism,colonization,potomac,africans,engraved,recycling,commitments,resonance,disciplinary,jamaican,narrated,spectral,tipperary,waterford,stationary,arbitration,transparency,threatens,crossroads,slalom,oversee,centenary,incidence,economies,livery,moisture,newsletter,autobiographical,bhutan,propelled,dependence,moderately,adobe,barrels,subdivisions,outlook,labelled,stratford,arising,diaspora,barony,automobiles,ornamental,slated,norms,primetime,generalized,analysts,vectors,libyan,yielded,certificates,rooted,vernacular,belarusian,marketplace,prediction,fairfax,malawi,viruses,wooded,demos,mauritius,prosperous,coincided,liberties,huddersfield,ascent,warnings,hinduism,glucose,pulitzer,unused,filters,illegitimate,acquitted,protestants,canopy,staple,psychedelic,winding,abbas,pathways,cheltenham,lagos,niche,invaders,proponents,barred,conversely,doncaster,recession,embraced,rematch,concession,emigration,upgrades,bowls,tablets,remixed,loops,kensington,shootout,monarchs,organizers,harmful,punjabi,broadband,exempt,neolithic,profiles,portrays,parma,cyrillic,quasi,attested,regimental,revive,torpedoes,heidelberg,rhythms,spherical,denote,hymns,icons,theologian,qaeda,exceptionally,reinstated,comune,playhouse,lobbying,grossing,viceroy,delivers,visually,armistice,utrecht,syllable,vertices,analogous,annex,refurbished,entrants,knighted,disciple,rhetoric,detailing,inactivated,ballads,algae,intensified,favourable,sanitation,receivers,pornography,commemorated,cannons,entrusted,manifold,photographers,pueblo,textiles,steamer,myths,marquess,onward,liturgical,romney,uzbekistan,consistency,denoted,hertfordshire,convex,hearings,sulfur,universidad,podcast,selecting,emperors,arises,justices,1840s,mongolian,exploited,termination,digitally,infectious,sedan,symmetric,penal,illustrate,formulation,attribute,problematic,modular,inverse,berth,searches,rutgers,leicestershire,enthusiasts,lockheed,upwards,transverse,accolades,backward,archaeologists,crusaders,nuremberg,defects,ferries,vogue,containers,openings,transporting,separates,lumpur,purchases,attain,wichita,topology,woodlands,deleted,periodically,syntax,overturned,musicals,corp.,strasbourg,instability,nationale,prevailing,cache,marathi,versailles,unmarried,grains,straits,antagonist,segregation,assistants,d'etat,contention,dictatorship,unpopular,motorcycles,criterion,analytical,salzburg,militants,hanged,worcestershire,emphasize,paralympic,erupted,convinces,offences,oxidation,nouns,populace,atari,spanned,hazardous,educators,playable,births,baha'i,preseason,generates,invites,meteorological,handbook,foothills,enclosure,diffusion,mirza,convergence,geelong,coefficient,connector,formula_6,cylindrical,disasters,pleaded,knoxville,contamination,compose,libertarian,arrondissement,franciscan,intercontinental,susceptible,initiation,malaria,unbeaten,consonants,waived,saloon,popularized,estadio,pseudo,interdisciplinary,transports,transformers,carriages,bombings,revolves,ceded,collaborator,celestial,exemption,colchester,maltese,oceanic,ligue,crete,shareholder,routed,depictions,ridden,advisors,calculate,lending,guangzhou,simplicity,newscast,scheduling,snout,eliot,undertaking,armenians,nottinghamshire,whitish,consulted,deficiency,salle,cinemas,superseded,rigorous,kerman,convened,landowners,modernization,evenings,pitches,conditional,scandinavia,differed,formulated,cyclists,swami,guyana,dunes,electrified,appalachian,abdomen,scenarios,prototypes,sindh,consonant,adaptive,boroughs,wolverhampton,modelling,cylinders,amounted,minimize,ambassadors,lenin,settler,coincide,approximation,grouping,murals,bullying,registers,rumours,engagements,energetic,vertex,annals,bordering,geologic,yellowish,runoff,converts,allegheny,facilitated,saturdays,colliery,monitored,rainforest,interfaces,geographically,impaired,prevalence,joachim,paperback,slowed,shankar,distinguishing,seminal,categorized,authorised,auspices,bandwidth,asserts,rebranded,balkans,supplemented,seldom,weaving,capsule,apostles,populous,monmouth,payload,symphonic,densely,shoreline,managerial,masonry,antioch,averages,textbooks,royalist,coliseum,tandem,brewers,diocesan,posthumous,walled,incorrectly,distributions,ensued,reasonably,graffiti,propagation,automation,harmonic,augmented,middleweight,limbs,elongated,landfall,comparatively,literal,grossed,koppen,wavelength,1830s,cerebral,boasts,congestion,physiological,practitioner,coasts,cartoonist,undisclosed,frontal,launches,burgundy,qualifiers,imposing,stade,flanked,assyrian,raided,multiplayer,montane,chesapeake,pathology,drains,vineyards,intercollegiate,semiconductor,grassland,convey,citations,predominant,rejects,benefited,yahoo,graphs,busiest,encompassing,hamlets,explorers,suppress,minors,graphical,calculus,sediment,intends,diverted,mainline,unopposed,cottages,initiate,alumnus,towed,autism,forums,darlington,modernist,oxfordshire,lectured,capitalist,suppliers,panchayat,actresses,foundry,southbound,commodity,wesleyan,divides,palestinians,luton,caretaker,nobleman,mutiny,organizer,preferences,nomenclature,splits,unwilling,offenders,timor,relying,halftime,semitic,arithmetic,milestone,jesuits,arctiidae,retrieved,consuming,contender,edged,plagued,inclusive,transforming,khmer,federally,insurgents,distributing,amherst,rendition,prosecutors,viaduct,disqualified,kabul,liturgy,prevailed,reelected,instructors,swimmers,aperture,churchyard,interventions,totals,darts,metropolis,fuels,fluent,northbound,correctional,inflicted,barrister,realms,culturally,aristocratic,collaborating,emphasizes,choreographer,inputs,ensembles,humboldt,practised,endowed,strains,infringement,archaeologist,congregational,magna,relativity,efficiently,proliferation,mixtape,abruptly,regeneration,commissioning,yukon,archaic,reluctantly,retailer,northamptonshire,universally,crossings,boilers,nickelodeon,revue,abbreviation,retaliation,scripture,routinely,medicinal,benedictine,kenyan,retention,deteriorated,glaciers,apprenticeship,coupling,researched,topography,entrances,anaheim,pivotal,compensate,arched,modify,reinforce,dusseldorf,journeys,motorsport,conceded,sumatra,spaniards,quantitative,loire,cinematography,discarded,botswana,morale,engined,zionist,philanthropy,sainte,fatalities,cypriot,motorsports,indicators,pricing,institut,bethlehem,implicated,gravitational,differentiation,rotor,thriving,precedent,ambiguous,concessions,forecast,conserved,fremantle,asphalt,landslide,middlesbrough,formula_7,humidity,overseeing,chronological,diaries,multinational,crimean,turnover,improvised,youths,declares,tasmanian,canadiens,fumble,refinery,weekdays,unconstitutional,upward,guardians,brownish,imminent,hamas,endorsement,naturalist,martyrs,caledonia,chords,yeshiva,reptiles,severity,mitsubishi,fairs,installment,substitution,repertory,keyboardist,interpreter,silesia,noticeable,rhineland,transmit,inconsistent,booklet,academies,epithet,pertaining,progressively,aquatics,scrutiny,prefect,toxicity,rugged,consume,o'donnell,evolve,uniquely,cabaret,mediated,landowner,transgender,palazzo,compilations,albuquerque,induce,sinai,remastered,efficacy,underside,analogue,specify,possessing,advocating,compatibility,liberated,greenville,mecklenburg,header,memorials,sewage,rhodesia,1800s,salaries,atoll,coordinating,partisans,repealed,amidst,subjective,optimization,nectar,evolving,exploits,madhya,styling,accumulation,raion,postage,responds,buccaneers,frontman,brunei,choreography,coated,kinetic,sampled,inflammatory,complementary,eclectic,norte,vijay,a.k.a,mainz,casualty,connectivity,laureate,franchises,yiddish,reputed,unpublished,economical,periodicals,vertically,bicycles,brethren,capacities,unitary,archeological,tehsil,domesday,wehrmacht,justification,angered,mysore,fielded,abuses,nutrients,ambitions,taluk,battleships,symbolism,superiority,neglect,attendees,commentaries,collaborators,predictions,yorker,breeders,investing,libretto,informally,coefficients,memorandum,pounder,collingwood,tightly,envisioned,arbor,mistakenly,captures,nesting,conflicting,enhancing,streetcar,manufactures,buckinghamshire,rewards,commemorating,stony,expenditure,tornadoes,semantic,relocate,weimar,iberian,sighted,intending,ensign,beverages,expectation,differentiate,centro,utilizes,saxophonist,catchment,transylvania,ecosystems,shortest,sediments,socialists,ineffective,kapoor,formidable,heroine,guantanamo,prepares,scattering,pamphlet,verified,elector,barons,totaling,shrubs,pyrenees,amalgamation,mutually,longitudinal,comte,negatively,masonic,envoy,sexes,akbar,mythical,tonga,bishopric,assessments,malaya,warns,interiors,reefs,reflections,neutrality,musically,nomadic,waterways,provence,collaborate,scaled,adulthood,emerges,euros,optics,incentives,overland,periodical,liege,awarding,realization,slang,affirmed,schooner,hokkaido,czechoslovak,protectorate,undrafted,disagreed,commencement,electors,spruce,swindon,fueled,equatorial,inventions,suites,slovene,backdrop,adjunct,energies,remnant,inhabit,alliances,simulcast,reactors,mosques,travellers,outfielder,plumage,migratory,benin,experimented,fibre,projecting,drafting,laude,evidenced,northernmost,indicted,directional,replication,croydon,comedies,jailed,organizes,devotees,reservoirs,turrets,originate,economists,songwriters,junta,trenches,mounds,proportions,comedic,apostle,azerbaijani,farmhouse,resembled,disrupted,playback,mixes,diagonal,relevance,govern,programmer,gdansk,maize,soundtracks,tendencies,mastered,impacted,believers,kilometre,intervene,chairperson,aerodrome,sails,subsidies,ensures,aesthetics,congresses,ratios,sardinia,southernmost,functioned,controllers,downward,randomly,distortion,regents,palatine,disruption,spirituality,vidhan,tracts,compiler,ventilation,anchorage,symposium,assert,pistols,excelled,avenues,convoys,moniker,constructions,proponent,phased,spines,organising,schleswig,policing,campeonato,mined,hourly,croix,lucrative,authenticity,haitian,stimulation,burkina,espionage,midfield,manually,staffed,awakening,metabolic,biographies,entrepreneurship,conspicuous,guangdong,preface,subgroup,mythological,adjutant,feminism,vilnius,oversees,honourable,tripoli,stylized,kinase,societe,notoriety,altitudes,configurations,outward,transmissions,announces,auditor,ethanol,clube,nanjing,mecca,haifa,blogs,postmaster,paramilitary,depart,positioning,potent,recognizable,spire,brackets,remembrance,overlapping,turkic,articulated,scientology,operatic,deploy,readiness,biotechnology,restrict,cinematographer,inverted,synonymous,administratively,westphalia,commodities,replaces,downloads,centralized,munitions,preached,sichuan,fashionable,implementations,matrices,hiv/aids,loyalist,luzon,celebrates,hazards,heiress,mercenaries,synonym,creole,ljubljana,technician,auditioned,technicians,viewpoint,wetland,mongols,princely,sharif,coating,dynasties,southward,doubling,formula_8,mayoral,harvesting,conjecture,goaltender,oceania,spokane,welterweight,bracket,gatherings,weighted,newscasts,mussolini,affiliations,disadvantage,vibrant,spheres,sultanate,distributors,disliked,establishes,marches,drastically,yielding,jewellery,yokohama,vascular,airlift,canons,subcommittee,repression,strengths,graded,outspoken,fused,pembroke,filmography,redundant,fatigue,repeal,threads,reissue,pennant,edible,vapor,corrections,stimuli,commemoration,dictator,anand,secession,amassed,orchards,pontifical,experimentation,greeted,bangor,forwards,decomposition,quran,trolley,chesterfield,traverse,sermons,burials,skier,climbs,consultants,petitioned,reproduce,parted,illuminated,kurdistan,reigned,occupants,packaged,geometridae,woven,regulating,protagonists,crafted,affluent,clergyman,consoles,migrant,supremacy,attackers,caliph,defect,convection,rallies,huron,resin,segunda,quota,warship,overseen,criticizing,shrines,glamorgan,lowering,beaux,hampered,invasions,conductors,collects,bluegrass,surrounds,substrates,perpetual,chronology,pulmonary,executions,crimea,compiling,noctuidae,battled,tumors,minsk,novgorod,serviced,yeast,computation,swamps,theodor,baronetcy,salford,uruguayan,shortages,odisha,siberian,novelty,cinematic,invitational,decks,dowager,oppression,bandits,appellate,state-of-the-art,clade,palaces,signalling,galaxies,industrialist,tensor,learnt,incurred,magistrates,binds,orbits,ciudad,willingness,peninsular,basins,biomedical,shafts,marlborough,bournemouth,withstand,fitzroy,dunedin,variance,steamship,integrating,muscular,fines,akron,bulbophyllum,malmo,disclosed,cornerstone,runways,medicines,twenty20,gettysburg,progresses,frigates,bodied,transformations,transforms,helens,modelled,versatile,regulator,pursuits,legitimacy,amplifier,scriptures,voyages,examines,presenters,octagonal,poultry,formula_9,anatolia,computed,migrate,directorial,hybrids,localized,preferring,guggenheim,persisted,grassroots,inflammation,fishery,otago,vigorous,professions,instructional,inexpensive,insurgency,legislators,sequels,surnames,agrarian,stainless,nairobi,minas,forerunner,aristocracy,transitions,sicilian,showcased,doses,hiroshima,summarized,gearbox,emancipation,limitation,nuclei,seismic,abandonment,dominating,appropriations,occupations,electrification,hilly,contracting,exaggerated,entertainer,kazan,oricon,cartridges,characterization,parcel,maharaja,exceeds,aspiring,obituary,flattened,contrasted,narration,replies,oblique,outpost,fronts,arranger,talmud,keynes,doctrines,endured,confesses,fortification,supervisors,kilometer,academie,jammu,bathurst,piracy,prostitutes,navarre,cumulative,cruises,lifeboat,twinned,radicals,interacting,expenditures,wexford,libre,futsal,curated,clockwise,colloquially,procurement,immaculate,lyricist,enhancement,porcelain,alzheimer,highlighting,judah,disagreements,storytelling,sheltered,wroclaw,vaudeville,contrasts,neoclassical,compares,contrasting,deciduous,francaise,descriptive,cyclic,reactive,antiquities,meiji,repeats,creditors,forcibly,newmarket,picturesque,impending,uneven,bison,raceway,solvent,ecumenical,optic,professorship,harvested,waterway,banjo,pharaoh,geologist,scanning,dissent,recycled,unmanned,retreating,gospels,aqueduct,branched,tallinn,groundbreaking,syllables,hangar,designations,procedural,craters,cabins,encryption,anthropologist,montevideo,outgoing,inverness,chattanooga,fascism,calais,chapels,groundwater,downfall,misleading,robotic,tortricidae,pixel,handel,prohibit,crewe,renaming,reprised,kickoff,leftist,spaced,integers,causeway,pines,authorship,organise,ptolemy,accessibility,virtues,lesions,iroquois,qur'an,atheist,synthesized,biennial,confederates,dietary,skaters,stresses,tariff,koreans,intercity,republics,quintet,baroness,naive,amplitude,insistence,tbilisi,residues,grammatical,diversified,egyptians,accompaniment,vibration,repository,mandal,topological,distinctions,coherent,invariant,batters,nuevo,internationals,implements,follower,bahia,widened,independents,cantonese,totaled,guadalajara,wolverines,befriended,muzzle,surveying,hungarians,medici,deportation,rayon,approx,recounts,attends,clerical,hellenic,furnished,alleging,soluble,systemic,gallantry,bolshevik,intervened,hostel,gunpowder,specialising,stimulate,leiden,removes,thematic,floral,bafta,printers,conglomerate,eroded,analytic,successively,lehigh,thessaloniki,kilda,clauses,ascended,nehru,scripted,tokugawa,competence,diplomats,exclude,consecration,freedoms,assaults,revisions,blacksmith,textual,sparse,concacaf,slain,uploaded,enraged,whaling,guise,stadiums,debuting,dormitory,cardiovascular,yunnan,dioceses,consultancy,notions,lordship,archdeacon,collided,medial,airfields,garment,wrestled,adriatic,reversal,refueling,verification,jakob,horseshoe,intricate,veracruz,sarawak,syndication,synthesizer,anthologies,stature,feasibility,guillaume,narratives,publicized,antrim,intermittent,constituents,grimsby,filmmaking,doping,unlawful,nominally,transmitting,documenting,seater,internationale,ejected,steamboat,alsace,boise,ineligible,geared,vassal,mustered,ville,inline,pairing,eurasian,kyrgyzstan,barnsley,reprise,stereotypes,rushes,conform,firefighters,deportivo,revolutionaries,rabbis,concurrency,charters,sustaining,aspirations,algiers,chichester,falkland,morphological,systematically,volcanoes,designate,artworks,reclaimed,jurist,anglia,resurrected,chaotic,feasible,circulating,simulated,environmentally,confinement,adventist,harrisburg,laborers,ostensibly,universiade,pensions,influenza,bratislava,octave,refurbishment,gothenburg,putin,barangay,annapolis,breaststroke,illustrates,distorted,choreographed,promo,emphasizing,stakeholders,descends,exhibiting,intrinsic,invertebrates,evenly,roundabout,salts,formula_10,strata,inhibition,branching,stylistic,rumored,realises,mitochondrial,commuted,adherents,logos,bloomberg,telenovela,guineas,charcoal,engages,winery,reflective,siena,cambridgeshire,ventral,flashback,installing,engraving,grasses,traveller,rotated,proprietor,nationalities,precedence,sourced,trainers,cambodian,reductions,depleted,saharan,classifications,biochemistry,plaintiffs,arboretum,humanist,fictitious,aleppo,climates,bazaar,his/her,homogeneous,multiplication,moines,indexed,linguist,skeletal,foliage,societal,differentiated,informing,mammal,infancy,archival,cafes,malls,graeme,musee,schizophrenia,fargo,pronouns,derivation,descend,ascending,terminating,deviation,recaptured,confessions,weakening,tajikistan,bahadur,pasture,b/hip,donegal,supervising,sikhs,thinkers,euclidean,reinforcement,friars,portage,fuscous,lucknow,synchronized,assertion,choirs,privatization,corrosion,multitude,skyscraper,royalties,ligament,usable,spores,directs,clashed,stockport,fronted,dependency,contiguous,biologist,backstroke,powerhouse,frescoes,phylogenetic,welding,kildare,gabon,conveyed,augsburg,severn,continuum,sahib,lille,injuring,passeriformesfamily,succeeds,translating,unitarian,startup,turbulent,outlying,philanthropic,stanislaw,idols,claremont,conical,haryana,armagh,blended,implicit,conditioned,modulation,rochdale,labourers,coinage,shortstop,potsdam,gears,obesity,bestseller,advisers,bouts,comedians,jozef,lausanne,taxonomic,correlated,columbian,marne,indications,psychologists,libel,edict,beaufort,disadvantages,renal,finalized,racehorse,unconventional,disturbances,falsely,zoology,adorned,redesign,executing,narrower,commended,appliances,stalls,resurgence,saskatoon,miscellaneous,permitting,epoch,formula_11,cumbria,forefront,vedic,eastenders,disposed,supermarkets,rower,inhibitor,magnesium,colourful,yusuf,harrow,formulas,centrally,balancing,ionic,nocturnal,consolidate,ornate,raiding,charismatic,accelerate,nominate,residual,dhabi,commemorates,attribution,uninhabited,mindanao,atrocities,genealogical,romani,applicant,enactment,abstraction,trough,pulpit,minuscule,misconduct,grenades,timely,supplements,messaging,curvature,ceasefire,telangana,susquehanna,braking,redistribution,shreveport,neighbourhoods,gregorian,widowed,khuzestan,empowerment,scholastic,evangelist,peptide,topical,theorist,historia,thence,sudanese,museo,jurisprudence,masurian,frankish,headlined,recounted,netball,petitions,tolerant,hectare,truncated,southend,methane,captives,reigns,massif,subunit,acidic,weightlifting,footballers,sabah,britannia,tunisian,segregated,sawmill,withdrawing,unpaid,weaponry,somme,perceptions,unicode,alcoholism,durban,wrought,waterfalls,jihad,auschwitz,upland,eastbound,adjective,anhalt,evaluating,regimes,guildford,reproduced,pamphlets,hierarchical,maneuvers,hanoi,fabricated,repetition,enriched,arterial,replacements,tides,globalization,adequately,westbound,satisfactory,fleets,phosphorus,lastly,neuroscience,anchors,xinjiang,membranes,improvisation,shipments,orthodoxy,submissions,bolivian,mahmud,ramps,leyte,pastures,outlines,flees,transmitters,fares,sequential,stimulated,novice,alternately,symmetrical,breakaway,layered,baronets,lizards,blackish,edouard,horsepower,penang,principals,mercantile,maldives,overwhelmingly,hawke,rallied,prostate,conscription,juveniles,maccabi,carvings,strikers,sudbury,spurred,improves,lombardy,macquarie,parisian,elastic,distillery,shetland,humane,brentford,wrexham,warehouses,routines,encompassed,introductory,isfahan,instituto,palais,revolutions,sporadic,impoverished,portico,fellowships,speculative,enroll,dormant,adhere,fundamentally,sculpted,meritorious,template,upgrading,reformer,rectory,uncredited,indicative,creeks,galveston,radically,hezbollah,firearm,educating,prohibits,trondheim,locus,refit,headwaters,screenings,lowlands,wasps,coarse,attaining,sedimentary,perished,pitchfork,interned,cerro,stagecoach,aeronautical,liter,transitioned,haydn,inaccurate,legislatures,bromwich,knesset,spectroscopy,butte,asiatic,degraded,concordia,catastrophic,lobes,wellness,pensacola,periphery,hapoel,theta,horizontally,freiburg,liberalism,pleas,durable,warmian,offenses,mesopotamia,shandong,unsuitable,hospitalized,appropriately,phonetic,encompass,conversions,observes,illnesses,breakout,assigns,crowns,inhibitors,nightly,manifestation,fountains,maximize,alphabetical,sloop,expands,newtown,widening,gaddafi,commencing,camouflage,footprint,tyrol,barangays,universite,highlanders,budgets,query,lobbied,westchester,equator,stipulated,pointe,distinguishes,allotted,embankment,advises,storing,loyalists,fourier,rehearsals,starvation,gland,rihanna,tubular,expressive,baccalaureate,intersections,revered,carbonate,eritrea,craftsmen,cosmopolitan,sequencing,corridors,shortlisted,bangladeshi,persians,mimic,parades,repetitive,recommends,flanks,promoters,incompatible,teaming,ammonia,greyhound,solos,improper,legislator,newsweek,recurrent,vitro,cavendish,eireann,crises,prophets,mandir,strategically,guerrillas,formula_12,ghent,contenders,equivalence,drone,sociological,hamid,castes,statehood,aland,clinched,relaunched,tariffs,simulations,williamsburg,rotate,mediation,smallpox,harmonica,lodges,lavish,restrictive,o'sullivan,detainees,polynomials,echoes,intersecting,learners,elects,charlemagne,defiance,epsom,liszt,facilitating,absorbing,revelations,padua,pieter,pious,penultimate,mammalian,montenegrin,supplementary,widows,aromatic,croats,roanoke,trieste,legions,subdistrict,babylonian,grasslands,volga,violently,sparsely,oldies,telecommunication,respondents,quarries,downloadable,commandos,taxpayer,catalytic,malabar,afforded,copying,declines,nawab,junctions,assessing,filtering,classed,disused,compliant,christoph,gottingen,civilizations,hermitage,caledonian,whereupon,ethnically,springsteen,mobilization,terraces,indus,excel,zoological,enrichment,simulate,guitarists,registrar,cappella,invoked,reused,manchu,configured,uppsala,genealogy,mergers,casts,curricular,rebelled,subcontinent,horticultural,parramatta,orchestrated,dockyard,claudius,decca,prohibiting,turkmenistan,brahmin,clandestine,obligatory,elaborated,parasitic,helix,constraint,spearheaded,rotherham,eviction,adapting,albans,rescues,sociologist,guiana,convicts,occurrences,kamen,antennas,asturias,wheeled,sanitary,deterioration,trier,theorists,baseline,announcements,valea,planners,factual,serialized,serials,bilbao,demoted,fission,jamestown,cholera,alleviate,alteration,indefinite,sulfate,paced,climatic,valuation,artisans,proficiency,aegean,regulators,fledgling,sealing,influencing,servicemen,frequented,cancers,tambon,narayan,bankers,clarified,embodied,engraver,reorganisation,dissatisfied,dictated,supplemental,temperance,ratification,puget,nutrient,pretoria,papyrus,uniting,ascribed,cores,coptic,schoolhouse,barrio,1910s,armory,defected,transatlantic,regulates,ported,artefacts,specifies,boasted,scorers,mollusks,emitted,navigable,quakers,projective,dialogues,reunification,exponential,vastly,banners,unsigned,dissipated,halves,coincidentally,leasing,purported,escorting,estimation,foxes,lifespan,inflorescence,assimilation,showdown,staunch,prologue,ligand,superliga,telescopes,northwards,keynote,heaviest,taunton,redeveloped,vocalists,podlaskie,soyuz,rodents,azores,moravian,outset,parentheses,apparel,domestically,authoritative,polymers,monterrey,inhibit,launcher,jordanian,folds,taxis,mandates,singled,liechtenstein,subsistence,marxism,ousted,governorship,servicing,offseason,modernism,prism,devout,translators,islamist,chromosomes,pitted,bedfordshire,fabrication,authoritarian,javanese,leaflets,transient,substantive,predatory,sigismund,assassinate,diagrams,arrays,rediscovered,reclamation,spawning,fjord,peacekeeping,strands,fabrics,highs,regulars,tirana,ultraviolet,athenian,filly,barnet,naacp,nueva,favourites,terminates,showcases,clones,inherently,interpreting,bjorn,finely,lauded,unspecified,chola,pleistocene,insulation,antilles,donetsk,funnel,nutritional,biennale,reactivated,southport,primate,cavaliers,austrians,interspersed,restarted,suriname,amplifiers,wladyslaw,blockbuster,sportsman,minogue,brightness,benches,bridgeport,initiating,israelis,orbiting,newcomers,externally,scaling,transcribed,impairment,luxurious,longevity,impetus,temperament,ceilings,tchaikovsky,spreads,pantheon,bureaucracy,1820s,heraldic,villas,formula_13,galician,meath,avoidance,corresponded,headlining,connacht,seekers,rappers,solids,monograph,scoreless,opole,isotopes,himalayas,parodies,garments,microscopic,republished,havilland,orkney,demonstrators,pathogen,saturated,hellenistic,facilitates,aerodynamic,relocating,indochina,laval,astronomers,bequeathed,administrations,extracts,nagoya,torquay,demography,medicare,ambiguity,renumbered,pursuant,concave,syriac,electrode,dispersal,henan,bialystok,walsall,crystalline,puebla,janata,illumination,tianjin,enslaved,coloration,championed,defamation,grille,johor,rejoin,caspian,fatally,planck,workings,appointing,institutionalized,wessex,modernized,exemplified,regatta,jacobite,parochial,programmers,blending,eruptions,insurrection,regression,indices,sited,dentistry,mobilized,furnishings,levant,primaries,ardent,nagasaki,conqueror,dorchester,opined,heartland,amman,mortally,wellesley,bowlers,outputs,coveted,orthography,immersion,disrepair,disadvantaged,curate,childless,condensed,codice_1,remodeled,resultant,bolsheviks,superfamily,saxons,2010s,contractual,rivalries,malacca,oaxaca,magnate,vertebrae,quezon,olympiad,yucatan,tyres,macro,specialization,commendation,caliphate,gunnery,exiles,excerpts,fraudulent,adjustable,aramaic,interceptor,drumming,standardization,reciprocal,adolescents,federalist,aeronautics,favorably,enforcing,reintroduced,zhejiang,refining,biplane,banknotes,accordion,intersect,illustrating,summits,classmate,militias,biomass,massacres,epidemiology,reworked,wrestlemania,nantes,auditory,taxon,elliptical,chemotherapy,asserting,avoids,proficient,airmen,yellowstone,multicultural,alloys,utilization,seniority,kuyavian,huntsville,orthogonal,bloomington,cultivars,casimir,internment,repulsed,impedance,revolving,fermentation,parana,shutout,partnering,empowered,islamabad,polled,classify,amphibians,greyish,obedience,4x100,projectile,khyber,halfback,relational,d'ivoire,synonyms,endeavour,padma,customized,mastery,defenceman,berber,purge,interestingly,covent,promulgated,restricting,condemnation,hillsborough,walkers,privateer,intra,captaincy,naturalized,huffington,detecting,hinted,migrating,bayou,counterattack,anatomical,foraging,unsafe,swiftly,outdated,paraguayan,attire,masjid,endeavors,jerseys,triassic,quechua,growers,axial,accumulate,wastewater,cognition,fungal,animator,pagoda,kochi,uniformly,antibody,yerevan,hypotheses,combatants,italianate,draining,fragmentation,snowfall,formative,inversion,kitchener,identifier,additive,lucha,selects,ashland,cambrian,racetrack,trapping,congenital,primates,wavelengths,expansions,yeomanry,harcourt,wealthiest,awaited,punta,intervening,aggressively,vichy,piloted,midtown,tailored,heyday,metadata,guadalcanal,inorganic,hadith,pulses,francais,tangent,scandals,erroneously,tractors,pigment,constabulary,jiangsu,landfill,merton,basalt,astor,forbade,debuts,collisions,exchequer,stadion,roofed,flavour,sculptors,conservancy,dissemination,electrically,undeveloped,existent,surpassing,pentecostal,manifested,amend,formula_14,superhuman,barges,tunis,analytics,argyll,liquids,mechanized,domes,mansions,himalayan,indexing,reuters,nonlinear,purification,exiting,timbers,triangles,decommissioning,departmental,causal,fonts,americana,sept.,seasonally,incomes,razavi,sheds,memorabilia,rotational,terre,sutra,protege,yarmouth,grandmaster,annum,looted,imperialism,variability,liquidation,baptised,isotope,showcasing,milling,rationale,hammersmith,austen,streamlined,acknowledging,contentious,qaleh,breadth,turing,referees,feral,toulon,unofficially,identifiable,standout,labeling,dissatisfaction,jurgen,angrily,featherweight,cantons,constrained,dominates,standalone,relinquished,theologians,markedly,italics,downed,nitrate,likened,gules,craftsman,singaporean,pixels,mandela,moray,parity,departement,antigen,academically,burgh,brahma,arranges,wounding,triathlon,nouveau,vanuatu,banded,acknowledges,unearthed,stemming,authentication,byzantines,converge,nepali,commonplace,deteriorating,recalling,palette,mathematicians,greenish,pictorial,ahmedabad,rouen,validation,u.s.a.,'best,malvern,archers,converter,undergoes,fluorescent,logistical,notification,transvaal,illicit,symphonies,stabilization,worsened,fukuoka,decrees,enthusiast,seychelles,blogger,louvre,dignitaries,burundi,wreckage,signage,pinyin,bursts,federer,polarization,urbana,lazio,schism,nietzsche,venerable,administers,seton,kilograms,invariably,kathmandu,farmed,disqualification,earldom,appropriated,fluctuations,kermanshah,deployments,deformation,wheelbase,maratha,psalm,bytes,methyl,engravings,skirmish,fayette,vaccines,ideally,astrology,breweries,botanic,opposes,harmonies,irregularities,contended,gaulle,prowess,constants,aground,filipinos,fresco,ochreous,jaipur,willamette,quercus,eastwards,mortars,champaign,braille,reforming,horned,hunan,spacious,agitation,draught,specialties,flourishing,greensboro,necessitated,swedes,elemental,whorls,hugely,structurally,plurality,synthesizers,embassies,assad,contradictory,inference,discontent,recreated,inspectors,unicef,commuters,embryo,modifying,stints,numerals,communicated,boosted,trumpeter,brightly,adherence,remade,leases,restrained,eucalyptus,dwellers,planar,grooves,gainesville,daimler,anzac,szczecin,cornerback,prized,peking,mauritania,khalifa,motorized,lodging,instrumentalist,fortresses,cervical,formula_15,passerine,sectarian,researches,apprenticed,reliefs,disclose,gliding,repairing,queue,kyushu,literate,canoeing,sacrament,separatist,calabria,parkland,flowed,investigates,statistically,visionary,commits,dragoons,scrolls,premieres,revisited,subdued,censored,patterned,elective,outlawed,orphaned,leyland,richly,fujian,miniatures,heresy,plaques,countered,nonfiction,exponent,moravia,dispersion,marylebone,midwestern,enclave,ithaca,federated,electronically,handheld,microscopy,tolls,arrivals,climbers,continual,cossacks,moselle,deserts,ubiquitous,gables,forecasts,deforestation,vertebrates,flanking,drilled,superstructure,inspected,consultative,bypassed,ballast,subsidy,socioeconomic,relic,grenada,journalistic,administering,accommodated,collapses,appropriation,reclassified,foreword,porte,assimilated,observance,fragmented,arundel,thuringia,gonzaga,shenzhen,shipyards,sectional,ayrshire,sloping,dependencies,promenade,ecuadorian,mangrove,constructs,goalscorer,heroism,iteration,transistor,omnibus,hampstead,cochin,overshadowed,chieftain,scalar,finishers,ghanaian,abnormalities,monoplane,encyclopaedia,characterize,travancore,baronetage,bearers,biking,distributes,paving,christened,inspections,banco,humber,corinth,quadratic,albanians,lineages,majored,roadside,inaccessible,inclination,darmstadt,fianna,epilepsy,propellers,papacy,montagu,bhutto,sugarcane,optimized,pilasters,contend,batsmen,brabant,housemates,sligo,ascot,aquinas,supervisory,accorded,gerais,echoed,nunavut,conservatoire,carniola,quartermaster,gminas,impeachment,aquitaine,reformers,quarterfinal,karlsruhe,accelerator,coeducational,archduke,gelechiidae,seaplane,dissident,frenchman,palau,depots,hardcover,aachen,darreh,denominational,groningen,parcels,reluctance,drafts,elliptic,counters,decreed,airship,devotional,contradiction,formula_16,undergraduates,qualitative,guatemalan,slavs,southland,blackhawks,detrimental,abolish,chechen,manifestations,arthritis,perch,fated,hebei,peshawar,palin,immensely,havre,totalling,rampant,ferns,concourse,triples,elites,olympian,larva,herds,lipid,karabakh,distal,monotypic,vojvodina,batavia,multiplied,spacing,spellings,pedestrians,parchment,glossy,industrialization,dehydrogenase,patriotism,abolitionist,mentoring,elizabethan,figurative,dysfunction,abyss,constantin,middletown,stigma,mondays,gambia,gaius,israelites,renounced,nepalese,overcoming,buren,sulphur,divergence,predation,looting,iberia,futuristic,shelved,anthropological,innsbruck,escalated,clermont,entrepreneurial,benchmark,mechanically,detachments,populist,apocalyptic,exited,embryonic,stanza,readership,chiba,landlords,expansive,boniface,therapies,perpetrators,whitehall,kassel,masts,carriageway,clinch,pathogens,mazandaran,undesirable,teutonic,miocene,nagpur,juris,cantata,compile,diffuse,dynastic,reopening,comptroller,o'neal,flourish,electing,scientifically,departs,welded,modal,cosmology,fukushima,libertadores,chang'an,asean,generalization,localization,afrikaans,cricketers,accompanies,emigrants,esoteric,southwards,shutdown,prequel,fittings,innate,wrongly,equitable,dictionaries,senatorial,bipolar,flashbacks,semitism,walkway,lyrically,legality,sorbonne,vigorously,durga,samoan,karel,interchanges,patna,decider,registering,electrodes,anarchists,excursion,overthrown,gilan,recited,michelangelo,advertiser,kinship,taboo,cessation,formula_17,premiers,traversed,madurai,poorest,torneo,exerted,replicate,spelt,sporadically,horde,landscaping,razed,hindered,esperanto,manchuria,propellant,jalan,baha'is,sikkim,linguists,pandit,racially,ligands,dowry,francophone,escarpment,behest,magdeburg,mainstay,villiers,yangtze,grupo,conspirators,martyrdom,noticeably,lexical,kazakh,unrestricted,utilised,sired,inhabits,proofs,joseon,pliny,minted,buddhists,cultivate,interconnected,reuse,viability,australasian,derelict,resolving,overlooks,menon,stewardship,playwrights,thwarted,filmfare,disarmament,protections,bundles,sidelined,hypothesized,singer/songwriter,forage,netted,chancery,townshend,restructured,quotation,hyperbolic,succumbed,parliaments,shenandoah,apical,kibbutz,storeys,pastors,lettering,ukrainians,hardships,chihuahua,avail,aisles,taluka,antisemitism,assent,ventured,banksia,seamen,hospice,faroe,fearful,woreda,outfield,chlorine,transformer,tatar,panoramic,pendulum,haarlem,styria,cornice,importing,catalyzes,subunits,enamel,bakersfield,realignment,sorties,subordinates,deanery,townland,gunmen,tutelage,evaluations,allahabad,thrace,veneto,mennonite,sharia,subgenus,satisfies,puritan,unequal,gastrointestinal,ordinances,bacterium,horticulture,argonauts,adjectives,arable,duets,visualization,woolwich,revamped,euroleague,thorax,completes,originality,vasco,freighter,sardar,oratory,sects,extremes,signatories,exporting,arisen,exacerbated,departures,saipan,furlongs,d'italia,goring,dakar,conquests,docked,offshoot,okrug,referencing,disperse,netting,summed,rewritten,articulation,humanoid,spindle,competitiveness,preventive,facades,westinghouse,wycombe,synthase,emulate,fostering,abdel,hexagonal,myriad,caters,arjun,dismay,axiom,psychotherapy,colloquial,complemented,martinique,fractures,culmination,erstwhile,atrium,electronica,anarchism,nadal,montpellier,algebras,submitting,adopts,stemmed,overcame,internacional,asymmetric,gallipoli,gliders,flushing,extermination,hartlepool,tesla,interwar,patriarchal,hitherto,ganges,combatant,marred,philology,glastonbury,reversible,isthmus,undermined,southwark,gateshead,andalusia,remedies,hastily,optimum,smartphone,evade,patrolled,beheaded,dopamine,waivers,ugandan,gujarati,densities,predicting,intestinal,tentative,interstellar,kolonia,soloists,penetrated,rebellions,qeshlaq,prospered,colegio,deficits,konigsberg,deficient,accessing,relays,kurds,politburo,codified,incarnations,occupancy,cossack,metaphysical,deprivation,chopra,piccadilly,formula_18,makeshift,protestantism,alaskan,frontiers,faiths,tendon,dunkirk,durability,autobots,bonuses,coinciding,emails,gunboat,stucco,magma,neutrons,vizier,subscriptions,visuals,envisaged,carpets,smoky,schema,parliamentarian,immersed,domesticated,parishioners,flinders,diminutive,mahabharata,ballarat,falmouth,vacancies,gilded,twigs,mastering,clerics,dalmatia,islington,slogans,compressor,iconography,congolese,sanction,blends,bulgarians,moderator,outflow,textures,safeguard,trafalgar,tramways,skopje,colonialism,chimneys,jazeera,organisers,denoting,motivations,ganga,longstanding,deficiencies,gwynedd,palladium,holistic,fascia,preachers,embargo,sidings,busan,ignited,artificially,clearwater,cemented,northerly,salim,equivalents,crustaceans,oberliga,quadrangle,historiography,romanians,vaults,fiercely,incidental,peacetime,tonal,bhopal,oskar,radha,pesticides,timeslot,westerly,cathedrals,roadways,aldershot,connectors,brahmins,paler,aqueous,gustave,chromatic,linkage,lothian,specialises,aggregation,tributes,insurgent,enact,hampden,ghulam,federations,instigated,lyceum,fredrik,chairmanship,floated,consequent,antagonists,intimidation,patriarchate,warbler,heraldry,entrenched,expectancy,habitation,partitions,widest,launchers,nascent,ethos,wurzburg,lycee,chittagong,mahatma,merseyside,asteroids,yokosuka,cooperatives,quorum,redistricting,bureaucratic,yachts,deploying,rustic,phonology,chorale,cellist,stochastic,crucifixion,surmounted,confucian,portfolios,geothermal,crested,calibre,tropics,deferred,nasir,iqbal,persistence,essayist,chengdu,aborigines,fayetteville,bastion,interchangeable,burlesque,kilmarnock,specificity,tankers,colonels,fijian,quotations,enquiry,quito,palmerston,delle,multidisciplinary,polynesian,iodine,antennae,emphasised,manganese,baptists,galilee,jutland,latent,excursions,skepticism,tectonic,precursors,negligible,musique,misuse,vitoria,expressly,veneration,sulawesi,footed,mubarak,chongqing,chemically,midday,ravaged,facets,varma,yeovil,ethnographic,discounted,physicists,attache,disbanding,essen,shogunate,cooperated,waikato,realising,motherwell,pharmacology,sulfide,inward,expatriate,devoid,cultivar,monde,andean,groupings,goran,unaffected,moldovan,postdoctoral,coleophora,delegated,pronoun,conductivity,coleridge,disapproval,reappeared,microbial,campground,olsztyn,fostered,vaccination,rabbinical,champlain,milestones,viewership,caterpillar,effected,eupithecia,financier,inferred,uzbek,bundled,bandar,balochistan,mysticism,biosphere,holotype,symbolizes,lovecraft,photons,abkhazia,swaziland,subgroups,measurable,falkirk,valparaiso,ashok,discriminatory,rarity,tabernacle,flyweight,jalisco,westernmost,antiquarian,extracellular,margrave,colspan=9,midsummer,digestive,reversing,burgeoning,substitutes,medallist,khrushchev,guerre,folio,detonated,partido,plentiful,aggregator,medallion,infiltration,shaded,santander,fared,auctioned,permian,ramakrishna,andorra,mentors,diffraction,bukit,potentials,translucent,feminists,tiers,protracted,coburg,wreath,guelph,adventurer,he/she,vertebrate,pipelines,celsius,outbreaks,australasia,deccan,garibaldi,unionists,buildup,biochemical,reconstruct,boulders,stringent,barbed,wording,furnaces,pests,befriends,organises,popes,rizal,tentacles,cadre,tallahassee,punishments,occidental,formatted,mitigation,rulings,rubens,cascades,inducing,choctaw,volta,synagogues,movable,altarpiece,mitigate,practise,intermittently,encountering,memberships,earns,signify,retractable,amounting,pragmatic,wilfrid,dissenting,divergent,kanji,reconstituted,devonian,constitutions,levied,hendrik,starch,costal,honduran,ditches,polygon,eindhoven,superstars,salient,argus,punitive,purana,alluvial,flaps,inefficient,retracted,advantageous,quang,andersson,danville,binghamton,symbolize,conclave,shaanxi,silica,interpersonal,adept,frans,pavilions,lubbock,equip,sunken,limburg,activates,prosecutions,corinthian,venerated,shootings,retreats,parapet,orissa,riviere,animations,parodied,offline,metaphysics,bluffs,plume,piety,fruition,subsidized,steeplechase,shanxi,eurasia,angled,forecasting,suffragan,ashram,larval,labyrinth,chronicler,summaries,trailed,merges,thunderstorms,filtered,formula_19,advertisers,alpes,informatics,parti,constituting,undisputed,certifications,javascript,molten,sclerosis,rumoured,boulogne,hmong,lewes,breslau,notts,bantu,ducal,messengers,radars,nightclubs,bantamweight,carnatic,kaunas,fraternal,triggering,controversially,londonderry,visas,scarcity,offaly,uprisings,repelled,corinthians,pretext,kuomintang,kielce,empties,matriculated,pneumatic,expos,agile,treatises,midpoint,prehistory,oncology,subsets,hydra,hypertension,axioms,wabash,reiterated,swapped,achieves,premio,ageing,overture,curricula,challengers,subic,selangor,liners,frontline,shutter,validated,normalized,entertainers,molluscs,maharaj,allegation,youngstown,synth,thoroughfare,regionally,pillai,transcontinental,pedagogical,riemann,colonia,easternmost,tentatively,profiled,herefordshire,nativity,meuse,nucleotide,inhibits,huntingdon,throughput,recorders,conceding,domed,homeowners,centric,gabled,canoes,fringes,breeder,subtitled,fluoride,haplogroup,zionism,izmir,phylogeny,kharkiv,romanticism,adhesion,usaaf,delegations,lorestan,whalers,biathlon,vaulted,mathematically,pesos,skirmishes,heisman,kalamazoo,gesellschaft,launceston,interacts,quadruple,kowloon,psychoanalysis,toothed,ideologies,navigational,valence,induces,lesotho,frieze,rigging,undercarriage,explorations,spoof,eucharist,profitability,virtuoso,recitals,subterranean,sizeable,herodotus,subscriber,huxley,pivot,forewing,warring,boleslaw,bharatiya,suffixes,trois,percussionist,downturn,garrisons,philosophies,chants,mersin,mentored,dramatist,guilds,frameworks,thermodynamic,venomous,mehmed,assembling,rabbinic,hegemony,replicas,enlargement,claimant,retitled,utica,dumfries,metis,deter,assortment,tubing,afflicted,weavers,rupture,ornamentation,transept,salvaged,upkeep,callsign,rajput,stevenage,trimmed,intracellular,synchronization,consular,unfavorable,royalists,goldwyn,fasting,hussars,doppler,obscurity,currencies,amiens,acorn,tagore,townsville,gaussian,migrations,porta,anjou,graphite,seaport,monographs,gladiators,metrics,calligraphy,sculptural,swietokrzyskie,tolombeh,eredivisie,shoals,queries,carts,exempted,fiberglass,mirrored,bazar,progeny,formalized,mukherjee,professed,amazon.com,cathode,moreton,removable,mountaineers,nagano,transplantation,augustinian,steeply,epilogue,adapter,decisively,accelerating,mediaeval,substituting,tasman,devonshire,litres,enhancements,himmler,nephews,bypassing,imperfect,argentinian,reims,integrates,sochi,ascii,licences,niches,surgeries,fables,versatility,indra,footpath,afonso,crore,evaporation,encodes,shelling,conformity,simplify,updating,quotient,overt,firmware,umpires,architectures,eocene,conservatism,secretion,embroidery,f.c..,tuvalu,mosaics,shipwreck,prefectural,cohort,grievances,garnering,centerpiece,apoptosis,djibouti,bethesda,formula_20,shonen,richland,justinian,dormitories,meteorite,reliably,obtains,pedagogy,hardness,cupola,manifolds,amplification,steamers,familial,dumbarton,jerzy,genital,maidstone,salinity,grumman,signifies,presbytery,meteorology,procured,aegis,streamed,deletion,nuestra,mountaineering,accords,neuronal,khanate,grenoble,axles,dispatches,tokens,turku,auctions,propositions,planters,proclaiming,recommissioned,stravinsky,obverse,bombarded,waged,saviour,massacred,reformist,purportedly,resettlement,ravenna,embroiled,minden,revitalization,hikers,bridging,torpedoed,depletion,nizam,affectionately,latitudes,lubeck,spore,polymerase,aarhus,nazism,101st,buyout,galerie,diets,overflow,motivational,renown,brevet,deriving,melee,goddesses,demolish,amplified,tamworth,retake,brokerage,beneficiaries,henceforth,reorganised,silhouette,browsers,pollutants,peron,lichfield,encircled,defends,bulge,dubbing,flamenco,coimbatore,refinement,enshrined,grizzlies,capacitor,usefulness,evansville,interscholastic,rhodesian,bulletins,diamondbacks,rockers,platted,medalists,formosa,transporter,slabs,guadeloupe,disparate,concertos,violins,regaining,mandible,untitled,agnostic,issuance,hamiltonian,brampton,srpska,homology,downgraded,florentine,epitaph,kanye,rallying,analysed,grandstand,infinitely,antitrust,plundered,modernity,colspan=3|total,amphitheatre,doric,motorists,yemeni,carnivorous,probabilities,prelate,struts,scrapping,bydgoszcz,pancreatic,signings,predicts,compendium,ombudsman,apertura,appoints,rebbe,stereotypical,valladolid,clustered,touted,plywood,inertial,kettering,curving,d'honneur,housewives,grenadier,vandals,barbarossa,necked,waltham,reputedly,jharkhand,cistercian,pursues,viscosity,organiser,cloister,islet,stardom,moorish,himachal,strives,scripps,staggered,blasts,westwards,millimeters,angolan,hubei,agility,admirals,mordellistena,coincides,platte,vehicular,cordillera,riffs,schoolteacher,canaan,acoustics,tinged,reinforcing,concentrates,daleks,monza,selectively,musik,polynesia,exporter,reviving,macclesfield,bunkers,ballets,manors,caudal,microbiology,primes,unbroken,outcry,flocks,pakhtunkhwa,abelian,toowoomba,luminous,mould,appraisal,leuven,experimentally,interoperability,hideout,perak,specifying,knighthood,vasily,excerpt,computerized,niels,networked,byzantium,reaffirmed,geographer,obscured,fraternities,mixtures,allusion,accra,lengthened,inquest,panhandle,pigments,revolts,bluetooth,conjugate,overtaken,foray,coils,breech,streaks,impressionist,mendelssohn,intermediary,panned,suggestive,nevis,upazila,rotunda,mersey,linnaeus,anecdotes,gorbachev,viennese,exhaustive,moldavia,arcades,irrespective,orator,diminishing,predictive,cohesion,polarized,montage,avian,alienation,conus,jaffna,urbanization,seawater,extremity,editorials,scrolling,dreyfus,traverses,topographic,gunboats,extratropical,normans,correspondents,recognises,millennia,filtration,ammonium,voicing,complied,prefixes,diplomas,figurines,weakly,gated,oscillator,lucerne,embroidered,outpatient,airframe,fractional,disobedience,quarterbacks,formula_21,shinto,chiapas,epistle,leakage,pacifist,avignon,penrith,renders,mantua,screenplays,gustaf,tesco,alphabetically,rations,discharges,headland,tapestry,manipur,boolean,mediator,ebenezer,subchannel,fable,bestselling,ateneo,trademarks,recurrence,dwarfs,britannica,signifying,vikram,mediate,condensation,censuses,verbandsgemeinde,cartesian,sprang,surat,britons,chelmsford,courtenay,statistic,retina,abortions,liabilities,closures,mississauga,skyscrapers,saginaw,compounded,aristocrat,msnbc,stavanger,septa,interpretive,hinder,visibly,seeding,shutouts,irregularly,quebecois,footbridge,hydroxide,implicitly,lieutenants,simplex,persuades,midshipman,heterogeneous,officiated,crackdown,lends,tartu,altars,fractions,dissidents,tapered,modernisation,scripting,blazon,aquaculture,thermodynamics,sistan,hasidic,bellator,pavia,propagated,theorized,bedouin,transnational,mekong,chronicled,declarations,kickstarter,quotas,runtime,duquesne,broadened,clarendon,brownsville,saturation,tatars,electorates,malayan,replicated,observable,amphitheater,endorsements,referral,allentown,mormons,pantomime,eliminates,typeface,allegorical,varna,conduction,evoke,interviewer,subordinated,uyghur,landscaped,conventionally,ascend,edifice,postulated,hanja,whitewater,embarking,musicologist,tagalog,frontage,paratroopers,hydrocarbons,transliterated,nicolae,viewpoints,surrealist,asheville,falklands,hacienda,glide,opting,zimbabwean,discal,mortgages,nicaraguan,yadav,ghosh,abstracted,castilian,compositional,cartilage,intergovernmental,forfeited,importation,rapping,artes,republika,narayana,condominium,frisian,bradman,duality,marche,extremist,phosphorylation,genomes,allusions,valencian,habeas,ironworks,multiplex,harpsichord,emigrate,alternated,breda,waffen,smartphones,familiarity,regionalliga,herbaceous,piping,dilapidated,carboniferous,xviii,critiques,carcinoma,sagar,chippewa,postmodern,neapolitan,excludes,notoriously,distillation,tungsten,richness,installments,monoxide,chand,privatisation,molded,maths,projectiles,luoyang,epirus,lemma,concentric,incline,erroneous,sideline,gazetted,leopards,fibres,renovate,corrugated,unilateral,repatriation,orchestration,saeed,rockingham,loughborough,formula_22,bandleader,appellation,openness,nanotechnology,massively,tonnage,dunfermline,exposes,moored,ridership,motte,eurobasket,majoring,feats,silla,laterally,playlist,downwards,methodologies,eastbourne,daimyo,cellulose,leyton,norwalk,oblong,hibernian,opaque,insular,allegory,camogie,inactivation,favoring,masterpieces,rinpoche,serotonin,portrayals,waverley,airliner,longford,minimalist,outsourcing,excise,meyrick,qasim,organisational,synaptic,farmington,gorges,scunthorpe,zoned,tohoku,librarians,davao,decor,theatrically,brentwood,pomona,acquires,planter,capacitors,synchronous,skateboarding,coatings,turbocharged,ephraim,capitulation,scoreboard,hebrides,ensues,cereals,ailing,counterpoint,duplication,antisemitic,clique,aichi,oppressive,transcendental,incursions,rename,renumbering,powys,vestry,bitterly,neurology,supplanted,affine,susceptibility,orbiter,activating,overlaps,ecoregion,raman,canoer,darfur,microorganisms,precipitated,protruding,torun,anthropologists,rennes,kangaroos,parliamentarians,edits,littoral,archived,begum,rensselaer,microphones,ypres,empower,etruscan,wisden,montfort,calibration,isomorphic,rioting,kingship,verbally,smyrna,cohesive,canyons,fredericksburg,rahul,relativistic,micropolitan,maroons,industrialized,henchmen,uplift,earthworks,mahdi,disparity,cultured,transliteration,spiny,fragmentary,extinguished,atypical,inventors,biosynthesis,heralded,curacao,anomalies,aeroplane,surya,mangalore,maastricht,ashkenazi,fusiliers,hangzhou,emitting,monmouthshire,schwarzenegger,ramayana,peptides,thiruvananthapuram,alkali,coimbra,budding,reasoned,epithelial,harbors,rudimentary,classically,parque,ealing,crusades,rotations,riparian,pygmy,inertia,revolted,microprocessor,calendars,solvents,kriegsmarine,accademia,cheshmeh,yoruba,ardabil,mitra,genomic,notables,propagate,narrates,univision,outposts,polio,birkenhead,urinary,crocodiles,pectoral,barrymore,deadliest,rupees,chaim,protons,comical,astrophysics,unifying,formula_23,vassals,cortical,audubon,pedals,tenders,resorted,geophysical,lenders,recognising,tackling,lanarkshire,doctrinal,annan,combating,guangxi,estimating,selectors,tribunals,chambered,inhabiting,exemptions,curtailed,abbasid,kandahar,boron,bissau,150th,codenamed,wearer,whorl,adhered,subversive,famer,smelting,inserting,mogadishu,zoologist,mosul,stumps,almanac,olympiacos,stamens,participatory,cults,honeycomb,geologists,dividend,recursive,skiers,reprint,pandemic,liber,percentages,adversely,stoppage,chieftains,tubingen,southerly,overcrowding,unorganized,hangars,fulfil,hails,cantilever,woodbridge,pinus,wiesbaden,fertilization,fluorescence,enhances,plenary,troublesome,episodic,thrissur,kickboxing,allele,staffing,garda,televisions,philatelic,spacetime,bullpen,oxides,leninist,enrolling,inventive,truro,compatriot,ruskin,normative,assay,gotha,murad,illawarra,gendarmerie,strasse,mazraeh,rebounded,fanfare,liaoning,rembrandt,iranians,emirate,governs,latency,waterfowl,chairmen,katowice,aristocrats,eclipsed,sentient,sonatas,interplay,sacking,decepticons,dynamical,arbitrarily,resonant,petar,velocities,alludes,wastes,prefectures,belleville,sensibility,salvadoran,consolidating,medicaid,trainees,vivekananda,molar,porous,upload,youngster,infused,doctorates,wuhan,annihilation,enthusiastically,gamespot,kanpur,accumulating,monorail,operetta,tiling,sapporo,finns,calvinist,hydrocarbon,sparrows,orienteering,cornelis,minster,vuelta,plebiscite,embraces,panchayats,focussed,remediation,brahman,olfactory,reestablished,uniqueness,northumbria,rwandan,predominately,abode,ghats,balances,californian,uptake,bruges,inert,westerns,reprints,cairn,yarra,resurfaced,audible,rossini,regensburg,italiana,fleshy,irrigated,alerts,yahya,varanasi,marginalized,expatriates,cantonment,normandie,sahitya,directives,rounder,hulls,fictionalized,constables,inserts,hipped,potosi,navies,biologists,canteen,husbandry,augment,fortnight,assamese,kampala,o'keefe,paleolithic,bluish,promontory,consecutively,striving,niall,reuniting,dipole,friendlies,disapproved,thrived,netflix,liberian,dielectric,medway,strategist,sankt,pickups,hitters,encode,rerouted,claimants,anglesey,partitioned,cavan,flutes,reared,repainted,armaments,bowed,thoracic,balliol,piero,chaplains,dehestan,sender,junkers,sindhi,sickle,dividends,metallurgy,honorific,berths,namco,springboard,resettled,gansu,copyrighted,criticizes,utopian,bendigo,ovarian,binomial,spaceflight,oratorio,proprietors,supergroup,duplicated,foreground,strongholds,revolved,optimize,layouts,westland,hurler,anthropomorphic,excelsior,merchandising,reeds,vetoed,cryptography,hollyoaks,monash,flooring,ionian,resilience,johnstown,resolves,lawmakers,alegre,wildcards,intolerance,subculture,selector,slums,formulate,bayonet,istvan,restitution,interchangeably,awakens,rostock,serpentine,oscillation,reichstag,phenotype,recessed,piotr,annotated,preparedness,consultations,clausura,preferential,euthanasia,genoese,outcrops,freemasonry,geometrical,genesee,islets,prometheus,panamanian,thunderbolt,terraced,stara,shipwrecks,futebol,faroese,sharqi,aldermen,zeitung,unify,formula_24,humanism,syntactic,earthen,blyth,taxed,rescinded,suleiman,cymru,dwindled,vitality,superieure,resupply,adolphe,ardennes,rajiv,profiling,olympique,gestation,interfaith,milosevic,tagline,funerary,druze,silvery,plough,shrubland,relaunch,disband,nunatak,minimizing,excessively,waned,attaching,luminosity,bugle,encampment,electrostatic,minesweeper,dubrovnik,rufous,greenock,hochschule,assyrians,extracting,malnutrition,priya,attainment,anhui,connotations,predicate,seabirds,deduced,pseudonyms,gopal,plovdiv,refineries,imitated,kwazulu,terracotta,tenets,discourses,brandeis,whigs,dominions,pulmonate,landslides,tutors,determinant,richelieu,farmstead,tubercles,technicolor,hegel,redundancy,greenpeace,shortening,mules,distilled,xxiii,fundamentalist,acrylic,outbuildings,lighted,corals,signaled,transistors,cavite,austerity,76ers,exposures,dionysius,outlining,commutative,permissible,knowledgeable,howrah,assemblage,inhibited,crewmen,mbit/s,pyramidal,aberdeenshire,bering,rotates,atheism,howitzer,saone,lancet,fermented,contradicted,materiel,ofsted,numeric,uniformity,josephus,nazarene,kuwaiti,noblemen,pediment,emergent,campaigner,akademi,murcia,perugia,gallen,allsvenskan,finned,cavities,matriculation,rosters,twickenham,signatory,propel,readable,contends,artisan,flamboyant,reggio,italo,fumbles,widescreen,rectangle,centimetres,collaborates,envoys,rijeka,phonological,thinly,refractive,civilisation,reductase,cognate,dalhousie,monticello,lighthouses,jitsu,luneburg,socialite,fermi,collectible,optioned,marquee,jokingly,architecturally,kabir,concubine,nationalisation,watercolor,wicklow,acharya,pooja,leibniz,rajendra,nationalized,stalemate,bloggers,glutamate,uplands,shivaji,carolingian,bucuresti,dasht,reappears,muscat,functionally,formulations,hinged,hainan,catechism,autosomal,incremental,asahi,coeur,diversification,multilateral,fewest,recombination,finisher,harrogate,hangul,feasts,photovoltaic,paget,liquidity,alluded,incubation,applauded,choruses,malagasy,hispanics,bequest,underparts,cassava,kazimierz,gastric,eradication,mowtowr,tyrosine,archbishopric,e9e9e9,unproductive,uxbridge,hydrolysis,harbours,officio,deterministic,devonport,kanagawa,breaches,freetown,rhinoceros,chandigarh,janos,sanatorium,liberator,inequalities,agonist,hydrophobic,constructors,nagorno,snowboarding,welcomes,subscribed,iloilo,resuming,catalysts,stallions,jawaharlal,harriers,definitively,roughriders,hertford,inhibiting,elgar,randomized,incumbents,episcopate,rainforests,yangon,improperly,kemal,interpreters,diverged,uttarakhand,umayyad,phnom,panathinaikos,shabbat,diode,jiangxi,forbidding,nozzle,artistry,licensee,processions,staffs,decimated,expressionism,shingle,palsy,ontology,mahayana,maribor,sunil,hostels,edwardian,jetty,freehold,overthrew,eukaryotic,schuylkill,rawalpindi,sheath,recessive,ferenc,mandibles,berlusconi,confessor,convergent,ababa,slugging,rentals,sephardic,equivalently,collagen,markov,dynamically,hailing,depressions,sprawling,fairgrounds,indistinguishable,plutarch,pressurized,banff,coldest,braunschweig,mackintosh,sociedad,wittgenstein,tromso,airbase,lecturers,subtitle,attaches,purified,contemplated,dreamworks,telephony,prophetic,rockland,aylesbury,biscay,coherence,aleksandar,judoka,pageants,theses,homelessness,luthor,sitcoms,hinterland,fifths,derwent,privateers,enigmatic,nationalistic,instructs,superimposed,conformation,tricycle,dusan,attributable,unbeknownst,laptops,etching,archbishops,ayatollah,cranial,gharbi,interprets,lackawanna,abingdon,saltwater,tories,lender,minaj,ancillary,ranching,pembrokeshire,topographical,plagiarism,murong,marque,chameleon,assertions,infiltrated,guildhall,reverence,schenectady,formula_25,kollam,notary,mexicana,initiates,abdication,basra,theorems,ionization,dismantling,eared,censors,budgetary,numeral,verlag,excommunicated,distinguishable,quarried,cagliari,hindustan,symbolizing,watertown,descartes,relayed,enclosures,militarily,sault,devolved,dalian,djokovic,filaments,staunton,tumour,curia,villainous,decentralized,galapagos,moncton,quartets,onscreen,necropolis,brasileiro,multipurpose,alamos,comarca,jorgen,concise,mercia,saitama,billiards,entomologist,montserrat,lindbergh,commuting,lethbridge,phoenician,deviations,anaerobic,denouncing,redoubt,fachhochschule,principalities,negros,announcers,seconded,parrots,konami,revivals,approving,devotee,riyadh,overtook,morecambe,lichen,expressionist,waterline,silverstone,geffen,sternites,aspiration,behavioural,grenville,tripura,mediums,genders,pyotr,charlottesville,sacraments,programmable,ps100,shackleton,garonne,sumerian,surpass,authorizing,interlocking,lagoons,voiceless,advert,steeple,boycotted,alouettes,yosef,oxidative,sassanid,benefiting,sayyid,nauru,predetermined,idealism,maxillary,polymerization,semesters,munchen,conor,outfitted,clapham,progenitor,gheorghe,observational,recognitions,numerically,colonized,hazrat,indore,contaminants,fatality,eradicate,assyria,convocation,cameos,skillful,skoda,corfu,confucius,overtly,ramadan,wollongong,placements,d.c..,permutation,contemporaneous,voltages,elegans,universitat,samar,plunder,dwindling,neuter,antonin,sinhala,campania,solidified,stanzas,fibrous,marburg,modernize,sorcery,deutscher,florets,thakur,disruptive,infielder,disintegration,internazionale,vicariate,effigy,tripartite,corrective,klamath,environs,leavenworth,sandhurst,workmen,compagnie,hoseynabad,strabo,palisades,ordovician,sigurd,grandsons,defection,viacom,sinhalese,innovator,uncontrolled,slavonic,indexes,refrigeration,aircrew,superbike,resumption,neustadt,confrontations,arras,hindenburg,ripon,embedding,isomorphism,dwarves,matchup,unison,lofty,argos,louth,constitutionally,transitive,newington,facelift,degeneration,perceptual,aviators,enclosing,igneous,symbolically,academician,constitutionality,iso/iec,sacrificial,maturation,apprentices,enzymology,naturalistic,hajji,arthropods,abbess,vistula,scuttled,gradients,pentathlon,etudes,freedmen,melaleuca,thrice,conductive,sackville,franciscans,stricter,golds,kites,worshiped,monsignor,trios,orally,tiered,primacy,bodywork,castleford,epidemics,alveolar,chapelle,chemists,hillsboro,soulful,warlords,ngati,huguenot,diurnal,remarking,luger,motorways,gauss,jahan,cutoff,proximal,bandai,catchphrase,jonubi,ossetia,codename,codice_2,throated,itinerant,chechnya,riverfront,leela,evoked,entailed,zamboanga,rejoining,circuitry,haymarket,khartoum,feuds,braced,miyazaki,mirren,lubusz,caricature,buttresses,attrition,characterizes,widnes,evanston,materialism,contradictions,marist,midrash,gainsborough,ulithi,turkmen,vidya,escuela,patrician,inspirations,reagent,premierships,humanistic,euphrates,transitioning,belfry,zedong,adaption,kaliningrad,lobos,epics,waiver,coniferous,polydor,inductee,refitted,moraine,unsatisfactory,worsening,polygamy,rajya,nested,subgenre,broadside,stampeders,lingua,incheon,pretender,peloton,persuading,excitation,multan,predates,tonne,brackish,autoimmune,insulated,podcasts,iraqis,bodybuilding,condominiums,midlothian,delft,debtor,asymmetrical,lycaenidae,forcefully,pathogenic,tamaulipas,andaman,intravenous,advancements,senegalese,chronologically,realigned,inquirer,eusebius,dekalb,additives,shortlist,goldwater,hindustani,auditing,caterpillars,pesticide,nakhon,ingestion,lansdowne,traditionalist,northland,thunderbirds,josip,nominating,locale,ventricular,animators,verandah,epistles,surveyors,anthems,dredd,upheaval,passaic,anatolian,svalbard,associative,floodplain,taranaki,estuaries,irreducible,beginners,hammerstein,allocate,coursework,secreted,counteract,handwritten,foundational,passover,discoverer,decoding,wares,bourgeoisie,playgrounds,nazionale,abbreviations,seanad,golan,mishra,godavari,rebranding,attendances,backstory,interrupts,lettered,hasbro,ultralight,hormozgan,armee,moderne,subdue,disuse,improvisational,enrolment,persists,moderated,carinthia,hatchback,inhibitory,capitalized,anatoly,abstracts,albemarle,bergamo,insolvency,sentai,cellars,walloon,joked,kashmiri,dirac,materialized,renomination,homologous,gusts,eighteens,centrifugal,storied,baluchestan,formula_26,poincare,vettel,infuriated,gauges,streetcars,vedanta,stately,liquidated,goguryeo,swifts,accountancy,levee,acadian,hydropower,eustace,comintern,allotment,designating,torsion,molding,irritation,aerobic,halen,concerted,plantings,garrisoned,gramophone,cytoplasm,onslaught,requisitioned,relieving,genitive,centrist,jeong,espanola,dissolving,chatterjee,sparking,connaught,varese,arjuna,carpathian,empowering,meteorologist,decathlon,opioid,hohenzollern,fenced,ibiza,avionics,footscray,scrum,discounts,filament,directories,a.f.c,stiffness,quaternary,adventurers,transmits,harmonious,taizong,radiating,germantown,ejection,projectors,gaseous,nahuatl,vidyalaya,nightlife,redefined,refuted,destitute,arista,potters,disseminated,distanced,jamboree,kaohsiung,tilted,lakeshore,grained,inflicting,kreis,novelists,descendents,mezzanine,recast,fatah,deregulation,ac/dc,australis,kohgiluyeh,boreal,goths,authoring,intoxicated,nonpartisan,theodosius,pyongyang,shree,boyhood,sanfl,plenipotentiary,photosynthesis,presidium,sinaloa,honshu,texan,avenida,transmembrane,malays,acropolis,catalunya,vases,inconsistencies,methodists,quell,suisse,banat,simcoe,cercle,zealanders,discredited,equine,sages,parthian,fascists,interpolation,classifying,spinoff,yehuda,cruised,gypsum,foaled,wallachia,saraswati,imperialist,seabed,footnotes,nakajima,locales,schoolmaster,drosophila,bridgehead,immanuel,courtier,bookseller,niccolo,stylistically,portmanteau,superleague,konkani,millimetres,arboreal,thanjavur,emulation,sounders,decompression,commoners,infusion,methodological,osage,rococo,anchoring,bayreuth,formula_27,abstracting,symbolized,bayonne,electrolyte,rowed,corvettes,traversing,editorship,sampler,presidio,curzon,adirondack,swahili,rearing,bladed,lemur,pashtun,behaviours,bottling,zaire,recognisable,systematics,leeward,formulae,subdistricts,smithfield,vijaya,buoyancy,boosting,cantonal,rishi,airflow,kamakura,adana,emblems,aquifer,clustering,husayn,woolly,wineries,montessori,turntable,exponentially,caverns,espoused,pianists,vorpommern,vicenza,latterly,o'rourke,williamstown,generale,kosice,duisburg,poirot,marshy,mismanagement,mandalay,dagenham,universes,chiral,radiated,stewards,vegan,crankshaft,kyrgyz,amphibian,cymbals,infrequently,offenbach,environmentalist,repatriated,permutations,midshipmen,loudoun,refereed,bamberg,ornamented,nitric,selim,translational,dorsum,annunciation,gippsland,reflector,informational,regia,reactionary,ahmet,weathering,erlewine,legalized,berne,occupant,divas,manifests,analyzes,disproportionate,mitochondria,totalitarian,paulista,interscope,anarcho,correlate,brookfield,elongate,brunel,ordinal,precincts,volatility,equaliser,hittite,somaliland,ticketing,monochrome,ubuntu,chhattisgarh,titleholder,ranches,referendums,blooms,accommodates,merthyr,religiously,ryukyu,tumultuous,checkpoints,anode,mi'kmaq,cannonball,punctuation,remodelled,assassinations,criminology,alternates,yonge,pixar,namibian,piraeus,trondelag,hautes,lifeboats,shoal,atelier,vehemently,sadat,postcode,jainism,lycoming,undisturbed,lutherans,genomics,popmatters,tabriz,isthmian,notched,autistic,horsham,mites,conseil,bloomsbury,seung,cybertron,idris,overhauled,disbandment,idealized,goldfields,worshippers,lobbyist,ailments,paganism,herbarium,athenians,messerschmitt,faraday,entangled,'olya,untreated,criticising,howitzers,parvati,lobed,debussy,atonement,tadeusz,permeability,mueang,sepals,degli,optionally,fuelled,follies,asterisk,pristina,lewiston,congested,overpass,affixed,pleads,telecasts,stanislaus,cryptographic,friesland,hamstring,selkirk,antisubmarine,inundated,overlay,aggregates,fleur,trolleybus,sagan,ibsen,inductees,beltway,tiled,ladders,cadbury,laplace,ascetic,micronesia,conveying,bellingham,cleft,batches,usaid,conjugation,macedon,assisi,reappointed,brine,jinnah,prairies,screenwriting,oxidized,despatches,linearly,fertilizers,brazilians,absorbs,wagga,modernised,scorsese,ashraf,charlestown,esque,habitable,nizhny,lettres,tuscaloosa,esplanade,coalitions,carbohydrates,legate,vermilion,standardised,galleria,psychoanalytic,rearrangement,substation,competency,nationalised,reshuffle,reconstructions,mehdi,bougainville,receivership,contraception,enlistment,conducive,aberystwyth,solicitors,dismisses,fibrosis,montclair,homeowner,surrealism,s.h.i.e.l.d,peregrine,compilers,1790s,parentage,palmas,rzeszow,worldview,eased,svenska,housemate,bundestag,originator,enlisting,outwards,reciprocity,formula_28,carbohydrate,democratically,firefighting,romagna,acknowledgement,khomeini,carbide,quests,vedas,characteristically,guwahati,brixton,unintended,brothels,parietal,namur,sherbrooke,moldavian,baruch,milieu,undulating,laurier,entre,dijon,ethylene,abilene,heracles,paralleling,ceres,dundalk,falun,auspicious,chisinau,polarity,foreclosure,templates,ojibwe,punic,eriksson,biden,bachchan,glaciation,spitfires,norsk,nonviolent,heidegger,algonquin,capacitance,cassettes,balconies,alleles,airdate,conveys,replays,classifies,infrequent,amine,cuttings,rarer,woking,olomouc,amritsar,rockabilly,illyrian,maoist,poignant,tempore,stalinist,segmented,bandmate,mollusc,muhammed,totalled,byrds,tendered,endogenous,kottayam,aisne,oxidase,overhears,illustrators,verve,commercialization,purplish,directv,moulded,lyttelton,baptismal,captors,saracens,georgios,shorten,polity,grids,fitzwilliam,sculls,impurities,confederations,akhtar,intangible,oscillations,parabolic,harlequin,maulana,ovate,tanzanian,singularity,confiscation,qazvin,speyer,phonemes,overgrown,vicarage,gurion,undocumented,niigata,thrones,preamble,stave,interment,liiga,ataturk,aphrodite,groupe,indentured,habsburgs,caption,utilitarian,ozark,slovenes,reproductions,plasticity,serbo,dulwich,castel,barbuda,salons,feuding,lenape,wikileaks,swamy,breuning,shedding,afield,superficially,operationally,lamented,okanagan,hamadan,accolade,furthering,adolphus,fyodor,abridged,cartoonists,pinkish,suharto,cytochrome,methylation,debit,colspan=9|,refine,taoist,signalled,herding,leaved,bayan,fatherland,rampart,sequenced,negation,storyteller,occupiers,barnabas,pelicans,nadir,conscripted,railcars,prerequisite,furthered,columba,carolinas,markup,gwalior,franche,chaco,eglinton,ramparts,rangoon,metabolites,pollination,croat,televisa,holyoke,testimonial,setlist,safavid,sendai,georgians,shakespearean,galleys,regenerative,krzysztof,overtones,estado,barbary,cherbourg,obispo,sayings,composites,sainsbury,deliberation,cosmological,mahalleh,embellished,ascap,biala,pancras,calumet,grands,canvases,antigens,marianas,defenseman,approximated,seedlings,soren,stele,nuncio,immunology,testimonies,glossary,recollections,suitability,tampere,venous,cohomology,methanol,echoing,ivanovich,warmly,sterilization,imran,multiplying,whitechapel,undersea,xuanzong,tacitus,bayesian,roundhouse,correlations,rioters,molds,fiorentina,bandmates,mezzo,thani,guerilla,200th,premiums,tamils,deepwater,chimpanzees,tribesmen,selwyn,globo,turnovers,punctuated,erode,nouvelle,banbury,exponents,abolishing,helical,maimonides,endothelial,goteborg,infield,encroachment,cottonwood,mazowiecki,parable,saarbrucken,reliever,epistemology,artistes,enrich,rationing,formula_29,palmyra,subfamilies,kauai,zoran,fieldwork,arousal,creditor,friuli,celts,comoros,equated,escalation,negev,tallied,inductive,anion,netanyahu,mesoamerican,lepidoptera,aspirated,remit,westmorland,italic,crosse,vaclav,fuego,owain,balmain,venetians,ethnicities,deflected,ticino,apulia,austere,flycatcher,reprising,repressive,hauptbahnhof,subtype,ophthalmology,summarizes,eniwetok,colonisation,subspace,nymphalidae,earmarked,tempe,burnet,crests,abbots,norwegians,enlarge,ashoka,frankfort,livorno,malware,renters,singly,iliad,moresby,rookies,gustavus,affirming,alleges,legume,chekhov,studded,abdicated,suzhou,isidore,townsite,repayment,quintus,yankovic,amorphous,constructor,narrowing,industrialists,tanganyika,capitalization,connective,mughals,rarities,aerodynamics,worthing,antalya,diagnostics,shaftesbury,thracian,obstetrics,benghazi,multiplier,orbitals,livonia,roscommon,intensify,ravel,oaths,overseer,locomotion,necessities,chickasaw,strathclyde,treviso,erfurt,aortic,contemplation,accrington,markazi,predeceased,hippocampus,whitecaps,assemblyman,incursion,ethnography,extraliga,reproducing,directorship,benzene,byway,stupa,taxable,scottsdale,onondaga,favourably,countermeasures,lithuanians,thatched,deflection,tarsus,consuls,annuity,paralleled,contextual,anglian,klang,hoisted,multilingual,enacting,samaj,taoiseach,carthaginian,apologised,hydrology,entrant,seamless,inflorescences,mugabe,westerners,seminaries,wintering,penzance,mitre,sergeants,unoccupied,delimitation,discriminate,upriver,abortive,nihon,bessarabia,calcareous,buffaloes,patil,daegu,streamline,berks,chaparral,laity,conceptions,typified,kiribati,threaded,mattel,eccentricity,signified,patagonia,slavonia,certifying,adnan,astley,sedition,minimally,enumerated,nikos,goalless,walid,narendra,causa,missoula,coolant,dalek,outcrop,hybridization,schoolchildren,peasantry,afghans,confucianism,shahr,gallic,tajik,kierkegaard,sauvignon,commissar,patriarchs,tuskegee,prussians,laois,ricans,talmudic,officiating,aesthetically,baloch,antiochus,separatists,suzerainty,arafat,shading,u.s.c,chancellors,inc..,toolkit,nepenthes,erebidae,solicited,pratap,kabbalah,alchemist,caltech,darjeeling,biopic,spillway,kaiserslautern,nijmegen,bolstered,neath,pahlavi,eugenics,bureaus,retook,northfield,instantaneous,deerfield,humankind,selectivity,putative,boarders,cornhuskers,marathas,raikkonen,aliabad,mangroves,garages,gulch,karzai,poitiers,chernobyl,thane,alexios,belgrano,scion,solubility,urbanized,executable,guizhou,nucleic,tripled,equalled,harare,houseguests,potency,ghazi,repeater,overarching,regrouped,broward,ragtime,d'art,nandi,regalia,campsites,mamluk,plating,wirral,presumption,zenit,archivist,emmerdale,decepticon,carabidae,kagoshima,franconia,guarani,formalism,diagonally,submarginal,denys,walkways,punts,metrolink,hydrographic,droplets,upperside,martyred,hummingbird,antebellum,curiously,mufti,friary,chabad,czechs,shaykh,reactivity,berklee,turbonilla,tongan,sultans,woodville,unlicensed,enmity,dominicans,operculum,quarrying,watercolour,catalyzed,gatwick,'what,mesozoic,auditors,shizuoka,footballing,haldane,telemundo,appended,deducted,disseminate,o'shea,pskov,abrasive,entente,gauteng,calicut,lemurs,elasticity,suffused,scopula,staining,upholding,excesses,shostakovich,loanwords,naidu,championnat,chromatography,boasting,goaltenders,engulfed,salah,kilogram,morristown,shingles,shi'a,labourer,renditions,frantisek,jekyll,zonal,nanda,sheriffs,eigenvalues,divisione,endorsing,ushered,auvergne,cadres,repentance,freemasons,utilising,laureates,diocletian,semiconductors,o'grady,vladivostok,sarkozy,trackage,masculinity,hydroxyl,mervyn,muskets,speculations,gridiron,opportunistic,mascots,aleutian,fillies,sewerage,excommunication,borrowers,capillary,trending,sydenham,synthpop,rajah,cagayan,deportes,kedah,faure,extremism,michoacan,levski,culminates,occitan,bioinformatics,unknowingly,inciting,emulated,footpaths,piacenza,dreadnought,viceroyalty,oceanographic,scouted,combinatorial,ornithologist,cannibalism,mujahideen,independiente,cilicia,hindwing,minimized,odeon,gyorgy,rubles,purchaser,collieries,kickers,interurban,coiled,lynchburg,respondent,plzen,detractors,etchings,centering,intensification,tomography,ranjit,warblers,retelling,reinstatement,cauchy,modulus,redirected,evaluates,beginner,kalateh,perforated,manoeuvre,scrimmage,internships,megawatts,mottled,haakon,tunbridge,kalyan,summarised,sukarno,quetta,canonized,henryk,agglomeration,coahuila,diluted,chiropractic,yogyakarta,talladega,sheik,cation,halting,reprisals,sulfuric,musharraf,sympathizers,publicised,arles,lectionary,fracturing,startups,sangha,latrobe,rideau,ligaments,blockading,cremona,lichens,fabaceae,modulated,evocative,embodies,battersea,indistinct,altai,subsystem,acidity,somatic,formula_30,tariq,rationality,sortie,ashlar,pokal,cytoplasmic,valour,bangla,displacing,hijacking,spectrometry,westmeath,weill,charing,goias,revolvers,individualized,tenured,nawaz,piquet,chanted,discard,bernd,phalanx,reworking,unilaterally,subclass,yitzhak,piloting,circumvent,disregarded,semicircular,viscous,tibetans,endeavours,retaliated,cretan,vienne,workhouse,sufficiency,aurangzeb,legalization,lipids,expanse,eintracht,sanjak,megas,125th,bahraini,yakima,eukaryotes,thwart,affirmation,peloponnese,retailing,carbonyl,chairwoman,macedonians,dentate,rockaway,correctness,wealthier,metamorphic,aragonese,fermanagh,pituitary,schrodinger,evokes,spoiler,chariots,akita,genitalia,combe,confectionery,desegregation,experiential,commodores,persepolis,viejo,restorations,virtualization,hispania,printmaking,stipend,yisrael,theravada,expended,radium,tweeted,polygonal,lippe,charente,leveraged,cutaneous,fallacy,fragrant,bypasses,elaborately,rigidity,majid,majorca,kongo,plasmodium,skits,audiovisual,eerste,staircases,prompts,coulthard,northwestward,riverdale,beatrix,copyrights,prudential,communicates,mated,obscenity,asynchronous,analyse,hansa,searchlight,farnborough,patras,asquith,qarah,contours,fumbled,pasteur,redistributed,almeria,sanctuaries,jewry,israelite,clinicians,koblenz,bookshop,affective,goulburn,panelist,sikorsky,cobham,mimics,ringed,portraiture,probabilistic,girolamo,intelligible,andalusian,jalal,athenaeum,eritrean,auxiliaries,pittsburg,devolution,sangam,isolating,anglers,cronulla,annihilated,kidderminster,synthesize,popularised,theophilus,bandstand,innumerable,chagrin,retroactively,weser,multiples,birdlife,goryeo,pawnee,grosser,grappling,tactile,ahmadinejad,turboprop,erdogan,matchday,proletarian,adhering,complements,austronesian,adverts,luminaries,archeology,impressionism,conifer,sodomy,interracial,platoons,lessen,postings,pejorative,registrations,cookery,persecutions,microbes,audits,idiosyncratic,subsp,suspensions,restricts,colouring,ratify,instrumentals,nucleotides,sulla,posits,bibliotheque,diameters,oceanography,instigation,subsumed,submachine,acceptor,legation,borrows,sedge,discriminated,loaves,insurers,highgate,detectable,abandons,kilns,sportscaster,harwich,iterations,preakness,arduous,tensile,prabhu,shortwave,philologist,shareholding,vegetative,complexities,councilors,distinctively,revitalize,automaton,amassing,montreux,khanh,surabaya,nurnberg,pernambuco,cuisines,charterhouse,firsts,tercera,inhabitant,homophobia,naturalism,einar,powerplant,coruna,entertainments,whedon,rajputs,raton,democracies,arunachal,oeuvre,wallonia,jeddah,trolleybuses,evangelism,vosges,kiowa,minimise,encirclement,undertakes,emigrant,beacons,deepened,grammars,publius,preeminent,seyyed,repechage,crafting,headingley,osteopathic,lithography,hotly,bligh,inshore,betrothed,olympians,formula_31,dissociation,trivandrum,arran,petrovic,stettin,disembarked,simplification,bronzes,philo,acrobatic,jonsson,conjectured,supercharged,kanto,detects,cheeses,correlates,harmonics,lifecycle,sudamericana,reservists,decayed,elitserien,parametric,113th,dusky,hogarth,modulo,symbiotic,monopolies,discontinuation,converges,southerners,tucuman,eclipses,enclaves,emits,famicom,caricatures,artistically,levelled,mussels,erecting,mouthparts,cunard,octaves,crucible,guardia,unusable,lagrangian,droughts,ephemeral,pashto,canis,tapering,sasebo,silurian,metallurgical,outscored,evolves,reissues,sedentary,homotopy,greyhawk,reagents,inheriting,onshore,tilting,rebuffed,reusable,naturalists,basingstoke,insofar,offensives,dravidian,curators,planks,rajan,isoforms,flagstaff,preside,globular,egalitarian,linkages,biographers,goalscorers,molybdenum,centralised,nordland,jurists,ellesmere,rosberg,hideyoshi,restructure,biases,borrower,scathing,redress,tunnelling,workflow,magnates,mahendra,dissenters,plethora,transcriptions,handicrafts,keyword,xi'an,petrograd,unser,prokofiev,90deg,madan,bataan,maronite,kearny,carmarthen,termini,consulates,disallowed,rockville,bowery,fanzine,docklands,bests,prohibitions,yeltsin,selassie,naturalization,realisation,dispensary,tribeca,abdulaziz,pocahontas,stagnation,pamplona,cuneiform,propagating,subsurface,christgau,epithelium,schwerin,lynching,routledge,hanseatic,upanishad,glebe,yugoslavian,complicity,endowments,girona,mynetworktv,entomology,plinth,ba'ath,supercup,torus,akkadian,salted,englewood,commandery,belgaum,prefixed,colorless,dartford,enthroned,caesarea,nominative,sandown,safeguards,hulled,formula_32,leamington,dieppe,spearhead,generalizations,demarcation,llanelli,masque,brickwork,recounting,sufism,strikingly,petrochemical,onslow,monologues,emigrating,anderlecht,sturt,hossein,sakhalin,subduction,novices,deptford,zanjan,airstrikes,coalfield,reintroduction,timbaland,hornby,messianic,stinging,universalist,situational,radiocarbon,strongman,rowling,saloons,traffickers,overran,fribourg,cambrai,gravesend,discretionary,finitely,archetype,assessor,pilipinas,exhumed,invocation,interacted,digitized,timisoara,smelter,teton,sexism,precepts,srinagar,pilsudski,carmelite,hanau,scoreline,hernando,trekking,blogging,fanbase,wielded,vesicles,nationalization,banja,rafts,motoring,luang,takeda,girder,stimulates,histone,sunda,nanoparticles,attains,jumpers,catalogued,alluding,pontus,ancients,examiners,shinkansen,ribbentrop,reimbursement,pharmacological,ramat,stringed,imposes,cheaply,transplanted,taiping,mizoram,looms,wallabies,sideman,kootenay,encased,sportsnet,revolutionized,tangier,benthic,runic,pakistanis,heatseekers,shyam,mishnah,presbyterians,stadt,sutras,straddles,zoroastrian,infer,fueling,gymnasts,ofcom,gunfight,journeyman,tracklist,oshawa,ps500,pa'in,mackinac,xiongnu,mississippian,breckinridge,freemason,bight,autoroute,liberalization,distantly,thrillers,solomons,presumptive,romanization,anecdotal,bohemians,unpaved,milder,concurred,spinners,alphabets,strenuous,rivieres,kerrang,mistreatment,dismounted,intensively,carlist,dancehall,shunting,pluralism,trafficked,brokered,bonaventure,bromide,neckar,designates,malian,reverses,sotheby,sorghum,serine,environmentalists,languedoc,consulship,metering,bankstown,handlers,militiamen,conforming,regularity,pondicherry,armin,capsized,consejo,capitalists,drogheda,granular,purged,acadians,endocrine,intramural,elicit,terns,orientations,miklos,omitting,apocryphal,slapstick,brecon,pliocene,affords,typography,emigre,tsarist,tomasz,beset,nishi,necessitating,encyclical,roleplaying,journeyed,inflow,sprints,progressives,novosibirsk,cameroonian,ephesus,speckled,kinshasa,freiherr,burnaby,dalmatian,torrential,rigor,renegades,bhakti,nurburgring,cosimo,convincingly,reverting,visayas,lewisham,charlottetown,charadriiformesfamily,transferable,jodhpur,converters,deepening,camshaft,underdeveloped,protease,polonia,uterine,quantify,tobruk,dealerships,narasimha,fortran,inactivity,1780s,victors,categorised,naxos,workstation,skink,sardinian,chalice,precede,dammed,sondheim,phineas,tutored,sourcing,uncompromising,placer,tyneside,courtiers,proclaims,pharmacies,hyogo,booksellers,sengoku,kursk,spectrometer,countywide,wielkopolski,bobsleigh,shetty,llywelyn,consistory,heretics,guinean,cliches,individualism,monolithic,imams,usability,bursa,deliberations,railings,torchwood,inconsistency,balearic,stabilizer,demonstrator,facet,radioactivity,outboard,educates,d'oyly,heretical,handover,jurisdictional,shockwave,hispaniola,conceptually,routers,unaffiliated,trentino,formula_33,cypriots,intervenes,neuchatel,formulating,maggiore,delisted,alcohols,thessaly,potable,estimator,suborder,fluency,mimicry,clergymen,infrastructures,rivals.com,baroda,subplot,majlis,plano,clinching,connotation,carinae,savile,intercultural,transcriptional,sandstones,ailerons,annotations,impresario,heinkel,scriptural,intermodal,astrological,ribbed,northeastward,posited,boers,utilise,kalmar,phylum,breakwater,skype,textured,guideline,azeri,rimini,massed,subsidence,anomalous,wolfsburg,polyphonic,accrediting,vodacom,kirov,captaining,kelantan,logie,fervent,eamon,taper,bundeswehr,disproportionately,divination,slobodan,pundits,hispano,kinetics,reunites,makati,ceasing,statistician,amending,chiltern,eparchy,riverine,melanoma,narragansett,pagans,raged,toppled,breaching,zadar,holby,dacian,ochre,velodrome,disparities,amphoe,sedans,webpage,williamsport,lachlan,groton,baring,swastika,heliport,unwillingness,razorbacks,exhibitors,foodstuffs,impacting,tithe,appendages,dermot,subtypes,nurseries,balinese,simulating,stary,remakes,mundi,chautauqua,geologically,stockade,hakka,dilute,kalimantan,pahang,overlapped,fredericton,baha'u'llah,jahangir,damping,benefactors,shomali,triumphal,cieszyn,paradigms,shielded,reggaeton,maharishi,zambian,shearing,golestan,mirroring,partitioning,flyover,songbook,incandescent,merrimack,huguenots,sangeet,vulnerabilities,trademarked,drydock,tantric,honoris,queenstown,labelling,iterative,enlists,statesmen,anglicans,herge,qinghai,burgundian,islami,delineated,zhuge,aggregated,banknote,qatari,suitably,tapestries,asymptotic,charleroi,majorities,pyramidellidae,leanings,climactic,tahir,ramsar,suppressor,revisionist,trawler,ernakulam,penicillium,categorization,slits,entitlement,collegium,earths,benefice,pinochet,puritans,loudspeaker,stockhausen,eurocup,roskilde,alois,jaroslav,rhondda,boutiques,vigor,neurotransmitter,ansar,malden,ferdinando,sported,relented,intercession,camberwell,wettest,thunderbolts,positional,oriel,cloverleaf,penalized,shoshone,rajkumar,completeness,sharjah,chromosomal,belgians,woolen,ultrasonic,sequentially,boleyn,mordella,microsystems,initiator,elachista,mineralogy,rhododendron,integrals,compostela,hamza,sawmills,stadio,berlioz,maidens,stonework,yachting,tappeh,myocardial,laborer,workstations,costumed,nicaea,lanark,roundtable,mashhad,nablus,algonquian,stuyvesant,sarkar,heroines,diwan,laments,intonation,intrigues,almaty,feuded,grandes,algarve,rehabilitate,macrophages,cruciate,dismayed,heuristic,eliezer,kozhikode,covalent,finalised,dimorphism,yaroslavl,overtaking,leverkusen,middlebury,feeders,brookings,speculates,insoluble,lodgings,jozsef,cysteine,shenyang,habilitation,spurious,brainchild,mtdna,comique,albedo,recife,partick,broadening,shahi,orientated,himalaya,swabia,palme,mennonites,spokeswoman,conscripts,sepulchre,chartres,eurozone,scaffold,invertebrate,parishad,bagan,heian,watercolors,basse,supercomputer,commences,tarragona,plainfield,arthurian,functor,identically,murex,chronicling,pressings,burrowing,histoire,guayaquil,goalkeeping,differentiable,warburg,machining,aeneas,kanawha,holocene,ramesses,reprisal,qingdao,avatars,turkestan,cantatas,besieging,repudiated,teamsters,equipping,hydride,ahmadiyya,euston,bottleneck,computations,terengganu,kalinga,stela,rediscovery,'this,azhar,stylised,karelia,polyethylene,kansai,motorised,lounges,normalization,calculators,1700s,goalkeepers,unfolded,commissary,cubism,vignettes,multiverse,heaters,briton,sparingly,childcare,thorium,plock,riksdag,eunuchs,catalysis,limassol,perce,uncensored,whitlam,ulmus,unites,mesopotamian,refraction,biodiesel,forza,fulda,unseated,mountbatten,shahrak,selenium,osijek,mimicking,antimicrobial,axons,simulcasting,donizetti,swabian,sportsmen,hafiz,neared,heraclius,locates,evaded,subcarpathian,bhubaneswar,negeri,jagannath,thaksin,aydin,oromo,lateran,goldsmiths,multiculturalism,cilia,mihai,evangelists,lorient,qajar,polygons,vinod,mechanised,anglophone,prefabricated,mosses,supervillain,airliners,biofuels,iodide,innovators,valais,wilberforce,logarithm,intelligentsia,dissipation,sanctioning,duchies,aymara,porches,simulators,mostar,telepathic,coaxial,caithness,burghs,fourths,stratification,joaquim,scribes,meteorites,monarchist,germination,vries,desiring,replenishment,istria,winemaking,tammany,troupes,hetman,lanceolate,pelagic,triptych,primeira,scant,outbound,hyphae,denser,bentham,basie,normale,executes,ladislaus,kontinental,herat,cruiserweight,activision,customization,manoeuvres,inglewood,northwood,waveform,investiture,inpatient,alignments,kiryat,rabat,archimedes,ustad,monsanto,archetypal,kirkby,sikhism,correspondingly,catskill,overlaid,petrels,widowers,unicameral,federalists,metalcore,gamerankings,mussel,formula_34,lymphocytes,cystic,southgate,vestiges,immortals,kalam,strove,amazons,pocono,sociologists,sopwith,adheres,laurens,caregivers,inspecting,transylvanian,rebroadcast,rhenish,miserables,pyrams,blois,newtonian,carapace,redshirt,gotland,nazir,unilever,distortions,linebackers,federalism,mombasa,lumen,bernoulli,favouring,aligarh,denounce,steamboats,dnieper,stratigraphic,synths,bernese,umass,icebreaker,guanajuato,heisenberg,boldly,diodes,ladakh,dogmatic,scriptwriter,maritimes,battlestar,symposia,adaptable,toluca,bhavan,nanking,ieyasu,picardy,soybean,adalbert,brompton,deutsches,brezhnev,glandular,laotian,hispanicized,ibadan,personification,dalit,yamuna,regio,dispensed,yamagata,zweibrucken,revising,fandom,stances,participle,flavours,khitan,vertebral,crores,mayaguez,dispensation,guntur,undefined,harpercollins,unionism,meena,leveling,philippa,refractory,telstra,judea,attenuation,pylons,elaboration,elegy,edging,gracillariidae,residencies,absentia,reflexive,deportations,dichotomy,stoves,sanremo,shimon,menachem,corneal,conifers,mordellidae,facsimile,diagnoses,cowper,citta,viticulture,divisive,riverview,foals,mystics,polyhedron,plazas,airspeed,redgrave,motherland,impede,multiplicity,barrichello,airships,pharmacists,harvester,clays,payloads,differentiating,popularize,caesars,tunneling,stagnant,circadian,indemnity,sensibilities,musicology,prefects,serfs,metra,lillehammer,carmarthenshire,kiosks,welland,barbican,alkyl,tillandsia,gatherers,asociacion,showings,bharati,brandywine,subversion,scalable,pfizer,dawla,barium,dardanelles,nsdap,konig,ayutthaya,hodgkin,sedimentation,completions,purchasers,sponsorships,maximizing,banked,taoism,minot,enrolls,fructose,aspired,capuchin,outages,artois,carrollton,totality,osceola,pawtucket,fontainebleau,converged,queretaro,competencies,botha,allotments,sheaf,shastri,obliquely,banding,catharines,outwardly,monchengladbach,driest,contemplative,cassini,ranga,pundit,kenilworth,tiananmen,disulfide,formula_35,townlands,codice_3,looping,caravans,rachmaninoff,segmentation,fluorine,anglicised,gnostic,dessau,discern,reconfigured,altrincham,rebounding,battlecruiser,ramblers,1770s,convective,triomphe,miyagi,mourners,instagram,aloft,breastfeeding,courtyards,folkestone,changsha,kumamoto,saarland,grayish,provisionally,appomattox,uncial,classicism,mahindra,elapsed,supremes,monophyletic,cautioned,formula_36,noblewoman,kernels,sucre,swaps,bengaluru,grenfell,epicenter,rockhampton,worshipful,licentiate,metaphorical,malankara,amputated,wattle,palawan,tankobon,nobunaga,polyhedra,transduction,jilin,syrians,affinities,fluently,emanating,anglicized,sportscar,botanists,altona,dravida,chorley,allocations,kunming,luanda,premiering,outlived,mesoamerica,lingual,dissipating,impairments,attenborough,balustrade,emulator,bakhsh,cladding,increments,ascents,workington,qal'eh,winless,categorical,petrel,emphasise,dormer,toros,hijackers,telescopic,solidly,jankovic,cession,gurus,madoff,newry,subsystems,northside,talib,englishmen,farnese,holographic,electives,argonne,scrivener,predated,brugge,nauvoo,catalyses,soared,siddeley,graphically,powerlifting,funicular,sungai,coercive,fusing,uncertainties,locos,acetic,diverge,wedgwood,dressings,tiebreaker,didactic,vyacheslav,acreage,interplanetary,battlecruisers,sunbury,alkaloids,hairpin,automata,wielkie,interdiction,plugins,monkees,nudibranch,esporte,approximations,disabling,powering,characterisation,ecologically,martinsville,termen,perpetuated,lufthansa,ascendancy,motherboard,bolshoi,athanasius,prunus,dilution,invests,nonzero,mendocino,charan,banque,shaheed,counterculture,unita,voivode,hospitalization,vapour,supermarine,resistor,steppes,osnabruck,intermediates,benzodiazepines,sunnyside,privatized,geopolitical,ponta,beersheba,kievan,embody,theoretic,sangh,cartographer,blige,rotors,thruway,battlefields,discernible,demobilized,broodmare,colouration,sagas,policymakers,serialization,augmentation,hoare,frankfurter,transnistria,kinases,detachable,generational,converging,antiaircraft,khaki,bimonthly,coadjutor,arkhangelsk,kannur,buffers,livonian,northwich,enveloped,cysts,yokozuna,herne,beeching,enron,virginian,woollen,excepting,competitively,outtakes,recombinant,hillcrest,clearances,pathe,cumbersome,brasov,u.s.a,likud,christiania,cruciform,hierarchies,wandsworth,lupin,resins,voiceover,sitar,electrochemical,mediacorp,typhus,grenadiers,hepatic,pompeii,weightlifter,bosniak,oxidoreductase,undersecretary,rescuers,ranji,seleucid,analysing,exegesis,tenancy,toure,kristiansand,110th,carillon,minesweepers,poitou,acceded,palladian,redevelop,naismith,rifled,proletariat,shojo,hackensack,harvests,endpoint,kuban,rosenborg,stonehenge,authorisation,jacobean,revocation,compatriots,colliding,undetermined,okayama,acknowledgment,angelou,fresnel,chahar,ethereal,mg/kg,emmet,mobilised,unfavourable,cultura,characterizing,parsonage,skeptics,expressways,rabaul,medea,guardsmen,visakhapatnam,caddo,homophobic,elmwood,encircling,coexistence,contending,seljuk,mycologist,infertility,moliere,insolvent,covenants,underpass,holme,landesliga,workplaces,delinquency,methamphetamine,contrived,tableau,tithes,overlying,usurped,contingents,spares,oligocene,molde,beatification,mordechai,balloting,pampanga,navigators,flowered,debutant,codec,orogeny,newsletters,solon,ambivalent,ubisoft,archdeaconry,harpers,kirkus,jabal,castings,kazhagam,sylhet,yuwen,barnstaple,amidships,causative,isuzu,watchtower,granules,canaveral,remuneration,insurer,payout,horizonte,integrative,attributing,kiwis,skanderbeg,asymmetry,gannett,urbanism,disassembled,unaltered,precluded,melodifestivalen,ascends,plugin,gurkha,bisons,stakeholder,industrialisation,abbotsford,sextet,bustling,uptempo,slavia,choreographers,midwives,haram,javed,gazetteer,subsection,natively,weighting,lysine,meera,redbridge,muchmusic,abruzzo,adjoins,unsustainable,foresters,kbit/s,cosmopterigidae,secularism,poetics,causality,phonograph,estudiantes,ceausescu,universitario,adjoint,applicability,gastropods,nagaland,kentish,mechelen,atalanta,woodpeckers,lombards,gatineau,romansh,avraham,acetylcholine,perturbation,galois,wenceslaus,fuzhou,meandering,dendritic,sacristy,accented,katha,therapeutics,perceives,unskilled,greenhouses,analogues,chaldean,timbre,sloped,volodymyr,sadiq,maghreb,monogram,rearguard,caucuses,mures,metabolite,uyezd,determinism,theosophical,corbet,gaels,disruptions,bicameral,ribosomal,wolseley,clarksville,watersheds,tarsi,radon,milanese,discontinuous,aristotelian,whistleblower,representational,hashim,modestly,localised,atrial,hazara,ravana,troyes,appointees,rubus,morningside,amity,aberdare,ganglia,wests,zbigniew,aerobatic,depopulated,corsican,introspective,twinning,hardtop,shallower,cataract,mesolithic,emblematic,graced,lubrication,republicanism,voronezh,bastions,meissen,irkutsk,oboes,hokkien,sprites,tenet,individualist,capitulated,oakville,dysentery,orientalist,hillsides,keywords,elicited,incised,lagging,apoel,lengthening,attractiveness,marauders,sportswriter,decentralization,boltzmann,contradicts,draftsman,precipitate,solihull,norske,consorts,hauptmann,riflemen,adventists,syndromes,demolishing,customize,continuo,peripherals,seamlessly,linguistically,bhushan,orphanages,paraul,lessened,devanagari,quarto,responders,patronymic,riemannian,altoona,canonization,honouring,geodetic,exemplifies,republica,enzymatic,porters,fairmount,pampa,sufferers,kamchatka,conjugated,coachella,uthman,repositories,copious,headteacher,awami,phoneme,homomorphism,franconian,moorland,davos,quantified,kamloops,quarks,mayoralty,weald,peacekeepers,valerian,particulate,insiders,perthshire,caches,guimaraes,piped,grenadines,kosciuszko,trombonist,artemisia,covariance,intertidal,soybeans,beatified,ellipse,fruiting,deafness,dnipropetrovsk,accrued,zealous,mandala,causation,junius,kilowatt,bakeries,montpelier,airdrie,rectified,bungalows,toleration,debian,pylon,trotskyist,posteriorly,two-and-a-half,herbivorous,islamists,poetical,donne,wodehouse,frome,allium,assimilate,phonemic,minaret,unprofitable,darpa,untenable,leaflet,bitcoin,zahir,thresholds,argentino,jacopo,bespoke,stratified,wellbeing,shiite,basaltic,timberwolves,secrete,taunts,marathons,isomers,carre,consecrators,penobscot,pitcairn,sakha,crosstown,inclusions,impassable,fenders,indre,uscgc,jordi,retinue,logarithmic,pilgrimages,railcar,cashel,blackrock,macroscopic,aligning,tabla,trestle,certify,ronson,palps,dissolves,thickened,silicate,taman,walsingham,hausa,lowestoft,rondo,oleksandr,cuyahoga,retardation,countering,cricketing,holborn,identifiers,hells,geophysics,infighting,sculpting,balaji,webbed,irradiation,runestone,trusses,oriya,sojourn,forfeiture,colonize,exclaimed,eucharistic,lackluster,glazing,northridge,gutenberg,stipulates,macroeconomic,priori,outermost,annular,udinese,insulating,headliner,godel,polytope,megalithic,salix,sharapova,derided,muskegon,braintree,plateaus,confers,autocratic,isomer,interstitial,stamping,omits,kirtland,hatchery,evidences,intifada,111th,podgorica,capua,motivating,nuneaton,jakub,korsakov,amitabh,mundial,monrovia,gluten,predictor,marshalling,d'orleans,levers,touchscreen,brantford,fricative,banishment,descendent,antagonism,ludovico,loudspeakers,formula_37,livelihoods,manassas,steamships,dewsbury,uppermost,humayun,lures,pinnacles,dependents,lecce,clumps,observatories,paleozoic,dedicating,samiti,draughtsman,gauls,incite,infringing,nepean,pythagorean,convents,triumvirate,seigneur,gaiman,vagrant,fossa,byproduct,serrated,renfrewshire,sheltering,achaemenid,dukedom,catchers,sampdoria,platelet,bielefeld,fluctuating,phenomenology,strikeout,ethnology,prospectors,woodworking,tatra,wildfires,meditations,agrippa,fortescue,qureshi,wojciech,methyltransferase,accusative,saatchi,amerindian,volcanism,zeeland,toyama,vladimirovich,allege,polygram,redox,budgeted,advisories,nematode,chipset,starscream,tonbridge,hardening,shales,accompanist,paraded,phonographic,whitefish,sportive,audiobook,kalisz,hibernation,latif,duels,ps200,coxeter,nayak,safeguarding,cantabria,minesweeping,zeiss,dunams,catholicos,sawtooth,ontological,nicobar,bridgend,unclassified,intrinsically,hanoverian,rabbitohs,kenseth,alcalde,northumbrian,raritan,septuagint,presse,sevres,origen,dandenong,peachtree,intersected,impeded,usages,hippodrome,novara,trajectories,customarily,yardage,inflected,yanow,kalan,taverns,liguria,librettist,intermarriage,1760s,courant,gambier,infanta,ptolemaic,ukulele,haganah,sceptical,manchukuo,plexus,implantation,hilal,intersex,efficiencies,arbroath,hagerstown,adelphi,diario,marais,matti,lifes,coining,modalities,divya,bletchley,conserving,ivorian,mithridates,generative,strikeforce,laymen,toponymy,pogrom,satya,meticulously,agios,dufferin,yaakov,fortnightly,cargoes,deterrence,prefrontal,przemysl,mitterrand,commemorations,chatsworth,gurdwara,abuja,chakraborty,badajoz,geometries,artiste,diatonic,ganglion,presides,marymount,nanak,cytokines,feudalism,storks,rowers,widens,politico,evangelicals,assailants,pittsfield,allowable,bijapur,telenovelas,dichomeris,glenelg,herbivores,keita,inked,radom,fundraisers,constantius,boheme,portability,komnenos,crystallography,derrida,moderates,tavistock,fateh,spacex,disjoint,bristles,commercialized,interwoven,empirically,regius,bulacan,newsday,showa,radicalism,yarrow,pleura,sayed,structuring,cotes,reminiscences,acetyl,edicts,escalators,aomori,encapsulated,legacies,bunbury,placings,fearsome,postscript,powerfully,keighley,hildesheim,amicus,crevices,deserters,benelux,aurangabad,freeware,ioannis,carpathians,chirac,seceded,prepaid,landlocked,naturalised,yanukovych,soundscan,blotch,phenotypic,determinants,twente,dictatorial,giessen,composes,recherche,pathophysiology,inventories,ayurveda,elevating,gravestone,degeneres,vilayet,popularizing,spartanburg,bloemfontein,previewed,renunciation,genotype,ogilvy,tracery,blacklisted,emissaries,diploid,disclosures,tupolev,shinjuku,antecedents,pennine,braganza,bhattacharya,countable,spectroscopic,ingolstadt,theseus,corroborated,compounding,thrombosis,extremadura,medallions,hasanabad,lambton,perpetuity,glycol,besancon,palaiologos,pandey,caicos,antecedent,stratum,laserdisc,novitiate,crowdfunding,palatal,sorceress,dassault,toughness,celle,cezanne,vientiane,tioga,hander,crossbar,gisborne,cursor,inspectorate,serif,praia,sphingidae,nameplate,psalter,ivanovic,sitka,equalised,mutineers,sergius,outgrowth,creationism,haredi,rhizomes,predominate,undertakings,vulgate,hydrothermal,abbeville,geodesic,kampung,physiotherapy,unauthorised,asteraceae,conservationist,minoan,supersport,mohammadabad,cranbrook,mentorship,legitimately,marshland,datuk,louvain,potawatomi,carnivores,levies,lyell,hymnal,regionals,tinto,shikoku,conformal,wanganui,beira,lleida,standstill,deloitte,formula_40,corbusier,chancellery,mixtapes,airtime,muhlenberg,formula_39,bracts,thrashers,prodigious,gironde,chickamauga,uyghurs,substitutions,pescara,batangas,gregarious,gijon,paleo,mathura,pumas,proportionally,hawkesbury,yucca,kristiania,funimation,fluted,eloquence,mohun,aftermarket,chroniclers,futurist,nonconformist,branko,mannerisms,lesnar,opengl,altos,retainers,ashfield,shelbourne,sulaiman,divisie,gwent,locarno,lieder,minkowski,bivalve,redeployed,cartography,seaway,bookings,decays,ostend,antiquaries,pathogenesis,formula_38,chrysalis,esperance,valli,motogp,homelands,bridged,bloor,ghazal,vulgaris,baekje,prospector,calculates,debtors,hesperiidae,titian,returner,landgrave,frontenac,kelowna,pregame,castelo,caius,canoeist,watercolours,winterthur,superintendents,dissonance,dubstep,adorn,matic,salih,hillel,swordsman,flavoured,emitter,assays,monongahela,deeded,brazzaville,sufferings,babylonia,fecal,umbria,astrologer,gentrification,frescos,phasing,zielona,ecozone,candido,manoj,quadrilateral,gyula,falsetto,prewar,puntland,infinitive,contraceptive,bakhtiari,ohrid,socialization,tailplane,evoking,havelock,macapagal,plundering,104th,keynesian,templars,phrasing,morphologically,czestochowa,humorously,catawba,burgas,chiswick,ellipsoid,kodansha,inwards,gautama,katanga,orthopaedic,heilongjiang,sieges,outsourced,subterminal,vijayawada,hares,oration,leitrim,ravines,manawatu,cryogenic,tracklisting,about.com,ambedkar,degenerated,hastened,venturing,lobbyists,shekhar,typefaces,northcote,rugen,'good,ornithology,asexual,hemispheres,unsupported,glyphs,spoleto,epigenetic,musicianship,donington,diogo,kangxi,bisected,polymorphism,megawatt,salta,embossed,cheetahs,cruzeiro,unhcr,aristide,rayleigh,maturing,indonesians,noire,llano,ffffff,camus,purges,annales,convair,apostasy,algol,phage,apaches,marketers,aldehyde,pompidou,kharkov,forgeries,praetorian,divested,retrospectively,gornji,scutellum,bitumen,pausanias,magnification,imitations,nyasaland,geographers,floodlights,athlone,hippolyte,expositions,clarinetist,razak,neutrinos,rotax,sheykh,plush,interconnect,andalus,cladogram,rudyard,resonator,granby,blackfriars,placido,windscreen,sahel,minamoto,haida,cations,emden,blackheath,thematically,blacklist,pawel,disseminating,academical,undamaged,raytheon,harsher,powhatan,ramachandran,saddles,paderborn,capping,zahra,prospecting,glycine,chromatin,profane,banska,helmand,okinawan,dislocation,oscillators,insectivorous,foyle,gilgit,autonomic,tuareg,sluice,pollinated,multiplexed,granary,narcissus,ranchi,staines,nitra,goalscoring,midwifery,pensioners,algorithmic,meetinghouse,biblioteca,besar,narva,angkor,predate,lohan,cyclical,detainee,occipital,eventing,faisalabad,dartmoor,kublai,courtly,resigns,radii,megachilidae,cartels,shortfall,xhosa,unregistered,benchmarks,dystopian,bulkhead,ponsonby,jovanovic,accumulates,papuan,bhutanese,intuitively,gotaland,headliners,recursion,dejan,novellas,diphthongs,imbued,withstood,analgesic,amplify,powertrain,programing,maidan,alstom,affirms,eradicated,summerslam,videogame,molla,severing,foundered,gallium,atmospheres,desalination,shmuel,howmeh,catolica,bossier,reconstructing,isolates,lyase,tweets,unconnected,tidewater,divisible,cohorts,orebro,presov,furnishing,folklorist,simplifying,centrale,notations,factorization,monarchies,deepen,macomb,facilitation,hennepin,declassified,redrawn,microprocessors,preliminaries,enlarging,timeframe,deutschen,shipbuilders,patiala,ferrous,aquariums,genealogies,vieux,unrecognized,bridgwater,tetrahedral,thule,resignations,gondwana,registries,agder,dataset,felled,parva,analyzer,worsen,coleraine,columella,blockaded,polytechnique,reassembled,reentry,narvik,greys,nigra,knockouts,bofors,gniezno,slotted,hamasaki,ferrers,conferring,thirdly,domestication,photojournalist,universality,preclude,ponting,halved,thereupon,photosynthetic,ostrava,mismatch,pangasinan,intermediaries,abolitionists,transited,headings,ustase,radiological,interconnection,dabrowa,invariants,honorius,preferentially,chantilly,marysville,dialectical,antioquia,abstained,gogol,dirichlet,muricidae,symmetries,reproduces,brazos,fatwa,bacillus,ketone,paribas,chowk,multiplicative,dermatitis,mamluks,devotes,adenosine,newbery,meditative,minefields,inflection,oxfam,conwy,bystrica,imprints,pandavas,infinitesimal,conurbation,amphetamine,reestablish,furth,edessa,injustices,frankston,serjeant,4x200,khazar,sihanouk,longchamp,stags,pogroms,coups,upperparts,endpoints,infringed,nuanced,summing,humorist,pacification,ciaran,jamaat,anteriorly,roddick,springboks,faceted,hypoxia,rigorously,cleves,fatimid,ayurvedic,tabled,ratna,senhora,maricopa,seibu,gauguin,holomorphic,campgrounds,amboy,coordinators,ponderosa,casemates,ouachita,nanaimo,mindoro,zealander,rimsky,cluny,tomaszow,meghalaya,caetano,tilak,roussillon,landtag,gravitation,dystrophy,cephalopods,trombones,glens,killarney,denominated,anthropogenic,pssas,roubaix,carcasses,montmorency,neotropical,communicative,rabindranath,ordinated,separable,overriding,surged,sagebrush,conciliation,codice_4,durrani,phosphatase,qadir,votive,revitalized,taiyuan,tyrannosaurus,graze,slovaks,nematodes,environmentalism,blockhouse,illiteracy,schengen,ecotourism,alternation,conic,wields,hounslow,blackfoot,kwame,ambulatory,volhynia,hordaland,croton,piedras,rohit,drava,conceptualized,birla,illustrative,gurgaon,barisal,tutsi,dezong,nasional,polje,chanson,clarinets,krasnoyarsk,aleksandrovich,cosmonaut,d'este,palliative,midseason,silencing,wardens,durer,girders,salamanders,torrington,supersonics,lauda,farid,circumnavigation,embankments,funnels,bajnoksag,lorries,cappadocia,jains,warringah,retirees,burgesses,equalization,cusco,ganesan,algal,amazonian,lineups,allocating,conquerors,usurper,mnemonic,predating,brahmaputra,ahmadabad,maidenhead,numismatic,subregion,encamped,reciprocating,freebsd,irgun,tortoises,governorates,zionists,airfoil,collated,ajmer,fiennes,etymological,polemic,chadian,clerestory,nordiques,fluctuated,calvados,oxidizing,trailhead,massena,quarrels,dordogne,tirunelveli,pyruvate,pulsed,athabasca,sylar,appointee,serer,japonica,andronikos,conferencing,nicolaus,chemin,ascertained,incited,woodbine,helices,hospitalised,emplacements,to/from,orchestre,tyrannical,pannonia,methodism,pop/rock,shibuya,berbers,despot,seaward,westpac,separator,perpignan,alamein,judeo,publicize,quantization,ethniki,gracilis,menlo,offside,oscillating,unregulated,succumbing,finnmark,metrical,suleyman,raith,sovereigns,bundesstrasse,kartli,fiduciary,darshan,foramen,curler,concubines,calvinism,larouche,bukhara,sophomores,mohanlal,lutheranism,monomer,eamonn,'black,uncontested,immersive,tutorials,beachhead,bindings,permeable,postulates,comite,transformative,indiscriminate,hofstra,associacao,amarna,dermatology,lapland,aosta,babur,unambiguous,formatting,schoolboys,gwangju,superconducting,replayed,adherent,aureus,compressors,forcible,spitsbergen,boulevards,budgeting,nossa,annandale,perumal,interregnum,sassoon,kwajalein,greenbrier,caldas,triangulation,flavius,increment,shakhtar,nullified,pinfall,nomen,microfinance,depreciation,cubist,steeper,splendour,gruppe,everyman,chasers,campaigners,bridle,modality,percussive,darkly,capes,velar,picton,triennial,factional,padang,toponym,betterment,norepinephrine,112th,estuarine,diemen,warehousing,morphism,ideologically,pairings,immunization,crassus,exporters,sefer,flocked,bulbous,deseret,booms,calcite,bohol,elven,groot,pulau,citigroup,wyeth,modernizing,layering,pastiche,complies,printmaker,condenser,theropod,cassino,oxyrhynchus,akademie,trainings,lowercase,coxae,parte,chetniks,pentagonal,keselowski,monocoque,morsi,reticulum,meiosis,clapboard,recoveries,tinge,an/fps,revista,sidon,livre,epidermis,conglomerates,kampong,congruent,harlequins,tergum,simplifies,epidemiological,underwriting,tcp/ip,exclusivity,multidimensional,mysql,columbine,ecologist,hayat,sicilies,levees,handset,aesop,usenet,pacquiao,archiving,alexandrian,compensatory,broadsheet,annotation,bahamian,d'affaires,interludes,phraya,shamans,marmara,customizable,immortalized,ambushes,chlorophyll,diesels,emulsion,rheumatoid,voluminous,screenwriters,tailoring,sedis,runcorn,democratization,bushehr,anacostia,constanta,antiquary,sixtus,radiate,advaita,antimony,acumen,barristers,reichsbahn,ronstadt,symbolist,pasig,cursive,secessionist,afrikaner,munnetra,inversely,adsorption,syllabic,moltke,idioms,midline,olimpico,diphosphate,cautions,radziwill,mobilisation,copelatus,trawlers,unicron,bhaskar,financiers,minimalism,derailment,marxists,oireachtas,abdicate,eigenvalue,zafar,vytautas,ganguly,chelyabinsk,telluride,subordination,ferried,dived,vendee,pictish,dimitrov,expiry,carnation,cayley,magnitudes,lismore,gretna,sandwiched,unmasked,sandomierz,swarthmore,tetra,nanyang,pevsner,dehradun,mormonism,rashi,complying,seaplanes,ningbo,cooperates,strathcona,mornington,mestizo,yulia,edgbaston,palisade,ethno,polytopes,espirito,tymoshenko,pronunciations,paradoxical,taichung,chipmunks,erhard,maximise,accretion,kanda,`abdu'l,narrowest,umpiring,mycenaean,divisor,geneticist,ceredigion,barque,hobbyists,equates,auxerre,spinose,cheil,sweetwater,guano,carboxylic,archiv,tannery,cormorant,agonists,fundacion,anbar,tunku,hindrance,meerut,concordat,secunderabad,kachin,achievable,murfreesboro,comprehensively,forges,broadest,synchronised,speciation,scapa,aliyev,conmebol,tirelessly,subjugated,pillaged,udaipur,defensively,lakhs,stateless,haasan,headlamps,patterning,podiums,polyphony,mcmurdo,mujer,vocally,storeyed,mucosa,multivariate,scopus,minimizes,formalised,certiorari,bourges,populate,overhanging,gaiety,unreserved,borromeo,woolworths,isotopic,bashar,purify,vertebra,medan,juxtaposition,earthwork,elongation,chaudhary,schematic,piast,steeped,nanotubes,fouls,achaea,legionnaires,abdur,qmjhl,embraer,hardback,centerville,ilocos,slovan,whitehorse,mauritian,moulding,mapuche,donned,provisioning,gazprom,jonesboro,audley,lightest,calyx,coldwater,trigonometric,petroglyphs,psychoanalyst,congregate,zambezi,fissure,supervises,bexley,etobicoke,wairarapa,tectonics,emphasises,formula_41,debugging,linfield,spatially,ionizing,ungulates,orinoco,clades,erlangen,news/talk,vols.,ceara,yakovlev,finsbury,entanglement,fieldhouse,graphene,intensifying,grigory,keyong,zacatecas,ninian,allgemeine,keswick,societa,snorri,femininity,najib,monoclonal,guyanese,postulate,huntly,abbeys,machinist,yunus,emphasising,ishaq,urmia,bremerton,pretenders,lumiere,thoroughfares,chikara,dramatized,metathorax,taiko,transcendence,wycliffe,retrieves,umpired,steuben,racehorses,taylors,kuznetsov,montezuma,precambrian,canopies,gaozong,propodeum,disestablished,retroactive,shoreham,rhizome,doubleheader,clinician,diwali,quartzite,shabaab,agassiz,despatched,stormwater,luxemburg,callao,universidade,courland,skane,glyph,dormers,witwatersrand,curacy,qualcomm,nansen,entablature,lauper,hausdorff,lusaka,ruthenian,360deg,cityscape,douai,vaishnava,spars,vaulting,rationalist,gygax,sequestration,typology,pollinates,accelerators,leben,colonials,cenotaph,imparted,carthaginians,equaled,rostrum,gobind,bodhisattva,oberst,bicycling,arabi,sangre,biophysics,hainaut,vernal,lunenburg,apportioned,finches,lajos,nenad,repackaged,zayed,nikephoros,r.e.m,swaminarayan,gestalt,unplaced,crags,grohl,sialkot,unsaturated,gwinnett,linemen,forays,palakkad,writs,instrumentalists,aircrews,badged,terrapins,180deg,oneness,commissariat,changi,pupation,circumscribed,contador,isotropic,administrated,fiefs,nimes,intrusions,minoru,geschichte,nadph,tainan,changchun,carbondale,frisia,swapo,evesham,hawai'i,encyclopedic,transporters,dysplasia,formula_42,onsite,jindal,guetta,judgements,narbonne,permissions,paleogene,rationalism,vilna,isometric,subtracted,chattahoochee,lamina,missa,greville,pervez,lattices,persistently,crystallization,timbered,hawaiians,fouling,interrelated,masood,ripening,stasi,gamal,visigothic,warlike,cybernetics,tanjung,forfar,cybernetic,karelian,brooklands,belfort,greifswald,campeche,inexplicably,refereeing,understory,uninterested,prius,collegiately,sefid,sarsfield,categorize,biannual,elsevier,eisteddfod,declension,autonoma,procuring,misrepresentation,novelization,bibliographic,shamanism,vestments,potash,eastleigh,ionized,turan,lavishly,scilly,balanchine,importers,parlance,'that,kanyakumari,synods,mieszko,crossovers,serfdom,conformational,legislated,exclave,heathland,sadar,differentiates,propositional,konstantinos,photoshop,manche,vellore,appalachia,orestes,taiga,exchanger,grozny,invalidated,baffin,spezia,staunchly,eisenach,robustness,virtuosity,ciphers,inlets,bolagh,understandings,bosniaks,parser,typhoons,sinan,luzerne,webcomic,subtraction,jhelum,businessweek,ceske,refrained,firebox,mitigated,helmholtz,dilip,eslamabad,metalwork,lucan,apportionment,provident,gdynia,schooners,casement,danse,hajjiabad,benazir,buttress,anthracite,newsreel,wollaston,dispatching,cadastral,riverboat,provincetown,nantwich,missal,irreverent,juxtaposed,darya,ennobled,electropop,stereoscopic,maneuverability,laban,luhansk,udine,collectibles,haulage,holyrood,materially,supercharger,gorizia,shkoder,townhouses,pilate,layoffs,folkloric,dialectic,exuberant,matures,malla,ceuta,citizenry,crewed,couplet,stopover,transposition,tradesmen,antioxidant,amines,utterance,grahame,landless,isere,diction,appellant,satirist,urbino,intertoto,subiaco,antonescu,nehemiah,ubiquitin,emcee,stourbridge,fencers,103rd,wranglers,monteverdi,watertight,expounded,xiamen,manmohan,pirie,threefold,antidepressant,sheboygan,grieg,cancerous,diverging,bernini,polychrome,fundamentalism,bihari,critiqued,cholas,villers,tendulkar,dafydd,vastra,fringed,evangelization,episcopalian,maliki,sana'a,ashburton,trianon,allegany,heptathlon,insufficiently,panelists,pharrell,hexham,amharic,fertilized,plumes,cistern,stratigraphy,akershus,catalans,karoo,rupee,minuteman,quantification,wigmore,leutnant,metanotum,weeknights,iridescent,extrasolar,brechin,deuterium,kuching,lyricism,astrakhan,brookhaven,euphorbia,hradec,bhagat,vardar,aylmer,positron,amygdala,speculators,unaccompanied,debrecen,slurry,windhoek,disaffected,rapporteur,mellitus,blockers,fronds,yatra,sportsperson,precession,physiologist,weeknight,pidgin,pharma,condemns,standardize,zetian,tibor,glycoprotein,emporia,cormorants,amalie,accesses,leonhard,denbighshire,roald,116th,will.i.am,symbiosis,privatised,meanders,chemnitz,jabalpur,shing,secede,ludvig,krajina,homegrown,snippets,sasanian,euripides,peder,cimarron,streaked,graubunden,kilimanjaro,mbeki,middleware,flensburg,bukovina,lindwall,marsalis,profited,abkhaz,polis,camouflaged,amyloid,morgantown,ovoid,bodleian,morte,quashed,gamelan,juventud,natchitoches,storyboard,freeview,enumeration,cielo,preludes,bulawayo,1600s,olympiads,multicast,faunal,asura,reinforces,puranas,ziegfeld,handicraft,seamount,kheil,noche,hallmarks,dermal,colorectal,encircle,hessen,umbilicus,sunnis,leste,unwin,disclosing,superfund,montmartre,refuelling,subprime,kolhapur,etiology,bismuth,laissez,vibrational,mazar,alcoa,rumsfeld,recurve,ticonderoga,lionsgate,onlookers,homesteads,filesystem,barometric,kingswood,biofuel,belleza,moshav,occidentalis,asymptomatic,northeasterly,leveson,huygens,numan,kingsway,primogeniture,toyotomi,yazoo,limpets,greenbelt,booed,concurrence,dihedral,ventrites,raipur,sibiu,plotters,kitab,109th,trackbed,skilful,berthed,effendi,fairing,sephardi,mikhailovich,lockyer,wadham,invertible,paperbacks,alphabetic,deuteronomy,constitutive,leathery,greyhounds,estoril,beechcraft,poblacion,cossidae,excreted,flamingos,singha,olmec,neurotransmitters,ascoli,nkrumah,forerunners,dualism,disenchanted,benefitted,centrum,undesignated,noida,o'donoghue,collages,egrets,egmont,wuppertal,cleave,montgomerie,pseudomonas,srinivasa,lymphatic,stadia,resold,minima,evacuees,consumerism,ronde,biochemist,automorphism,hollows,smuts,improvisations,vespasian,bream,pimlico,eglin,colne,melancholic,berhad,ousting,saale,notaulices,ouest,hunslet,tiberias,abdomina,ramsgate,stanislas,donbass,pontefract,sucrose,halts,drammen,chelm,l'arc,taming,trolleys,konin,incertae,licensees,scythian,giorgos,dative,tanglewood,farmlands,o'keeffe,caesium,romsdal,amstrad,corte,oglethorpe,huntingdonshire,magnetization,adapts,zamosc,shooto,cuttack,centrepiece,storehouse,winehouse,morbidity,woodcuts,ryazan,buddleja,buoyant,bodmin,estero,austral,verifiable,periyar,christendom,curtail,shura,kaifeng,cotswold,invariance,seafaring,gorica,androgen,usman,seabird,forecourt,pekka,juridical,audacious,yasser,cacti,qianlong,polemical,d'amore,espanyol,distrito,cartographers,pacifism,serpents,backa,nucleophilic,overturning,duplicates,marksman,oriente,vuitton,oberleutnant,gielgud,gesta,swinburne,transfiguration,1750s,retaken,celje,fredrikstad,asuka,cropping,mansard,donates,blacksmiths,vijayanagara,anuradhapura,germinate,betis,foreshore,jalandhar,bayonets,devaluation,frazione,ablaze,abidjan,approvals,homeostasis,corollary,auden,superfast,redcliffe,luxembourgish,datum,geraldton,printings,ludhiana,honoree,synchrotron,invercargill,hurriedly,108th,three-and-a-half,colonist,bexar,limousin,bessemer,ossetian,nunataks,buddhas,rebuked,thais,tilburg,verdicts,interleukin,unproven,dordrecht,solent,acclamation,muammar,dahomey,operettas,4x400,arrears,negotiators,whitehaven,apparitions,armoury,psychoactive,worshipers,sculptured,elphinstone,airshow,kjell,o'callaghan,shrank,professorships,predominance,subhash,coulomb,sekolah,retrofitted,samos,overthrowing,vibrato,resistors,palearctic,datasets,doordarshan,subcutaneous,compiles,immorality,patchwork,trinidadian,glycogen,pronged,zohar,visigoths,freres,akram,justo,agora,intakes,craiova,playwriting,bukhari,militarism,iwate,petitioners,harun,wisla,inefficiency,vendome,ledges,schopenhauer,kashi,entombed,assesses,tenn.,noumea,baguio,carex,o'donovan,filings,hillsdale,conjectures,blotches,annuals,lindisfarne,negated,vivek,angouleme,trincomalee,cofactor,verkhovna,backfield,twofold,automaker,rudra,freighters,darul,gharana,busway,formula_43,plattsburgh,portuguesa,showrunner,roadmap,valenciennes,erdos,biafra,spiritualism,transactional,modifies,carne,107th,cocos,gcses,tiverton,radiotherapy,meadowlands,gunma,srebrenica,foxtel,authenticated,enslavement,classicist,klaipeda,minstrels,searchable,infantrymen,incitement,shiga,nadp+,urals,guilders,banquets,exteriors,counterattacks,visualized,diacritics,patrimony,svensson,transepts,prizren,telegraphy,najaf,emblazoned,coupes,effluent,ragam,omani,greensburg,taino,flintshire,cd/dvd,lobbies,narrating,cacao,seafarers,bicolor,collaboratively,suraj,floodlit,sacral,puppetry,tlingit,malwa,login,motionless,thien,overseers,vihar,golem,specializations,bathhouse,priming,overdubs,winningest,archetypes,uniao,acland,creamery,slovakian,lithographs,maryborough,confidently,excavating,stillborn,ramallah,audiencia,alava,ternary,hermits,rostam,bauxite,gawain,lothair,captions,gulfstream,timelines,receded,mediating,petain,bastia,rudbar,bidders,disclaimer,shrews,tailings,trilobites,yuriy,jamil,demotion,gynecology,rajinikanth,madrigals,ghazni,flycatchers,vitebsk,bizet,computationally,kashgar,refinements,frankford,heralds,europe/africa,levante,disordered,sandringham,queues,ransacked,trebizond,verdes,comedie,primitives,figurine,organists,culminate,gosport,coagulation,ferrying,hoyas,polyurethane,prohibitive,midfielders,ligase,progesterone,defectors,sweetened,backcountry,diodorus,waterside,nieuport,khwaja,jurong,decried,gorkha,ismaili,300th,octahedral,kindergartens,paseo,codification,notifications,disregarding,risque,reconquista,shortland,atolls,texarkana,perceval,d'etudes,kanal,herbicides,tikva,nuova,gatherer,dissented,soweto,dexterity,enver,bacharach,placekicker,carnivals,automate,maynooth,symplectic,chetnik,militaire,upanishads,distributive,strafing,championing,moiety,miliband,blackadder,enforceable,maung,dimer,stadtbahn,diverges,obstructions,coleophoridae,disposals,shamrocks,aural,banca,bahru,coxed,grierson,vanadium,watermill,radiative,ecoregions,berets,hariri,bicarbonate,evacuations,mallee,nairn,rushden,loggia,slupsk,satisfactorily,milliseconds,cariboo,reine,cyclo,pigmentation,postmodernism,aqueducts,vasari,bourgogne,dilemmas,liquefied,fluminense,alloa,ibaraki,tenements,kumasi,humerus,raghu,labours,putsch,soundcloud,bodybuilder,rakyat,domitian,pesaro,translocation,sembilan,homeric,enforcers,tombstones,lectureship,rotorua,salamis,nikolaos,inferences,superfortress,lithgow,surmised,undercard,tarnow,barisan,stingrays,federacion,coldstream,haverford,ornithological,heerenveen,eleazar,jyoti,murali,bamako,riverbed,subsidised,theban,conspicuously,vistas,conservatorium,madrasa,kingfishers,arnulf,credential,syndicalist,sheathed,discontinuity,prisms,tsushima,coastlines,escapees,vitis,optimizing,megapixel,overground,embattled,halide,sprinters,buoys,mpumalanga,peculiarities,106th,roamed,menezes,macao,prelates,papyri,freemen,dissertations,irishmen,pooled,sverre,reconquest,conveyance,subjectivity,asturian,circassian,formula_45,comdr,thickets,unstressed,monro,passively,harmonium,moveable,dinar,carlsson,elysees,chairing,b'nai,confusingly,kaoru,convolution,godolphin,facilitator,saxophones,eelam,jebel,copulation,anions,livres,licensure,pontypridd,arakan,controllable,alessandria,propelling,stellenbosch,tiber,wolka,liberators,yarns,d'azur,tsinghua,semnan,amhara,ablation,melies,tonality,historique,beeston,kahne,intricately,sonoran,robespierre,gyrus,boycotts,defaulted,infill,maranhao,emigres,framingham,paraiba,wilhelmshaven,tritium,skyway,labial,supplementation,possessor,underserved,motets,maldivian,marrakech,quays,wikimedia,turbojet,demobilization,petrarch,encroaching,sloops,masted,karbala,corvallis,agribusiness,seaford,stenosis,hieronymus,irani,superdraft,baronies,cortisol,notability,veena,pontic,cyclin,archeologists,newham,culled,concurring,aeolian,manorial,shouldered,fords,philanthropists,105th,siddharth,gotthard,halim,rajshahi,jurchen,detritus,practicable,earthenware,discarding,travelogue,neuromuscular,elkhart,raeder,zygmunt,metastasis,internees,102nd,vigour,upmarket,summarizing,subjunctive,offsets,elizabethtown,udupi,pardubice,repeaters,instituting,archaea,substandard,technische,linga,anatomist,flourishes,velika,tenochtitlan,evangelistic,fitchburg,springbok,cascading,hydrostatic,avars,occasioned,filipina,perceiving,shimbun,africanus,consternation,tsing,optically,beitar,45deg,abutments,roseville,monomers,huelva,lotteries,hypothalamus,internationalist,electromechanical,hummingbirds,fibreglass,salaried,dramatists,uncovers,invokes,earners,excretion,gelding,ancien,aeronautica,haverhill,stour,ittihad,abramoff,yakov,ayodhya,accelerates,industrially,aeroplanes,deleterious,dwelt,belvoir,harpalus,atpase,maluku,alasdair,proportionality,taran,epistemological,interferometer,polypeptide,adjudged,villager,metastatic,marshalls,madhavan,archduchess,weizmann,kalgoorlie,balan,predefined,sessile,sagaing,brevity,insecticide,psychosocial,africana,steelworks,aether,aquifers,belem,mineiro,almagro,radiators,cenozoic,solute,turbocharger,invicta,guested,buccaneer,idolatry,unmatched,paducah,sinestro,dispossessed,conforms,responsiveness,cyanobacteria,flautist,procurator,complementing,semifinalist,rechargeable,permafrost,cytokine,refuges,boomed,gelderland,franchised,jinan,burnie,doubtless,randomness,colspan=12,angra,ginebra,famers,nuestro,declarative,roughness,lauenburg,motile,rekha,issuer,piney,interceptors,napoca,gipsy,formulaic,formula_44,viswanathan,ebrahim,thessalonica,galeria,muskogee,unsold,html5,taito,mobutu,icann,carnarvon,fairtrade,morphisms,upsilon,nozzles,fabius,meander,murugan,strontium,episcopacy,sandinista,parasol,attenuated,bhima,primeval,panay,ordinator,negara,osteoporosis,glossop,ebook,paradoxically,grevillea,modoc,equating,phonetically,legumes,covariant,dorje,quatre,bruxelles,pyroclastic,shipbuilder,zhaozong,obscuring,sveriges,tremolo,extensible,barrack,multnomah,hakon,chaharmahal,parsing,volumetric,astrophysical,glottal,combinatorics,freestanding,encoder,paralysed,cavalrymen,taboos,heilbronn,orientalis,lockport,marvels,ozawa,dispositions,waders,incurring,saltire,modulate,papilio,phenol,intermedia,rappahannock,plasmid,fortify,phenotypes,transiting,correspondences,leaguer,larnaca,incompatibility,mcenroe,deeming,endeavoured,aboriginals,helmed,salar,arginine,werke,ferrand,expropriated,delimited,couplets,phoenicians,petioles,ouster,anschluss,protectionist,plessis,urchins,orquesta,castleton,juniata,bittorrent,fulani,donji,mykola,rosemont,chandos,scepticism,signer,chalukya,wicketkeeper,coquitlam,programmatic,o'brian,carteret,urology,steelhead,paleocene,konkan,bettered,venkatesh,surfacing,longitudinally,centurions,popularization,yazid,douro,widths,premios,leonards,gristmill,fallujah,arezzo,leftists,ecliptic,glycerol,inaction,disenfranchised,acrimonious,depositing,parashah,cockatoo,marechal,bolzano,chios,cablevision,impartiality,pouches,thickly,equities,bentinck,emotive,boson,ashdown,conquistadors,parsi,conservationists,reductive,newlands,centerline,ornithologists,waveguide,nicene,philological,hemel,setanta,masala,aphids,convening,casco,matrilineal,chalcedon,orthographic,hythe,replete,damming,bolivarian,admixture,embarks,borderlands,conformed,nagarjuna,blenny,chaitanya,suwon,shigeru,tatarstan,lingayen,rejoins,grodno,merovingian,hardwicke,puducherry,prototyping,laxmi,upheavals,headquarter,pollinators,bromine,transom,plantagenet,arbuthnot,chidambaram,woburn,osamu,panelling,coauthored,zhongshu,hyaline,omissions,aspergillus,offensively,electrolytic,woodcut,sodom,intensities,clydebank,piotrkow,supplementing,quipped,focke,harbinger,positivism,parklands,wolfenbuttel,cauca,tryptophan,taunus,curragh,tsonga,remand,obscura,ashikaga,eltham,forelimbs,analogs,trnava,observances,kailash,antithesis,ayumi,abyssinia,dorsally,tralee,pursuers,misadventures,padova,perot,mahadev,tarim,granth,licenced,compania,patuxent,baronial,korda,cochabamba,codices,karna,memorialized,semaphore,playlists,mandibular,halal,sivaji,scherzinger,stralsund,foundries,ribosome,mindfulness,nikolayevich,paraphyletic,newsreader,catalyze,ioannina,thalamus,gbit/s,paymaster,sarab,500th,replenished,gamepro,cracow,formula_46,gascony,reburied,lessing,easement,transposed,meurthe,satires,proviso,balthasar,unbound,cuckoos,durbar,louisbourg,cowes,wholesalers,manet,narita,xiaoping,mohamad,illusory,cathal,reuptake,alkaloid,tahrir,mmorpg,underlies,anglicanism,repton,aharon,exogenous,buchenwald,indigent,odostomia,milled,santorum,toungoo,nevsky,steyr,urbanisation,darkseid,subsonic,canaanite,akiva,eglise,dentition,mediators,cirencester,peloponnesian,malmesbury,durres,oerlikon,tabulated,saens,canaria,ischemic,esterhazy,ringling,centralization,walthamstow,nalanda,lignite,takht,leninism,expiring,circe,phytoplankton,promulgation,integrable,breeches,aalto,menominee,borgo,scythians,skrull,galleon,reinvestment,raglan,reachable,liberec,airframes,electrolysis,geospatial,rubiaceae,interdependence,symmetrically,simulcasts,keenly,mauna,adipose,zaidi,fairport,vestibular,actuators,monochromatic,literatures,congestive,sacramental,atholl,skytrain,tycho,tunings,jamia,catharina,modifier,methuen,tapings,infiltrating,colima,grafting,tauranga,halides,pontificate,phonetics,koper,hafez,grooved,kintetsu,extrajudicial,linkoping,cyberpunk,repetitions,laurentian,parnu,bretton,darko,sverdlovsk,foreshadowed,akhenaten,rehnquist,gosford,coverts,pragmatism,broadleaf,ethiopians,instated,mediates,sodra,opulent,descriptor,enugu,shimla,leesburg,officership,giffard,refectory,lusitania,cybermen,fiume,corus,tydfil,lawrenceville,ocala,leviticus,burghers,ataxia,richthofen,amicably,acoustical,watling,inquired,tiempo,multiracial,parallelism,trenchard,tokyopop,germanium,usisl,philharmonia,shapur,jacobites,latinized,sophocles,remittances,o'farrell,adder,dimitrios,peshwa,dimitar,orlov,outstretched,musume,satish,dimensionless,serialised,baptisms,pagasa,antiviral,1740s,quine,arapaho,bombardments,stratosphere,ophthalmic,injunctions,carbonated,nonviolence,asante,creoles,sybra,boilermakers,abington,bipartite,permissive,cardinality,anheuser,carcinogenic,hohenlohe,surinam,szeged,infanticide,generically,floorball,'white,automakers,cerebellar,homozygous,remoteness,effortlessly,allude,'great,headmasters,minting,manchurian,kinabalu,wemyss,seditious,widgets,marbled,almshouses,bards,subgenres,tetsuya,faulting,kickboxer,gaulish,hoseyn,malton,fluvial,questionnaires,mondale,downplayed,traditionalists,vercelli,sumatran,landfills,gamesradar,exerts,franciszek,unlawfully,huesca,diderot,libertarians,professorial,laane,piecemeal,conidae,taiji,curatorial,perturbations,abstractions,szlachta,watercraft,mullah,zoroastrianism,segmental,khabarovsk,rectors,affordability,scuola,diffused,stena,cyclonic,workpiece,romford,'little,jhansi,stalag,zhongshan,skipton,maracaibo,bernadotte,thanet,groening,waterville,encloses,sahrawi,nuffield,moorings,chantry,annenberg,islay,marchers,tenses,wahid,siegen,furstenberg,basques,resuscitation,seminarians,tympanum,gentiles,vegetarianism,tufted,venkata,fantastical,pterophoridae,machined,superposition,glabrous,kaveri,chicane,executors,phyllonorycter,bidirectional,jasta,undertones,touristic,majapahit,navratilova,unpopularity,barbadian,tinian,webcast,hurdler,rigidly,jarrah,staphylococcus,igniting,irrawaddy,stabilised,airstrike,ragas,wakayama,energetically,ekstraklasa,minibus,largemouth,cultivators,leveraging,waitangi,carnaval,weaves,turntables,heydrich,sextus,excavate,govind,ignaz,pedagogue,uriah,borrowings,gemstones,infractions,mycobacterium,batavian,massing,praetor,subalpine,massoud,passers,geostationary,jalil,trainsets,barbus,impair,budejovice,denbigh,pertain,historicity,fortaleza,nederlandse,lamenting,masterchef,doubs,gemara,conductance,ploiesti,cetaceans,courthouses,bhagavad,mihailovic,occlusion,bremerhaven,bulwark,morava,kaine,drapery,maputo,conquistador,kaduna,famagusta,first-past-the-post,erudite,galton,undated,tangential,filho,dismembered,dashes,criterium,darwen,metabolized,blurring,everard,randwick,mohave,impurity,acuity,ansbach,chievo,surcharge,plantain,algoma,porosity,zirconium,selva,sevenoaks,venizelos,gwynne,golgi,imparting,separatism,courtesan,idiopathic,gravestones,hydroelectricity,babar,orford,purposeful,acutely,shard,ridgewood,viterbo,manohar,expropriation,placenames,brevis,cosine,unranked,richfield,newnham,recoverable,flightless,dispersing,clearfield,abu'l,stranraer,kempe,streamlining,goswami,epidermal,pieta,conciliatory,distilleries,electrophoresis,bonne,tiago,curiosities,candidature,picnicking,perihelion,lintel,povoa,gullies,configure,excision,facies,signers,1730s,insufficiency,semiotics,streatham,deactivation,entomological,skippers,albacete,parodying,escherichia,honorees,singaporeans,counterterrorism,tiruchirappalli,omnivorous,metropole,globalisation,athol,unbounded,codice_5,landforms,classifier,farmhouses,reaffirming,reparation,yomiuri,technologists,mitte,medica,viewable,steampunk,konya,kshatriya,repelling,edgewater,lamiinae,devas,potteries,llandaff,engendered,submits,virulence,uplifted,educationist,metropolitans,frontrunner,dunstable,forecastle,frets,methodius,exmouth,linnean,bouchet,repulsion,computable,equalling,liceo,tephritidae,agave,hydrological,azarenka,fairground,l'homme,enforces,xinhua,cinematographers,cooperstown,sa'id,paiute,christianization,tempos,chippenham,insulator,kotor,stereotyped,dello,cours,hisham,d'souza,eliminations,supercars,passau,rebrand,natures,coote,persephone,rededicated,cleaved,plenum,blistering,indiscriminately,cleese,safed,recursively,compacted,revues,hydration,shillong,echelons,garhwal,pedimented,grower,zwolle,wildflower,annexing,methionine,petah,valens,famitsu,petiole,specialities,nestorian,shahin,tokaido,shearwater,barberini,kinsmen,experimenter,alumnae,cloisters,alumina,pritzker,hardiness,soundgarden,julich,ps300,watercourse,cementing,wordplay,olivet,demesne,chasseurs,amide,zapotec,gaozu,porphyry,absorbers,indium,analogies,devotions,engravers,limestones,catapulted,surry,brickworks,gotra,rodham,landline,paleontologists,shankara,islip,raucous,trollope,arpad,embarkation,morphemes,recites,picardie,nakhchivan,tolerances,formula_47,khorramabad,nichiren,adrianople,kirkuk,assemblages,collider,bikaner,bushfires,roofline,coverings,reredos,bibliotheca,mantras,accentuated,commedia,rashtriya,fluctuation,serhiy,referential,fittipaldi,vesicle,geeta,iraklis,immediacy,chulalongkorn,hunsruck,bingen,dreadnoughts,stonemason,meenakshi,lebesgue,undergrowth,baltistan,paradoxes,parlement,articled,tiflis,dixieland,meriden,tejano,underdogs,barnstable,exemplify,venter,tropes,wielka,kankakee,iskandar,zilina,pharyngeal,spotify,materialised,picts,atlantique,theodoric,prepositions,paramilitaries,pinellas,attlee,actuated,piedmontese,grayling,thucydides,multifaceted,unedited,autonomously,universelle,utricularia,mooted,preto,incubated,underlie,brasenose,nootka,bushland,sensu,benzodiazepine,esteghlal,seagoing,amenhotep,azusa,sappers,culpeper,smokeless,thoroughbreds,dargah,gorda,alumna,mankato,zdroj,deleting,culvert,formula_49,punting,wushu,hindering,immunoglobulin,standardisation,birger,oilfield,quadrangular,ulama,recruiters,netanya,1630s,communaute,istituto,maciej,pathan,meher,vikas,characterizations,playmaker,interagency,intercepts,assembles,horthy,introspection,narada,matra,testes,radnicki,estonians,csiro,instar,mitford,adrenergic,crewmembers,haaretz,wasatch,lisburn,rangefinder,ordre,condensate,reforestation,corregidor,spvgg,modulator,mannerist,faulted,aspires,maktoum,squarepants,aethelred,piezoelectric,mulatto,dacre,progressions,jagiellonian,norge,samaria,sukhoi,effingham,coxless,hermetic,humanists,centrality,litters,stirlingshire,beaconsfield,sundanese,geometrically,caretakers,habitually,bandra,pashtuns,bradenton,arequipa,laminar,brickyard,hitchin,sustains,shipboard,ploughing,trechus,wheelers,bracketed,ilyushin,subotica,d'hondt,reappearance,bridgestone,intermarried,fulfilment,aphasia,birkbeck,transformational,strathmore,hornbill,millstone,lacan,voids,solothurn,gymnasiums,laconia,viaducts,peduncle,teachta,edgware,shinty,supernovae,wilfried,exclaim,parthia,mithun,flashpoint,moksha,cumbia,metternich,avalanches,militancy,motorist,rivadavia,chancellorsville,federals,gendered,bounding,footy,gauri,caliphs,lingam,watchmaker,unrecorded,riverina,unmodified,seafloor,droit,pfalz,chrysostom,gigabit,overlordship,besiege,espn2,oswestry,anachronistic,ballymena,reactivation,duchovny,ghani,abacetus,duller,legio,watercourses,nord-pas-de-calais,leiber,optometry,swarms,installer,sancti,adverbs,iheartmedia,meiningen,zeljko,kakheti,notional,circuses,patrilineal,acrobatics,infrastructural,sheva,oregonian,adjudication,aamir,wloclawek,overfishing,obstructive,subtracting,aurobindo,archeologist,newgate,'cause,secularization,tehsils,abscess,fingal,janacek,elkhorn,trims,kraftwerk,mandating,irregulars,faintly,congregationalist,sveti,kasai,mishaps,kennebec,provincially,durkheim,scotties,aicte,rapperswil,imphal,surrenders,morphs,nineveh,hoxha,cotabato,thuringian,metalworking,retold,shogakukan,anthers,proteasome,tippeligaen,disengagement,mockumentary,palatial,erupts,flume,corrientes,masthead,jaroslaw,rereleased,bharti,labors,distilling,tusks,varzim,refounded,enniskillen,melkite,semifinalists,vadodara,bermudian,capstone,grasse,origination,populus,alesi,arrondissements,semigroup,verein,opossum,messrs.,portadown,bulbul,tirupati,mulhouse,tetrahedron,roethlisberger,nonverbal,connexion,warangal,deprecated,gneiss,octet,vukovar,hesketh,chambre,despatch,claes,kargil,hideo,gravelly,tyndale,aquileia,tuners,defensible,tutte,theotokos,constructivist,ouvrage,dukla,polisario,monasticism,proscribed,commutation,testers,nipissing,codon,mesto,olivine,concomitant,exoskeleton,purports,coromandel,eyalet,dissension,hippocrates,purebred,yaounde,composting,oecophoridae,procopius,o'day,angiogenesis,sheerness,intelligencer,articular,felixstowe,aegon,endocrinology,trabzon,licinius,pagodas,zooplankton,hooghly,satie,drifters,sarthe,mercian,neuilly,tumours,canal+,scheldt,inclinations,counteroffensive,roadrunners,tuzla,shoreditch,surigao,predicates,carnot,algeciras,militaries,generalize,bulkheads,gawler,pollutant,celta,rundgren,microrna,gewog,olimpija,placental,lubelski,roxburgh,discerned,verano,kikuchi,musicale,l'enfant,ferocity,dimorphic,antigonus,erzurum,prebendary,recitative,discworld,cyrenaica,stigmella,totnes,sutta,pachuca,ulsan,downton,landshut,castellan,pleural,siedlce,siecle,catamaran,cottbus,utilises,trophic,freeholders,holyhead,u.s.s,chansons,responder,waziristan,suzuka,birding,shogi,asker,acetone,beautification,cytotoxic,dixit,hunterdon,cobblestone,formula_48,kossuth,devizes,sokoto,interlaced,shuttered,kilowatts,assiniboine,isaak,salto,alderney,sugarloaf,franchising,aggressiveness,toponyms,plaintext,antimatter,henin,equidistant,salivary,bilingualism,mountings,obligate,extirpated,irenaeus,misused,pastoralists,aftab,immigrating,warping,tyrolean,seaforth,teesside,soundwave,oligarchy,stelae,pairwise,iupac,tezuka,posht,orchestrations,landmass,ironstone,gallia,hjalmar,carmelites,strafford,elmhurst,palladio,fragility,teleplay,gruffudd,karoly,yerba,potok,espoo,inductance,macaque,nonprofits,pareto,rock'n'roll,spiritualist,shadowed,skateboarder,utterances,generality,congruence,prostrate,deterred,yellowknife,albarn,maldon,battlements,mohsen,insecticides,khulna,avellino,menstruation,glutathione,springdale,parlophone,confraternity,korps,countrywide,bosphorus,preexisting,damodar,astride,alexandrovich,sprinting,crystallized,botev,leaching,interstates,veers,angevin,undaunted,yevgeni,nishapur,northerners,alkmaar,bethnal,grocers,sepia,tornus,exemplar,trobe,charcot,gyeonggi,larne,tournai,lorain,voided,genji,enactments,maxilla,adiabatic,eifel,nazim,transducer,thelonious,pyrite,deportiva,dialectal,bengt,rosettes,labem,sergeyevich,synoptic,conservator,statuette,biweekly,adhesives,bifurcation,rajapaksa,mammootty,republique,yusef,waseda,marshfield,yekaterinburg,minnelli,fundy,fenian,matchups,dungannon,supremacist,panelled,drenthe,iyengar,fibula,narmada,homeport,oceanside,precept,antibacterial,altarpieces,swath,ospreys,lillooet,legnica,lossless,formula_50,galvatron,iorga,stormont,rsfsr,loggers,kutno,phenomenological,medallists,cuatro,soissons,homeopathy,bituminous,injures,syndicates,typesetting,displacements,dethroned,makassar,lucchese,abergavenny,targu,alborz,akb48,boldface,gastronomy,sacra,amenity,accumulator,myrtaceae,cornices,mourinho,denunciation,oxbow,diddley,aargau,arbitrage,bedchamber,gruffydd,zamindar,klagenfurt,caernarfon,slowdown,stansted,abrasion,tamaki,suetonius,dukakis,individualistic,ventrally,hotham,perestroika,ketones,fertilisation,sobriquet,couplings,renderings,misidentified,rundfunk,sarcastically,braniff,concours,dismissals,elegantly,modifiers,crediting,combos,crucially,seafront,lieut,ischemia,manchus,derivations,proteases,aristophanes,adenauer,porting,hezekiah,sante,trulli,hornblower,foreshadowing,ypsilanti,dharwad,khani,hohenstaufen,distillers,cosmodrome,intracranial,turki,salesian,gorzow,jihlava,yushchenko,leichhardt,venables,cassia,eurogamer,airtel,curative,bestsellers,timeform,sortied,grandview,massillon,ceding,pilbara,chillicothe,heredity,elblag,rogaland,ronne,millennial,batley,overuse,bharata,fille,campbelltown,abeyance,counterclockwise,250cc,neurodegenerative,consigned,electromagnetism,sunnah,saheb,exons,coxswain,gleaned,bassoons,worksop,prismatic,immigrate,pickets,takeo,bobsledder,stosur,fujimori,merchantmen,stiftung,forli,endorses,taskforce,thermally,atman,gurps,floodplains,enthalpy,extrinsic,setubal,kennesaw,grandis,scalability,durations,showrooms,prithvi,outro,overruns,andalucia,amanita,abitur,hipper,mozambican,sustainment,arsene,chesham,palaeolithic,reportage,criminality,knowsley,haploid,atacama,shueisha,ridgefield,astern,getafe,lineal,timorese,restyled,hollies,agincourt,unter,justly,tannins,mataram,industrialised,tarnovo,mumtaz,mustapha,stretton,synthetase,condita,allround,putra,stjepan,troughs,aechmea,specialisation,wearable,kadokawa,uralic,aeros,messiaen,existentialism,jeweller,effigies,gametes,fjordane,cochlear,interdependent,demonstrative,unstructured,emplacement,famines,spindles,amplitudes,actuator,tantalum,psilocybe,apnea,monogatari,expulsions,seleucus,tsuen,hospitaller,kronstadt,eclipsing,olympiakos,clann,canadensis,inverter,helio,egyptologist,squamous,resonate,munir,histology,torbay,khans,jcpenney,veterinarians,aintree,microscopes,colonised,reflectors,phosphorylated,pristimantis,tulare,corvinus,multiplexing,midweek,demosthenes,transjordan,ecija,tengku,vlachs,anamorphic,counterweight,radnor,trinitarian,armidale,maugham,njsiaa,futurism,stairways,avicenna,montebello,bridgetown,wenatchee,lyonnais,amass,surinamese,streptococcus,m*a*s*h,hydrogenation,frazioni,proscenium,kalat,pennsylvanian,huracan,tallying,kralove,nucleolar,phrygian,seaports,hyacinthe,ignace,donning,instalment,regnal,fonds,prawn,carell,folktales,goaltending,bracknell,vmware,patriarchy,mitsui,kragujevac,pythagoras,soult,thapa,disproved,suwalki,secures,somoza,l'ecole,divizia,chroma,herders,technologist,deduces,maasai,rampur,paraphrase,raimi,imaged,magsaysay,ivano,turmeric,formula_51,subcommittees,axillary,ionosphere,organically,indented,refurbishing,pequot,violinists,bearn,colle,contralto,silverton,mechanization,etruscans,wittelsbach,pasir,redshirted,marrakesh,scarp,plein,wafers,qareh,teotihuacan,frobenius,sinensis,rehoboth,bundaberg,newbridge,hydrodynamic,traore,abubakar,adjusts,storytellers,dynamos,verbandsliga,concertmaster,exxonmobil,appreciable,sieradz,marchioness,chaplaincy,rechristened,cunxu,overpopulation,apolitical,sequencer,beaked,nemanja,binaries,intendant,absorber,filamentous,indebtedness,nusra,nashik,reprises,psychedelia,abwehr,ligurian,isoform,resistive,pillaging,mahathir,reformatory,lusatia,allerton,ajaccio,tepals,maturin,njcaa,abyssinian,objector,fissures,sinuous,ecclesiastic,dalits,caching,deckers,phosphates,wurlitzer,navigated,trofeo,berea,purefoods,solway,unlockable,grammys,kostroma,vocalizations,basilan,rebuke,abbasi,douala,helsingborg,ambon,bakar,runestones,cenel,tomislav,pigmented,northgate,excised,seconda,kirke,determinations,dedicates,vilas,pueblos,reversion,unexploded,overprinted,ekiti,deauville,masato,anaesthesia,endoplasmic,transponders,aguascalientes,hindley,celluloid,affording,bayeux,piaget,rickshaws,eishockey,camarines,zamalek,undersides,hardwoods,hermitian,mutinied,monotone,blackmails,affixes,jpmorgan,habermas,mitrovica,paleontological,polystyrene,thana,manas,conformist,turbofan,decomposes,logano,castration,metamorphoses,patroness,herbicide,mikolaj,rapprochement,macroeconomics,barranquilla,matsudaira,lintels,femina,hijab,spotsylvania,morpheme,bitola,baluchistan,kurukshetra,otway,extrusion,waukesha,menswear,helder,trung,bingley,protester,boars,overhang,differentials,exarchate,hejaz,kumara,unjustified,timings,sharpness,nuovo,taisho,sundar,etc..,jehan,unquestionably,muscovy,daltrey,canute,paneled,amedeo,metroplex,elaborates,telus,tetrapods,dragonflies,epithets,saffir,parthenon,lucrezia,refitting,pentateuch,hanshin,montparnasse,lumberjacks,sanhedrin,erectile,odors,greenstone,resurgent,leszek,amory,substituents,prototypical,viewfinder,monck,universiteit,joffre,revives,chatillon,seedling,scherzo,manukau,ashdod,gympie,homolog,stalwarts,ruinous,weibo,tochigi,wallenberg,gayatri,munda,satyagraha,storefronts,heterogeneity,tollway,sportswriters,binocular,gendarmes,ladysmith,tikal,ortsgemeinde,ja'far,osmotic,linlithgow,bramley,telecoms,pugin,repose,rupaul,sieur,meniscus,garmisch,reintroduce,400th,shoten,poniatowski,drome,kazakhstani,changeover,astronautics,husserl,herzl,hypertext,katakana,polybius,antananarivo,seong,breguet,reliquary,utada,aggregating,liangshan,sivan,tonawanda,audiobooks,shankill,coulee,phenolic,brockton,bookmakers,handsets,boaters,wylde,commonality,mappings,silhouettes,pennines,maurya,pratchett,singularities,eschewed,pretensions,vitreous,ibero,totalitarianism,poulenc,lingered,directx,seasoning,deputation,interdict,illyria,feedstock,counterbalance,muzik,buganda,parachuted,violist,homogeneity,comix,fjords,corsairs,punted,verandahs,equilateral,laoghaire,magyars,117th,alesund,televoting,mayotte,eateries,refurbish,nswrl,yukio,caragiale,zetas,dispel,codecs,inoperable,outperformed,rejuvenation,elstree,modernise,contributory,pictou,tewkesbury,chechens,ashina,psionic,refutation,medico,overdubbed,nebulae,sandefjord,personages,eccellenza,businessperson,placename,abenaki,perryville,threshing,reshaped,arecibo,burslem,colspan=3|turnout,rebadged,lumia,erinsborough,interactivity,bitmap,indefatigable,theosophy,excitatory,gleizes,edsel,bermondsey,korce,saarinen,wazir,diyarbakir,cofounder,liberalisation,onsen,nighthawks,siting,retirements,semyon,d'histoire,114th,redditch,venetia,praha,'round,valdosta,hieroglyphic,postmedial,edirne,miscellany,savona,cockpits,minimization,coupler,jacksonian,appeasement,argentines,saurashtra,arkwright,hesiod,folios,fitzalan,publica,rivaled,civitas,beermen,constructivism,ribeira,zeitschrift,solanum,todos,deformities,chilliwack,verdean,meagre,bishoprics,gujrat,yangzhou,reentered,inboard,mythologies,virtus,unsurprisingly,rusticated,museu,symbolise,proportionate,thesaban,symbian,aeneid,mitotic,veliki,compressive,cisterns,abies,winemaker,massenet,bertolt,ahmednagar,triplemania,armorial,administracion,tenures,smokehouse,hashtag,fuerza,regattas,gennady,kanazawa,mahmudabad,crustal,asaph,valentinian,ilaiyaraaja,honeyeater,trapezoidal,cooperatively,unambiguously,mastodon,inhospitable,harnesses,riverton,renewables,djurgardens,haitians,airings,humanoids,boatswain,shijiazhuang,faints,veera,punjabis,steepest,narain,karlovy,serre,sulcus,collectives,1500m,arion,subarctic,liberally,apollonius,ostia,droplet,headstones,norra,robusta,maquis,veronese,imola,primers,luminance,escadrille,mizuki,irreconcilable,stalybridge,temur,paraffin,stuccoed,parthians,counsels,fundamentalists,vivendi,polymath,sugababes,mikko,yonne,fermions,vestfold,pastoralist,kigali,unseeded,glarus,cusps,amasya,northwesterly,minorca,astragalus,verney,trevelyan,antipathy,wollstonecraft,bivalves,boulez,royle,divisao,quranic,bareilly,coronal,deviates,lulea,erectus,petronas,chandan,proxies,aeroflot,postsynaptic,memoriam,moyne,gounod,kuznetsova,pallava,ordinating,reigate,'first,lewisburg,exploitative,danby,academica,bailiwick,brahe,injective,stipulations,aeschylus,computes,gulden,hydroxylase,liveries,somalis,underpinnings,muscovite,kongsberg,domus,overlain,shareware,variegated,jalalabad,agence,ciphertext,insectivores,dengeki,menuhin,cladistic,baerum,betrothal,tokushima,wavelet,expansionist,pottsville,siyuan,prerequisites,carpi,nemzeti,nazar,trialled,eliminator,irrorated,homeward,redwoods,undeterred,strayed,lutyens,multicellular,aurelian,notated,lordships,alsatian,idents,foggia,garros,chalukyas,lillestrom,podlaski,pessimism,hsien,demilitarized,whitewashed,willesden,kirkcaldy,sanctorum,lamia,relaying,escondido,paediatric,contemplates,demarcated,bluestone,betula,penarol,capitalise,kreuznach,kenora,115th,hold'em,reichswehr,vaucluse,m.i.a,windings,boys/girls,cajon,hisar,predictably,flemington,ysgol,mimicked,clivina,grahamstown,ionia,glyndebourne,patrese,aquaria,sleaford,dayal,sportscenter,malappuram,m.b.a.,manoa,carbines,solvable,designator,ramanujan,linearity,academicians,sayid,lancastrian,factorial,strindberg,vashem,delos,comyn,condensing,superdome,merited,kabaddi,intransitive,bideford,neuroimaging,duopoly,scorecards,ziggler,heriot,boyars,virology,marblehead,microtubules,westphalian,anticipates,hingham,searchers,harpist,rapides,morricone,convalescent,mises,nitride,metrorail,matterhorn,bicol,drivetrain,marketer,snippet,winemakers,muban,scavengers,halberstadt,herkimer,peten,laborious,stora,montgomeryshire,booklist,shamir,herault,eurostar,anhydrous,spacewalk,ecclesia,calliostoma,highschool,d'oro,suffusion,imparts,overlords,tagus,rectifier,counterinsurgency,ministered,eilean,milecastle,contre,micromollusk,okhotsk,bartoli,matroid,hasidim,thirunal,terme,tarlac,lashkar,presque,thameslink,flyby,troopship,renouncing,fatih,messrs,vexillum,bagration,magnetite,bornholm,androgynous,vehement,tourette,philosophic,gianfranco,tuileries,codice_6,radially,flexion,hants,reprocessing,setae,burne,palaeographically,infantryman,shorebirds,tamarind,moderna,threading,militaristic,crohn,norrkoping,125cc,stadtholder,troms,klezmer,alphanumeric,brome,emmanuelle,tiwari,alchemical,formula_52,onassis,bleriot,bipedal,colourless,hermeneutics,hosni,precipitating,turnstiles,hallucinogenic,panhellenic,wyandotte,elucidated,chita,ehime,generalised,hydrophilic,biota,niobium,rnzaf,gandhara,longueuil,logics,sheeting,bielsko,cuvier,kagyu,trefoil,docent,pancrase,stalinism,postures,encephalopathy,monckton,imbalances,epochs,leaguers,anzio,diminishes,pataki,nitrite,amuro,nabil,maybach,l'aquila,babbler,bacolod,thutmose,evora,gaudi,breakage,recur,preservative,60deg,mendip,functionaries,columnar,maccabiah,chert,verden,bromsgrove,clijsters,dengue,pastorate,phuoc,principia,viareggio,kharagpur,scharnhorst,anyang,bosons,l'art,criticises,ennio,semarang,brownian,mirabilis,asperger,calibers,typographical,cartooning,minos,disembark,supranational,undescribed,etymologically,alappuzha,vilhelm,lanao,pakenham,bhagavata,rakoczi,clearings,astrologers,manitowoc,bunuel,acetylene,scheduler,defamatory,trabzonspor,leaded,scioto,pentathlete,abrahamic,minigames,aldehydes,peerages,legionary,1640s,masterworks,loudness,bryansk,likeable,genocidal,vegetated,towpath,declination,pyrrhus,divinely,vocations,rosebery,associazione,loaders,biswas,oeste,tilings,xianzong,bhojpuri,annuities,relatedness,idolator,psers,constriction,chuvash,choristers,hanafi,fielders,grammarian,orpheum,asylums,millbrook,gyatso,geldof,stabilise,tableaux,diarist,kalahari,panini,cowdenbeath,melanin,4x100m,resonances,pinar,atherosclerosis,sheringham,castlereagh,aoyama,larks,pantograph,protrude,natak,gustafsson,moribund,cerevisiae,cleanly,polymeric,holkar,cosmonauts,underpinning,lithosphere,firuzabad,languished,mingled,citrate,spadina,lavas,daejeon,fibrillation,porgy,pineville,ps1000,cobbled,emamzadeh,mukhtar,dampers,indelible,salonika,nanoscale,treblinka,eilat,purporting,fluctuate,mesic,hagiography,cutscenes,fondation,barrens,comically,accrue,ibrox,makerere,defections,'there,hollandia,skene,grosseto,reddit,objectors,inoculation,rowdies,playfair,calligrapher,namor,sibenik,abbottabad,propellants,hydraulically,chloroplasts,tablelands,tecnico,schist,klasse,shirvan,bashkortostan,bullfighting,north/south,polski,hanns,woodblock,kilmore,ejecta,ignacy,nanchang,danubian,commendations,snohomish,samaritans,argumentation,vasconcelos,hedgehogs,vajrayana,barents,kulkarni,kumbakonam,identifications,hillingdon,weirs,nayanar,beauvoir,messe,divisors,atlantiques,broods,affluence,tegucigalpa,unsuited,autodesk,akash,princeps,culprits,kingstown,unassuming,goole,visayan,asceticism,blagojevich,irises,paphos,unsound,maurier,pontchartrain,desertification,sinfonietta,latins,especial,limpet,valerenga,glial,brainstem,mitral,parables,sauropod,judean,iskcon,sarcoma,venlo,justifications,zhuhai,blavatsky,alleviated,usafe,steppenwolf,inversions,janko,chagall,secretory,basildon,saguenay,pergamon,hemispherical,harmonized,reloading,franjo,domaine,extravagance,relativism,metamorphosed,labuan,baloncesto,gmail,byproducts,calvinists,counterattacked,vitus,bubonic,120th,strachey,ritually,brookwood,selectable,savinja,incontinence,meltwater,jinja,1720s,brahmi,morgenthau,sheaves,sleeved,stratovolcano,wielki,utilisation,avoca,fluxus,panzergrenadier,philately,deflation,podlaska,prerogatives,kuroda,theophile,zhongzong,gascoyne,magus,takao,arundell,fylde,merdeka,prithviraj,venkateswara,liepaja,daigo,dreamland,reflux,sunnyvale,coalfields,seacrest,soldering,flexor,structuralism,alnwick,outweighed,unaired,mangeshkar,batons,glaad,banshees,irradiated,organelles,biathlete,cabling,chairlift,lollapalooza,newsnight,capacitive,succumbs,flatly,miramichi,burwood,comedienne,charteris,biotic,workspace,aficionados,sokolka,chatelet,o'shaughnessy,prosthesis,neoliberal,refloated,oppland,hatchlings,econometrics,loess,thieu,androids,appalachians,jenin,pterostichinae,downsized,foils,chipsets,stencil,danza,narrate,maginot,yemenite,bisects,crustacean,prescriptive,melodious,alleviation,empowers,hansson,autodromo,obasanjo,osmosis,daugava,rheumatism,moraes,leucine,etymologies,chepstow,delaunay,bramall,bajaj,flavoring,approximates,marsupials,incisive,microcomputer,tactically,waals,wilno,fisichella,ursus,hindmarsh,mazarin,lomza,xenophobia,lawlessness,annecy,wingers,gornja,gnaeus,superieur,tlaxcala,clasps,symbolises,slats,rightist,effector,blighted,permanence,divan,progenitors,kunsthalle,anointing,excelling,coenzyme,indoctrination,dnipro,landholdings,adriaan,liturgies,cartan,ethmia,attributions,sanctus,trichy,chronicon,tancred,affinis,kampuchea,gantry,pontypool,membered,distrusted,fissile,dairies,hyposmocoma,craigie,adarsh,martinsburg,taxiway,30deg,geraint,vellum,bencher,khatami,formula_53,zemun,teruel,endeavored,palmares,pavements,u.s..,internationalization,satirized,carers,attainable,wraparound,muang,parkersburg,extinctions,birkenfeld,wildstorm,payers,cohabitation,unitas,culloden,capitalizing,clwyd,daoist,campinas,emmylou,orchidaceae,halakha,orientales,fealty,domnall,chiefdom,nigerians,ladislav,dniester,avowed,ergonomics,newsmagazine,kitsch,cantilevered,benchmarking,remarriage,alekhine,coldfield,taupo,almirante,substations,apprenticeships,seljuq,levelling,eponym,symbolising,salyut,opioids,underscore,ethnologue,mohegan,marikina,libro,bassano,parse,semantically,disjointed,dugdale,padraig,tulsi,modulating,xfinity,headlands,mstislav,earthworms,bourchier,lgbtq,embellishments,pennants,rowntree,betel,motet,mulla,catenary,washoe,mordaunt,dorking,colmar,girardeau,glentoran,grammatically,samad,recreations,technion,staccato,mikoyan,spoilers,lyndhurst,victimization,chertsey,belafonte,tondo,tonsberg,narrators,subcultures,malformations,edina,augmenting,attests,euphemia,cabriolet,disguising,1650s,navarrese,demoralized,cardiomyopathy,welwyn,wallachian,smoothness,planktonic,voles,issuers,sardasht,survivability,cuauhtemoc,thetis,extruded,signet,raghavan,lombok,eliyahu,crankcase,dissonant,stolberg,trencin,desktops,bursary,collectivization,charlottenburg,triathlete,curvilinear,involuntarily,mired,wausau,invades,sundaram,deletions,bootstrap,abellio,axiomatic,noguchi,setups,malawian,visalia,materialist,kartuzy,wenzong,plotline,yeshivas,parganas,tunica,citric,conspecific,idlib,superlative,reoccupied,blagoevgrad,masterton,immunological,hatta,courbet,vortices,swallowtail,delves,haridwar,diptera,boneh,bahawalpur,angering,mardin,equipments,deployable,guanine,normality,rimmed,artisanal,boxset,chandrasekhar,jools,chenar,tanakh,carcassonne,belatedly,millville,anorthosis,reintegration,velde,surfactant,kanaan,busoni,glyphipterix,personas,fullness,rheims,tisza,stabilizers,bharathi,joost,spinola,mouldings,perching,esztergom,afzal,apostate,lustre,s.league,motorboat,monotheistic,armature,barat,asistencia,bloomsburg,hippocampal,fictionalised,defaults,broch,hexadecimal,lusignan,ryanair,boccaccio,breisgau,southbank,bskyb,adjoined,neurobiology,aforesaid,sadhu,langue,headship,wozniacki,hangings,regulus,prioritized,dynamism,allier,hannity,shimin,antoninus,gymnopilus,caledon,preponderance,melayu,electrodynamics,syncopated,ibises,krosno,mechanistic,morpeth,harbored,albini,monotheism,'real,hyperactivity,haveli,writer/director,minato,nimoy,caerphilly,chitral,amirabad,fanshawe,l'oreal,lorde,mukti,authoritarianism,valuing,spyware,hanbury,restarting,stato,embed,suiza,empiricism,stabilisation,stari,castlemaine,orbis,manufactory,mauritanian,shoji,taoyuan,prokaryotes,oromia,ambiguities,embodying,slims,frente,innovate,ojibwa,powdery,gaeltacht,argentinos,quatermass,detergents,fijians,adaptor,tokai,chileans,bulgars,oxidoreductases,bezirksliga,conceicao,myosin,nellore,500cc,supercomputers,approximating,glyndwr,polypropylene,haugesund,cockerell,tudman,ashbourne,hindemith,bloodlines,rigveda,etruria,romanos,steyn,oradea,deceleration,manhunter,laryngeal,fraudulently,janez,wendover,haplotype,janaki,naoki,belizean,mellencamp,cartographic,sadhana,tricolour,pseudoscience,satara,bytow,s.p.a.,jagdgeschwader,arcot,omagh,sverdrup,masterplan,surtees,apocrypha,ahvaz,d'amato,socratic,leumit,unnumbered,nandini,witold,marsupial,coalesced,interpolated,gimnasia,karadzic,keratin,mamoru,aldeburgh,speculator,escapement,irfan,kashyap,satyajit,haddington,solver,rothko,ashkelon,kickapoo,yeomen,superbly,bloodiest,greenlandic,lithic,autofocus,yardbirds,poona,keble,javan,sufis,expandable,tumblr,ursuline,swimwear,winwood,counsellors,aberrations,marginalised,befriending,workouts,predestination,varietal,siddhartha,dunkeld,judaic,esquimalt,shabab,ajith,telefonica,stargard,hoysala,radhakrishnan,sinusoidal,strada,hiragana,cebuano,monoid,independencia,floodwaters,mildura,mudflats,ottokar,translit,radix,wigner,philosophically,tephritid,synthesizing,castletown,installs,stirner,resettle,bushfire,choirmaster,kabbalistic,shirazi,lightship,rebus,colonizers,centrifuge,leonean,kristofferson,thymus,clackamas,ratnam,rothesay,municipally,centralia,thurrock,gulfport,bilinear,desirability,merite,psoriasis,macaw,erigeron,consignment,mudstone,distorting,karlheinz,ramen,tailwheel,vitor,reinsurance,edifices,superannuation,dormancy,contagion,cobden,rendezvoused,prokaryotic,deliberative,patricians,feigned,degrades,starlings,sopot,viticultural,beaverton,overflowed,convener,garlands,michiel,ternopil,naturelle,biplanes,bagot,gamespy,ventspils,disembodied,flattening,profesional,londoners,arusha,scapular,forestall,pyridine,ulema,eurodance,aruna,callus,periodontal,coetzee,immobilized,o'meara,maharani,katipunan,reactants,zainab,microgravity,saintes,britpop,carrefour,constrain,adversarial,firebirds,brahmo,kashima,simca,surety,surpluses,superconductivity,gipuzkoa,cumans,tocantins,obtainable,humberside,roosting,'king,formula_54,minelayer,bessel,sulayman,cycled,biomarkers,annealing,shusha,barda,cassation,djing,polemics,tuple,directorates,indomitable,obsolescence,wilhelmine,pembina,bojan,tambo,dioecious,pensioner,magnificat,1660s,estrellas,southeasterly,immunodeficiency,railhead,surreptitiously,codeine,encores,religiosity,tempera,camberley,efendi,boardings,malleable,hagia,input/output,lucasfilm,ujjain,polymorphisms,creationist,berners,mickiewicz,irvington,linkedin,endures,kinect,munition,apologetics,fairlie,predicated,reprinting,ethnographer,variances,levantine,mariinsky,jadid,jarrow,asia/oceania,trinamool,waveforms,bisexuality,preselection,pupae,buckethead,hieroglyph,lyricists,marionette,dunbartonshire,restorer,monarchical,pazar,kickoffs,cabildo,savannas,gliese,dench,spoonbills,novelette,diliman,hypersensitivity,authorising,montefiore,mladen,qu'appelle,theistic,maruti,laterite,conestoga,saare,californica,proboscis,carrickfergus,imprecise,hadassah,baghdadi,jolgeh,deshmukh,amusements,heliopolis,berle,adaptability,partenkirchen,separations,baikonur,cardamom,southeastward,southfield,muzaffar,adequacy,metropolitana,rajkot,kiyoshi,metrobus,evictions,reconciles,librarianship,upsurge,knightley,badakhshan,proliferated,spirituals,burghley,electroacoustic,professing,featurette,reformists,skylab,descriptors,oddity,greyfriars,injects,salmond,lanzhou,dauntless,subgenera,underpowered,transpose,mahinda,gatos,aerobatics,seaworld,blocs,waratahs,joris,giggs,perfusion,koszalin,mieczyslaw,ayyubid,ecologists,modernists,sant'angelo,quicktime,him/her,staves,sanyo,melaka,acrocercops,qigong,iterated,generalizes,recuperation,vihara,circassians,psychical,chavo,memoires,infiltrates,notaries,pelecaniformesfamily,strident,chivalric,pierrepont,alleviating,broadsides,centipede,b.tech,reinterpreted,sudetenland,hussite,covenanters,radhika,ironclads,gainsbourg,testis,penarth,plantar,azadegan,beano,espn.com,leominster,autobiographies,nbcuniversal,eliade,khamenei,montferrat,undistinguished,ethnological,wenlock,fricatives,polymorphic,biome,joule,sheaths,astrophysicist,salve,neoclassicism,lovat,downwind,belisarius,forma,usurpation,freie,depopulation,backbench,ascenso,'high,aagpbl,gdanski,zalman,mouvement,encapsulation,bolshevism,statny,voyageurs,hywel,vizcaya,mazra'eh,narthex,azerbaijanis,cerebrospinal,mauretania,fantail,clearinghouse,bolingbroke,pequeno,ansett,remixing,microtubule,wrens,jawahar,palembang,gambian,hillsong,fingerboard,repurposed,sundry,incipient,veolia,theologically,ulaanbaatar,atsushi,foundling,resistivity,myeloma,factbook,mazowiecka,diacritic,urumqi,clontarf,provokes,intelsat,professes,materialise,portobello,benedictines,panionios,introverted,reacquired,bridport,mammary,kripke,oratorios,vlore,stoning,woredas,unreported,antti,togolese,fanzines,heuristics,conservatories,carburetors,clitheroe,cofounded,formula_57,erupting,quinnipiac,bootle,ghostface,sittings,aspinall,sealift,transferase,boldklub,siskiyou,predominated,francophonie,ferruginous,castrum,neogene,sakya,madama,precipitous,'love,posix,bithynia,uttara,avestan,thrushes,seiji,memorably,septimius,libri,cibernetico,hyperinflation,dissuaded,cuddalore,peculiarity,vaslui,grojec,albumin,thurles,casks,fasteners,fluidity,buble,casals,terek,gnosticism,cognates,ulnar,radwanska,babylonians,majuro,oxidizer,excavators,rhythmically,liffey,gorakhpur,eurydice,underscored,arborea,lumumba,tuber,catholique,grama,galilei,scrope,centreville,jacobin,bequests,ardeche,polygamous,montauban,terai,weatherboard,readability,attainder,acraea,transversely,rivets,winterbottom,reassures,bacteriology,vriesea,chera,andesite,dedications,homogenous,reconquered,bandon,forrestal,ukiyo,gurdjieff,tethys,sparc,muscogee,grebes,belchatow,mansa,blantyre,palliser,sokolow,fibroblasts,exmoor,misaki,soundscapes,housatonic,middelburg,convenor,leyla,antipope,histidine,okeechobee,alkenes,sombre,alkene,rubik,macaques,calabar,trophee,pinchot,'free,frusciante,chemins,falaise,vasteras,gripped,schwarzenberg,cumann,kanchipuram,acoustically,silverbacks,fangio,inset,plympton,kuril,vaccinations,recep,theropods,axils,stavropol,encroached,apoptotic,papandreou,wailers,moonstone,assizes,micrometers,hornchurch,truncation,annapurna,egyptologists,rheumatic,promiscuity,satiric,fleche,caloptilia,anisotropy,quaternions,gruppo,viscounts,awardees,aftershocks,sigint,concordance,oblasts,gaumont,stent,commissars,kesteven,hydroxy,vijayanagar,belorussian,fabricius,watermark,tearfully,mamet,leukaemia,sorkh,milepost,tattooing,vosta,abbasids,uncompleted,hedong,woodwinds,extinguishing,malus,multiplexes,francoist,pathet,responsa,bassists,'most,postsecondary,ossory,grampian,saakashvili,alito,strasberg,impressionistic,volador,gelatinous,vignette,underwing,campanian,abbasabad,albertville,hopefuls,nieuwe,taxiways,reconvened,recumbent,pathologists,unionized,faversham,asymptotically,romulo,culling,donja,constricted,annesley,duomo,enschede,lovech,sharpshooter,lansky,dhamma,papillae,alanine,mowat,delius,wrest,mcluhan,podkarpackie,imitators,bilaspur,stunting,pommel,casemate,handicaps,nagas,testaments,hemings,necessitate,rearward,locative,cilla,klitschko,lindau,merion,consequential,antic,soong,copula,berthing,chevrons,rostral,sympathizer,budokan,ranulf,beria,stilt,replying,conflated,alcibiades,painstaking,yamanashi,calif.,arvid,ctesiphon,xizong,rajas,caxton,downbeat,resurfacing,rudders,miscegenation,deathmatch,foregoing,arthropod,attestation,karts,reapportionment,harnessing,eastlake,schola,dosing,postcolonial,imtiaz,formula_55,insulators,gunung,accumulations,pampas,llewelyn,bahnhof,cytosol,grosjean,teaneck,briarcliff,arsenio,canara,elaborating,passchendaele,searchlights,holywell,mohandas,preventable,gehry,mestizos,ustinov,cliched,'national,heidfeld,tertullian,jihadist,tourer,miletus,semicircle,outclassed,bouillon,cardinalate,clarifies,dakshina,bilayer,pandyan,unrwa,chandragupta,formula_56,portola,sukumaran,lactation,islamia,heikki,couplers,misappropriation,catshark,montt,ploughs,carib,stator,leaderboard,kenrick,dendrites,scape,tillamook,molesworth,mussorgsky,melanesia,restated,troon,glycoside,truckee,headwater,mashup,sectoral,gangwon,docudrama,skirting,psychopathology,dramatised,ostroleka,infestations,thabo,depolarization,wideroe,eisenbahn,thomond,kumaon,upendra,foreland,acronyms,yaqui,retaking,raphaelite,specie,dupage,villars,lucasarts,chloroplast,werribee,balsa,ascribe,havant,flava,khawaja,tyumen,subtract,interrogators,reshaping,buzzcocks,eesti,campanile,potemkin,apertures,snowboarder,registrars,handbooks,boyar,contaminant,depositors,proximate,jeunesse,zagora,pronouncements,mists,nihilism,deified,margraviate,pietersen,moderators,amalfi,adjectival,copepods,magnetosphere,pallets,clemenceau,castra,perforation,granitic,troilus,grzegorz,luthier,dockyards,antofagasta,ffestiniog,subroutine,afterword,waterwheel,druce,nitin,undifferentiated,emacs,readmitted,barneveld,tapers,hittites,infomercials,infirm,braathens,heligoland,carpark,geomagnetic,musculoskeletal,nigerien,machinima,harmonize,repealing,indecency,muskoka,verite,steubenville,suffixed,cytoskeleton,surpasses,harmonia,imereti,ventricles,heterozygous,envisions,otsego,ecoles,warrnambool,burgenland,seria,rawat,capistrano,welby,kirin,enrollments,caricom,dragonlance,schaffhausen,expanses,photojournalism,brienne,etude,referent,jamtland,schemas,xianbei,cleburne,bicester,maritima,shorelines,diagonals,bjelke,nonpublic,aliasing,m.f.a,ovals,maitreya,skirmishing,grothendieck,sukhothai,angiotensin,bridlington,durgapur,contras,gakuen,skagit,rabbinate,tsunamis,haphazard,tyldesley,microcontroller,discourages,hialeah,compressing,septimus,larvik,condoleezza,psilocybin,protectionism,songbirds,clandestinely,selectmen,wargame,cinemascope,khazars,agronomy,melzer,latifah,cherokees,recesses,assemblymen,basescu,banaras,bioavailability,subchannels,adenine,o'kelly,prabhakar,leonese,dimethyl,testimonials,geoffroy,oxidant,universiti,gheorghiu,bohdan,reversals,zamorin,herbivore,jarre,sebastiao,infanterie,dolmen,teddington,radomsko,spaceships,cuzco,recapitulation,mahoning,bainimarama,myelin,aykroyd,decals,tokelau,nalgonda,rajasthani,121st,quelled,tambov,illyrians,homilies,illuminations,hypertrophy,grodzisk,inundation,incapacity,equilibria,combats,elihu,steinitz,berengar,gowda,canwest,khosrau,maculata,houten,kandinsky,onside,leatherhead,heritable,belvidere,federative,chukchi,serling,eruptive,patan,entitlements,suffragette,evolutions,migrates,demobilisation,athleticism,trope,sarpsborg,kensal,translink,squamish,concertgebouw,energon,timestamp,competences,zalgiris,serviceman,codice_7,spoofing,assange,mahadevan,skien,suceava,augustan,revisionism,unconvincing,hollande,drina,gottlob,lippi,broglie,darkening,tilapia,eagerness,nacht,kolmogorov,photometric,leeuwarden,jrotc,haemorrhage,almanack,cavalli,repudiation,galactose,zwickau,cetinje,houbraken,heavyweights,gabonese,ordinals,noticias,museveni,steric,charaxes,amjad,resection,joinville,leczyca,anastasius,purbeck,subtribe,dalles,leadoff,monoamine,jettisoned,kaori,anthologized,alfreton,indic,bayezid,tottori,colonizing,assassinating,unchanging,eusebian,d'estaing,tsingtao,toshio,transferases,peronist,metrology,equus,mirpur,libertarianism,kovil,indole,'green,abstention,quantitatively,icebreakers,tribals,mainstays,dryandra,eyewear,nilgiri,chrysanthemum,inositol,frenetic,merchantman,hesar,physiotherapist,transceiver,dancefloor,rankine,neisse,marginalization,lengthen,unaided,rework,pageantry,savio,striated,funen,witton,illuminates,frass,hydrolases,akali,bistrita,copywriter,firings,handballer,tachinidae,dmytro,coalesce,neretva,menem,moraines,coatbridge,crossrail,spoofed,drosera,ripen,protour,kikuyu,boleslav,edwardes,troubadours,haplogroups,wrasse,educationalist,sroda,khaneh,dagbladet,apennines,neuroscientist,deplored,terje,maccabees,daventry,spaceport,lessening,ducats,singer/guitarist,chambersburg,yeong,configurable,ceremonially,unrelenting,caffe,graaf,denizens,kingsport,ingush,panhard,synthesised,tumulus,homeschooled,bozorg,idiomatic,thanhouser,queensway,radek,hippolytus,inking,banovina,peacocks,piaui,handsworth,pantomimes,abalone,thera,kurzweil,bandura,augustinians,bocelli,ferrol,jiroft,quadrature,contravention,saussure,rectification,agrippina,angelis,matanzas,nidaros,palestrina,latium,coriolis,clostridium,ordain,uttering,lanchester,proteolytic,ayacucho,merseburg,holbein,sambalpur,algebraically,inchon,ostfold,savoia,calatrava,lahiri,judgeship,ammonite,masaryk,meyerbeer,hemorrhagic,superspeedway,ningxia,panicles,encircles,khmelnytsky,profusion,esher,babol,inflationary,anhydride,gaspe,mossy,periodicity,nacion,meteorologists,mahjong,interventional,sarin,moult,enderby,modell,palgrave,warners,montcalm,siddha,functionalism,rilke,politicized,broadmoor,kunste,orden,brasileira,araneta,eroticism,colquhoun,mamba,blacktown,tubercle,seagrass,manoel,camphor,neoregelia,llandudno,annexe,enplanements,kamien,plovers,statisticians,iturbide,madrasah,nontrivial,publican,landholders,manama,uninhabitable,revivalist,trunkline,friendliness,gurudwara,rocketry,unido,tripos,besant,braque,evolutionarily,abkhazian,staffel,ratzinger,brockville,bohemond,intercut,djurgarden,utilitarianism,deploys,sastri,absolutism,subhas,asghar,fictions,sepinwall,proportionately,titleholders,thereon,foursquare,machinegun,knightsbridge,siauliai,aqaba,gearboxes,castaways,weakens,phallic,strzelce,buoyed,ruthenia,pharynx,intractable,neptunes,koine,leakey,netherlandish,preempted,vinay,terracing,instigating,alluvium,prosthetics,vorarlberg,politiques,joinery,reduplication,nebuchadnezzar,lenticular,banka,seaborne,pattinson,helpline,aleph,beckenham,californians,namgyal,franziska,aphid,branagh,transcribe,appropriateness,surakarta,takings,propagates,juraj,b0d3fb,brera,arrayed,tailback,falsehood,hazleton,prosody,egyptology,pinnate,tableware,ratan,camperdown,ethnologist,tabari,classifiers,biogas,126th,kabila,arbitron,apuestas,membranous,kincardine,oceana,glories,natick,populism,synonymy,ghalib,mobiles,motherboards,stationers,germinal,patronised,formula_58,gaborone,torts,jeezy,interleague,novaya,batticaloa,offshoots,wilbraham,filename,nswrfl,'well,trilobite,pythons,optimally,scientologists,rhesus,pilsen,backdrops,batang,unionville,hermanos,shrikes,fareham,outlawing,discontinuing,boisterous,shamokin,scanty,southwestward,exchangers,unexpired,mewar,h.m.s,saldanha,pawan,condorcet,turbidity,donau,indulgences,coincident,cliques,weeklies,bardhaman,violators,kenai,caspase,xperia,kunal,fistula,epistemic,cammell,nephi,disestablishment,rotator,germaniawerft,pyaar,chequered,jigme,perlis,anisotropic,popstars,kapil,appendices,berat,defecting,shacks,wrangel,panchayath,gorna,suckling,aerosols,sponheim,talal,borehole,encodings,enlai,subduing,agong,nadar,kitsap,syrmia,majumdar,pichilemu,charleville,embryology,booting,literati,abutting,basalts,jussi,repubblica,hertogenbosch,digitization,relents,hillfort,wiesenthal,kirche,bhagwan,bactrian,oases,phyla,neutralizing,helsing,ebooks,spearheading,margarine,'golden,phosphor,picea,stimulants,outliers,timescale,gynaecology,integrator,skyrocketed,bridgnorth,senecio,ramachandra,suffragist,arrowheads,aswan,inadvertent,microelectronics,118th,sofer,kubica,melanesian,tuanku,balkh,vyborg,crystallographic,initiators,metamorphism,ginzburg,looters,unimproved,finistere,newburyport,norges,immunities,franchisees,asterism,kortrijk,camorra,komsomol,fleurs,draughts,patagonian,voracious,artin,collaborationist,revolucion,revitalizing,xaver,purifying,antipsychotic,disjunct,pompeius,dreamwave,juvenal,beinn,adiyaman,antitank,allama,boletus,melanogaster,dumitru,caproni,aligns,athabaskan,stobart,phallus,veikkausliiga,hornsey,buffering,bourbons,dobruja,marga,borax,electrics,gangnam,motorcyclist,whidbey,draconian,lodger,galilean,sanctification,imitates,boldness,underboss,wheatland,cantabrian,terceira,maumee,redefining,uppercase,ostroda,characterise,universalism,equalized,syndicalism,haringey,masovia,deleuze,funkadelic,conceals,thuan,minsky,pluralistic,ludendorff,beekeeping,bonfires,endoscopic,abuts,prebend,jonkoping,amami,tribunes,yup'ik,awadh,gasification,pforzheim,reforma,antiwar,vaishnavism,maryville,inextricably,margrethe,empresa,neutrophils,sanctified,ponca,elachistidae,curiae,quartier,mannar,hyperplasia,wimax,busing,neologism,florins,underrepresented,digitised,nieuw,cooch,howards,frege,hughie,plied,swale,kapellmeister,vajpayee,quadrupled,aeronautique,dushanbe,custos,saltillo,kisan,tigray,manaus,epigrams,shamanic,peppered,frosts,promotion/relegation,concedes,zwingli,charentes,whangarei,hyung,spring/summer,sobre,eretz,initialization,sawai,ephemera,grandfathered,arnaldo,customised,permeated,parapets,growths,visegrad,estudios,altamont,provincia,apologises,stoppard,carburettor,rifts,kinematic,zhengzhou,eschatology,prakrit,folate,yvelines,scapula,stupas,rishon,reconfiguration,flutist,1680s,apostolate,proudhon,lakshman,articulating,stortford,faithfull,bitterns,upwelling,qur'anic,lidar,interferometry,waterlogged,koirala,ditton,wavefunction,fazal,babbage,antioxidants,lemberg,deadlocked,tolled,ramapo,mathematica,leiria,topologies,khali,photonic,balti,1080p,corrects,recommenced,polyglot,friezes,tiebreak,copacabana,cholmondeley,armband,abolishment,sheamus,buttes,glycolysis,cataloged,warrenton,sassari,kishan,foodservice,cryptanalysis,holmenkollen,cosplay,machi,yousuf,mangal,allying,fertiliser,otomi,charlevoix,metallurg,parisians,bottlenose,oakleigh,debug,cidade,accede,ligation,madhava,pillboxes,gatefold,aveyron,sorin,thirsk,immemorial,menelik,mehra,domingos,underpinned,fleshed,harshness,diphthong,crestwood,miskolc,dupri,pyrausta,muskingum,tuoba,prodi,incidences,waynesboro,marquesas,heydar,artesian,calinescu,nucleation,funders,covalently,compaction,derbies,seaters,sodor,tabular,amadou,peckinpah,o'halloran,zechariah,libyans,kartik,daihatsu,chandran,erzhu,heresies,superheated,yarder,dorde,tanjore,abusers,xuanwu,juniperus,moesia,trusteeship,birdwatching,beatz,moorcock,harbhajan,sanga,choreographic,photonics,boylston,amalgamate,prawns,electrifying,sarath,inaccurately,exclaims,powerpoint,chaining,cpusa,adulterous,saccharomyces,glogow,vfl/afl,syncretic,simla,persisting,functors,allosteric,euphorbiaceae,juryo,mlada,moana,gabala,thornycroft,kumanovo,ostrovsky,sitio,tutankhamun,sauropods,kardzhali,reinterpretation,sulpice,rosyth,originators,halesowen,delineation,asesoria,abatement,gardai,elytra,taillights,overlays,monsoons,sandpipers,ingmar,henrico,inaccuracy,irwell,arenabowl,elche,pressburg,signalman,interviewees,sinkhole,pendle,ecommerce,cellos,nebria,organometallic,surrealistic,propagandist,interlaken,canandaigua,aerials,coutinho,pascagoula,tonopah,letterkenny,gropius,carbons,hammocks,childe,polities,hosiery,donitz,suppresses,diaghilev,stroudsburg,bagram,pistoia,regenerating,unitarians,takeaway,offstage,vidin,glorification,bakunin,yavapai,lutzow,sabercats,witney,abrogated,gorlitz,validating,dodecahedron,stubbornly,telenor,glaxosmithkline,solapur,undesired,jellicoe,dramatization,four-and-a-half,seawall,waterpark,artaxerxes,vocalization,typographic,byung,sachsenhausen,shepparton,kissimmee,konnan,belsen,dhawan,khurd,mutagenesis,vejle,perrot,estradiol,formula_60,saros,chiloe,misiones,lamprey,terrains,speke,miasto,eigenvectors,haydock,reservist,corticosteroids,savitri,shinawatra,developmentally,yehudi,berates,janissaries,recapturing,rancheria,subplots,gresley,nikkatsu,oryol,cosmas,boavista,formula_59,playfully,subsections,commentated,kathakali,dorid,vilaine,seepage,hylidae,keiji,kazakhs,triphosphate,1620s,supersede,monarchists,falla,miyako,notching,bhumibol,polarizing,secularized,shingled,bronislaw,lockerbie,soleyman,bundesbahn,latakia,redoubts,boult,inwardly,invents,ondrej,minangkabau,newquay,permanente,alhaji,madhav,malini,ellice,bookmaker,mankiewicz,etihad,o'dea,interrogative,mikawa,wallsend,canisius,bluesy,vitruvius,noord,ratifying,mixtec,gujranwala,subprefecture,keelung,goiania,nyssa,shi'ite,semitone,ch'uan,computerised,pertuan,catapults,nepomuk,shruti,millstones,buskerud,acolytes,tredegar,sarum,armia,dell'arte,devises,custodians,upturned,gallaudet,disembarking,thrashed,sagrada,myeon,undeclared,qumran,gaiden,tepco,janesville,showground,condense,chalon,unstaffed,pasay,undemocratic,hauts,viridis,uninjured,escutcheon,gymkhana,petaling,hammam,dislocations,tallaght,rerum,shias,indios,guaranty,simplicial,benares,benediction,tajiri,prolifically,huawei,onerous,grantee,ferencvaros,otranto,carbonates,conceit,digipak,qadri,masterclasses,swamiji,cradock,plunket,helmsman,119th,salutes,tippecanoe,murshidabad,intelligibility,mittal,diversifying,bidar,asansol,crowdsourcing,rovere,karakoram,grindcore,skylights,tulagi,furrows,ligne,stuka,sumer,subgraph,amata,regionalist,bulkeley,teletext,glorify,readied,lexicographer,sabadell,predictability,quilmes,phenylalanine,bandaranaike,pyrmont,marksmen,quisling,viscountess,sociopolitical,afoul,pediments,swazi,martyrology,nullify,panagiotis,superconductors,veldenz,jujuy,l'isle,hematopoietic,shafi,subsea,hattiesburg,jyvaskyla,kebir,myeloid,landmine,derecho,amerindians,birkenau,scriabin,milhaud,mucosal,nikaya,freikorps,theoretician,proconsul,o'hanlon,clerked,bactria,houma,macular,topologically,shrubby,aryeh,ghazali,afferent,magalhaes,moduli,ashtabula,vidarbha,securitate,ludwigsburg,adoor,varun,shuja,khatun,chengde,bushels,lascelles,professionnelle,elfman,rangpur,unpowered,citytv,chojnice,quaternion,stokowski,aschaffenburg,commutes,subramaniam,methylene,satrap,gharb,namesakes,rathore,helier,gestational,heraklion,colliers,giannis,pastureland,evocation,krefeld,mahadeva,churchmen,egret,yilmaz,galeazzo,pudukkottai,artigas,generalitat,mudslides,frescoed,enfeoffed,aphorisms,melilla,montaigne,gauliga,parkdale,mauboy,linings,prema,sapir,xylophone,kushan,rockne,sequoyah,vasyl,rectilinear,vidyasagar,microcosm,san'a,carcinogen,thicknesses,aleut,farcical,moderating,detested,hegemonic,instalments,vauban,verwaltungsgemeinschaft,picayune,razorback,magellanic,moluccas,pankhurst,exportation,waldegrave,sufferer,bayswater,1up.com,rearmament,orangutans,varazdin,b.o.b,elucidate,harlingen,erudition,brankovic,lapis,slipway,urraca,shinde,unwell,elwes,euboea,colwyn,srivijaya,grandstands,hortons,generalleutnant,fluxes,peterhead,gandhian,reals,alauddin,maximized,fairhaven,endow,ciechanow,perforations,darters,panellist,manmade,litigants,exhibitor,tirol,caracalla,conformance,hotelier,stabaek,hearths,borac,frisians,ident,veliko,emulators,schoharie,uzbeks,samarra,prestwick,wadia,universita,tanah,bucculatrix,predominates,genotypes,denounces,roadsides,ganassi,keokuk,philatelist,tomic,ingots,conduits,samplers,abdus,johar,allegories,timaru,wolfpacks,secunda,smeaton,sportivo,inverting,contraindications,whisperer,moradabad,calamities,bakufu,soundscape,smallholders,nadeem,crossroad,xenophobic,zakir,nationalliga,glazes,retroflex,schwyz,moroder,rubra,quraysh,theodoros,endemol,infidels,km/hr,repositioned,portraitist,lluis,answerable,arges,mindedness,coarser,eyewall,teleported,scolds,uppland,vibraphone,ricoh,isenburg,bricklayer,cuttlefish,abstentions,communicable,cephalopod,stockyards,balto,kinston,armbar,bandini,elphaba,maxims,bedouins,sachsen,friedkin,tractate,pamir,ivanovo,mohini,kovalainen,nambiar,melvyn,orthonormal,matsuyama,cuernavaca,veloso,overstated,streamer,dravid,informers,analyte,sympathized,streetscape,gosta,thomasville,grigore,futuna,depleting,whelks,kiedis,armadale,earner,wynyard,dothan,animating,tridentine,sabri,immovable,rivoli,ariege,parley,clinker,circulates,junagadh,fraunhofer,congregants,180th,buducnost,formula_62,olmert,dedekind,karnak,bayernliga,mazes,sandpiper,ecclestone,yuvan,smallmouth,decolonization,lemmy,adjudicated,retiro,legia,benue,posit,acidification,wahab,taconic,floatplane,perchlorate,atria,wisbech,divestment,dallara,phrygia,palustris,cybersecurity,rebates,facie,mineralogical,substituent,proteges,fowey,mayenne,smoothbore,cherwell,schwarzschild,junin,murrumbidgee,smalltalk,d'orsay,emirati,calaveras,titusville,theremin,vikramaditya,wampanoag,burra,plaines,onegin,emboldened,whampoa,langa,soderbergh,arnaz,sowerby,arendal,godunov,pathanamthitta,damselfly,bestowing,eurosport,iconoclasm,outfitters,acquiesced,badawi,hypotension,ebbsfleet,annulus,sohrab,thenceforth,chagatai,necessitates,aulus,oddities,toynbee,uniontown,innervation,populaire,indivisible,rossellini,minuet,cyrene,gyeongju,chania,cichlids,harrods,1690s,plunges,abdullahi,gurkhas,homebuilt,sortable,bangui,rediff,incrementally,demetrios,medaille,sportif,svend,guttenberg,tubules,carthusian,pleiades,torii,hoppus,phenyl,hanno,conyngham,teschen,cronenberg,wordless,melatonin,distinctiveness,autos,freising,xuanzang,dunwich,satanism,sweyn,predrag,contractually,pavlovic,malaysians,micrometres,expertly,pannonian,abstaining,capensis,southwesterly,catchphrases,commercialize,frankivsk,normanton,hibernate,verso,deportees,dubliners,codice_8,condors,zagros,glosses,leadville,conscript,morrisons,usury,ossian,oulton,vaccinium,civet,ayman,codrington,hadron,nanometers,geochemistry,extractor,grigori,tyrrhenian,neocollyris,drooping,falsification,werft,courtauld,brigantine,orhan,chapultepec,supercopa,federalized,praga,havering,encampments,infallibility,sardis,pawar,undirected,reconstructionist,ardrossan,varuna,pastimes,archdiocesan,fledging,shenhua,molise,secondarily,stagnated,replicates,ciencias,duryodhana,marauding,ruislip,ilyich,intermixed,ravenswood,shimazu,mycorrhizal,icosahedral,consents,dunblane,follicular,pekin,suffield,muromachi,kinsale,gauche,businesspeople,thereto,watauga,exaltation,chelmno,gorse,proliferate,drainages,burdwan,kangra,transducers,inductor,duvalier,maguindanao,moslem,uncaf,givenchy,plantarum,liturgics,telegraphs,lukashenko,chenango,andante,novae,ironwood,faubourg,torme,chinensis,ambala,pietermaritzburg,virginians,landform,bottlenecks,o'driscoll,darbhanga,baptistery,ameer,needlework,naperville,auditoriums,mullingar,starrer,animatronic,topsoil,madura,cannock,vernet,santurce,catocala,ozeki,pontevedra,multichannel,sundsvall,strategists,medio,135th,halil,afridi,trelawny,caloric,ghraib,allendale,hameed,ludwigshafen,spurned,pavlo,palmar,strafed,catamarca,aveiro,harmonization,surah,predictors,solvay,mande,omnipresent,parenthesis,echolocation,equaling,experimenters,acyclic,lithographic,sepoys,katarzyna,sridevi,impoundment,khosrow,caesarean,nacogdoches,rockdale,lawmaker,caucasians,bahman,miyan,rubric,exuberance,bombastic,ductile,snowdonia,inlays,pinyon,anemones,hurries,hospitallers,tayyip,pulleys,treme,photovoltaics,testbed,polonium,ryszard,osgoode,profiting,ironwork,unsurpassed,nepticulidae,makai,lumbini,preclassic,clarksburg,egremont,videography,rehabilitating,ponty,sardonic,geotechnical,khurasan,solzhenitsyn,henna,phoenicia,rhyolite,chateaux,retorted,tomar,deflections,repressions,harborough,renan,brumbies,vandross,storia,vodou,clerkenwell,decking,universo,salon.com,imprisoning,sudwest,ghaziabad,subscribing,pisgah,sukhumi,econometric,clearest,pindar,yildirim,iulia,atlases,cements,remaster,dugouts,collapsible,resurrecting,batik,unreliability,thiers,conjunctions,colophon,marcher,placeholder,flagella,wolds,kibaki,viviparous,twelver,screenshots,aroostook,khadr,iconographic,itasca,jaume,basti,propounded,varro,be'er,jeevan,exacted,shrublands,creditable,brocade,boras,bittern,oneonta,attentional,herzliya,comprehensible,lakeville,discards,caxias,frankland,camerata,satoru,matlab,commutator,interprovincial,yorkville,benefices,nizami,edwardsville,amigaos,cannabinoid,indianola,amateurliga,pernicious,ubiquity,anarchic,novelties,precondition,zardari,symington,sargodha,headphone,thermopylae,mashonaland,zindagi,thalberg,loewe,surfactants,dobro,crocodilians,samhita,diatoms,haileybury,berwickshire,supercritical,sofie,snorna,slatina,intramolecular,agung,osteoarthritis,obstetric,teochew,vakhtang,connemara,deformations,diadem,ferruccio,mainichi,qualitatively,refrigerant,rerecorded,methylated,karmapa,krasinski,restatement,rouvas,cubitt,seacoast,schwarzkopf,homonymous,shipowner,thiamine,approachable,xiahou,160th,ecumenism,polistes,internazionali,fouad,berar,biogeography,texting,inadequately,'when,4kids,hymenoptera,emplaced,cognomen,bellefonte,supplant,michaelmas,uriel,tafsir,morazan,schweinfurt,chorister,ps400,nscaa,petipa,resolutely,ouagadougou,mascarene,supercell,konstanz,bagrat,harmonix,bergson,shrimps,resonators,veneta,camas,mynydd,rumford,generalmajor,khayyam,web.com,pappus,halfdan,tanana,suomen,yutaka,bibliographical,traian,silat,noailles,contrapuntal,agaricus,'special,minibuses,1670s,obadiah,deepa,rorschach,malolos,lymington,valuations,imperials,caballeros,ambroise,judicature,elegiac,sedaka,shewa,checksum,gosforth,legionaries,corneille,microregion,friedrichshafen,antonis,surnamed,mycelium,cantus,educations,topmost,outfitting,ivica,nankai,gouda,anthemic,iosif,supercontinent,antifungal,belarusians,mudaliar,mohawks,caversham,glaciated,basemen,stevan,clonmel,loughton,deventer,positivist,manipuri,tensors,panipat,changeup,impermeable,dubbo,elfsborg,maritimo,regimens,bikram,bromeliad,substratum,norodom,gaultier,queanbeyan,pompeo,redacted,eurocopter,mothballed,centaurs,borno,copra,bemidji,'home,sopron,neuquen,passo,cineplex,alexandrov,wysokie,mammoths,yossi,sarcophagi,congreve,petkovic,extraneous,waterbirds,slurs,indias,phaeton,discontented,prefaced,abhay,prescot,interoperable,nordisk,bicyclists,validly,sejong,litovsk,zanesville,kapitanleutnant,kerch,changeable,mcclatchy,celebi,attesting,maccoll,sepahan,wayans,veined,gaudens,markt,dansk,soane,quantized,petersham,forebears,nayarit,frenzied,queuing,bygone,viggo,ludwik,tanka,hanssen,brythonic,cornhill,primorsky,stockpiles,conceptualization,lampeter,hinsdale,mesoderm,bielsk,rosenheim,ultron,joffrey,stanwyck,khagan,tiraspol,pavelic,ascendant,empoli,metatarsal,descentralizado,masada,ligier,huseyin,ramadi,waratah,tampines,ruthenium,statoil,mladost,liger,grecian,multiparty,digraph,maglev,reconsideration,radiography,cartilaginous,taizu,wintered,anabaptist,peterhouse,shoghi,assessors,numerator,paulet,painstakingly,halakhic,rocroi,motorcycling,gimel,kryptonian,emmeline,cheeked,drawdown,lelouch,dacians,brahmana,reminiscence,disinfection,optimizations,golders,extensor,tsugaru,tolling,liman,gulzar,unconvinced,crataegus,oppositional,dvina,pyrolysis,mandan,alexius,prion,stressors,loomed,moated,dhivehi,recyclable,relict,nestlings,sarandon,kosovar,solvers,czeslaw,kenta,maneuverable,middens,berkhamsted,comilla,folkways,loxton,beziers,batumi,petrochemicals,optimised,sirjan,rabindra,musicality,rationalisation,drillers,subspaces,'live,bbwaa,outfielders,tsung,danske,vandalised,norristown,striae,kanata,gastroenterology,steadfastly,equalising,bootlegging,mannerheim,notodontidae,lagoa,commentating,peninsulas,chishti,seismology,modigliani,preceptor,canonically,awardee,boyaca,hsinchu,stiffened,nacelle,bogor,dryness,unobstructed,yaqub,scindia,peeters,irritant,ammonites,ferromagnetic,speechwriter,oxygenated,walesa,millais,canarian,faience,calvinistic,discriminant,rasht,inker,annexes,howth,allocates,conditionally,roused,regionalism,regionalbahn,functionary,nitrates,bicentenary,recreates,saboteurs,koshi,plasmids,thinned,124th,plainview,kardashian,neuville,victorians,radiates,127th,vieques,schoolmates,petru,tokusatsu,keying,sunaina,flamethrower,'bout,demersal,hosokawa,corelli,omniscient,o'doherty,niksic,reflectivity,transdev,cavour,metronome,temporally,gabba,nsaids,geert,mayport,hematite,boeotia,vaudreuil,torshavn,sailplane,mineralogist,eskisehir,practises,gallifrey,takumi,unease,slipstream,hedmark,paulinus,ailsa,wielkopolska,filmworks,adamantly,vinaya,facelifted,franchisee,augustana,toppling,velvety,crispa,stonington,histological,genealogist,tactician,tebow,betjeman,nyingma,overwinter,oberoi,rampal,overwinters,petaluma,lactarius,stanmore,balikpapan,vasant,inclines,laminate,munshi,sociedade,rabbah,septal,boyband,ingrained,faltering,inhumans,nhtsa,affix,l'ordre,kazuki,rossendale,mysims,latvians,slaveholders,basilicata,neuburg,assize,manzanillo,scrobipalpa,formula_61,belgique,pterosaurs,privateering,vaasa,veria,northport,pressurised,hobbyist,austerlitz,sahih,bhadra,siliguri,bistrica,bursaries,wynton,corot,lepidus,lully,libor,libera,olusegun,choline,mannerism,lymphocyte,chagos,duxbury,parasitism,ecowas,morotai,cancion,coniston,aggrieved,sputnikmusic,parle,ammonian,civilisations,malformation,cattaraugus,skyhawks,d'arc,demerara,bronfman,midwinter,piscataway,jogaila,threonine,matins,kohlberg,hubli,pentatonic,camillus,nigam,potro,unchained,chauvel,orangeville,cistercians,redeployment,xanthi,manju,carabinieri,pakeha,nikolaevich,kantakouzenos,sesquicentennial,gunships,symbolised,teramo,ballo,crusading,l'oeil,bharatpur,lazier,gabrovo,hysteresis,rothbard,chaumont,roundel,ma'mun,sudhir,queried,newts,shimane,presynaptic,playfield,taxonomists,sensitivities,freleng,burkinabe,orfeo,autovia,proselytizing,bhangra,pasok,jujutsu,heung,pivoting,hominid,commending,formula_64,epworth,christianized,oresund,hantuchova,rajputana,hilversum,masoretic,dayak,bakri,assen,magog,macromolecules,waheed,qaida,spassky,rumped,protrudes,preminger,misogyny,glencairn,salafi,lacunae,grilles,racemes,areva,alighieri,inari,epitomized,photoshoot,one-of-a-kind,tring,muralist,tincture,backwaters,weaned,yeasts,analytically,smaland,caltrans,vysocina,jamuna,mauthausen,175th,nouvelles,censoring,reggina,christology,gilad,amplifying,mehmood,johnsons,redirects,eastgate,sacrum,meteoric,riverbanks,guidebooks,ascribes,scoparia,iconoclastic,telegraphic,chine,merah,mistico,lectern,sheung,aethelstan,capablanca,anant,uspto,albatrosses,mymensingh,antiretroviral,clonal,coorg,vaillant,liquidator,gigas,yokai,eradicating,motorcyclists,waitakere,tandon,nears,montenegrins,250th,tatsuya,yassin,atheistic,syncretism,nahum,berisha,transcended,owensboro,lakshmana,abteilung,unadorned,nyack,overflows,harrisonburg,complainant,uematsu,frictional,worsens,sangguniang,abutment,bulwer,sarma,apollinaire,shippers,lycia,alentejo,porpoises,optus,trawling,augustow,blackwall,workbench,westmount,leaped,sikandar,conveniences,stornoway,culverts,zoroastrians,hristo,ansgar,assistive,reassert,fanned,compasses,delgada,maisons,arima,plonsk,verlaine,starstruck,rakhine,befell,spirally,wyclef,expend,colloquium,formula_63,albertus,bellarmine,handedness,holon,introns,movimiento,profitably,lohengrin,discoverers,awash,erste,pharisees,dwarka,oghuz,hashing,heterodox,uloom,vladikavkaz,linesman,rehired,nucleophile,germanicus,gulshan,songz,bayerische,paralympian,crumlin,enjoined,khanum,prahran,penitent,amersfoort,saranac,semisimple,vagrants,compositing,tualatin,oxalate,lavra,ironi,ilkeston,umpqua,calum,stretford,zakat,guelders,hydrazine,birkin,spurring,modularity,aspartate,sodermanland,hopital,bellary,legazpi,clasico,cadfael,hypersonic,volleys,pharmacokinetics,carotene,orientale,pausini,bataille,lunga,retailed,m.phil,mazowieckie,vijayan,rawal,sublimation,promissory,estimators,ploughed,conflagration,penda,segregationist,otley,amputee,coauthor,sopra,pellew,wreckers,tollywood,circumscription,permittivity,strabane,landward,articulates,beaverbrook,rutherglen,coterminous,whistleblowers,colloidal,surbiton,atlante,oswiecim,bhasa,lampooned,chanter,saarc,landkreis,tribulation,tolerates,daiichi,hatun,cowries,dyschirius,abercromby,attock,aldwych,inflows,absolutist,l'histoire,committeeman,vanbrugh,headstock,westbourne,appenzell,hoxton,oculus,westfalen,roundabouts,nickelback,trovatore,quenching,summarises,conservators,transmutation,talleyrand,barzani,unwillingly,axonal,'blue,opining,enveloping,fidesz,rafah,colborne,flickr,lozenge,dulcimer,ndebele,swaraj,oxidize,gonville,resonated,gilani,superiore,endeared,janakpur,shepperton,solidifying,memoranda,sochaux,kurnool,rewari,emirs,kooning,bruford,unavailability,kayseri,judicious,negating,pterosaur,cytosolic,chernihiv,variational,sabretooth,seawolves,devalued,nanded,adverb,volunteerism,sealers,nemours,smederevo,kashubian,bartin,animax,vicomte,polotsk,polder,archiepiscopal,acceptability,quidditch,tussock,seminaire,immolation,belge,coves,wellingborough,khaganate,mckellen,nayaka,brega,kabhi,pontoons,bascule,newsreels,injectors,cobol,weblog,diplo,biggar,wheatbelt,erythrocytes,pedra,showgrounds,bogdanovich,eclecticism,toluene,elegies,formalize,andromedae,airworthiness,springville,mainframes,overexpression,magadha,bijelo,emlyn,glutamine,accenture,uhuru,metairie,arabidopsis,patanjali,peruvians,berezovsky,accion,astrolabe,jayanti,earnestly,sausalito,recurved,1500s,ramla,incineration,galleons,laplacian,shiki,smethwick,isomerase,dordevic,janow,jeffersonville,internationalism,penciled,styrene,ashur,nucleoside,peristome,horsemanship,sedges,bachata,medes,kristallnacht,schneerson,reflectance,invalided,strutt,draupadi,destino,partridges,tejas,quadrennial,aurel,halych,ethnomusicology,autonomist,radyo,rifting,shi'ar,crvena,telefilm,zawahiri,plana,sultanates,theodorus,subcontractors,pavle,seneschal,teleports,chernivtsi,buccal,brattleboro,stankovic,safar,dunhuang,electrocution,chastised,ergonomic,midsomer,130th,zomba,nongovernmental,escapist,localize,xuzhou,kyrie,carinthian,karlovac,nisan,kramnik,pilipino,digitisation,khasi,andronicus,highwayman,maior,misspelling,sebastopol,socon,rhaetian,archimandrite,partway,positivity,otaku,dingoes,tarski,geopolitics,disciplinarian,zulfikar,kenzo,globose,electrophilic,modele,storekeeper,pohang,wheldon,washers,interconnecting,digraphs,intrastate,campy,helvetic,frontispiece,ferrocarril,anambra,petraeus,midrib,endometrial,dwarfism,mauryan,endocytosis,brigs,percussionists,furtherance,synergistic,apocynaceae,krona,berthier,circumvented,casal,siltstone,precast,ethnikos,realists,geodesy,zarzuela,greenback,tripathi,persevered,interments,neutralization,olbermann,departements,supercomputing,demobilised,cassavetes,dunder,ministering,veszprem,barbarism,'world,pieve,apologist,frentzen,sulfides,firewalls,pronotum,staatsoper,hachette,makhachkala,oberland,phonon,yoshihiro,instars,purnima,winslet,mutsu,ergative,sajid,nizamuddin,paraphrased,ardeidae,kodagu,monooxygenase,skirmishers,sportiva,o'byrne,mykolaiv,ophir,prieta,gyllenhaal,kantian,leche,copan,herero,ps250,gelsenkirchen,shalit,sammarinese,chetwynd,wftda,travertine,warta,sigmaringen,concerti,namespace,ostergotland,biomarker,universals,collegio,embarcadero,wimborne,fiddlers,likening,ransomed,stifled,unabated,kalakaua,khanty,gongs,goodrem,countermeasure,publicizing,geomorphology,swedenborg,undefended,catastrophes,diverts,storyboards,amesbury,contactless,placentia,festivity,authorise,terrane,thallium,stradivarius,antonine,consortia,estimations,consecrate,supergiant,belichick,pendants,butyl,groza,univac,afire,kavala,studi,teletoon,paucity,gonbad,koninklijke,128th,stoichiometric,multimodal,facundo,anatomic,melamine,creuse,altan,brigands,mcguinty,blomfield,tsvangirai,protrusion,lurgan,warminster,tenzin,russellville,discursive,definable,scotrail,lignin,reincorporated,o'dell,outperform,redland,multicolored,evaporates,dimitrie,limbic,patapsco,interlingua,surrogacy,cutty,potrero,masud,cahiers,jintao,ardashir,centaurus,plagiarized,minehead,musings,statuettes,logarithms,seaview,prohibitively,downforce,rivington,tomorrowland,microbiologist,ferric,morag,capsid,kucinich,clairvaux,demotic,seamanship,cicada,painterly,cromarty,carbonic,tupou,oconee,tehuantepec,typecast,anstruther,internalized,underwriters,tetrahedra,flagrant,quakes,pathologies,ulrik,nahal,tarquini,dongguan,parnassus,ryoko,senussi,seleucia,airasia,einer,sashes,d'amico,matriculating,arabesque,honved,biophysical,hardinge,kherson,mommsen,diels,icbms,reshape,brasiliensis,palmach,netaji,oblate,functionalities,grigor,blacksburg,recoilless,melanchthon,reales,astrodome,handcrafted,memes,theorizes,isma'il,aarti,pirin,maatschappij,stabilizes,honiara,ashbury,copts,rootes,defensed,queiroz,mantegna,galesburg,coraciiformesfamily,cabrillo,tokio,antipsychotics,kanon,173rd,apollonia,finial,lydian,hadamard,rangi,dowlatabad,monolingual,platformer,subclasses,chiranjeevi,mirabeau,newsgroup,idmanyurdu,kambojas,walkover,zamoyski,generalist,khedive,flanges,knowle,bande,157th,alleyn,reaffirm,pininfarina,zuckerberg,hakodate,131st,aditi,bellinzona,vaulter,planking,boscombe,colombians,lysis,toppers,metered,nahyan,queensryche,minho,nagercoil,firebrand,foundress,bycatch,mendota,freeform,antena,capitalisation,martinus,overijssel,purists,interventionist,zgierz,burgundians,hippolyta,trompe,umatilla,moroccans,dictionnaire,hydrography,changers,chota,rimouski,aniline,bylaw,grandnephew,neamt,lemnos,connoisseurs,tractive,rearrangements,fetishism,finnic,apalachicola,landowning,calligraphic,circumpolar,mansfeld,legible,orientalism,tannhauser,blamey,maximization,noinclude,blackbirds,angara,ostersund,pancreatitis,glabra,acleris,juried,jungian,triumphantly,singlet,plasmas,synesthesia,yellowhead,unleashes,choiseul,quanzhong,brookville,kaskaskia,igcse,skatepark,jatin,jewellers,scaritinae,techcrunch,tellurium,lachaise,azuma,codeshare,dimensionality,unidirectional,scolaire,macdill,camshafts,unassisted,verband,kahlo,eliya,prelature,chiefdoms,saddleback,sockers,iommi,coloratura,llangollen,biosciences,harshest,maithili,k'iche,plical,multifunctional,andreu,tuskers,confounding,sambre,quarterdeck,ascetics,berdych,transversal,tuolumne,sagami,petrobras,brecker,menxia,instilling,stipulating,korra,oscillate,deadpan,v/line,pyrotechnic,stoneware,prelims,intracoastal,retraining,ilija,berwyn,encrypt,achievers,zulfiqar,glycoproteins,khatib,farmsteads,occultist,saman,fionn,derulo,khilji,obrenovic,argosy,toowong,dementieva,sociocultural,iconostasis,craigslist,festschrift,taifa,intercalated,tanjong,penticton,sharad,marxian,extrapolation,guises,wettin,prabang,exclaiming,kosta,famas,conakry,wanderings,'aliabad,macleay,exoplanet,bancorp,besiegers,surmounting,checkerboard,rajab,vliet,tarek,operable,wargaming,haldimand,fukuyama,uesugi,aggregations,erbil,brachiopods,tokyu,anglais,unfavorably,ujpest,escorial,armagnac,nagara,funafuti,ridgeline,cocking,o'gorman,compactness,retardant,krajowa,barua,coking,bestows,thampi,chicagoland,variably,o'loughlin,minnows,schwa,shaukat,polycarbonate,chlorinated,godalming,gramercy,delved,banqueting,enlil,sarada,prasanna,domhnall,decadal,regressive,lipoprotein,collectable,surendra,zaporizhia,cycliste,suchet,offsetting,formula_65,pudong,d'arte,blyton,quonset,osmania,tientsin,manorama,proteomics,bille,jalpaiguri,pertwee,barnegat,inventiveness,gollancz,euthanized,henricus,shortfalls,wuxia,chlorides,cerrado,polyvinyl,folktale,straddled,bioengineering,eschewing,greendale,recharged,olave,ceylonese,autocephalous,peacebuilding,wrights,guyed,rosamund,abitibi,bannockburn,gerontology,scutari,souness,seagram,codice_9,'open,xhtml,taguig,purposed,darbar,orthopedics,unpopulated,kisumu,tarrytown,feodor,polyhedral,monadnock,gottorp,priam,redesigning,gasworks,elfin,urquiza,homologation,filipovic,bohun,manningham,gornik,soundness,shorea,lanus,gelder,darke,sandgate,criticality,paranaense,153rd,vieja,lithograph,trapezoid,tiebreakers,convalescence,yan'an,actuaries,balad,altimeter,thermoelectric,trailblazer,previn,tenryu,ancaster,endoscopy,nicolet,discloses,fracking,plaine,salado,americanism,placards,absurdist,propylene,breccia,jirga,documenta,ismailis,161st,brentano,dallas/fort,embellishment,calipers,subscribes,mahavidyalaya,wednesbury,barnstormers,miwok,schembechler,minigame,unterberger,dopaminergic,inacio,nizamabad,overridden,monotype,cavernous,stichting,sassafras,sotho,argentinean,myrrh,rapidity,flatts,gowrie,dejected,kasaragod,cyprinidae,interlinked,arcseconds,degeneracy,infamously,incubate,substructure,trigeminal,sectarianism,marshlands,hooliganism,hurlers,isolationist,urania,burrard,switchover,lecco,wilts,interrogator,strived,ballooning,volterra,raciborz,relegating,gilding,cybele,dolomites,parachutist,lochaber,orators,raeburn,backend,benaud,rallycross,facings,banga,nuclides,defencemen,futurity,emitters,yadkin,eudonia,zambales,manasseh,sirte,meshes,peculiarly,mcminnville,roundly,boban,decrypt,icelanders,sanam,chelan,jovian,grudgingly,penalised,subscript,gambrinus,poaceae,infringements,maleficent,runciman,148th,supersymmetry,granites,liskeard,eliciting,involution,hallstatt,kitzbuhel,shankly,sandhills,inefficiencies,yishuv,psychotropic,nightjars,wavell,sangamon,vaikundar,choshu,retrospectives,pitesti,gigantea,hashemi,bosna,gakuin,siochana,arrangers,baronetcies,narayani,temecula,creston,koscierzyna,autochthonous,wyandot,anniston,igreja,mobilise,buzau,dunster,musselburgh,wenzhou,khattak,detoxification,decarboxylase,manlius,campbells,coleoptera,copyist,sympathisers,suisun,eminescu,defensor,transshipment,thurgau,somerton,fluctuates,ambika,weierstrass,lukow,giambattista,volcanics,romanticized,innovated,matabeleland,scotiabank,garwolin,purine,d'auvergne,borderland,maozhen,pricewaterhousecoopers,testator,pallium,scout.com,mv/pi,nazca,curacies,upjohn,sarasvati,monegasque,ketrzyn,malory,spikelets,biomechanics,haciendas,rapped,dwarfed,stews,nijinsky,subjection,matsu,perceptible,schwarzburg,midsection,entertains,circuitous,epiphytic,wonsan,alpini,bluefield,sloths,transportable,braunfels,dictum,szczecinek,jukka,wielun,wejherowo,hucknall,grameen,duodenum,ribose,deshpande,shahar,nexstar,injurious,dereham,lithographer,dhoni,structuralist,progreso,deschutes,christus,pulteney,quoins,yitzchak,gyeongsang,breviary,makkah,chiyoda,jutting,vineland,angiosperms,necrotic,novelisation,redistribute,tirumala,140th,featureless,mafic,rivaling,toyline,2/1st,martius,saalfeld,monthan,texian,kathak,melodramas,mithila,regierungsbezirk,509th,fermenting,schoolmate,virtuosic,briain,kokoda,heliocentric,handpicked,kilwinning,sonically,dinars,kasim,parkways,bogdanov,luxembourgian,halland,avesta,bardic,daugavpils,excavator,qwest,frustrate,physiographic,majoris,'ndrangheta,unrestrained,firmness,montalban,abundances,preservationists,adare,executioners,guardsman,bonnaroo,neglects,nazrul,pro12,hoorn,abercorn,refuting,kabud,cationic,parapsychology,troposphere,venezuelans,malignancy,khoja,unhindered,accordionist,medak,visby,ejercito,laparoscopic,dinas,umayyads,valmiki,o'dowd,saplings,stranding,incisions,illusionist,avocets,buccleuch,amazonia,fourfold,turboprops,roosts,priscus,turnstile,areal,certifies,pocklington,spoofs,viseu,commonalities,dabrowka,annam,homesteaders,daredevils,mondrian,negotiates,fiestas,perennials,maximizes,lubavitch,ravindra,scrapers,finials,kintyre,violas,snoqualmie,wilders,openbsd,mlawa,peritoneal,devarajan,congke,leszno,mercurial,fakir,joannes,bognor,overloading,unbuilt,gurung,scuttle,temperaments,bautzen,jardim,tradesman,visitations,barbet,sagamore,graaff,forecasters,wilsons,assis,l'air,shariah,sochaczew,russa,dirge,biliary,neuve,heartbreakers,strathearn,jacobian,overgrazing,edrich,anticline,parathyroid,petula,lepanto,decius,channelled,parvathi,puppeteers,communicators,francorchamps,kahane,longus,panjang,intron,traite,xxvii,matsuri,amrit,katyn,disheartened,cacak,omonia,alexandrine,partaking,wrangling,adjuvant,haskovo,tendrils,greensand,lammermoor,otherworld,volusia,stabling,one-and-a-half,bresson,zapatista,eotvos,ps150,webisodes,stepchildren,microarray,braganca,quanta,dolne,superoxide,bellona,delineate,ratha,lindenwood,bruhl,cingulate,tallies,bickerton,helgi,bevin,takoma,tsukuba,statuses,changeling,alister,bytom,dibrugarh,magnesia,duplicating,outlier,abated,goncalo,strelitz,shikai,mardan,musculature,ascomycota,springhill,tumuli,gabaa,odenwald,reformatted,autocracy,theresienstadt,suplex,chattopadhyay,mencken,congratulatory,weatherfield,systema,solemnity,projekt,quanzhou,kreuzberg,postbellum,nobuo,mediaworks,finisterre,matchplay,bangladeshis,kothen,oocyte,hovered,aromas,afshar,browed,teases,chorlton,arshad,cesaro,backbencher,iquique,vulcans,padmini,unabridged,cyclase,despotic,kirilenko,achaean,queensberry,debre,octahedron,iphigenia,curbing,karimnagar,sagarmatha,smelters,surrealists,sanada,shrestha,turridae,leasehold,jiedushi,eurythmics,appropriating,correze,thimphu,amery,musicomh,cyborgs,sandwell,pushcart,retorts,ameliorate,deteriorates,stojanovic,spline,entrenchments,bourse,chancellorship,pasolini,lendl,personage,reformulated,pubescens,loiret,metalurh,reinvention,nonhuman,eilema,tarsal,complutense,magne,broadview,metrodome,outtake,stouffville,seinen,bataillon,phosphoric,ostensible,opatow,aristides,beefheart,glorifying,banten,romsey,seamounts,fushimi,prophylaxis,sibylla,ranjith,goslar,balustrades,georgiev,caird,lafitte,peano,canso,bankura,halfpenny,segregate,caisson,bizerte,jamshedpur,euromaidan,philosophie,ridged,cheerfully,reclassification,aemilius,visionaries,samoans,wokingham,chemung,wolof,unbranched,cinerea,bhosle,ourense,immortalised,cornerstones,sourcebook,khufu,archimedean,universitatea,intermolecular,fiscally,suffices,metacomet,adjudicator,stablemate,specks,glace,inowroclaw,patristic,muharram,agitating,ashot,neurologic,didcot,gamla,ilves,putouts,siraj,laski,coaling,diarmuid,ratnagiri,rotulorum,liquefaction,morbihan,harel,aftershock,gruiformesfamily,bonnier,falconiformesfamily,adorns,wikis,maastrichtian,stauffenberg,bishopsgate,fakhr,sevenfold,ponders,quantifying,castiel,opacity,depredations,lenten,gravitated,o'mahony,modulates,inuktitut,paston,kayfabe,vagus,legalised,balked,arianism,tendering,sivas,birthdate,awlaki,khvajeh,shahab,samtgemeinde,bridgeton,amalgamations,biogenesis,recharging,tsukasa,mythbusters,chamfered,enthronement,freelancers,maharana,constantia,sutil,messines,monkton,okanogan,reinvigorated,apoplexy,tanahashi,neues,valiants,harappan,russes,carding,volkoff,funchal,statehouse,imitative,intrepidity,mellotron,samaras,turkana,besting,longitudes,exarch,diarrhoea,transcending,zvonareva,darna,ramblin,disconnection,137th,refocused,diarmait,agricole,ba'athist,turenne,contrabass,communis,daviess,fatimids,frosinone,fittingly,polyphyletic,qanat,theocratic,preclinical,abacha,toorak,marketplaces,conidia,seiya,contraindicated,retford,bundesautobahn,rebuilds,climatology,seaworthy,starfighter,qamar,categoria,malai,hellinsia,newstead,airworthy,catenin,avonmouth,arrhythmias,ayyavazhi,downgrade,ashburnham,ejector,kinematics,petworth,rspca,filmation,accipitridae,chhatrapati,g/mol,bacau,agama,ringtone,yudhoyono,orchestrator,arbitrators,138th,powerplants,cumbernauld,alderley,misamis,hawai`i,cuando,meistriliiga,jermyn,alans,pedigrees,ottavio,approbation,omnium,purulia,prioress,rheinland,lymphoid,lutsk,oscilloscope,ballina,iliac,motorbikes,modernising,uffizi,phylloxera,kalevala,bengalis,amravati,syntheses,interviewers,inflectional,outflank,maryhill,unhurt,profiler,nacelles,heseltine,personalised,guarda,herpetologist,airpark,pigot,margaretha,dinos,peleliu,breakbeat,kastamonu,shaivism,delamere,kingsville,epigram,khlong,phospholipids,journeying,lietuvos,congregated,deviance,celebes,subsoil,stroma,kvitova,lubricating,layoff,alagoas,olafur,doron,interuniversity,raycom,agonopterix,uzice,nanna,springvale,raimundo,wrested,pupal,talat,skinheads,vestige,unpainted,handan,odawara,ammar,attendee,lapped,myotis,gusty,ciconiiformesfamily,traversal,subfield,vitaphone,prensa,hasidism,inwood,carstairs,kropotkin,turgenev,dobra,remittance,purim,tannin,adige,tabulation,lethality,pacha,micronesian,dhruva,defensemen,tibeto,siculus,radioisotope,sodertalje,phitsanulok,euphonium,oxytocin,overhangs,skinks,fabrica,reinterred,emulates,bioscience,paragliding,raekwon,perigee,plausibility,frolunda,erroll,aznar,vyasa,albinus,trevally,confederacion,terse,sixtieth,1530s,kendriya,skateboarders,frontieres,muawiyah,easements,shehu,conservatively,keystones,kasem,brutalist,peekskill,cowry,orcas,syllabary,paltz,elisabetta,denticles,hampering,dolni,eidos,aarau,lermontov,yankton,shahbaz,barrages,kongsvinger,reestablishment,acetyltransferase,zulia,mrnas,slingsby,eucalypt,efficacious,weybridge,gradation,cinematheque,malthus,bampton,coexisted,cisse,hamdi,cupertino,saumarez,chionodes,libertine,formers,sakharov,pseudonymous,vol.1,mcduck,gopalakrishnan,amberley,jorhat,grandmasters,rudiments,dwindle,param,bukidnon,menander,americanus,multipliers,pulawy,homoerotic,pillbox,cd+dvd,epigraph,aleksandrow,extrapolated,horseshoes,contemporain,angiography,hasselt,shawinigan,memorization,legitimized,cyclades,outsold,rodolphe,kelis,powerball,dijkstra,analyzers,incompressible,sambar,orangeburg,osten,reauthorization,adamawa,sphagnum,hypermarket,millipedes,zoroaster,madea,ossuary,murrayfield,pronominal,gautham,resellers,ethers,quarrelled,dolna,stragglers,asami,tangut,passos,educacion,sharaf,texel,berio,bethpage,bezalel,marfa,noronha,36ers,genteel,avram,shilton,compensates,sweetener,reinstalled,disables,noether,1590s,balakrishnan,kotaro,northallerton,cataclysm,gholam,cancellara,schiphol,commends,longinus,albinism,gemayel,hamamatsu,volos,islamism,sidereal,pecuniary,diggings,townsquare,neosho,lushan,chittoor,akhil,disputation,desiccation,cambodians,thwarting,deliberated,ellipsis,bahini,susumu,separators,kohneh,plebeians,kultur,ogaden,pissarro,trypeta,latur,liaodong,vetting,datong,sohail,alchemists,lengthwise,unevenly,masterly,microcontrollers,occupier,deviating,farringdon,baccalaureat,theocracy,chebyshev,archivists,jayaram,ineffectiveness,scandinavians,jacobins,encomienda,nambu,g/cm3,catesby,paavo,heeded,rhodium,idealised,10deg,infective,mecyclothorax,halevy,sheared,minbari,audax,lusatian,rebuffs,hitfix,fastener,subjugate,tarun,binet,compuserve,synthesiser,keisuke,amalric,ligatures,tadashi,ignazio,abramovich,groundnut,otomo,maeve,mortlake,ostrogoths,antillean,todor,recto,millimetre,espousing,inaugurate,paracetamol,galvanic,harpalinae,jedrzejow,reassessment,langlands,civita,mikan,stikine,bijar,imamate,istana,kaiserliche,erastus,federale,cytosine,expansionism,hommes,norrland,smriti,snapdragon,gulab,taleb,lossy,khattab,urbanised,sesto,rekord,diffuser,desam,morganatic,silting,pacts,extender,beauharnais,purley,bouches,halfpipe,discontinuities,houthi,farmville,animism,horni,saadi,interpretative,blockades,symeon,biogeographic,transcaucasian,jetties,landrieu,astrocytes,conjunto,stumpings,weevils,geysers,redux,arching,romanus,tazeh,marcellinus,casein,opava,misrata,anare,sattar,declarer,dreux,oporto,venta,vallis,icosahedron,cortona,lachine,mohammedan,sandnes,zynga,clarin,diomedes,tsuyoshi,pribram,gulbarga,chartist,superettan,boscawen,altus,subang,gating,epistolary,vizianagaram,ogdensburg,panna,thyssen,tarkovsky,dzogchen,biograph,seremban,unscientific,nightjar,legco,deism,n.w.a,sudha,siskel,sassou,flintlock,jovial,montbeliard,pallida,formula_66,tranquillity,nisei,adornment,'people,yamhill,hockeyallsvenskan,adopters,appian,lowicz,haplotypes,succinctly,starogard,presidencies,kheyrabad,sobibor,kinesiology,cowichan,militum,cromwellian,leiningen,ps1.5,concourses,dalarna,goldfield,brzeg,faeces,aquarii,matchless,harvesters,181st,numismatics,korfball,sectioned,transpires,facultative,brandishing,kieron,forages,menai,glutinous,debarge,heathfield,1580s,malang,photoelectric,froome,semiotic,alwar,grammophon,chiaroscuro,mentalist,maramures,flacco,liquors,aleutians,marvell,sutlej,patnaik,qassam,flintoff,bayfield,haeckel,sueno,avicii,exoplanets,hoshi,annibale,vojislav,honeycombs,celebrant,rendsburg,veblen,quails,141st,carronades,savar,narrations,jeeva,ontologies,hedonistic,marinette,godot,munna,bessarabian,outrigger,thame,gravels,hoshino,falsifying,stereochemistry,nacionalista,medially,radula,ejecting,conservatorio,odile,ceiba,jaina,essonne,isometry,allophones,recidivism,iveco,ganda,grammarians,jagan,signposted,uncompressed,facilitators,constancy,ditko,propulsive,impaling,interbank,botolph,amlaib,intergroup,sorbus,cheka,debye,praca,adorning,presbyteries,dormition,strategos,qarase,pentecostals,beehives,hashemite,goldust,euronext,egress,arpanet,soames,jurchens,slovenska,copse,kazim,appraisals,marischal,mineola,sharada,caricaturist,sturluson,galba,faizabad,overwintering,grete,uyezds,didsbury,libreville,ablett,microstructure,anadolu,belenenses,elocution,cloaks,timeslots,halden,rashidun,displaces,sympatric,germanus,tuples,ceska,equalize,disassembly,krautrock,babangida,memel,deild,gopala,hematology,underclass,sangli,wawrinka,assur,toshack,refrains,nicotinic,bhagalpur,badami,racetracks,pocatello,walgreens,nazarbayev,occultation,spinnaker,geneon,josias,hydrolyzed,dzong,corregimiento,waistcoat,thermoplastic,soldered,anticancer,lactobacillus,shafi'i,carabus,adjournment,schlumberger,triceratops,despotate,mendicant,krishnamurti,bahasa,earthworm,lavoisier,noetherian,kalki,fervently,bhawan,saanich,coquille,gannet,motagua,kennels,mineralization,fitzherbert,svein,bifurcated,hairdressing,felis,abounded,dimers,fervour,hebdo,bluffton,aetna,corydon,clevedon,carneiro,subjectively,deutz,gastropoda,overshot,concatenation,varman,carolla,maharshi,mujib,inelastic,riverhead,initialized,safavids,rohini,caguas,bulges,fotbollforbund,hefei,spithead,westville,maronites,lytham,americo,gediminas,stephanus,chalcolithic,hijra,gnu/linux,predilection,rulership,sterility,haidar,scarlatti,saprissa,sviatoslav,pointedly,sunroof,guarantor,thevar,airstrips,pultusk,sture,129th,divinities,daizong,dolichoderus,cobourg,maoists,swordsmanship,uprated,bohme,tashi,largs,chandi,bluebeard,householders,richardsonian,drepanidae,antigonish,elbasan,occultism,marca,hypergeometric,oirat,stiglitz,ignites,dzungar,miquelon,pritam,d'automne,ulidiid,niamey,vallecano,fondo,billiton,incumbencies,raceme,chambery,cadell,barenaked,kagame,summerside,haussmann,hatshepsut,apothecaries,criollo,feint,nasals,timurid,feltham,plotinus,oxygenation,marginata,officinalis,salat,participations,ising,downe,izumo,unguided,pretence,coursed,haruna,viscountcy,mainstage,justicia,powiat,takara,capitoline,implacable,farben,stopford,cosmopterix,tuberous,kronecker,galatians,kweli,dogmas,exhorted,trebinje,skanda,newlyn,ablative,basidia,bhiwani,encroachments,stranglers,regrouping,tubal,shoestring,wawel,anionic,mesenchymal,creationists,pyrophosphate,moshi,despotism,powerbook,fatehpur,rupiah,segre,ternate,jessore,b.i.g,shevardnadze,abounds,gliwice,densest,memoria,suborbital,vietcong,ratepayers,karunanidhi,toolbar,descents,rhymney,exhortation,zahedan,carcinomas,hyperbaric,botvinnik,billets,neuropsychological,tigranes,hoards,chater,biennially,thistles,scotus,wataru,flotillas,hungama,monopolistic,payouts,vetch,generalissimo,caries,naumburg,piran,blizzards,escalates,reactant,shinya,theorize,rizzoli,transitway,ecclesiae,streptomyces,cantal,nisibis,superconductor,unworkable,thallus,roehampton,scheckter,viceroys,makuuchi,ilkley,superseding,takuya,klodzko,borbon,raspberries,operand,w.a.k.o,sarabande,factionalism,egalitarianism,temasek,torbat,unscripted,jorma,westerner,perfective,vrije,underlain,goldfrapp,blaenau,jomon,barthes,drivetime,bassa,bannock,umaga,fengxiang,zulus,sreenivasan,farces,codice_10,freeholder,poddebice,imperialists,deregulated,wingtip,o'hagan,pillared,overtone,hofstadter,149th,kitano,saybrook,standardizing,aldgate,staveley,o'flaherty,hundredths,steerable,soltan,empted,cruyff,intramuros,taluks,cotonou,marae,karur,figueres,barwon,lucullus,niobe,zemlya,lathes,homeported,chaux,amyotrophic,opines,exemplars,bhamo,homomorphisms,gauleiter,ladin,mafiosi,airdrieonians,b/soul,decal,transcaucasia,solti,defecation,deaconess,numidia,sampradaya,normalised,wingless,schwaben,alnus,cinerama,yakutsk,ketchikan,orvieto,unearned,monferrato,rotem,aacsb,loong,decoders,skerries,cardiothoracic,repositioning,pimpernel,yohannan,tenebrionoidea,nargis,nouvel,costliest,interdenominational,noize,redirecting,zither,morcha,radiometric,frequenting,irtysh,gbagbo,chakri,litvinenko,infotainment,ravensbruck,harith,corbels,maegashira,jousting,natan,novus,falcao,minis,railed,decile,rauma,ramaswamy,cavitation,paranaque,berchtesgaden,reanimated,schomberg,polysaccharides,exclusionary,cleon,anurag,ravaging,dhanush,mitchells,granule,contemptuous,keisei,rolleston,atlantean,yorkist,daraa,wapping,micrometer,keeneland,comparably,baranja,oranje,schlafli,yogic,dinajpur,unimpressive,masashi,recreativo,alemannic,petersfield,naoko,vasudeva,autosport,rajat,marella,busko,wethersfield,ssris,soulcalibur,kobani,wildland,rookery,hoffenheim,kauri,aliphatic,balaclava,ferrite,publicise,victorias,theism,quimper,chapbook,functionalist,roadbed,ulyanovsk,cupen,purpurea,calthorpe,teofilo,mousavi,cochlea,linotype,detmold,ellerslie,gakkai,telkom,southsea,subcontractor,inguinal,philatelists,zeebrugge,piave,trochidae,dempo,spoilt,saharanpur,mihrab,parasympathetic,barbarous,chartering,antiqua,katsina,bugis,categorizes,altstadt,kandyan,pambansa,overpasses,miters,assimilating,finlandia,uneconomic,am/fm,harpsichordist,dresdner,luminescence,authentically,overpowers,magmatic,cliftonville,oilfields,skirted,berthe,cuman,oakham,frelimo,glockenspiel,confection,saxophonists,piaseczno,multilevel,antipater,levying,maltreatment,velho,opoczno,harburg,pedophilia,unfunded,palettes,plasterwork,breve,dharmendra,auchinleck,nonesuch,blackmun,libretti,rabbani,145th,hasselbeck,kinnock,malate,vanden,cloverdale,ashgabat,nares,radians,steelworkers,sabor,possums,catterick,hemispheric,ostra,outpaced,dungeness,almshouse,penryn,texians,1000m,franchitti,incumbency,texcoco,newar,tramcars,toroidal,meitetsu,spellbound,agronomist,vinifera,riata,bunko,pinas,ba'al,github,vasilyevich,obsolescent,geodesics,ancestries,tujue,capitalised,unassigned,throng,unpaired,psychometric,skegness,exothermic,buffered,kristiansund,tongued,berenger,basho,alitalia,prolongation,archaeologically,fractionation,cyprinid,echinoderms,agriculturally,justiciar,sonam,ilium,baits,danceable,grazer,ardahan,grassed,preemption,glassworks,hasina,ugric,umbra,wahhabi,vannes,tinnitus,capitaine,tikrit,lisieux,scree,hormuz,despenser,jagiellon,maisonneuve,gandaki,santarem,basilicas,lancing,landskrona,weilburg,fireside,elysian,isleworth,krishnamurthy,filton,cynon,tecmo,subcostal,scalars,triglycerides,hyperplane,farmingdale,unione,meydan,pilings,mercosur,reactivate,akiba,fecundity,jatra,natsume,zarqawi,preta,masao,presbyter,oakenfold,rhodri,ferran,ruizong,cloyne,nelvana,epiphanius,borde,scutes,strictures,troughton,whitestone,sholom,toyah,shingon,kutuzov,abelard,passant,lipno,cafeterias,residuals,anabaptists,paratransit,criollos,pleven,radiata,destabilizing,hadiths,bazaars,mannose,taiyo,crookes,welbeck,baoding,archelaus,nguesso,alberni,wingtips,herts,viasat,lankans,evreux,wigram,fassbinder,ryuichi,storting,reducible,olesnica,znojmo,hyannis,theophanes,flatiron,mustering,rajahmundry,kadir,wayang,prome,lethargy,zubin,illegality,conall,dramedy,beerbohm,hipparchus,ziarat,ryuji,shugo,glenorchy,microarchitecture,morne,lewinsky,cauvery,battenberg,hyksos,wayanad,hamilcar,buhari,brazo,bratianu,solms,aksaray,elamite,chilcotin,bloodstock,sagara,dolny,reunified,umlaut,proteaceae,camborne,calabrian,dhanbad,vaxjo,cookware,potez,rediffusion,semitones,lamentations,allgau,guernica,suntory,pleated,stationing,urgell,gannets,bertelsmann,entryway,raphitomidae,acetaldehyde,nephrology,categorizing,beiyang,permeate,tourney,geosciences,khana,masayuki,crucis,universitaria,slaskie,khaimah,finno,advani,astonishingly,tubulin,vampiric,jeolla,sociale,cleethorpes,badri,muridae,suzong,debater,decimation,kenyans,mutualism,pontifex,middlemen,insee,halevi,lamentation,psychopathy,brassey,wenders,kavya,parabellum,prolactin,inescapable,apses,malignancies,rinzai,stigmatized,menahem,comox,ateliers,welshpool,setif,centimetre,truthfulness,downfield,drusus,woden,glycosylation,emanated,agulhas,dalkeith,jazira,nucky,unifil,jobim,operon,oryzomys,heroically,seances,supernumerary,backhouse,hashanah,tatler,imago,invert,hayato,clockmaker,kingsmill,swiecie,analogously,golconda,poste,tacitly,decentralised,ge'ez,diplomatically,fossiliferous,linseed,mahavira,pedestals,archpriest,byelection,domiciled,jeffersonian,bombus,winegrowing,waukegan,uncultivated,haverfordwest,saumur,communally,disbursed,cleeve,zeljeznicar,speciosa,vacationers,sigur,vaishali,zlatko,iftikhar,cropland,transkei,incompleteness,bohra,subantarctic,slieve,physiologic,similis,klerk,replanted,'right,chafee,reproducible,bayburt,regicide,muzaffarpur,plurals,hanyu,orthologs,diouf,assailed,kamui,tarik,dodecanese,gorne,on/off,179th,shimoga,granaries,carlists,valar,tripolitania,sherds,simmern,dissociated,isambard,polytechnical,yuvraj,brabazon,antisense,pubmed,glans,minutely,masaaki,raghavendra,savoury,podcasting,tachi,bienville,gongsun,ridgely,deform,yuichi,binders,canna,carcetti,llobregat,implored,berri,njegos,intermingled,offload,athenry,motherhouse,corpora,kakinada,dannebrog,imperio,prefaces,musicologists,aerospatiale,shirai,nagapattinam,servius,cristoforo,pomfret,reviled,entebbe,stane,east/west,thermometers,matriarchal,siglo,bodil,legionnaire,ze'ev,theorizing,sangeetha,horticulturist,uncountable,lookalike,anoxic,ionospheric,genealogists,chicopee,imprinting,popish,crematoria,diamondback,cyathea,hanzhong,cameramen,halogaland,naklo,waclaw,storehouses,flexed,comuni,frits,glauca,nilgiris,compresses,nainital,continuations,albay,hypoxic,samajwadi,dunkerque,nanticoke,sarwar,interchanged,jubal,corba,jalgaon,derleth,deathstroke,magny,vinnytsia,hyphenated,rimfire,sawan,boehner,disrepute,normalize,aromanian,dualistic,approximant,chama,karimabad,barnacles,sanok,stipends,dyfed,rijksmuseum,reverberation,suncorp,fungicides,reverie,spectrograph,stereophonic,niazi,ordos,alcan,karaite,lautrec,tableland,lamellar,rieti,langmuir,russula,webern,tweaks,hawick,southerner,morphy,naturalisation,enantiomer,michinoku,barbettes,relieves,carburettors,redruth,oblates,vocabularies,mogilev,bagmati,galium,reasserted,extolled,symon,eurosceptic,inflections,tirtha,recompense,oruro,roping,gouverneur,pared,yayoi,watermills,retooled,leukocytes,jubilant,mazhar,nicolau,manheim,touraine,bedser,hambledon,kohat,powerhouses,tlemcen,reuven,sympathetically,afrikaners,interes,handcrafts,etcher,baddeley,wodonga,amaury,155th,vulgarity,pompadour,automorphisms,1540s,oppositions,prekmurje,deryni,fortifying,arcuate,mahila,bocage,uther,nozze,slashes,atlantica,hadid,rhizomatous,azeris,'with,osmena,lewisville,innervated,bandmaster,outcropping,parallelogram,dominicana,twang,ingushetia,extensional,ladino,sastry,zinoviev,relatable,nobilis,cbeebies,hitless,eulima,sporangia,synge,longlisted,criminalized,penitential,weyden,tubule,volyn,priestesses,glenbrook,kibbutzim,windshaft,canadair,falange,zsolt,bonheur,meine,archangels,safeguarded,jamaicans,malarial,teasers,badging,merseyrail,operands,pulsars,gauchos,biotin,bambara,necaxa,egmond,tillage,coppi,anxiolytic,preah,mausoleums,plautus,feroz,debunked,187th,belediyespor,mujibur,wantage,carboxyl,chettiar,murnau,vagueness,racemic,backstretch,courtland,municipio,palpatine,dezful,hyperbola,sreekumar,chalons,altay,arapahoe,tudors,sapieha,quilon,burdensome,kanya,xxviii,recension,generis,siphuncle,repressor,bitrate,mandals,midhurst,dioxin,democratique,upholds,rodez,cinematographic,epoque,jinping,rabelais,zhytomyr,glenview,rebooted,khalidi,reticulata,122nd,monnaie,passersby,ghazals,europaea,lippmann,earthbound,tadic,andorran,artvin,angelicum,banksy,epicentre,resemblances,shuttled,rathaus,bernt,stonemasons,balochi,siang,tynemouth,cygni,biosynthetic,precipitates,sharecroppers,d'annunzio,softbank,shiji,apeldoorn,polycyclic,wenceslas,wuchang,samnites,tamarack,silmarillion,madinah,palaeontology,kirchberg,sculpin,rohtak,aquabats,oviparous,thynne,caney,blimps,minimalistic,whatcom,palatalization,bardstown,direct3d,paramagnetic,kamboja,khash,globemaster,lengua,matej,chernigov,swanage,arsenals,cascadia,cundinamarca,tusculum,leavers,organics,warplanes,'three,exertions,arminius,gandharva,inquires,comercio,kuopio,chabahar,plotlines,mersenne,anquetil,paralytic,buckminster,ambit,acrolophus,quantifiers,clacton,ciliary,ansaldo,fergana,egoism,thracians,chicoutimi,northbrook,analgesia,brotherhoods,hunza,adriaen,fluoridation,snowfalls,soundboard,fangoria,cannibalistic,orthogonius,chukotka,dindigul,manzoni,chainz,macromedia,beltline,muruga,schistura,provable,litex,initio,pneumoniae,infosys,cerium,boonton,cannonballs,d'une,solvency,mandurah,houthis,dolmens,apologists,radioisotopes,blaxploitation,poroshenko,stawell,coosa,maximilien,tempelhof,espouse,declaratory,hambro,xalapa,outmoded,mihiel,benefitting,desirous,archeparchy,repopulated,telescoping,captor,mackaye,disparaged,ramanathan,crowne,tumbled,technetium,silted,chedi,nievre,hyeon,cartoonish,interlock,infocom,rediff.com,dioramas,timekeeping,concertina,kutaisi,cesky,lubomirski,unapologetic,epigraphic,stalactites,sneha,biofilm,falconry,miraflores,catena,'outstanding,prospekt,apotheosis,o'odham,pacemakers,arabica,gandhinagar,reminisces,iroquoian,ornette,tilling,neoliberalism,chameleons,pandava,prefontaine,haiyan,gneisenau,utama,bando,reconstitution,azaria,canola,paratroops,ayckbourn,manistee,stourton,manifestos,lympne,denouement,tractatus,rakim,bellflower,nanometer,sassanids,turlough,presbyterianism,varmland,20deg,phool,nyerere,almohad,manipal,vlaanderen,quickness,removals,makow,circumflex,eatery,morane,fondazione,alkylation,unenforceable,galliano,silkworm,junior/senior,abducts,phlox,konskie,lofoten,buuren,glyphosate,faired,naturae,cobbles,taher,skrulls,dostoevsky,walkout,wagnerian,orbited,methodically,denzil,sarat,extraterritorial,kohima,d'armor,brinsley,rostropovich,fengtian,comitatus,aravind,moche,wrangell,giscard,vantaa,viljandi,hakoah,seabees,muscatine,ballade,camanachd,sothern,mullioned,durad,margraves,maven,arete,chandni,garifuna,142nd,reading/literature,thickest,intensifies,trygve,khaldun,perinatal,asana,powerline,acetylation,nureyev,omiya,montesquieu,riverwalk,marly,correlating,intermountain,bulgar,hammerheads,underscores,wiretapping,quatrain,ruisseau,newsagent,tuticorin,polygyny,hemsworth,partisanship,banna,istrian,evaporator\".split(\",\"),\n  female_names: \"mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,athena,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lettie,samatha,oralia,matilde,larissa,vesta,renita,delois,shanda,phillis,lorri,erlinda,cathrine,barb,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kesha,jeana,danelle,charline,chanel,valorie,dortha,cristal,sunny,leone,leilani,gerri,debi,andra,keshia,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,lyndsey,janina,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,yetta,verona,thomasina,sibyl,shannan,mechelle,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,chun,arcelia,zenobia,sharen,sharee,lavinia,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nakisha,maira,loreen,kizzy,fallon,christene,bobbye,ying,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,risa,rikki,particia,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yolande,vivien,vernetta,trudi,pearle,patrina,ossie,nicolle,loyce,letty,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,elodia,dorine,brunilda,brigid,ashli,ardella,twana,tarah,shavon,serina,rayna,ramonita,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jeni,gracia,glady,farah,enola,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,vivan,terresa,tanna,sudie,signe,salena,ronni,rebbecca,myrtie,malika,maida,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,ling,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,waneta,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,alita,yulanda,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,deedee,conception,clora,cherilyn,calandra,armandina,anisa,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kimi,keila,katelynn,jone,joane,jayna,janella,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,ming,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,eufemia,emely,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,xuan,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yajaira,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,xiao,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,shan,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn\".split(\",\"),\n  surnames: \"smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,black,daniels,palmer,mills,nichols,grant,knight,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,harvey,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,wolf,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,wiggins,mathews,mcclain,fischer,wall,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,duke,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,beach,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,villa,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,ivey,locke,haines,snell,hoskins,byrne,arias,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,waddell,ramey,cates,pollock,cummins,messer,heller,funk,cornett,palacios,galindo,cano,hathaway,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,gleason,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,dodge,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,tilley,schaffer,knutson,fenton,doran,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,huang,fagan,ezell,edmondson,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,stockton,stearns,lofton,coats,cavazos,beavers,barrios,tang,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,hudgins,gaskins,duckworth,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,kang,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cheng,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,bales,stepp,holm,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,bobo,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,stuckey,stine,porterfield,pauley,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,ricci,plunkett,pannell,ness,leger,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,conover,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,zhang,valerio,tellez,steffen,shumate,sauls,ripley,kemper,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,petrie,nowlin,navarrete,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tong,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,pape,null,mulkey,lightner,langer,hillard,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,danforth,cushing,cress,creed,cazares,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,pagano,mink,luker,leathers,joslin,hartzell,gambrell,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,boardman,alcaraz,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,mahler,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,caton,brunelle,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,eady,desmarais,decosta,dansby,cisco,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,valverde,valdivia,troupe,thrower,swindell,suttles,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,fick,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,wert,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pilgrim,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,rimmer,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,parmer,parke,pare,papa,palmieri,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,valente,turnbow,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,litchfield,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,silvas,shults,schexnayder,saez,rodas,rager,pulver,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,pepe,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hazard,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hatter,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,witmer,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,noles,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lollar,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,bobb,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,albino,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,boman,bohannan,beem,barre,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,amburgey,yeary,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,hunsicker,hornbuckle,holtzclaw,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,artrip,andujar,alkire,alder,zukowski,zuckerman,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,lirette,lesperance,lefkowitz,ledger,lauzon,lachapelle,klassen,keough,kempton,kaelin,jeffords,hsieh,hoyer,horwitz,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,bauder,barreras,aubuchon,anzalone,adamo,zerbe,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,nowakowski,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,licata,leonhardt,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hiebert,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mossman,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,kanter,houchin,hosley,hosler,hollon,holleman,heitman,haggins,gwaltney,goulding,gorden,geraci,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,monteith,milstead,milliner,mellen,mccardle,liptak,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,fuson,feldmann,everly,dyess,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,lamphere,laforge,jourdan,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,ehrhardt,eggen,dusek,durrant,dubay,dones,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,bodie,blosser,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wiebe,waguespack,vasser,upham,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,styron,stahlman,staab,skiba,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,kunze,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,grondin,grissett,greenawalt,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,birkholz,berardi,benda,behnke,barter,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,rogge,rettig,renwick,reidy,reider,redfield,premo,parente,paolucci,palmquist,ohler,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,letson,lechuga,lazenby,lauria,larimore,krupp,krupa,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,restrepo,ralls,ragusa,quiroga,papenfuss,oropeza,okane,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,linehan,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,kennett,kellett,kangas,janzen,hutter,huling,hofmeister,hewes,harjo,habib,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,orona,oberle,nocera,navas,nault,mullings,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leaks,lamarre,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hessler,hermanson,hepworth,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,berthiaume,beahm,batres,basnight,backes,axtell,atterberry,alvares,alegria,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,simkins,shuey,shaul,servin,serio,serafin,salguero,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,mcveigh,mcgrady,mcgaughey,mccurley,marchan,manske,lusby,linde,likens,licon,leroux,lemaire,legette,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,goodner,ginsburg,gerth,gerner,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,craine,chesnut,casady,carstens,carrick,carino,carignan,canchola,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabatini,ronan,rodiguez,riggleman,richins,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chivers,caudillo,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette\".split(\",\"),\n  us_tv_and_film: \"you,i,to,that,it,me,what,this,know,i'm,no,have,my,don't,just,not,do,be,your,we,it's,so,but,all,well,oh,about,right,you're,get,here,out,going,like,yeah,if,can,up,want,think,that's,now,go,him,how,got,did,why,see,come,good,really,look,will,okay,back,can't,mean,tell,i'll,hey,he's,could,didn't,yes,something,because,say,take,way,little,make,need,gonna,never,we're,too,she's,i've,sure,our,sorry,what's,let,thing,maybe,down,man,very,there's,should,anything,said,much,any,even,off,please,doing,thank,give,thought,help,talk,god,still,wait,find,nothing,again,things,let's,doesn't,call,told,great,better,ever,night,away,believe,feel,everything,you've,fine,last,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,talking,guess,care,bad,mom,remember,getting,we'll,together,dad,leave,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,course,might,mind,every,enough,try,hell,came,someone,you'll,whole,yourself,idea,ask,must,coming,looking,woman,room,knew,tonight,real,son,hope,went,hmm,happy,pretty,saw,girl,sir,friend,already,saying,next,job,problem,minute,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,probably,happen,we've,hurt,boy,dead,gotta,alone,excuse,start,kill,hard,you'd,today,car,ready,without,wants,hold,wanna,yet,seen,deal,once,gone,morning,supposed,friends,head,stuff,worry,live,truth,face,forget,true,cause,soon,knows,telling,wife,who's,chance,run,move,anyone,person,bye,somebody,heart,miss,making,meet,anyway,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,anymore,least,aren't,working,makes,taking,means,brother,hate,ago,says,beautiful,gave,fact,crazy,sit,afraid,important,rest,fun,kid,word,watch,glad,everyone,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,break,promise,door,close,hand,easy,question,tried,far,walk,needs,mine,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,waiting,dinner,funny,husband,almost,pay,answer,cool,eyes,news,child,shouldn't,yours,moment,sleep,read,where's,sounds,sonny,pick,sometimes,bed,date,plan,hours,lose,hands,serious,shit,behind,inside,ahead,week,wonderful,fight,past,cut,quite,he'll,sick,it'll,eat,nobody,goes,save,seems,finally,lives,worried,upset,carly,met,brought,seem,sort,safe,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,parents,drink,absolutely,how's,daddy,sweet,alive,sense,meant,happens,bet,blood,ain't,kidding,lie,meeting,dear,seeing,sound,fault,ten,buy,hour,speak,lady,jen,thinks,christmas,outside,hang,possible,worse,mistake,ooh,handle,spend,totally,giving,here's,marriage,realize,unless,sex,send,needed,scared,picture,talked,ass,hundred,changed,completely,explain,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,marry,drop,cannot,dream,protect,twenty,surprise,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,hasn't,worth,sheridan,amazing,expect,swear,piece,busy,happening,movie,we'd,catch,perhaps,step,fall,watching,kept,darling,dog,honor,moving,till,admit,problems,murder,he'd,evil,definitely,feels,honest,eye,broke,missed,longer,dollars,tired,evening,starting,entire,trip,niles,suppose,calm,imagine,fair,caught,blame,sitting,favor,apartment,terrible,clean,learn,frasier,relax,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,mouth,pregnant,ring,careful,shall,dude,ride,figured,wear,shoot,stick,follow,angry,write,stopped,ran,standing,forgive,jail,wearing,ladies,kinda,lunch,cristian,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,count,boyfriend,proud,agree,birthday,they've,share,offer,hurry,feet,wondering,decision,ones,finish,voice,herself,would've,mess,deserve,evidence,cute,dress,interesting,hotel,enjoy,quiet,concerned,staying,beat,sweetie,mention,clothes,fell,neither,mmm,fix,respect,prison,attention,holding,calls,surprised,bar,keeping,gift,hadn't,putting,dark,owe,ice,helping,normal,aunt,lawyer,apart,plans,jax,girlfriend,floor,whether,everything's,box,judge,upstairs,sake,mommy,possibly,worst,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,difference,store,she'd,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,join,card,crime,gentlemen,willing,window,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,bother,seriously,cell,knowing,broken,advice,somehow,paid,losing,push,helped,killing,boss,liked,innocent,rules,learned,thirty,risk,letting,speaking,ridiculous,afternoon,apologize,nervous,charge,patient,boat,how'd,hide,detective,planning,huge,breakfast,horrible,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,visit,could've,c'mon,letter,decide,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,hearing,kitchen,ma'am,should've,realized,kick,grab,discuss,fifty,reading,idiot,suddenly,agent,destroy,bucks,shoes,peace,arms,demon,livvie,consider,papers,incredible,witch,drunk,attorney,tells,knock,ways,gives,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,outta,weekend,matters,gosh,opportunity,impossible,waste,pretend,jump,eating,proof,slept,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,divorce,begin,ourselves,closer,ruin,smile,laugh,treat,fear,what'd,otherwise,excited,mail,hiding,stole,pacey,noticed,fired,excellent,bringing,bottom,note,sudden,bathroom,honestly,sing,foot,remind,charges,witness,finding,tree,dare,hardly,that'll,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,reach,dirty,choose,emergency,dropped,butt,credit,obvious,locked,loving,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,crap,crying,belong,partner,trick,pressure,dressed,taste,neck,nurse,raise,lots,carry,whoever,drinking,they'd,breaking,file,lock,wine,spot,paying,assume,asleep,turning,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,freak,movies,folks,cream,wild,truly,desk,convince,client,threw,hurts,spending,answers,shirt,chair,rough,doin,sees,ought,empty,wind,aware,dealing,pack,tight,hurting,guest,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,bottle,beyond,whenever,pool,opinion,starts,jerk,secrets,falling,necessary,barely,dancing,tests,copy,cousin,ahem,twelve,tess,skin,fifteen,speech,orders,complicated,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,someplace,screw,everywhere,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,whoo,hole,memories,o'clock,teeth,ruined,bite,stenbeck,liar,showing,cards,desperate,search,pathetic,spoke,scare,marah,afford,settle,stayed,checking,hired,heads,concern,blew,alcazar,champagne,connection,tickets,happiness,saving,kissing,hated,personally,suggest,prepared,onto,downstairs,ticket,it'd,loose,holy,duty,convinced,throwing,kissed,legs,loud,saturday,babies,where'd,warning,miracle,carrying,blind,ugly,shopping,hates,sight,bride,coat,clearly,celebrate,brilliant,wanting,forrester,lips,custody,screwed,buying,toast,thoughts,reality,lexie,attitude,advantage,grandfather,sami,grandma,someday,roof,marrying,powerful,grown,grandmother,fake,must've,ideas,exciting,familiar,bomb,bout,harmony,schedule,capable,practically,correct,clue,forgotten,appointment,deserves,threat,bloody,lonely,shame,jacket,hook,scary,investigation,invite,shooting,lesson,criminal,victim,funeral,considering,burning,strength,harder,sisters,pushed,shock,pushing,heat,chocolate,miserable,corinthos,nightmare,brings,zander,crash,chances,sending,recognize,healthy,boring,feed,engaged,headed,treated,knife,drag,badly,hire,paint,pardon,behavior,closet,warn,gorgeous,milk,survive,ends,dump,rent,remembered,thanksgiving,rain,revenge,prefer,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,stood,affair,ours,depends,protecting,jury,brave,fingers,murdered,explanation,picking,blah,stronger,handsome,unbelievable,anytime,shake,oakdale,wherever,pulling,facts,waited,lousy,circumstances,disappointed,weak,trusted,license,nothin,trash,understanding,slip,sounded,awake,friendship,stomach,weapon,threatened,mystery,vegas,understood,basically,switch,frankly,cheap,lifetime,deny,clock,garbage,why'd,tear,ears,indeed,changing,singing,tiny,decent,avoid,messed,filled,touched,disappear,exact,pills,kicked,harm,fortune,pretending,insurance,fancy,drove,cared,belongs,nights,lorelai,lift,timing,guarantee,chest,woke,burned,watched,heading,selfish,drinks,doll,committed,elevator,freeze,noise,wasting,ceremony,uncomfortable,staring,files,bike,stress,permission,thrown,possibility,borrow,fabulous,doors,screaming,bone,xander,what're,meal,apology,anger,honeymoon,bail,parking,fixed,wash,stolen,sensitive,stealing,photo,chose,lets,comfort,worrying,pocket,mateo,bleeding,shoulder,ignore,talent,tied,garage,dies,demons,dumped,witches,rude,crack,bothering,radar,soft,meantime,gimme,kinds,fate,concentrate,throat,prom,messages,intend,ashamed,somethin,manage,guilt,interrupt,guts,tongue,shoe,basement,sentence,purse,glasses,cabin,universe,repeat,mirror,wound,travers,tall,engagement,therapy,emotional,jeez,decisions,soup,thrilled,stake,chef,moves,extremely,moments,expensive,counting,shots,kidnapped,cleaning,shift,plate,impressed,smells,trapped,aidan,knocked,charming,attractive,argue,puts,whip,embarrassed,package,hitting,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,terribly,friendly,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,disaster,bars,crossed,trap,talks,eggs,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,reputation,presents,chat,suffer,argument,talkin,crowd,homework,coincidence,cancel,pride,solve,hopefully,pounds,pine,mate,illegal,generous,outfit,maid,bath,punch,freaked,begging,recall,enjoying,prepare,wheel,defend,signs,painful,yourselves,maris,that'd,suspicious,cooking,button,warned,sixty,pity,yelling,awhile,confidence,offering,pleased,panic,hers,gettin,refuse,grandpa,testify,choices,cruel,mental,gentleman,coma,cutting,proteus,guests,expert,benefit,faces,jumped,toilet,sneak,halloween,privacy,smoking,reminds,twins,swing,solid,options,commitment,crush,ambulance,wallet,gang,eleven,option,laundry,assure,stays,skip,fail,discussion,clinic,betrayed,sticking,bored,mansion,soda,sheriff,suite,handled,busted,load,happier,studying,romance,procedure,commit,assignment,suicide,minds,swim,yell,llanview,chasing,proper,believes,humor,hopes,lawyers,giant,latest,escaped,parent,tricks,insist,dropping,cheer,medication,flesh,routine,sandwich,handed,false,beating,warrant,awfully,odds,treating,thin,suggesting,fever,sweat,silent,clever,sweater,mall,sharing,assuming,judgment,goodnight,divorced,surely,steps,confess,math,listened,comin,answered,vulnerable,bless,dreaming,chip,zero,pissed,nate,kills,tears,knees,chill,brains,unusual,packed,dreamed,cure,lookin,grave,cheating,breaks,locker,gifts,awkward,thursday,joking,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,delicious,closing,vampires,wore,tail,secure,salad,murderer,spit,offense,dust,conscience,bread,answering,lame,invitation,grief,smiling,pregnancy,prisoner,delivery,guards,virus,shrink,freezing,wreck,massimo,wire,technically,blown,anxious,cave,holidays,cleared,wishes,caring,candles,bound,charm,pulse,jumping,jokes,boom,occasion,silence,nonsense,frightened,slipped,dimera,blowing,relationships,kidnapping,spin,tool,roxy,packing,blaming,wrap,obsessed,fruit,torture,personality,there'll,fairy,necessarily,seventy,print,motel,underwear,grams,exhausted,believing,freaking,carefully,trace,touching,messing,recovery,intention,consequences,belt,sacrifice,courage,enjoyed,attracted,remove,testimony,intense,heal,defending,unfair,relieved,loyal,slowly,buzz,alcohol,surprises,psychiatrist,plain,attic,who'd,uniform,terrified,cleaned,zach,threaten,fella,enemies,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,badge,naturally,frozen,sakes,appropriate,trunk,dunno,costume,sixteen,impressive,kicking,junk,grabbed,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,surveillance,admire,questioning,dragged,barn,deeply,wrapped,wasted,tense,hoped,fellas,roommate,mortal,fascinating,stops,arrangements,agenda,literally,propose,honesty,underneath,sauce,promises,lecture,eighty,torn,shocked,backup,differently,ninety,deck,biological,pheebs,ease,creep,waitress,telephone,ripped,raising,scratch,rings,prints,thee,arguing,ephram,asks,oops,diner,annoying,taggert,sergeant,blast,towel,clown,habit,creature,bermuda,snap,react,paranoid,handling,eaten,therapist,comment,sink,reporter,nurses,beats,priority,interrupting,warehouse,loyalty,inspector,pleasant,excuses,threats,guessing,tend,praying,motive,unconscious,mysterious,unhappy,tone,switched,rappaport,sookie,neighbor,loaded,swore,piss,balance,toss,misery,thief,squeeze,lobby,goa'uld,geez,exercise,forth,booked,sandburg,poker,eighteen,d'you,bury,everyday,digging,creepy,wondered,liver,hmmm,magical,fits,discussed,moral,helpful,searching,flew,depressed,aisle,cris,amen,vows,neighbors,darn,cents,arrange,annulment,useless,adventure,resist,fourteen,celebrating,inch,debt,violent,sand,teal'c,celebration,reminded,phones,paperwork,emotions,stubborn,pound,tension,stroke,steady,overnight,chips,beef,suits,boxes,cassadine,collect,tragedy,spoil,realm,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,perspective,climb,punishment,finest,springfield,hint,furniture,blanket,twist,proceed,fries,worries,niece,gloves,soap,signature,disappoint,crawl,convicted,flip,counsel,doubts,crimes,accusing,shaking,remembering,hallway,halfway,bothered,madam,gather,cameras,blackmail,symptoms,rope,ordinary,imagined,cigarette,supportive,explosion,trauma,ouch,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,drawer,phony,interfere,catching,bargain,tragic,respond,punish,penthouse,thou,rach,ohhh,insult,bugs,beside,begged,absolute,strictly,socks,senses,sneaking,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,bitter,adorable,y'all,tested,suggestion,jewelry,alike,jacks,distracted,shelter,lessons,constable,circus,audition,tune,shoulders,mask,helpless,feeding,explains,sucked,robbery,objection,behave,valuable,shadows,courtroom,confusing,talented,smarter,mistaken,customer,bizarre,scaring,motherfucker,alert,vecchio,reverend,foolish,compliment,bastards,worker,wheelchair,protective,gentle,reverse,picnic,knee,cage,wives,wednesday,voices,toes,stink,scares,pour,cheated,slide,ruining,filling,exit,cottage,upside,proves,parked,diary,complaining,confessed,pipe,merely,massage,chop,spill,prayer,betray,waiter,scam,rats,fraud,brush,tables,sympathy,pill,filthy,seventeen,employee,bracelet,pays,fairly,deeper,arrive,tracking,spite,shed,recommend,oughta,nanny,menu,diet,corn,roses,patch,dime,devastated,subtle,bullets,beans,pile,confirm,strings,parade,borrowed,toys,straighten,steak,premonition,planted,honored,exam,convenient,traveling,laying,insisted,dish,aitoro,kindly,grandson,donor,temper,teenager,proven,mothers,denial,backwards,tent,swell,noon,happiest,drives,thinkin,spirits,potion,holes,fence,whatsoever,rehearsal,overheard,lemme,hostage,bench,tryin,taxi,shove,moron,impress,needle,intelligent,instant,disagree,stinks,rianna,recover,groom,gesture,constantly,bartender,suspects,sealed,legally,hears,dresses,sheet,psychic,teenage,knocking,judging,accidentally,waking,rumor,manners,homeless,hollow,desperately,tapes,referring,item,genoa,gear,majesty,cried,tons,spells,instinct,quote,motorcycle,convincing,fashioned,aids,accomplished,grip,bump,upsetting,needing,invisible,forgiveness,feds,compare,bothers,tooth,inviting,earn,compromise,cocktail,tramp,jabot,intimate,dignity,dealt,souls,informed,gods,dressing,cigarettes,alistair,leak,fond,corky,seduce,liquor,fingerprints,enchantment,butters,stuffed,stavros,emotionally,transplant,tips,oxygen,nicely,lunatic,drill,complain,announcement,unfortunate,slap,prayers,plug,opens,oath,o'neill,mutual,yacht,remembers,fried,extraordinary,bait,warton,sworn,stare,safely,reunion,burst,might've,dive,aboard,expose,buddies,trusting,booze,sweep,sore,scudder,properly,parole,ditch,canceled,speaks,glow,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,pancakes,harsh,flattered,ahhh,troubles,fights,favourite,eats,rage,undercover,spoiled,sloane,shine,destroying,deliberately,conspiracy,thoughtful,sandwiches,plates,nails,miracles,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,forgiven,bent,maciver,involve,dragging,cooked,pointing,foul,dull,beneath,heels,faking,deaf,stunt,jealousy,hopeless,fears,cuts,scenario,necklace,crashed,accuse,restraining,homicide,helicopter,firing,safer,auction,videotape,tore,reservations,pops,appetite,wounds,vanquish,ironic,fathers,excitement,anyhow,tearing,sends,rape,laughed,belly,dealer,cooperate,accomplish,wakes,spotted,sorts,reservation,ashes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,investigating,inappropriate,lipstick,lawn,compassion,cafeteria,scarf,precisely,obsession,loses,lighten,infection,granddaughter,explode,balcony,this'll,spying,publicity,depend,cracked,conscious,ally,absurd,vicious,invented,forbid,directions,defendant,bare,announce,screwing,salesman,robbed,leap,lakeview,insanity,reveal,possibilities,kidnap,gown,chairs,wishing,setup,punished,criminals,regrets,raped,quarters,lamp,dentist,anyways,anonymous,semester,risks,owes,lungs,explaining,delicate,tricked,eager,doomed,adoption,stab,sickness,scum,floating,envelope,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,stabbed,remarkable,brat,privilege,passionate,nerves,lawsuit,kidney,disturbed,cozy,tire,shirts,oven,ordering,delay,risky,monsters,honorable,grounded,closest,breakdown,bald,abandon,scar,collar,worthless,sucking,enormous,disturbing,disturb,distract,deals,conclusions,vodka,dishes,crawling,briefcase,wiped,whistle,sits,roast,rented,pigs,flirting,deposit,bottles,topic,riot,overreacting,logical,hostile,embarrass,casual,beacon,amusing,altar,claus,survival,skirt,shave,porch,ghosts,favors,drops,dizzy,chili,advise,strikes,rehab,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,cigar,weakness,ranch,practicing,examine,cranes,bribe,sail,prescription,hush,fragile,forensics,expense,drugged,cows,bells,visitor,suitcase,sorta,scan,manticore,insecure,imagining,hardest,clerk,wrist,what'll,starters,silk,pump,pale,nicer,haul,flies,boot,thumb,there'd,how're,elders,quietly,pulls,idiots,erase,denying,ankle,amnesia,accepting,heartbeat,devane,confront,minus,legitimate,fixing,arrogant,tuna,supper,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,snack,rational,minded,guessed,weddings,tumor,humiliated,aspirin,spray,picks,eyed,drowning,contacts,ritual,perfume,hiring,hating,docks,creatures,visions,thanking,thankful,sock,nineteen,fork,throws,teenagers,stressed,slice,rolls,plead,ladder,kicks,detectives,assured,tellin,shallow,responsibilities,repay,howdy,girlfriends,deadly,comforting,ceiling,verdict,insensitive,spilled,respected,messy,interrupted,halliwell,blond,bleed,wardrobe,takin,murders,backs,underestimate,justify,harmless,frustrated,fold,enzo,communicate,bugging,arson,whack,salary,rumors,obligation,liking,dearest,congratulate,vengeance,rack,puzzle,fires,courtesy,caller,blamed,tops,quiz,prep,curiosity,circles,barbecue,sunnydale,spinning,psychotic,cough,accusations,resent,laughs,freshman,envy,drown,bartlet,asses,sofa,poster,highness,dock,apologies,theirs,stat,stall,realizes,psych,mmmm,fools,understandable,treats,succeed,stir,relaxed,makin,gratitude,faithful,accent,witter,wandering,locate,inevitable,gretel,deed,crushed,controlling,smelled,robe,gossip,gambling,cosmetics,accidents,surprising,stiff,sincere,rushed,refrigerator,preparing,nightmares,mijo,ignoring,hunch,fireworks,drowned,brass,whispering,sophisticated,luggage,hike,explore,emotion,crashing,contacted,complications,shining,rolled,righteous,reconsider,goody,geek,frightening,ethics,creeps,courthouse,camping,affection,smythe,haircut,essay,baked,apologized,vibe,respects,receipt,mami,hats,destructive,adore,adopt,tracked,shorts,reminding,dough,creations,cabot,barrel,snuck,slight,reporters,pressing,magnificent,madame,lazy,glorious,fiancee,bits,visitation,sane,kindness,shoulda,rescued,mattress,lounge,lifted,importantly,glove,enterprises,disappointment,condo,beings,admitting,yelled,waving,spoon,screech,satisfaction,reads,nailed,worm,tick,resting,marvelous,fuss,cortlandt,chased,pockets,luckily,lilith,filing,conversations,consideration,consciousness,worlds,innocence,forehead,aggressive,trailer,slam,quitting,inform,delighted,daylight,danced,confidential,aunts,washing,tossed,spectra,marrow,lined,implying,hatred,grill,corpse,clues,sober,offended,morgue,infected,humanity,distraction,cart,wired,violation,promising,harassment,glue,d'angelo,cursed,brutal,warlocks,wagon,unpleasant,proving,priorities,mustn't,lease,flame,disappearance,depressing,thrill,sitter,ribs,flush,earrings,deadline,corporal,collapsed,update,snapped,smack,melt,figuring,delusional,coulda,burnt,tender,sperm,realise,pork,popped,interrogation,esteem,choosing,undo,pres,prayed,plague,manipulate,insulting,detention,delightful,coffeehouse,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,monsieur,faint,bake,distress,correctly,complaint,blocked,tortured,risking,pointless,handing,dumping,cups,alibi,struggling,shiny,risked,mummy,mint,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,rode,puppet,modeling,memo,irresponsible,humiliation,hiya,freakin,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,pledge,panicked,nursery,louder,jeans,investigator,homecoming,frustrating,buys,busting,buff,sleeve,irony,dope,declare,autopsy,workin,torch,prick,limb,hysterical,goddamnit,fetch,dimension,crowded,clip,climbing,bonding,woah,trusts,negotiate,lethal,iced,fantasies,deeds,bore,babysitter,questioned,outrageous,kiriakis,insulted,grudge,driveway,deserted,definite,beep,wires,suggestions,searched,owed,lend,drunken,demanding,costanza,conviction,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,meals,invitations,haunted,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,manny,fist,spectacular,hostages,heroin,havin,habits,encouraging,consult,burgers,boyfriends,bailed,baggage,watches,troubled,torturing,teasing,sweetest,qualities,postpone,overwhelmed,malkovich,impulse,classy,charging,amazed,policeman,hypocrite,humiliate,hideous,d'ya,costumes,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shrimp,shouting,pressed,nooo,grieving,gladly,fling,eliminate,cereal,aaah,sonofabitch,paralyzed,lotta,locks,guaranteed,dummy,despise,dental,briefing,bluff,batteries,whatta,sounding,servants,presume,handwriting,fainted,dried,allright,acknowledge,whacked,toxic,reliable,quicker,overwhelming,lining,harassing,fatal,endless,dolls,convict,whatcha,unlikely,shutting,positively,overcome,goddam,essence,dose,diagnosis,cured,bully,ahold,yearbook,tempting,shelf,prosecution,pouring,possessed,greedy,wonders,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,evidently,contempt,compromised,cans,weekends,urge,theft,suing,shipment,scissors,responding,proposition,noises,matching,hormones,hail,grandchildren,gently,smashed,sexually,sentimental,nicest,manipulated,intern,handcuffs,framed,errands,entertaining,crib,carriage,barge,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,headaches,float,embrace,corners,whining,sweating,skipped,mountie,motives,listens,cristobel,cleaner,cheerleader,balsom,unnecessary,stunning,scent,quartermaines,pose,montega,loosen,info,hottest,haunt,gracious,forgiving,errand,cakes,blames,abortion,sketch,shifts,plotting,perimeter,pals,mere,mattered,lonigan,interference,eyewitness,enthusiasm,diapers,strongest,shaken,punched,portal,catches,backyard,terrorists,sabotage,organs,needy,cuff,civilization,woof,who'll,prank,obnoxious,mates,hereby,gabby,faked,cellar,whitelighter,void,strangle,sour,muffins,interfering,demonic,clearing,boutique,barrington,terrace,smoked,righty,quack,petey,pact,knot,ketchup,disappearing,cordy,uptight,ticking,terrifying,tease,swamp,secretly,rejection,reflection,realizing,rays,mentally,marone,doubted,deception,congressman,cheesy,toto,stalling,scoop,ribbon,immune,expects,destined,bets,bathing,appreciation,accomplice,wander,shoved,sewer,scroll,retire,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,whoops,volunteered,talents,stinking,remotely,garlic,decency,cord,beds,altogether,uniforms,tremendous,popping,outa,observe,lung,hangs,feelin,dudes,donation,disguise,curb,bites,antique,toothbrush,realistic,predict,landlord,hourglass,hesitate,consolation,babbling,tipped,stranded,smartest,repeating,puke,psst,paycheck,overreacted,macho,juvenile,grocery,freshen,disposal,cuffs,caffeine,vanished,unfinished,ripping,pinch,flattering,expenses,dinners,colleague,ciao,belthazor,attorneys,woulda,whereabouts,waitin,truce,tripped,tasted,steer,poisoning,manipulative,immature,husbands,heel,granddad,delivering,condoms,addict,trashed,raining,pasta,needles,leaning,detector,coolest,batch,appointments,almighty,vegetables,spark,perfection,pains,momma,mole,meow,hairs,getaway,cracking,compliments,behold,verge,tougher,timer,tapped,taped,specialty,snooping,shoots,rendezvous,pentagon,leverage,jeopardize,janitor,grandparents,forbidden,clueless,bidding,ungrateful,unacceptable,tutor,serum,scuse,pajamas,mouths,lure,irrational,doom,cries,beautifully,arresting,approaching,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,jumps,inventory,darlin,committing,banging,asap,worms,violated,vent,traumatic,traced,sweaty,shaft,overboard,insight,healed,grasp,experiencing,crappy,crab,chunk,awww,stain,shack,reacted,pronounce,poured,moms,marriages,jabez,handful,flipped,fireplace,embarrassment,disappears,concussion,bruises,brakes,twisting,swept,summon,splitting,sloppy,settling,reschedule,notch,hooray,grabbing,exquisite,disrespect,thornhart,straw,slapped,shipped,shattered,ruthless,refill,payroll,numb,mourning,manly,hunk,entertain,drift,dreadful,doorstep,confirmation,chops,appreciates,vague,tires,stressful,stashed,stash,sensed,preoccupied,predictable,noticing,madly,gunshot,dozens,dork,confuse,cleaners,charade,chalk,cappuccino,bouquet,amulet,addiction,who've,warming,unlock,satisfy,sacrificed,relaxing,lone,blocking,blend,blankets,addicted,yuck,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,caution,backpack,agreeing,whale,taller,supervisor,sacrifices,phew,ounce,irrelevant,gran,felon,favorites,farther,fade,erased,easiest,convenience,compassionate,cane,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,immunity,hassle,goddamned,frighten,dearly,cease,ambition,wage,unstable,salvage,richer,refusing,raging,pumping,pressuring,mortals,lowlife,intimidated,intentionally,inspire,forgave,devotion,despicable,deciding,dash,comfy,breach,bark,aaaah,switching,swallowed,stove,screamed,scars,russians,pounding,poof,pipes,pawn,legit,invest,farewell,curtains,civilized,caviar,boost,token,superstition,supernatural,sadness,recorder,psyched,motivated,microwave,hallelujah,fraternity,dryer,cocoa,chewing,acceptable,unbelievably,smiled,smelling,simpler,respectable,remarks,khasinau,indication,gutter,grabs,fulfill,flashlight,ellenor,blooded,blink,blessings,beware,uhhh,turf,swings,slips,shovel,shocking,puff,mirrors,locking,heartless,fras,childish,cardiac,utterly,tuscany,ticked,stunned,statesville,sadly,purely,kiddin,jerks,hitch,flirt,fare,equals,dismiss,christening,casket,c'mere,breakup,biting,antibiotics,accusation,abducted,witchcraft,thread,runnin,punching,paramedics,newest,murdering,masks,lawndale,initials,grampa,choking,charms,careless,bushes,buns,bummed,shred,saves,saddle,rethink,regards,precinct,persuade,meds,manipulating,llanfair,leash,hearted,guarantees,fucks,disgrace,deposition,bookstore,boil,vitals,veil,trespassing,sidewalk,sensible,punishing,overtime,optimistic,obsessing,notify,mornin,jeopardy,jaffa,injection,hilarious,desires,confide,cautious,yada,where're,vindictive,vial,teeny,stroll,sittin,scrub,rebuild,posters,ordeal,nuns,intimacy,inheritance,exploded,donate,distracting,despair,crackers,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,platter,napkin,misplaced,merchandise,loony,jinx,heroic,frankenstein,ambitious,syrup,solitary,resemblance,reacting,premature,lavery,flashes,cheque,awright,acquainted,wrapping,untie,salute,realised,priceless,partying,lightly,lifting,kasnoff,insisting,glowing,generator,explosives,cutie,confronted,buts,blouse,ballistic,antidote,analyze,allowance,adjourned,unto,understatement,tucked,touchy,subconscious,screws,sarge,roommates,rambaldi,offend,nerd,knives,irresistible,incapable,hostility,goddammit,fuse,frat,curfew,blackmailed,walkin,starve,sleigh,sarcastic,recess,rebound,pinned,parlor,outfits,livin,heartache,haired,fundraiser,doorman,discreet,dilucca,cracks,considerate,climbed,catering,apophis,zoey,urine,strung,stitches,sordid,sark,protector,phoned,pets,hostess,flaw,flavor,deveraux,consumed,confidentiality,bourbon,straightened,specials,spaghetti,prettier,powerless,playin,playground,paranoia,instantly,havoc,exaggerating,eavesdropping,doughnuts,diversion,deepest,cutest,comb,bela,behaving,anyplace,accessory,workout,translate,stuffing,speeding,slime,royalty,polls,marital,lurking,lottery,imaginary,greetings,fairwinds,elegant,elbow,credibility,credentials,claws,chopped,bridal,bedside,babysitting,witty,unforgivable,underworld,tempt,tabs,sophomore,selfless,secrecy,restless,okey,movin,metaphor,messes,meltdown,lecter,incoming,gasoline,diefenbaker,buckle,admired,adjustment,warmth,throats,seduced,queer,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,wedded,verbal,unpredictable,tuned,stoop,slides,sinking,rigged,plumbing,lingerie,hankey,greed,everwood,elope,dresser,chauffeur,bulletin,bugged,bouncing,temptation,strangest,slammed,sarcasm,pending,packages,orderly,obsessive,murderers,meteor,inconvenience,glimpse,froze,execute,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,testifying,syringe,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,nutty,mentioning,mend,inspiring,impulsive,housekeeper,foam,fingernails,conditioning,baking,whine,thug,starved,sniffing,sedative,programmed,picket,paged,hound,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,choo,assignments,ants,vile,unreasonable,tossing,thanked,steals,souvenir,scratched,psychopath,outs,obstruction,obey,lump,insists,harass,gloat,filth,edgy,didn,coroner,confessing,bruise,betraying,bailing,appealing,adebisi,wrath,wandered,waist,vain,traps,stepfather,poking,obligated,heavenly,dilemma,crazed,contagious,coaster,cheering,bundle,vomit,thingy,speeches,robbing,raft,pumped,pillows,peep,packs,neglected,m'kay,loneliness,intrude,helluva,gardener,forresters,drooling,betcha,vase,supermarket,squat,spitting,rhyme,relieve,receipts,racket,pictured,pause,overdue,motivation,morgendorffer,kidnapper,insect,horns,feminine,eyeballs,dumps,disappointing,crock,convertible,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,suspense,summoned,spiders,reiber,raving,pushy,postponed,ohhhh,noooo,mold,laughter,incompetent,hugging,groceries,drip,communicating,auntie,adios,wraps,wiser,willingly,weirdest,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,prophecy,ledge,justified,insults,hateful,handles,doorway,chatting,buyer,buckaroo,bedrooms,askin,ammo,tutoring,subpoena,scratching,privileges,pager,mart,intriguing,idiotic,grape,enlighten,corrupt,brunch,bridesmaid,barking,applause,acquaintance,wretched,superficial,soak,smoothly,sensing,restraint,posing,pleading,payoff,oprah,nemo,morals,loaf,jumpy,ignorant,herbal,hangin,germs,generosity,flashing,doughnut,clumsy,chocolates,captive,behaved,apologise,vanity,stumbled,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,knots,interviewing,humour,grind,greasy,goons,drastic,coop,comparing,cocky,clearer,bruised,brag,bind,worthwhile,whoop,vanquishing,tabloids,sprung,spotlight,sentencing,racist,provoke,pining,overly,locket,imply,impatient,hovering,hotter,fest,endure,dots,doren,debts,crawled,chained,brit,breaths,weirdo,warmed,wand,troubling,tok'ra,strapped,soaked,skipping,scrambled,rattle,profound,musta,mocking,misunderstand,limousine,kacl,hustle,forensic,enthusiastic,duct,drawers,devastating,conquer,clarify,chores,cheerleaders,cheaper,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,teller,strangled,scheming,ropes,rescuing,rave,postcard,o'reily,morphine,lotion,lads,kidneys,judgement,itch,indefinitely,grenade,glamorous,genetically,freud,discretion,delusions,crate,competent,bakery,argh,ahhhh,wedge,wager,unfit,tripping,torment,superhero,stirring,spinal,sorority,seminar,scenery,rabble,pneumonia,perks,override,ooooh,mija,manslaughter,mailed,lime,lettuce,intimidate,guarded,grieve,grad,frustration,doorbell,chinatown,authentic,arraignment,annulled,allergies,wanta,verify,vegetarian,tighter,telegram,stalk,spared,shoo,satisfying,saddam,requesting,pens,overprotective,obstacles,notified,nasedo,grandchild,genuinely,flushed,fluids,floss,escaping,ditched,cramp,corny,bunk,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,sniff,shakes,salsa,retrieve,reassuring,pumps,neurotic,negotiating,needn't,monitors,millionaire,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,doubting,decaf,biopsy,whiz,voluntarily,ventilator,unpack,unload,toad,spooked,snitch,schillinger,reassure,persuasive,mystical,mysteries,matrimony,mails,jock,headline,explanations,dispatch,curly,cupid,condolences,comrade,cassadines,bulb,bragging,awaits,assaulted,ambush,adolescent,abort,yank,whit,vaguely,undermine,tying,swamped,stabbing,slippers,slash,sincerely,sigh,setback,secondly,rotting,precaution,pcpd,melting,liaison,hots,hooking,headlines,haha,ganz,fury,felicity,fangs,encouragement,earring,dreidel,dory,donut,dictate,decorating,cocktails,bumps,blueberry,believable,backfired,backfire,apron,adjusting,vous,vouch,vitamins,ummm,tattoos,slimy,sibling,shhhh,renting,peculiar,parasite,paddington,marries,mailbox,magically,lovebirds,knocks,informant,exits,drazen,distractions,disconnected,dinosaurs,dashwood,crooked,conveniently,wink,warped,underestimated,tacky,shoving,seizure,reset,pushes,opener,mornings,mash,invent,indulge,horribly,hallucinating,festive,eyebrows,enjoys,desperation,dealers,darkest,daph,boragora,belts,bagel,authorization,auditions,agitated,wishful,wimp,vanish,unbearable,tonic,suffice,suction,slaying,safest,rocking,relive,puttin,prettiest,noisy,newlyweds,nauseous,misguided,mildly,midst,liable,judgmental,indy,hunted,givin,fascinated,elephants,dislike,deluded,decorate,crummy,contractions,carve,bottled,bonded,bahamas,unavailable,twenties,trustworthy,surgeons,stupidity,skies,remorse,preferably,pies,nausea,napkins,mule,mourn,melted,mashed,inherit,greatness,golly,excused,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,chooses,checkup,boredom,bandages,alarms,windshield,who're,whaddya,transparent,surprisingly,sunglasses,slit,roar,reade,prognosis,probe,pitiful,persistent,peas,nosy,nagging,morons,masterpiece,martinis,limbo,liars,irritating,inclined,hump,hoynes,fiasco,eatin,cubans,concentrating,colorful,clam,cider,brochure,barto,bargaining,wiggle,welcoming,weighing,vanquished,stains,sooo,snacks,smear,sire,resentment,psychologist,pint,overhear,morality,landingham,kisser,hoot,holling,handshake,grilled,formality,elevators,depths,confirms,boathouse,accidental,westbridge,wacko,ulterior,thugs,thighs,tangled,stirred,snag,sling,sleaze,rumour,ripe,remarried,puddle,pins,perceptive,miraculous,longing,lockup,librarian,impressions,immoral,hypothetically,guarding,gourmet,gabe,faxed,extortion,downright,digest,cranberry,bygones,buzzing,burying,bikes,weary,taping,takeout,sweeping,stepmother,stale,senor,seaborn,pros,pepperoni,newborn,ludicrous,injected,geeks,forged,faults,drue,dire,dief,desi,deceiving,caterer,calmed,budge,ankles,vending,typing,tribbiani,there're,squared,snowing,shades,sexist,rewrite,regretted,raises,picky,orphan,mural,misjudged,miscarriage,memorize,leaking,jitters,invade,interruption,illegally,handicapped,glitch,gittes,finer,distraught,dispose,dishonest,digs,dads,cruelty,circling,canceling,butterflies,belongings,barbrady,amusement,alias,zombies,where've,unborn,swearing,stables,squeezed,sensational,resisting,radioactive,questionable,privileged,portofino,owning,overlook,orson,oddly,interrogate,imperative,impeccable,hurtful,hors,heap,graders,glance,disgust,devious,destruct,crazier,countdown,chump,cheeseburger,burglar,berries,ballroom,assumptions,annoyed,allergy,admirer,admirable,activate,underpants,twit,tack,strokes,stool,sham,scrap,retarded,resourceful,remarkably,refresh,pressured,precautions,pointy,nightclub,mustache,maui,lace,hunh,hubby,flare,dont,dokey,dangerously,crushing,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,amazingly,alas,what've,toilets,tacos,stairwell,spirited,sewing,rubbed,punches,protects,nuisance,motherfuckers,mingle,kynaston,knack,kinkle,impose,gullible,godmother,funniest,friggin,folding,fashions,eater,dysfunctional,drool,dripping,ditto,cruising,criticize,conceive,clone,cedars,caliber,brighter,blinded,birthdays,banquet,anticipate,annoy,whim,whichever,volatile,veto,vested,shroud,rests,reindeer,quarantine,pleases,painless,orphans,orphanage,offence,obliged,negotiation,narcotics,mistletoe,meddling,manifest,lookit,lilah,intrigued,injustice,homicidal,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,cheerful,buyers,brownies,beverage,basics,arvin,weighs,upsets,unethical,swollen,sweaters,stupidest,sensation,scalpel,props,prescribed,pompous,objections,mushrooms,mulwray,manipulation,lured,internship,insignificant,inmate,incentive,fulfilled,disagreement,crypt,cornered,copied,brightest,beethoven,attendant,amaze,yogurt,wyndemere,vocabulary,tulsa,tactic,stuffy,respirator,pretends,polygraph,pennies,ordinarily,olives,necks,morally,martyr,leftovers,joints,hopping,homey,hints,heartbroken,forge,florist,firsthand,fiend,dandy,crippled,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,wiring,wench,weaknesses,volunteering,violating,unlocked,tummy,surrogate,subid,stray,startle,specifics,slowing,scoot,robbers,rightful,richest,qfxmjrie,puffs,pierced,pencils,paralysis,makeover,luncheon,linksynergy,jerky,jacuzzi,hitched,hangover,fracture,flock,firemen,disgusted,darned,clams,borrowing,banged,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,retro,quits,pegged,painfully,paging,omelet,memorized,lawfully,jackets,intercept,ingredient,grownup,glued,fulfilling,enchanted,delusion,daring,compelling,carton,bridesmaids,bribed,boiling,bathrooms,bandage,awaiting,assign,arrogance,antiques,ainsley,turkeys,trashing,stockings,stalked,stabilized,skates,sedated,robes,respecting,psyche,presumptuous,prejudice,paragraph,mocha,mints,mating,mantan,lorne,loads,listener,itinerary,hepatitis,heave,guesses,fading,examining,dumbest,dishwasher,deceive,cunning,cripple,convictions,confided,compulsive,compromising,burglary,bumpy,brainwashed,benes,arnie,affirmative,adrenaline,adamant,watchin,waitresses,transgenic,toughest,tainted,surround,stormed,spree,spilling,spectacle,soaking,shreds,sewers,severed,scarce,scamming,scalp,rewind,rehearsing,pretentious,potions,overrated,obstacle,nerds,meems,mcmurphy,maternity,maneuver,loathe,fertility,eloping,ecstatic,ecstasy,divorcing,dignan,costing,clubhouse,clocks,candid,bursting,breather,braces,bending,arsonist,adored,absorb,valiant,uphold,unarmed,topolsky,thrilling,thigh,terminate,sustain,spaceship,snore,sneeze,smuggling,salty,quaint,patronize,patio,morbid,mamma,kettle,joyous,invincible,interpret,insecurities,impulses,illusions,holed,exploit,drivin,defenseless,dedicate,cradle,coupon,countless,conjure,cardboard,booking,backseat,accomplishment,wordsworth,wisely,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,scumbag,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,prospects,pronto,posse,polling,pedestal,palms,muddy,morty,microscope,merci,lecturing,inject,incriminate,hygiene,grapefruit,gazebo,funnier,cuter,bossy,booby,aides,zende,winthrop,warrants,valentines,undressed,underage,truthfully,tampered,suffers,speechless,sparkling,sidelines,shrek,railing,puberty,pesky,outrage,outdoors,motions,moods,lunches,litter,kidnappers,itching,intuition,imitation,humility,hassling,gallons,drugstore,dosage,disrupt,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,circumstantial,chimney,blinking,biscuits,admiring,weeping,triad,trashy,soothing,slumber,slayers,skirts,siren,shindig,sentiment,rosco,riddance,quaid,purity,proceeding,pretzels,panicking,mckechnie,lovin,leaked,intruding,impersonating,ignorance,hamburgers,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,deceived,creeping,craziest,corpses,conned,coincidences,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,zillion,watergate,wallpaper,telesave,sympathize,sweeter,startin,spades,sodas,snowed,sleepover,signor,seein,retainer,restroom,rested,repercussions,reliving,reconcile,prevail,preaching,overreact,o'neil,noose,moustache,manicure,maids,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,exhausting,everytime,disregard,cling,chevron,chaperone,blinding,bitty,beads,battling,badgering,anticipation,upstanding,unprofessional,unhealthy,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,shooters,senseless,rewarding,propane,preposterous,pigeons,pastry,overhearing,obscene,negotiable,loner,jogging,itchy,insinuating,insides,hospitality,hormone,hearst,forthcoming,fists,fifties,etiquette,endings,destroys,despises,deprived,cuddy,crust,cloak,circumstance,chewed,casserole,bidder,bearer,artoo,applaud,appalling,vowed,virgins,vigilante,undone,throttle,testosterone,tailor,symptom,swoop,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,refund,reclaim,raoul,puzzles,purposely,punks,prosecuted,plaid,picturing,pickin,parasites,mysteriously,multiply,mascara,jukebox,interruptions,gunfire,furnace,elbows,duplicate,drapes,deliberate,decoy,cryptic,coupla,condemn,complicate,colossal,clerks,clarity,brushed,banished,argon,alarmed,worships,versa,uncanny,technicality,sundae,stumble,stripping,shuts,schmuck,satin,saliva,robber,relentless,reconnect,recipes,rearrange,rainy,psychiatrists,policemen,plunge,plugged,patched,overload,o'malley,mindless,menus,lullaby,lotte,leavin,killin,karinsky,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,dread,degrassi,dealings,dangers,cushion,bowel,barged,abide,abandoning,wonderfully,wait'll,violate,suicidal,stayin,sorted,slamming,sketchy,shoplifting,raiser,quizmaster,prefers,needless,motherhood,momentarily,migraine,lifts,leukemia,leftover,keepin,hinks,hellhole,gowns,goodies,gallon,futures,entertained,eighties,conspiring,cheery,benign,apiece,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unidentified,trivial,transcripts,textbook,supervise,superstitious,stricken,stimulating,spielberg,slices,shelves,scratches,sabotaged,retrieval,repressed,rejecting,quickie,ponies,peeking,outraged,o'connell,moping,moaning,mausoleum,licked,kovich,klutz,interrogating,interfered,insulin,infested,incompetence,hyper,horrified,handedly,gekko,fraid,fractured,examiner,eloped,disoriented,dashing,crashdown,courier,cockroach,chipped,brushing,bombed,bolts,baths,baptized,astronaut,assurance,anemia,abuela,abiding,withholding,weave,wearin,weaker,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,scram,roasted,roaming,riviera,respectfully,repulsive,psychiatry,provoked,penitentiary,painkillers,ninotchka,mitzvah,milligrams,midge,marshmallows,looky,lapse,kubelik,intellect,improvise,implant,goa'ulds,giddy,geniuses,fruitcake,footing,fightin,drinkin,doork,detour,cuddle,crashes,combo,colonnade,cheats,cetera,bailiff,auditioning,assed,amused,alienate,aiding,aching,unwanted,topless,tongues,tiniest,superiors,soften,sheldrake,rawley,raisins,presses,plaster,nessa,narrowed,minions,merciful,lawsuits,intimidating,infirmary,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foolproof,folder,flattery,fingertips,exterminator,explodes,eccentric,dodging,disguised,crave,constructive,concealed,compartment,chute,chinpokomon,bodily,astronauts,alimony,accustomed,abdominal,wrinkle,wallow,valium,untrue,uncover,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,talker,succubus,smarts,sliding,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ratted,rationally,provenance,phonse,perky,pedal,overdose,nasal,nanites,mushy,movers,missus,midterm,merits,melodramatic,manure,knitting,invading,interpol,incapacitated,hotline,hauling,gunpoint,grail,ganza,framing,flannel,faded,eavesdrop,desserts,calories,breathtaking,bleak,blacked,batter,aggravated,yanked,wigand,whoah,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stared,slapping,sincerity,siding,shenanigans,shacking,sappy,samaritan,poorer,politely,paste,oysters,overruled,nightcap,mosquito,millimeter,merrier,manhood,lucked,kilos,ignition,hauled,harmed,goodwill,freshmen,fenmore,fasten,farce,exploding,erratic,drunks,ditching,d'artagnan,cramped,contacting,closets,clientele,chimp,bargained,arranging,anesthesia,amuse,altering,afternoons,accountable,abetting,wolek,waved,uneasy,toddy,tattooed,spauldings,sliced,sirens,schibetta,scatter,rinse,remedy,redemption,pleasures,optimism,oblige,mmmmm,masked,malicious,mailing,kosher,kiddies,judas,isolate,insecurity,incidentally,heals,headlights,growl,grilling,glazed,flunk,floats,fiery,fairness,exercising,excellency,disclosure,cupboard,counterfeit,condescending,conclusive,clicked,cleans,cholesterol,cashed,broccoli,brats,blueprints,blindfold,billing,attach,appalled,alrighty,wynant,unsolved,unreliable,toots,tighten,sweatshirt,steinbrenner,steamy,spouse,sonogram,slots,sleepless,shines,retaliate,rephrase,redeem,rambling,quilt,quarrel,prying,proverbial,priced,prescribe,prepped,pranks,possessive,plaintiff,pediatrics,overlooked,outcast,nightgown,mumbo,mediocre,mademoiselle,lunchtime,lifesaver,leaned,lambs,interns,hounding,hellmouth,hahaha,goner,ghoul,gardening,frenzy,foyer,extras,exaggerate,everlasting,enlightened,dialed,devote,deceitful,d'oeuvres,cosmetic,contaminated,conspired,conning,cavern,carving,butting,boiled,blurry,babysit,ascension,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,vacations,upfront,unresolved,tampering,stockholders,snaps,sleepwalking,shrunk,sermon,seduction,scams,revolve,phenomenal,patrolling,paranormal,ounces,omigod,nightfall,lashing,innocents,infierno,incision,humming,haunts,gloss,gloating,frannie,fetal,feeny,entrapment,discomfort,detonator,dependable,concede,complication,commotion,commence,chulak,caucasian,casually,brainer,bolie,ballpark,anwar,analyzing,accommodations,youse,wring,wallowing,transgenics,thrive,tedious,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,shattering,shabby,seams,scrawny,revoked,residue,reeks,recite,ranting,quoting,predicament,plugs,pinpoint,petrified,pathological,passports,oughtta,nighter,navigate,kippie,intrigue,intentional,insufferable,hunky,how've,horrifying,hearty,hamptons,grazie,funerals,forks,fetched,excruciating,enjoyable,endanger,dumber,drying,diabolical,crossword,corry,comprehend,clipped,classmates,candlelight,brutally,brutality,boarded,bathrobe,authorize,assemble,aerobics,wholesome,whiff,vermin,trophies,trait,tragically,toying,testy,tasteful,stocked,spinach,sipping,sidetracked,scrubbing,scraping,sanctity,robberies,ridin,retribution,refrain,realities,radiant,protesting,projector,plutonium,payin,parting,o'reilly,nooooo,motherfucking,measly,manic,lalita,juggling,jerking,intro,inevitably,hypnosis,huddle,horrendous,hobbies,heartfelt,harlin,hairdresser,gonorrhea,fussing,furtwangler,fleeting,flawless,flashed,fetus,eulogy,distinctly,disrespectful,denies,crossbow,cregg,crabs,cowardly,contraction,contingency,confirming,condone,coffins,cleansing,cheesecake,certainty,cages,c'est,briefed,bravest,bosom,boils,binoculars,bachelorette,appetizer,ambushed,alerted,woozy,withhold,vulgar,utmost,unleashed,unholy,unhappiness,unconditional,typewriter,typed,twists,supermodel,subpoenaed,stringing,skeptical,schoolgirl,romantically,rocked,revoir,reopen,puncture,preach,polished,planetarium,penicillin,peacefully,nurturing,more'n,mmhmm,midgets,marklar,lodged,lifeline,jellyfish,infiltrate,hutch,horseback,heist,gents,frickin,freezes,forfeit,flakes,flair,fathered,eternally,epiphany,disgruntled,discouraged,delinquent,decipher,danvers,cubes,credible,coping,chills,cherished,catastrophe,bombshell,birthright,billionaire,ample,affections,admiration,abbotts,whatnot,watering,vinegar,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,timeless,thump,thermometer,theoretically,tapping,tagged,swung,stares,spiked,solves,smuggle,scarier,saucer,quitter,prudent,powdered,poked,pointers,peril,penetrate,penance,opium,nudge,nostrils,neurological,mockery,mobster,medically,loudly,insights,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,gloom,freshly,francs,flunked,flawed,emptiness,drugging,dozer,derevko,deprive,deodorant,cryin,crocodile,coloring,colder,cognac,clocked,clippings,charades,chanting,certifiable,caterers,brute,brochures,botched,blinders,bitchin,banter,woken,ulcer,tread,thankfully,swine,swimsuit,swans,stressing,steaming,stamped,stabilize,squirm,snooze,shuffle,shredded,seafood,scratchy,savor,sadistic,rhetorical,revlon,realist,prosecuting,prophecies,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,muster,meningitis,matron,lockers,letterman,legged,indictment,hypnotized,housekeeping,hopelessly,hallucinations,grader,goldilocks,girly,flask,envelopes,downside,doves,dissolve,discourage,disapprove,diabetic,deliveries,decorator,crossfire,criminally,containment,comrades,complimentary,chatter,catchy,cashier,cartel,caribou,cardiologist,brawl,booted,barbershop,aryan,angst,administer,zellie,wreak,whistles,vandalism,vamps,uterus,upstate,unstoppable,understudy,tristin,transcript,tranquilizer,toxins,tonsils,stempel,spotting,spectator,spatula,softer,snotty,slinging,showered,sexiest,sensual,sadder,rimbaud,restrain,resilient,remission,reinstate,rehash,recollection,rabies,popsicle,plausible,pediatric,patronizing,ostrich,ortolani,oooooh,omelette,mistrial,marseilles,loophole,laughin,kevvy,irritated,infidelity,hypothermia,horrific,groupie,grinding,graceful,goodspeed,gestures,frantic,extradition,echelon,disks,dawnie,dared,damsel,curled,collateral,collage,chant,calculating,bumping,bribes,boardwalk,blinds,blindly,bleeds,bickering,beasts,backside,avenge,apprehended,anguish,abusing,youthful,yells,yanking,whomever,when'd,vomiting,vengeful,unpacking,unfamiliar,undying,tumble,trolls,treacherous,tipping,tantrum,tanked,summons,straps,stomped,stinkin,stings,staked,squirrels,sprinkles,speculate,sorting,skinned,sicko,sicker,shootin,shatter,seeya,schnapps,s'posed,ronee,respectful,regroup,regretting,reeling,reckoned,ramifications,puddy,projections,preschool,plissken,platonic,permalash,outdone,outburst,mutants,mugging,misfortune,miserably,miraculously,medications,margaritas,manpower,lovemaking,logically,leeches,latrine,kneel,inflict,impostor,hypocrisy,hippies,heterosexual,heightened,hecuba,healer,gunned,grooming,groin,gooey,gloomy,frying,friendships,fredo,firepower,fathom,exhaustion,evils,endeavor,eggnog,dreaded,d'arcy,crotch,coughing,coronary,cookin,consummate,congrats,companionship,caved,caspar,bulletproof,brilliance,breakin,brash,blasting,aloud,airtight,advising,advertise,adultery,aches,wronged,upbeat,trillion,thingies,tending,tarts,surreal,specs,specialize,spade,shrew,shaping,selves,schoolwork,roomie,recuperating,rabid,quart,provocative,proudly,pretenses,prenatal,pharmaceuticals,pacing,overworked,originals,nicotine,murderous,mileage,mayonnaise,massages,losin,interrogated,injunction,impartial,homing,heartbreaker,hacks,glands,giver,fraizh,flips,flaunt,englishman,electrocuted,dusting,ducking,drifted,donating,cylon,crutches,crates,cowards,comfortably,chummy,chitchat,childbirth,businesswoman,brood,blatant,bethy,barring,bagged,awakened,asbestos,airplanes,worshipped,winnings,why're,visualize,unprotected,unleash,trays,thicker,therapists,takeoff,streisand,storeroom,stethoscope,stacked,spiteful,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,ruptured,roaring,receptionist,recap,raditch,radiator,pushover,plastered,pharmacist,perverse,perpetrator,ornament,ointment,nineties,napping,nannies,mousse,moors,momentary,misunderstandings,manipulator,malfunction,laced,kivar,kickin,infuriating,impressionable,holdup,hires,hesitated,headphones,hammering,groundwork,grotesque,graces,gauze,gangsters,frivolous,freeing,fours,forwarding,ferrars,faulty,fantasizing,extracurricular,empathy,divorces,detonate,depraved,demeaning,deadlines,dalai,cursing,cufflink,crows,coupons,comforted,claustrophobic,casinos,camped,busboy,bluth,bennetts,baskets,attacker,aplastic,angrier,affectionate,zapped,wormhole,weaken,unrealistic,unravel,unimportant,unforgettable,twain,suspend,superbowl,stutter,stewardess,stepson,standin,spandex,souvenirs,sociopath,skeletons,shivering,sexier,selfishness,scrapbook,ritalin,ribbons,reunite,remarry,relaxation,rattling,rapist,psychosis,prepping,poses,pleasing,pisses,piling,persecuted,padded,operatives,negotiator,natty,menopause,mennihan,martimmys,loyalties,laynie,lando,justifies,intimately,inexperienced,impotent,immortality,horrors,hooky,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,ferragamo,feeble,eyesight,explosions,experimenting,enchanting,doubtful,dizziness,dismantle,detectors,deserving,defective,dangling,dancin,crumble,creamed,cramping,conceal,clockwork,chrissakes,chrissake,chopping,cabinets,brooding,bonfire,blurt,bloated,blackmailer,beforehand,bathed,bathe,barcode,banish,badges,babble,await,attentive,aroused,antibodies,animosity,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vigilant,upbringing,unselfish,uncles,trendy,trajectory,striped,stamina,stalled,staking,stacks,spoils,snuff,snooty,snide,shrinking,senora,secretaries,scoundrel,saline,salads,rundown,riddles,relapse,recommending,raspberry,plight,pecan,pantry,overslept,ornaments,niner,negligent,negligence,nailing,mucho,mouthed,monstrous,malpractice,lowly,loitering,logged,lingering,lettin,lattes,kamal,juror,jillefsky,jacked,irritate,intrusion,insatiable,infect,impromptu,icing,hmmmm,hefty,gasket,frightens,flapping,firstborn,faucet,estranged,envious,dopey,doesn,disposition,disposable,disappointments,dipped,dignified,deceit,dealership,deadbeat,curses,coven,counselors,concierge,clutches,casbah,callous,cahoots,brotherly,britches,brides,bethie,beige,autographed,attendants,attaboy,astonishing,appreciative,antibiotic,aneurysm,afterlife,affidavit,zoning,whats,whaddaya,vasectomy,unsuspecting,toula,topanga,tonio,toasted,tiring,terrorized,tenderness,tailing,sweats,suffocated,sucky,subconsciously,starvin,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,seventies,sedate,scented,sandals,rollers,retraction,resigning,recuperate,receptive,racketeering,queasy,provoking,priors,prerogative,premed,pinched,pendant,outsiders,orbing,opportunist,olanov,neurologist,nanobot,mommies,molested,misread,mannered,laundromat,intercom,inspect,insanely,infatuation,indulgent,indiscretion,inconsiderate,hurrah,howling,herpes,hasta,harassed,hanukkah,groveling,groosalug,gander,galactica,futile,fridays,flier,fixes,exploiting,exorcism,evasive,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,disobeyed,disneyland,disable,dehydrated,contemplating,coconuts,cockroaches,clogged,chilling,chaperon,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bluepoint,appetizers,appendix,antics,anointed,analogy,almonds,yammering,winch,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,travesty,transfusion,trainee,towelie,tiresome,straightening,staggering,sonar,socializing,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,ridiculously,ridicule,rents,reconciled,radios,publicist,pubes,prune,prude,precrime,postponing,pluck,perish,peppermint,peeled,overdo,nutshell,nostalgic,mulan,mouthing,mistook,meddle,maybourne,martimmy,lobotomy,livelihood,lippman,likeness,kindest,kaffee,jocks,jerked,jeopardizing,jazzed,insured,inquisition,inhale,ingenious,holier,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,goofing,godson,glare,finesse,figuratively,ferrie,endangerment,dreading,dozed,dorky,dmitri,divert,discredit,dialing,cufflinks,crutch,craps,corrupted,cocoon,cleavage,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,ballistics,astute,arroway,adventurous,adoptive,addicts,addictive,yadda,whitelighters,wematanye,weeds,wedlock,wallets,vulnerability,vroom,vents,upped,unsettling,unharmed,trippin,trifle,tracing,tormenting,thats,syphilis,subtext,stickin,spices,sores,smacked,slumming,sinks,signore,shitting,shameful,shacked,septic,seedy,righteousness,relish,rectify,ravishing,quickest,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,outnumbered,oregano,offender,nukes,nosed,nighty,nifty,mounties,motivate,moons,misinterpreted,mercenary,mentality,marsellus,lupus,lumbar,lovesick,lobsters,leaky,laundering,latch,jafar,instinctively,inspires,indoors,incarcerated,hundredth,handkerchief,gynecologist,guittierez,groundhog,grinning,goodbyes,geese,fullest,eyelashes,eyelash,enquirer,endlessly,elusive,disarm,detest,deluding,dangle,cotillion,corsage,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,cheeseburgers,chardonnay,celery,campfire,calming,burritos,brundle,broflovski,brighten,borderline,blinked,bling,beauties,bauers,battered,articulate,alienated,ahhhhh,agamemnon,accountants,y'see,wrongful,wrapper,workaholic,winnebago,whispered,warts,vacate,unworthy,unanswered,tonane,tolerated,throwin,throbbing,thrills,thorns,thereof,there've,tarot,sunscreen,stretcher,stereotype,soggy,sobbing,sizable,sightings,shucks,shrapnel,sever,senile,seaboard,scorned,saver,rebellious,rained,putty,prenup,pores,pinching,pertinent,peeping,paints,ovulating,opposites,occult,nutcracker,nutcase,newsstand,newfound,mocked,midterms,marshmallow,marbury,maclaren,leans,krudski,knowingly,keycard,junkies,juilliard,jolinar,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,incubator,illustrious,hunsecker,houseguest,homosexuals,homeroom,hernia,harming,handgun,hallways,hallucination,gunshots,groupies,groggy,goiter,gingerbread,giggling,frigging,fledged,fedex,fairies,exchanging,exaggeration,esteemed,enlist,drags,dispense,disloyal,disconnect,desks,dentists,delacroix,degenerate,daydreaming,cushions,cuddly,corroborate,complexion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,benefactor,ballgame,baiting,backstabbing,artifact,airspace,adversary,actin,accuses,accelerant,abundantly,abstinence,zissou,zandt,yapping,witchy,willows,whadaya,vilandra,veiled,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,toasting,tingling,tents,tempered,sulking,stunk,sponges,spills,softly,snipers,scourge,rooftop,riana,revolting,revisit,refreshments,redecorating,recapture,raysy,pretense,prejudiced,precogs,pouting,poofs,pimple,piles,pediatrician,padre,packets,paces,orvelle,oblivious,objectivity,nighttime,nervosa,mexicans,meurice,melts,matchmaker,maeby,lugosi,lipnik,leprechaun,kissy,kafka,introductions,intestines,inspirational,insightful,inseparable,injections,inadvertently,hussy,huckabees,hittin,hemorrhaging,headin,haystack,hallowed,grudges,granilith,grandkids,grading,gracefully,godsend,gobbles,fragrance,fliers,finchley,farts,eyewitnesses,expendable,existential,dorms,delaying,degrading,deduction,darlings,danes,cylons,counsellor,contraire,consciously,conjuring,congratulating,cokes,buffay,brooch,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,aptitude,amish,amazes,abomination,worldly,whispers,whadda,wayward,wailing,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,trite,transvestite,toupee,timid,timers,terrorizing,swana,stumped,strolling,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,spits,spins,soaps,sentiments,scramble,scone,rooftops,retract,reflexes,rawdon,ragged,quirky,quantico,psychologically,prodigal,pounce,potty,pleasantries,pints,petting,perceive,onstage,notwithstanding,nibble,newmans,neutralize,mutilated,millionaires,mayflower,masquerade,mangy,macreedy,lunatics,lovable,locating,limping,lasagna,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,incantation,hysteria,hypnotize,humping,happenin,griet,grasping,glorified,ganging,g'night,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fainting,eyebrow,exonerated,ether,electrician,egotistical,earthly,dusted,dignify,detonation,debrief,dazzling,dan'l,damnedest,daisies,crushes,crucify,contraband,confronting,collapsing,cocked,clicks,cliche,circled,chandelier,carburetor,callers,broads,breathes,bloodshed,blindsided,blabbing,bialystock,bashing,ballerina,aviva,arteries,anomaly,airstrip,agonizing,adjourn,aaaaa,yearning,wrecker,witnessing,whence,warhead,unsure,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,toddler,tiptoe,threesome,thirties,thermostat,swipe,surgically,subtlety,stung,stumbling,stubs,stride,strangling,sprayed,socket,smuggled,showering,shhhhh,sabotaging,rumson,rounding,risotto,repairman,rehearsed,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,prowl,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,peeked,peddle,panting,overweight,overrun,outing,outgrown,obsess,nursed,nodding,negativity,negatives,musketeers,mugger,motorcade,merrily,matured,masquerading,marvellous,maniacs,lovey,louse,linger,lilies,lawful,kudos,knuckle,juices,judgments,itches,intolerable,intermission,inept,incarceration,implication,imaginative,huckleberry,holster,heartburn,gunna,groomed,graciously,fulfillment,fugitives,forsaking,forgives,foreseeable,flavors,flares,fixation,fickle,fantasize,famished,fades,expiration,exclamation,erasing,eiffel,eerie,earful,duped,dulles,dissing,dissect,dispenser,dilated,detergent,desdemona,debriefing,damper,curing,crispina,crackpot,courting,cordial,conflicted,comprehension,commie,cleanup,chiropractor,charmer,chariot,cauldron,catatonic,bullied,buckets,brilliantly,breathed,booths,boardroom,blowout,blindness,blazing,biologically,bibles,biased,beseech,barbaric,balraj,audacity,anticipating,alcoholics,airhead,agendas,admittedly,absolution,youre,yippee,wittlesey,withheld,willful,whammy,weakest,washes,virtuous,videotapes,vials,unplugged,unpacked,unfairly,turbulence,tumbling,tricking,tremendously,traitors,torches,tinga,thyroid,teased,tawdry,taker,sympathies,swiped,sundaes,suave,strut,stepdad,spewing,spasm,socialize,slither,simulator,shutters,shrewd,shocks,semantics,schizophrenic,scans,savages,rya'c,runny,ruckus,royally,roadblocks,rewriting,revoke,repent,redecorate,recovers,recourse,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,problemo,praises,pouch,postcards,pooped,poised,piled,phoney,phobia,patching,parenthood,pardner,oozing,ohhhhh,numbing,nostril,nosey,neatly,nappa,nameless,mortuary,moronic,modesty,midwife,mcclane,matuka,maitre,lumps,lucid,loosened,loins,lawnmower,lamotta,kroehner,jinxy,jessep,jamming,jailhouse,jacking,intruders,inhuman,infatuated,indigestion,implore,implanted,hormonal,hoboken,hillbilly,heartwarming,headway,hatched,hartmans,harping,grapevine,gnome,forties,flyin,flirted,fingernail,exhilarating,enjoyment,embark,dumper,dubious,drell,docking,disillusioned,dishonor,disbarred,dicey,custodial,counterproductive,corned,cords,contemplate,concur,conceivable,cobblepot,chickened,checkout,carpe,cap'n,campers,buyin,bullies,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,beeped,bearable,autographs,alarming,wretch,wimps,widower,whirlwind,whirl,warms,vandelay,unveiling,undoing,unbecoming,turnaround,touche,togetherness,tickles,ticker,teensy,taunt,sweethearts,stitched,standpoint,staffers,spotless,soothe,smothered,sickening,shouted,shepherds,shawl,seriousness,schooled,schoolboy,s'mores,roped,reminders,raggedy,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,ohmigod,nosing,nicked,neanderthal,mosquitoes,mortified,milky,messin,mecha,markinson,marivellas,mannequin,manderley,madder,macready,lookie,locusts,lifetimes,lanna,lakhi,kholi,impersonate,hyperdrive,horrid,hopin,hogging,hearsay,harpy,harboring,hairdo,hafta,grasshopper,gobble,gatehouse,foosball,floozy,fished,firewood,finalize,felons,euphemism,entourage,elitist,elegance,drokken,drier,dredge,dossier,diseased,diarrhea,diagnose,despised,defuse,d'amour,contesting,conserve,conscientious,conjured,collars,clogs,chenille,chatty,chamomile,casing,calculator,brittle,breached,blurted,birthing,bikinis,astounding,assaulting,aroma,appliance,antsy,amnio,alienating,aliases,adolescence,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,unwelcome,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,ticks,tangible,tagging,swallowing,superheroes,studs,strep,stowed,stomping,steffy,sprain,spouting,sponsoring,sneezing,smeared,slink,shakin,sewed,seatbelt,scariest,scammed,sanctimonious,roasting,rightly,retinal,rethinking,resented,reruns,remover,racks,purest,progressing,presidente,preeclampsia,postponement,portals,poppa,pliers,pinning,pelvic,pampered,padding,overjoyed,ooooo,one'll,octavius,nonono,nicknames,neurosurgeon,narrows,misled,mislead,mishap,milltown,milking,meticulous,mediocrity,meatballs,machete,lurch,layin,knockin,khruschev,jurors,jumpin,jugular,jeweler,intellectually,inquiries,indulging,indestructible,indebted,imitate,ignores,hyperventilating,hyenas,hurrying,hermano,hellish,heheh,harshly,handout,grunemann,glances,giveaway,getup,gerome,furthest,frosting,frail,forwarded,forceful,flavored,flammable,flaky,fingered,fatherly,ethic,embezzlement,duffel,dotted,distressed,disobey,disappearances,dinky,diminish,diaphragm,deuces,creme,courteous,comforts,coerced,clots,clarification,chunks,chickie,chases,chaperoning,cartons,caper,calves,caged,bustin,bulging,bringin,boomhauer,blowin,blindfolded,biscotti,ballplayer,bagging,auster,assurances,aschen,arraigned,anonymity,alters,albatross,agreeable,adoring,abduct,wolfi,weirded,watchers,washroom,warheads,vincennes,urgency,understandably,uncomplicated,uhhhh,twitching,treadmill,thermos,tenorman,tangle,talkative,swarm,surrendering,summoning,strive,stilts,stickers,squashed,spraying,sparring,soaring,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,sharper,shamed,sadist,rydell,rusik,roulette,resumes,respiration,recount,reacts,purgatory,princesses,presentable,ponytail,plotted,pinot,pigtails,phillippe,peddling,paroled,orbed,offends,o'hara,moonlit,minefield,metaphors,malignant,mainframe,magicks,maggots,maclaine,loathing,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jakov,invoke,infantile,inadmissible,horoscope,hinting,hideaway,hesitating,heddy,heckles,hairline,gripe,gratifying,governess,goebbels,freddo,foresee,fascination,exemplary,executioner,etcetera,escorts,endearing,eaters,earplugs,draped,disrupting,disagrees,dimes,devastate,detain,depositions,delicacy,darklighter,cynicism,cyanide,cutters,cronus,continuance,conquering,confiding,compartments,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,buttle,burdened,bruenell,broomstick,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,bellboy,beaucoup,barkeep,awaken,astray,assailant,appease,aphrodisiac,alleys,yesss,wrecks,woodpecker,wondrous,wimpy,willpower,wheeling,weepy,waxing,waive,videotaped,veritable,untouched,unlisted,unfounded,unforeseen,twinge,triggers,traipsing,toxin,tombstone,thumping,therein,testicles,telephones,tarmac,talby,tackled,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,snipe,snagged,skimming,siddown,showroom,shovels,shotguns,shoelaces,shitload,shellfish,sharpest,shadowy,seizing,scrounge,scapegoat,sayonara,saddled,rummaging,roomful,renounce,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,practising,pours,poolhouse,poltergeist,pocketbook,plainly,picnics,pesto,pawing,passageway,partied,oneself,numero,nostalgia,nitwit,neuro,mixer,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,ingested,indignation,inconceivable,imposition,impersonal,imbecile,huddled,housewarming,horizons,homicides,hiccups,hearse,hardened,gushing,gushie,greased,goddamit,freelancer,forging,fondue,flustered,flung,flinch,flicker,fixin,festivus,fertilizer,farted,faggots,exonerate,evict,enormously,encrypted,emdash,embracing,duress,dupres,dowser,doormat,disfigured,disciplined,dibbs,depository,deathbed,dazzled,cuttin,cures,crowding,crepe,crammed,copycat,contradict,confidant,condemning,conceited,commute,comatose,clapping,circumference,chuppah,chore,choksondik,chestnuts,briault,bottomless,bonnet,blokes,berluti,beret,beggars,bankroll,bania,athos,arsenic,apperantly,ahhhhhh,afloat,accents,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,wisest,wipes,wield,whyn't,weirdos,wednesdays,vicksburg,upchuck,untraceable,unsupervised,unpleasantness,unhook,unconscionable,uncalled,trappings,tragedies,townie,thurgood,things'll,thine,tetanus,terrorize,temptations,tanning,tampons,swarming,straitjacket,steroid,startling,starry,squander,speculating,sollozzo,sneaked,slugs,skedaddle,sinker,silky,shortcomings,sellin,seasoned,scrubbed,screwup,scrapes,scarves,sandbox,salesmen,rooming,romances,revere,reproach,reprieve,rearranging,ravine,rationalize,raffle,punchy,psychobabble,provocation,profoundly,prescriptions,preferable,polishing,poached,pledges,pirelli,perverts,oversized,overdressed,outdid,nuptials,nefarious,mouthpiece,motels,mopping,mongrel,missin,metaphorically,mertin,memos,melodrama,melancholy,measles,meaner,mantel,maneuvering,mailroom,luring,listenin,lifeless,licks,levon,legwork,kneecaps,kippur,kiddie,kaput,justifiable,insistent,insidious,innuendo,innit,indecent,imaginable,horseshit,hemorrhoid,hella,healthiest,haywire,hamsters,hairbrush,grouchy,grisly,gratuitous,glutton,glimmer,gibberish,ghastly,gentler,generously,geeky,fuhrer,fronting,foolin,faxes,faceless,extinguisher,expel,etched,endangering,ducked,dodgeball,dives,dislocated,discrepancy,devour,derail,dementia,daycare,cynic,crumbling,cowardice,covet,cornwallis,corkscrew,cookbook,commandments,coincidental,cobwebs,clouded,clogging,clicking,clasp,chopsticks,chefs,chaps,cashing,carat,calmer,brazen,brainwashing,bradys,bowing,boned,bloodsucking,bleachers,bleached,bedpan,bearded,barrenger,bachelors,awwww,assures,assigning,asparagus,apprehend,anecdote,amoral,aggravation,afoot,acquaintances,accommodating,yakking,worshipping,wladek,willya,willies,wigged,whoosh,whisked,watered,warpath,volts,violates,valuables,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,tubby,trolling,toxicology,tormented,toothache,tingly,timmiihh,thursdays,thoreau,terrifies,temperamental,telegrams,talkie,takers,symbiote,swirl,suffocate,stupider,strapping,steckler,springing,someway,sleepyhead,sledgehammer,slant,slams,showgirl,shoveling,shmoopy,sharkbait,shan't,scrambling,schematics,sandeman,sabbatical,rummy,reykjavik,revert,responsive,rescheduled,requisition,relinquish,rejoice,reckoning,recant,rebadow,reassurance,rattlesnake,ramble,primed,pricey,prance,pothole,pocus,persist,perpetrated,pekar,peeling,pastime,parmesan,pacemaker,overdrive,ominous,observant,nothings,noooooo,nonexistent,nodded,nieces,neglecting,nauseating,mutated,musket,mumbling,mowing,mouthful,mooseport,monologue,mistrust,meetin,masseuse,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,liberating,lhasa,leniency,leering,laughable,lashes,lasagne,laceration,korben,katan,kalen,jittery,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,impolite,humbly,heroics,heigh,guillotine,guesthouse,grounding,grips,gossiping,goatee,gnomes,gellar,frutt,frobisher,freudian,foolishness,flagged,femme,fatso,fatherhood,fantasized,fairest,faintest,eyelids,extravagant,extraterrestrial,extraordinarily,escalator,elevate,drivel,dissed,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,convene,congresswoman,concocted,compromises,comprende,comma,coleslaw,clothed,clinically,chickenshit,checkin,cesspool,caskets,calzone,brothel,boomerang,bodega,blasphemy,bitsy,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,arrhythmia,arousing,arbitrator,antagonize,angling,anesthetic,altercation,aggressor,adversity,acathla,aaahhh,wreaking,workup,wonderin,wither,wielding,what'm,what'cha,waxed,vibrating,veterinarian,venting,vasey,valor,validate,upholstery,untied,unscathed,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,treatable,treasured,tranquility,townspeople,torso,tomei,tipsy,tinsel,tidings,thirtieth,tantrums,tamper,talky,swayed,swapping,suitor,stylist,stirs,standoff,sprinklers,sparkly,snobby,snatcher,smoother,sleepin,shrug,shoebox,sheesh,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,roadblock,riverbank,ridiculed,resentful,repellent,recreate,reconvene,rebuttal,realmedia,quizzes,questionnaire,punctured,pucker,prolong,professionalism,pleasantly,pigsty,penniless,paychecks,patiently,parading,overactive,ovaries,orderlies,oracles,oiled,offending,nudie,neonatal,neighborly,moops,moonlighting,mobilize,mmmmmm,milkshake,menial,meats,mayan,maxed,mangled,magua,lunacy,luckier,liters,lansbury,kooky,knowin,jeopardized,inkling,inhalation,inflated,infecting,incense,inbound,impractical,impenetrable,idealistic,i'mma,hypocrites,hurtin,humbled,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,genitals,gazillion,gammy,gamesphere,fugue,footwear,folly,flashlights,fives,filet,extenuating,estrogen,entails,embezzled,eloquent,egomaniac,ducts,drowsy,drones,doree,donovon,disguises,diggin,deserting,depriving,defying,deductible,decorum,decked,daylights,daybreak,dashboard,damnation,cuddling,crunching,crickets,crazies,councilman,coughed,conundrum,complimented,cohaagen,clutching,clued,clader,cheques,checkpoint,chats,channeling,ceases,carasco,capisce,cantaloupe,cancelling,campsite,burglars,breakfasts,bra'tac,blueprint,bleedin,blabbed,beneficiary,basing,avert,atone,arlyn,approves,apothecary,antiseptic,aleikuum,advisement,zadir,wobbly,withnail,whattaya,whacking,wedged,wanders,vaginal,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,treading,tranquilizers,toontown,thunk,suture,suppressing,strays,stonewall,stogie,stepdaughter,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sombrero,solemnly,softened,snobs,snippy,snare,smoothing,slump,slimeball,slaving,silently,shiller,shakedown,sensations,scrying,scrumptious,screamin,saucy,santoses,roundup,roughed,rosary,robechaux,retrospect,rescind,reprehensible,repel,remodeling,reconsidering,reciprocate,railroaded,psychics,promos,prob'ly,pristine,printout,priestess,prenuptial,precedes,pouty,phoning,peppy,pariah,parched,panes,overloaded,overdoing,nymphs,nother,notebooks,nearing,nearer,monstrosity,milady,mieke,mephesto,medicated,marshals,manilow,mammogram,m'lady,lotsa,loopy,lesion,lenient,learner,laszlo,kross,kinks,jinxed,involuntary,insubordination,ingrate,inflatable,incarnate,inane,hypoglycemia,huntin,humongous,hoodlum,honking,hemorrhage,helpin,hathor,hatching,grotto,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,flutter,flagpole,fetching,fatter,faithfully,exert,evasion,escalate,enticing,enchantress,elopement,drills,downtime,downloading,dorks,doorways,divulge,dissociative,disgraceful,disconcerting,deteriorate,destinies,depressive,dented,denim,decruz,decidedly,deactivate,daydreams,curls,culprit,cruelest,crippling,cranberries,corvis,copped,commend,coastguard,cloning,cirque,churning,chock,chivalry,catalogues,cartwheels,carols,canister,buttered,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,bores,badmouthing,autopilot,ascertain,aorta,ampata,allenby,accosted,absolve,aborted,aaagh,aaaaaah,yonder,yellin,wyndham,wrongdoing,woodsboro,wigging,wasteland,warranty,waltzed,walnuts,vividly,veggie,unnecessarily,unloaded,unicorns,understated,unclean,umbrellas,twirling,turpentine,tupperware,triage,treehouse,tidbit,tickled,threes,thousandth,thingie,terminally,teething,tassel,talkies,swoon,switchboard,swerved,suspiciously,subsequentlyne,subscribe,strudel,stroking,strictest,stensland,starin,stannart,squirming,squealing,sorely,softie,snookums,sniveling,smidge,sloth,skulking,simian,sightseeing,siamese,shudder,shoppers,sharpen,shannen,semtex,secondhand,seance,scowl,scorn,safekeeping,russe,rummage,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,rerun,reputations,rekall,refreshment,reenactment,recluse,ravioli,raves,raking,purses,punishable,punchline,puked,prosky,previews,poughkeepsie,poppins,polluted,placenta,pissy,petulant,perseverance,pears,pawns,pastries,partake,panky,palate,overzealous,orchids,obstructing,objectively,obituaries,obedient,nothingness,musty,motherly,mooning,momentous,mistaking,minutemen,milos,microchip,meself,merciless,menelaus,mazel,masturbate,mahogany,lysistrata,lillienfield,likable,liberate,leveled,letdown,larynx,lardass,lainey,lagged,klorel,kidnappings,keyed,karmic,jeebies,irate,invulnerable,intrusive,insemination,inquire,injecting,informative,informants,impure,impasse,imbalance,illiterate,hurled,hunts,hematoma,headstrong,handmade,handiwork,growling,gorky,getcha,gesundheit,gazing,galley,foolishly,fondness,floris,ferocious,feathered,fateful,fancies,fakes,faker,expire,ever'body,essentials,eskimos,enlightening,enchilada,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,doable,dislikes,dishonesty,disengage,discouraging,derailed,deformed,deflect,defer,deactivated,crips,constellations,congressmen,complimenting,clubbing,clawing,chromium,chimes,chews,cheatin,chaste,cellblock,caving,catered,catacombs,calamari,bucking,brulee,brits,brisk,breezes,bounces,boudoir,binks,better'n,bellied,behrani,behaves,bedding,balmy,badmouth,backers,avenging,aromatherapy,armpit,armoire,anythin,anonymously,anniversaries,aftershave,affliction,adrift,admissible,adieu,acquittal,yucky,yearn,whitter,whirlpool,wendigo,watchdog,wannabes,wakey,vomited,voicemail,valedictorian,uttered,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,turnoff,trampled,tramell,toads,timbuktu,throwback,thimble,tasteless,tarantula,tamale,takeovers,swish,supposing,streaking,stargher,stanzi,stabs,squeamish,splattered,spiritually,spilt,speciality,smacking,skywire,skips,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,shamelessly,serafine,sentimentality,seasick,schemer,scandalous,sainted,riedenschneider,rhyming,revel,retractor,retards,resurrect,remiss,reminiscing,remanded,reiben,regains,refuel,refresher,redoing,redheaded,reassured,rearranged,rapport,qumar,prowling,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,phlegm,perfected,pancreas,paley,ovary,outbursts,oppressed,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,millionth,migraines,midler,manicurist,mandelbaum,manageable,malfunctioned,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,komako,klute,kennel,justifying,irreversible,inventing,intergalactic,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,hyena,humperdinck,hubba,housework,hoffa,hither,hissy,hippy,hijacked,heparin,hellooo,hearth,hassles,hairstyle,hahahaha,hadda,guys'll,gutted,gulls,gritty,grievous,graft,gossamer,gooder,gambled,gadgets,fundamentals,frustrations,frolicking,frock,frilly,foreseen,footloose,fondly,flirtation,flinched,flatten,farthest,exposer,evading,escrow,empathize,embryos,embodiment,ellsberg,ebola,dulcinea,dreamin,drawbacks,doting,doose,doofy,disturbs,disorderly,disgusts,detox,denominator,demeanor,deliriously,decode,debauchery,croissant,cravings,cranked,coworkers,councilor,confuses,confiscate,confines,conduit,compress,combed,clouding,clamps,cinch,chinnery,celebratory,catalogs,carpenters,carnal,canin,bundys,bulldozer,buggers,bueller,brainy,booming,bookstores,bloodbath,bittersweet,bellhop,beeping,beanstalk,beady,baudelaire,bartenders,bargains,averted,armadillo,appreciating,appraised,antlers,aloof,allowances,alleyway,affleck,abject,zilch,youore,xanax,wrenching,wouldn,witted,wicca,whorehouse,whooo,whips,vouchers,victimized,vicodin,untested,unsolicited,unfocused,unfettered,unfeeling,unexplainable,understaffed,underbelly,tutorial,tryst,trampoline,towering,tirade,thieving,thang,swimmin,swayzak,suspecting,superstitions,stubbornness,streamers,strattman,stonewalling,stiffs,stacking,spout,splice,sonrisa,smarmy,slows,slicing,sisterly,shrill,shined,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,salieri,rustling,roxbury,rewire,revved,retriever,reputable,remodel,reins,reincarnation,rance,rafters,rackets,quail,pumbaa,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,pleasurable,pizzeria,pimps,penmanship,penchant,pelvis,overturn,overstepped,overcoat,ovens,outsmart,outed,ooohh,oncologist,omission,offhand,odour,nyazian,notarized,nobody'll,nightie,navel,nabbed,mystique,mover,mortician,morose,moratorium,mockingbird,mobsters,mingling,methinks,messengered,merde,masochist,martouf,martians,marinara,manray,majorly,magnifying,mackerel,lurid,lugging,lonnegan,loathsome,llantano,liberace,leprosy,latinos,lanterns,lamest,laferette,kraut,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,inconvenienced,inanimate,improbable,implode,hydrant,hustling,hustled,huevos,how'm,hooey,hoods,honcho,hinge,hijack,heimlich,hamunaptra,haladki,haiku,haggle,gutsy,grunting,grueling,gribbs,greevy,grandstanding,godparents,glows,glistening,gimmick,gaping,fraiser,formalities,foreigner,folders,foggy,fitty,fiends,fe'nos,favours,eyeing,extort,expedite,escalating,epinephrine,entitles,entice,eminence,eights,earthlings,eagerly,dunville,dugout,doublemeat,doling,dispensing,dispatcher,discoloration,diners,diddly,dictates,diazepam,derogatory,delights,defies,decoder,dealio,danson,cutthroat,crumbles,croissants,crematorium,craftsmanship,could'a,cordless,cools,conked,confine,concealing,complicates,communique,cockamamie,coasters,clobbered,clipping,clipboard,clemenza,cleanser,circumcision,chanukah,certainaly,cellmate,cancels,cadmium,buzzed,bumstead,bucko,browsing,broth,braver,boggling,bobbing,blurred,birkhead,benet,belvedere,bellies,begrudge,beckworth,banky,baldness,baggy,babysitters,aversion,astonished,assorted,appetites,angina,amiss,ambulances,alibis,airway,admires,adhesive,yoyou,xxxxxx,wreaked,wracking,woooo,wooing,wised,wilshire,wedgie,waging,violets,vincey,uplifting,untrustworthy,unmitigated,uneventful,undressing,underprivileged,unburden,umbilical,tweaking,turquoise,treachery,tosses,torching,toothpick,toasts,thickens,tereza,tenacious,teldar,taint,swill,sweatin,subtly,subdural,streep,stopwatch,stockholder,stillwater,stalkers,squished,squeegee,splinters,spliced,splat,spied,spackle,sophistication,snapshots,smite,sluggish,slithered,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,settin,sentinels,selfishly,scarcely,sangria,sanctum,sahjhan,rustle,roving,rousing,rosomorf,riddled,responsibly,renoir,remoray,remedial,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramelle,quivering,pyjamas,psychos,provocations,prouder,protestors,prodded,proctologist,primordial,pricks,prickly,precedents,pentangeli,pathetically,parka,parakeet,panicky,overthruster,outsmarted,orthopedic,oncoming,offing,nutritious,nuthouse,nourishment,nibbling,newlywed,narcissist,mutilation,mundane,mummies,mumble,mowed,morvern,mortem,mopes,molasses,misplace,miscommunication,miney,midlife,menacing,memorizing,massaging,masking,magnets,luxuries,lounging,lothario,liposuction,lidocaine,libbets,levitate,leeway,launcelot,larek,lackeys,kumbaya,kryptonite,knapsack,keyhole,katarangura,juiced,jakey,ironclad,invoice,intertwined,interlude,interferes,injure,infernal,indeedy,incur,incorrigible,incantations,impediment,igloo,hysterectomy,hounded,hollering,hindsight,heebie,havesham,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,firecrackers,figger,fetuses,fates,eyeliner,extremities,extradited,expires,exceedingly,evaporate,erupt,epileptic,entrails,emporium,egregious,eggshells,easing,duwayne,droll,dreyfuss,dovey,doubly,doozy,donkeys,donde,distrust,distressing,disintegrate,discreetly,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cushy,cupcakes,cuffed,croupier,croak,crapped,coursing,coolers,contaminate,consummated,construed,condos,concoction,compulsion,commish,coercion,clemency,clairvoyant,circulate,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,burdon,bullshitting,brewed,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleep,bleeder,blackouts,bisque,billboards,beatings,bayberry,bashed,bamboozled,balding,baklava,baffled,backfires,babak,awkwardness,attest,attachments,apologizes,anyhoo,antiquated,alcante,advisable,aahhh,aaahh,zatarc,yearbooks,wuddya,wringing,womanhood,witless,winging,whatsa,wetting,waterproof,wastin,vogelman,vocation,vindicated,vigilance,vicariously,venza,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,tweaked,turnips,trinkets,toughen,toting,topside,terrors,terrify,technologically,tarnish,tagliati,szpilman,surly,supple,summation,suckin,stepmom,squeaking,splashmore,souffle,solitaire,solicitation,solarium,smokers,slugged,slobbering,skylight,skimpy,sinuses,silenced,sideburns,shrinkage,shoddy,shhhhhh,shelled,shareef,shangri,seuss,serenade,scuffle,scoff,scanners,sauerkraut,sardines,sarcophagus,salvy,rusted,russells,rowboat,rolfsky,ringside,respectability,reparations,renegotiate,reminisce,reimburse,regimen,raincoat,quibble,puzzled,purposefully,pubic,proofing,prescribing,prelim,poisons,poaching,personalized,personable,peroxide,pentonville,payphone,payoffs,paleontology,overflowing,oompa,oddest,objecting,o'hare,o'daniel,notches,nobody'd,nightstand,neutralized,nervousness,nerdy,needlessly,naquadah,nappy,nantucket,nambla,mountaineer,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minivan,milligram,milkshakes,metamorphosis,medics,mattresses,mathesar,matchbook,matata,marys,malucci,magilla,lymphoma,lowers,lordy,linens,lindenmeyer,limelight,leapt,laxative,lather,lapel,lamppost,laguardia,kindling,kegger,kawalsky,juries,jokin,jesminder,interning,innermost,injun,infallible,industrious,indulgence,incinerator,impossibility,impart,illuminate,iguanas,hypnotic,hyped,hospitable,hoses,homemaker,hirschmuller,helpers,headset,guardianship,guapo,grubby,granola,granddaddy,goren,goblet,gluttony,globes,giorno,getter,geritol,gassed,gaggle,foxhole,fouled,foretold,floorboards,flippers,flaked,fireflies,feedings,fashionably,farragut,fallback,facials,exterminate,excites,everything'll,evenin,ethically,ensue,enema,empath,eluded,eloquently,eject,edema,dumpling,droppings,dolled,distasteful,disputing,displeasure,disdain,deterrent,dehydration,defied,decomposing,dawned,dailies,custodian,crusts,crucifix,crowning,crier,crept,craze,crawls,couldn,correcting,corkmaster,copperfield,cooties,contraption,consumes,conspire,consenting,consented,conquers,congeniality,complains,communicator,commendable,collide,coladas,colada,clout,clooney,classifieds,clammy,civility,cirrhosis,chink,catskills,carvers,carpool,carelessness,cardio,carbs,capades,butabi,busmalis,burping,burdens,bunks,buncha,bulldozers,browse,brockovich,breakthroughs,bravado,boogety,blossoms,blooming,bloodsucker,blight,betterton,betrayer,belittle,beeps,bawling,barts,bartending,bankbooks,babish,atropine,assertive,armbrust,anyanka,annoyance,anemic,anago,airwaves,aimlessly,aaargh,aaand,yoghurt,writhing,workable,winking,winded,widen,whooping,whiter,whatya,wazoo,voila,virile,vests,vestibule,versed,vanishes,urkel,uproot,unwarranted,unscheduled,unparalleled,undergrad,tweedle,turtleneck,turban,trickery,transponder,toyed,townhouse,thyself,thunderstorm,thinning,thawed,tether,technicalities,tau'ri,tarnished,taffeta,tacked,systolic,swerve,sweepstakes,swabs,suspenders,superwoman,sunsets,succulent,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,spicoli,sparing,soulless,sonnets,sockets,snatching,smothering,slush,sloman,slashing,sitters,simpleton,sighs,sidra,sickens,shunned,shrunken,showbiz,shopped,shimmering,shagging,semblance,segue,sedation,scuzzlebutt,scumbags,screwin,scoundrels,scarsdale,scabs,saucers,saintly,saddened,runaways,runaround,rheya,resenting,rehashing,rehabilitated,regrettable,refreshed,redial,reconnecting,ravenous,raping,rafting,quandary,pylea,putrid,puffing,psychopathic,prunes,probate,prayin,pomegranate,plummeting,planing,plagues,pinata,pithy,perversion,personals,perched,peeps,peckish,pavarotti,pajama,packin,pacifier,overstepping,okama,obstetrician,nutso,nuance,normalcy,nonnegotiable,nomak,ninny,nines,nicey,newsflash,neutered,nether,negligee,necrosis,navigating,narcissistic,mylie,muses,momento,moisturizer,moderation,misinformed,misconception,minnifield,mikkos,methodical,mebbe,meager,maybes,matchmaking,masry,markovic,malakai,luzhin,lusting,lumberjack,loopholes,loaning,lightening,leotard,launder,lamaze,kubla,kneeling,kibosh,jumpsuit,joliet,jogger,janover,jakovasaurs,irreparable,innocently,inigo,infomercial,inexplicable,indispensable,impregnated,impossibly,imitating,hunches,hummus,houmfort,hothead,hostiles,hooves,hooligans,homos,homie,hisself,heyyy,hesitant,hangout,handsomest,handouts,hairless,gwennie,guzzling,guinevere,grungy,goading,glaring,gavel,gardino,gangrene,fruitful,friendlier,freckle,freakish,forthright,forearm,footnote,flops,fixer,firecracker,finito,figgered,fezzik,fastened,farfetched,fanciful,familiarize,faire,fahrenheit,extravaganza,exploratory,explanatory,everglades,eunuch,estas,escapade,erasers,emptying,embarassing,dweeb,dutiful,dumplings,dries,drafty,dollhouse,dismissing,disgraced,discrepancies,disbelief,disagreeing,digestion,didnt,deviled,deviated,demerol,delectable,decaying,decadent,dears,dateless,d'algout,cultivating,cryto,crumpled,crumbled,cronies,crease,craves,cozying,corduroy,congratulated,confidante,compressions,complicating,compadre,coerce,classier,chums,chumash,chivalrous,chinpoko,charred,chafing,celibacy,carted,carryin,carpeting,carotid,cannibals,candor,butterscotch,busts,busier,bullcrap,buggin,brookside,brodski,brassiere,brainwash,brainiac,botrelle,bonbon,boatload,blimey,blaring,blackness,bipartisan,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,bedpans,bassinet,basking,barzini,barnyard,barfed,backups,audited,asinine,asalaam,arouse,applejack,annoys,anchovies,ampule,alameida,aggravate,adage,accomplices,yokel,y'ever,wringer,witwer,withdrawals,windward,willfully,whorfin,whimsical,whimpering,weddin,weathered,warmest,wanton,volant,visceral,vindication,veggies,urinate,uproar,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,turnin,tuatha,tropez,trellis,toppings,tootin,toodle,tinkering,thrives,thespis,theatrics,thatherton,tempers,tavington,tartar,tampon,swelled,sutures,sustenance,sunflowers,sublet,stubbins,strutting,strewn,stowaway,stoic,sternin,stabilizing,spiraling,spinster,speedometer,speakeasy,soooo,soiled,sneakin,smithereens,smelt,smacks,slaughterhouse,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,shouts,shorted,shoelace,sheeit,shards,shackled,sequestered,selmak,seduces,seclusion,seamstress,seabeas,scoops,scooped,scavenger,satch,s'more,rudeness,romancing,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,repaid,renewing,relaxes,rekindle,regrettably,regenerate,reels,reciting,reappear,readin,ratting,rapes,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,procrastinating,proactive,priss,postmortem,pompoms,poise,pickings,perfectionist,peretti,people'll,pecking,patrolman,paralegal,paragraphs,paparazzi,pankot,pampering,overstep,overpower,outweigh,omnipotent,odious,nuwanda,nurtured,newsroom,neeson,needlepoint,necklaces,neato,muggers,muffler,mousy,mourned,mosey,mopey,mongolians,moldy,misinterpret,minibar,microfilm,mendola,mended,melissande,masturbating,masbath,manipulates,maimed,mailboxes,magnetism,m'lord,m'honey,lymph,lunge,lovelier,lefferts,leezak,ledgers,larraby,laloosh,kundun,kozinski,knockoff,kissin,kiosk,kennedys,kellman,karlo,kaleidoscope,jeffy,jaywalking,instructing,infraction,informer,infarction,impulsively,impressing,impersonated,impeach,idiocy,hyperbole,hurray,humped,huhuh,hsing,hordes,hoodlums,honky,hitchhiker,hideously,heaving,heathcliff,headgear,headboard,hazing,harem,handprint,hairspray,gutiurrez,goosebumps,gondola,glitches,gasping,frolic,freeways,frayed,fortitude,forgetful,forefathers,fonder,foiled,foaming,flossing,flailing,fitzgeralds,firehouse,finders,fiftieth,fellah,fawning,farquaad,faraway,fancied,extremists,exorcist,exhale,ethros,entrust,ennui,energized,encephalitis,embezzling,elster,elixir,electrolytes,duplex,dryers,drexl,dredging,drawback,don'ts,dobisch,divorcee,disrespected,disprove,disobeying,disinfectant,dingy,digress,dieting,dictating,devoured,devise,detonators,desist,deserter,derriere,deron,deceptive,debilitating,deathwok,daffodils,curtsy,cursory,cuppa,cumin,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,contentment,consensual,compost,cluett,cleverly,cleansed,cleanliness,chopec,chomp,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,catchin,caress,camcorder,calorie,cackling,bystanders,buttoned,buttering,butted,buries,burgel,buffoon,brogna,bragged,boutros,bogeyman,blurting,blurb,blowup,bloodhound,blissful,birthmark,bigot,bestest,belted,belligerent,beggin,befall,beeswax,beatnik,beaming,barricade,baggoli,badness,awoke,artsy,artful,aroun,armpits,arming,annihilate,anise,angiogram,anaesthetic,amorous,ambiance,alligators,adoration,admittance,adama,abydos,zonked,zhivago,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,whoopie,wholeheartedly,whimper,which'll,wheelchairs,what'ya,warranted,wallop,wading,wacked,virginal,vermouth,vermeil,verger,ventriss,veneer,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unlocks,ungodly,undue,uncooperative,uncontrollably,unbeatable,twitchy,tumbler,truest,triumphs,triplicate,tribbey,tortures,tongaree,tightening,thorazine,theres,testifies,teenaged,tearful,taxing,taldor,syllabus,swoops,swingin,suspending,sunburn,stuttering,stupor,strides,strategize,strangulation,stooped,stipulation,stingy,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,spasms,spaniard,softener,sodding,soapbox,smoldering,smithbauer,skittish,sifting,sickest,sicilians,shuffling,shrivel,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schenkman,sawing,savin,satine,sapiens,salvaging,salmonella,sacrilege,rumpus,ruffle,roughing,rotted,rondall,ridding,rickshaw,rialto,rhinestone,restrooms,reroute,requisite,repress,rednecks,redeeming,rayed,ravell,raked,raincheck,raffi,racked,pushin,profess,prodding,procure,presuming,preppy,prednisone,potted,posttraumatic,poorhouse,podiatrist,plowed,pledging,playroom,plait,placate,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,pellets,peeved,peerless,payable,pauses,pathologist,pagliacci,overwrought,overreaction,overqualified,overheated,outcasts,otherworldly,opinionated,oodles,oftentimes,occured,obstinate,nutritionist,numbness,nubile,nooooooo,nobodies,nepotism,neanderthals,mushu,mucus,mothering,mothballs,monogrammed,molesting,misspoke,misspelled,misconstrued,miscalculated,minimums,mince,mildew,mighta,middleman,mementos,mellowed,mayol,mauled,massaged,marmalade,mardi,makings,lundegaard,lovingly,loudest,lotto,loosing,loompa,looming,longs,loathes,littlest,littering,lifelike,legalities,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,karras,jungles,jockeys,iranoff,invoices,invigorating,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infestation,individuality,indeterminate,incomprehensible,inadequacy,impropriety,importer,imaginations,illuminating,ignite,hysterics,hypodermic,hyperventilate,hyperactive,humoring,honeymooning,honed,hoist,hoarding,hitching,hiker,hightail,hemoglobin,hell'd,heinie,growin,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabbing,futon,fulla,frightful,freshener,fortuitous,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,feverish,favell,fattest,fattening,fallow,extraordinaire,evacuating,errant,envied,enchant,enamored,egocentric,dussander,dunwitty,dullest,dropout,dredged,dorsia,doornail,donot,dongs,dogged,dodgy,ditty,dishonorable,discriminating,discontinue,dings,dilly,dictation,dialysis,delly,delightfully,daryll,dandruff,cruddy,croquet,cringe,crimp,credo,crackling,courtside,counteroffer,counterfeiting,corrupting,copping,conveyor,contusions,contusion,conspirator,consoling,connoisseur,confetti,composure,compel,colic,coddle,cocksuckers,coattails,cloned,claustrophobia,clamoring,churn,chugga,chirping,chasin,chapped,chalkboard,centimeter,caymans,catheter,casings,caprica,capelli,cannolis,cannoli,camogli,camembert,butchers,butchered,busboys,bureaucrats,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,biocyte,betrays,bested,beryllium,beheading,beggar,begbie,beamed,bastille,barstool,barricades,barbecues,barbecued,bandwagon,backfiring,bacarra,avenged,autopsies,aunties,associating,artichoke,arrowhead,appendage,apostrophe,antacid,ansel,annul,amuses,amped,amicable,amberg,alluring,adversaries,admirers,adlai,acupuncture,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,wrinkly,wracked,withered,winks,windmills,whopping,wendle,weigart,waterworks,waterbed,watchful,wantin,wagging,waaah,vying,ventricle,varnish,vacuumed,unreachable,unprovoked,unmistakable,unfriendly,unfolding,underpaid,uncuff,unappealing,unabomber,typhoid,tuxedos,tushie,turds,tumnus,troubadour,trinium,treaters,treads,transpired,transgression,tought,thready,thins,thinners,techs,teary,tattaglia,tassels,tarzana,tanking,tablecloths,synchronize,symptomatic,sycophant,swimmingly,sweatshop,surfboard,superpowers,sunroom,sunblock,sugarplum,stupidly,strumpet,strapless,stooping,stools,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spectacularly,sorbet,socked,sociable,snubbed,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,slouch,slingshot,slaved,skimmed,sisterhood,silliest,sidarthur,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scagnetti,sawchuk,saugus,sasquatch,sandbag,saltines,s'pose,roston,rostle,riveting,ristle,rifling,revulsion,reverently,retrograde,restful,resents,reptilian,reorganize,renovating,reiterate,reinvent,reinmar,reibers,reechard,recuse,reconciling,recognizance,reclaiming,recitation,recieved,rebate,reacquainted,rascals,railly,quintuplets,quahog,pygmies,puzzling,punctuality,prosthetic,proms,probie,preys,preserver,preppie,poachers,plummet,plumbers,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,physique,pessimistic,persecute,perjure,percentile,pentothal,pensky,penises,peini,pazzi,pastels,parlour,paperweight,pamper,pained,overwhelm,overalls,outrank,outpouring,outhouse,outage,ouija,obstructed,obsessions,obeying,obese,o'riley,o'higgins,nosebleeds,norad,noooooooo,nononono,nonchalant,nippy,neurosis,nekhorvich,necronomicon,naquada,n'est,mystik,mystified,mumps,muddle,mothership,moped,monumentally,monogamous,mondesi,misogynistic,misinterpreting,mindlock,mending,megaphone,meeny,medicating,meanie,masseur,markstrom,marklars,margueritas,manifesting,maharajah,lukewarm,loveliest,loran,lizardo,liquored,lipped,lingers,limey,lemkin,leisurely,lathe,latched,lapping,ladle,krevlorneswath,kosygin,khakis,kenaru,keats,kaitlan,julliard,jollies,jaundice,jargon,jackals,invisibility,insipid,inflamed,inferiority,inexperience,incinerated,incinerate,incendiary,incan,inbred,implicating,impersonator,hunks,horsing,hooded,hippopotamus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,headstone,hayloft,harbucks,handguns,hallucinate,haldol,haggling,gynaecologist,gulag,guilder,guaranteeing,groundskeeper,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,gentlemanly,gelatin,gawking,ganged,fukes,fromby,frenchmen,foursome,forsley,forbids,footwork,foothold,floater,flinging,flicking,fittest,fistfight,fireballs,fillings,fiddling,fennyman,felonious,felonies,feces,favoritism,fatten,fanatics,faceman,excusing,excepted,entwined,entree,ensconced,eladio,ehrlichman,easterland,dueling,dribbling,drape,downtrodden,doused,dosed,dorleen,dokie,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,diperna,dined,diligent,dicaprio,depress,decoded,debatable,dealey,darsh,damsels,damning,dad'll,d'oeuvre,curlers,curie,cubed,crikey,crepes,countrymen,cornfield,coppers,copilot,copier,cooing,conspiracies,consigliere,condoning,commoner,commies,combust,comas,colds,clawed,clamped,choosy,chomping,chimps,chigorin,chianti,cheep,checkups,cheaters,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,candlesticks,canasta,cain't,burro,burnin,bunking,bumming,bullwinkle,brummel,brooms,brews,breathin,braslow,bracing,botulism,boorish,bloodless,blayne,blatantly,blankie,bedbugs,becuase,barmaid,bared,baracus,banal,bakes,backpacks,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,arnon,apprehension,applauding,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,alerting,afterthought,affront,affirm,actuality,abysmal,absentee,yeller,yakushova,wuzzy,wriggle,worrier,woogyman,womanizer,windpipe,windbag,willin,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,waaay,vouched,viznick,ventriloquist,vendettas,veils,vayhue,vamanos,vadimus,upstage,uppity,unsaid,unlocking,unintentionally,undetected,undecided,uncaring,unbearably,tween,tryout,trotting,trini,trimmings,trickier,treatin,treadstone,trashcan,transcendent,tramps,townsfolk,torturous,torrid,toothpicks,tolerable,tireless,tiptoeing,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,these'll,thatos,testicular,teriyaki,tenors,tenacity,tellers,telemetry,tarragon,switchblade,swicker,swells,sweatshirts,swatches,surging,supremely,sump'n,succumb,subsidize,stumbles,stuffs,stoppin,stipulate,stenographer,steamroll,stasis,stagger,squandered,splint,splendidly,splashy,splashing,specter,sorcerers,somewheres,somber,snuggled,snowmobile,sniffed,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,siree,siphoning,singed,sincerest,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,sheetrock,shawshank,shamu,sha're,servitude,sequins,seascape,scrapings,scoured,scorching,sandpaper,saluting,salud,ruffled,roughnecks,rougher,rosslyn,rosses,roost,roomy,romping,revolutionize,reprimanded,refute,refrigerated,reeled,redundancies,rectal,recklessly,receding,reassignment,reapers,readout,ration,raring,ramblings,raccoons,quarantined,purging,punters,psychically,premarital,pregnancies,predisposed,precautionary,pollute,podunk,plums,plaything,pixilated,pitting,piranhas,pieced,piddles,pickled,photogenic,phosphorous,pffft,pestilence,pessimist,perspiration,perps,penticoff,passageways,pardons,panics,pancamo,paleontologist,overwhelms,overstating,overpaid,overdid,outlive,orthodontist,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,nymph,novocaine,noooooooooo,nipping,nilly,nightstick,negate,neatness,natured,narcotic,narcissism,namun,nakatomi,murky,muchacho,mouthwash,motzah,morsel,morph,morlocks,mooch,moloch,molest,mohra,modus,modicum,mockolate,misdemeanors,miscalculation,middies,meringue,mercilessly,meditating,mayakovsky,maximillian,marlee,markovski,maniacal,maneuvered,magnificence,maddening,lutze,lunged,lovelies,lorry,loosening,lookee,littered,lilac,lightened,laces,kurzon,kurtzweil,kind've,kimono,kenji,kembu,keanu,kazuo,jonesing,jilted,jiggling,jewelers,jewbilee,jacqnoud,jacksons,ivories,insurmountable,innocuous,innkeeper,infantery,indulged,indescribable,incoherent,impervious,impertinent,imperfections,hunnert,huffy,horsies,horseradish,hollowed,hogwash,hockley,hissing,hiromitsu,hidin,hereafter,helpmann,hehehe,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,grossly,grope,grocer,grits,gripping,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,gairwyn,futterman,futility,fumigated,fruitless,friendless,freon,foregone,forego,floored,flighty,flapjacks,fizzled,ficus,festering,farbman,fabricate,eyghon,extricate,exalted,eventful,esophagus,enterprising,entail,endor,emphatically,embarrasses,electroshock,easel,duffle,drumsticks,dissection,dissected,disposing,disparaging,disorientation,disintegrated,disarming,devoting,dessaline,deprecating,deplorable,delve,degenerative,deduct,decomposed,deathly,dearie,daunting,dankova,cyclotron,cyberspace,cutbacks,culpable,cuddled,crumpets,cruelly,crouching,cranium,cramming,cowering,couric,cordesh,conversational,conclusively,clung,clotting,cleanest,chipping,chimpanzee,chests,cheapen,chainsaws,censure,catapult,caravaggio,carats,captivating,calrissian,butlers,busybody,bussing,bunion,bulimic,budging,brung,browbeat,brokenhearted,brecher,breakdowns,bracebridge,boning,blowhard,blisters,blackboard,bigotry,bialy,bhamra,bended,begat,battering,baste,basquiat,barricaded,barometer,balled,baited,badenweiler,backhand,ascenscion,argumentative,appendicitis,apparition,anxiously,antagonistic,angora,anacott,amniotic,ambience,alonna,aleck,akashic,ageless,abouts,aawwww,aaaaarrrrrrggghhh,aaaaaa,zendi,yuppies,yodel,y'hear,wrangle,wombosi,wittle,withstanding,wisecracks,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weakling,warfarin,waponis,wampum,wadn't,vorash,vizzini,virtucon,viridiana,veracity,ventilated,varicose,varcon,vandalized,vamos,vamoose,vaccinated,vacationing,usted,urinal,uppers,unwittingly,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unbreakable,unadvisedly,udall,tynacorp,tuxes,tussle,turati,tunic,tsavo,trussed,troublemakers,trollop,tremors,transsexual,transfusions,toothbrushes,toned,toddlers,tinted,tightened,thundering,thorpey,this'd,thespian,thaddius,tenuous,tenths,tenement,telethon,teleprompter,teaspoon,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,talcum,tacks,swivel,swaying,superpower,summarize,sumbitch,sultry,suburbia,styrofoam,stylings,strolls,strobe,stockpile,stewardesses,sterilized,sterilize,stealin,stakeouts,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,sparklers,spareribs,sowing,sororities,sonovabitch,solicit,softy,softness,softening,snuggling,snatchers,snarling,snarky,snacking,smears,slumped,slowest,slithering,sleazebag,slayed,slaughtering,skidded,skated,sivapathasundaram,sissies,silliness,silences,sidecar,sicced,shylock,shtick,shrugged,shriek,shoves,should'a,shortcake,shockingly,shirking,shaves,shatner,sharpener,shapely,shafted,sexless,septum,selflessness,seabea,scuff,screwball,scoping,scooch,scolding,schnitzel,schemed,scalper,santy,sankara,sanest,salesperson,sakulos,safehouse,sabers,runes,rumblings,rumbling,ruijven,ringers,righto,rhinestones,retrieving,reneging,remodelling,relentlessly,regurgitate,refills,reeking,reclusive,recklessness,recanted,ranchers,rafer,quaking,quacks,prophesied,propensity,profusely,problema,prided,prays,postmark,popsicles,poodles,pollyanna,polaroids,pokes,poconos,pocketful,plunging,plugging,pleeease,platters,pitied,pinetti,piercings,phooey,phonies,pestering,periscope,pentagram,pelts,patronized,paramour,paralyze,parachutes,pales,paella,paducci,owatta,overdone,overcrowded,overcompensating,ostracized,ordinate,optometrist,operandi,omens,okayed,oedipal,nuttier,nuptial,nunheim,noxious,nourish,notepad,nitroglycerin,nibblet,neuroses,nanosecond,nabbit,mythic,munchkins,multimillion,mulroney,mucous,muchas,mountaintop,morlin,mongorians,moneybags,mom'll,molto,mixup,misgivings,mindset,michalchuk,mesmerized,merman,mensa,meaty,mbwun,materialize,materialistic,masterminded,marginally,mapuhe,malfunctioning,magnify,macnamara,macinerney,machinations,macadamia,lysol,lurks,lovelorn,lopsided,locator,litback,litany,linea,limousines,limes,lighters,liebkind,levity,levelheaded,letterhead,lesabre,leron,lepers,lefts,leftenant,laziness,layaway,laughlan,lascivious,laryngitis,lapsed,landok,laminated,kurten,kobol,knucklehead,knowed,knotted,kirkeby,kinsa,karnovsky,jolla,jimson,jettison,jeric,jawed,jankis,janitors,jango,jalopy,jailbreak,jackers,jackasses,invalidate,intercepting,intercede,insinuations,infertile,impetuous,impaled,immerse,immaterial,imbeciles,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hurtling,hurried,hunchback,hullo,horsting,hoooo,homeboys,hollandaise,hoity,hijinks,hesitates,herrero,herndorff,helplessly,heeyy,heathen,hearin,headband,harrassment,harpies,halstrom,hahahahaha,hacer,grumbling,grimlocks,grift,greets,grandmothers,grander,grafts,gordievsky,gondorff,godorsky,glscripts,gaudy,gardeners,gainful,fuses,fukienese,frizzy,freshness,freshening,fraught,frantically,foxbooks,fortieth,forked,foibles,flunkies,fleece,flatbed,fisted,firefight,fingerpaint,filibuster,fhloston,fenceline,femur,fatigues,fanucci,fantastically,familiars,falafel,fabulously,eyesore,expedient,ewwww,eviscerated,erogenous,epidural,enchante,embarassed,embarass,embalming,elude,elspeth,electrocute,eigth,eggshell,echinacea,eases,earpiece,earlobe,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,dorma,doily,divvy,diverting,dissuade,disrespecting,displace,disorganized,disgustingly,discord,disapproving,diligence,didja,diced,devouring,detach,destructing,desolate,demerits,delude,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cussing,cryss,cripes,cretins,crackerjack,cower,coveting,couriers,countermission,cotswolds,convertibles,conversationalist,consorting,consoled,consarn,confides,confidentially,commited,commiserate,comme,comforter,comeuppance,combative,comanches,colosseum,colling,coexist,coaxing,cliffside,chutes,chucked,chokes,childlike,childhoods,chickening,chenowith,charmingly,changin,catsup,captioning,capsize,cappucino,capiche,candlewell,cakewalk,cagey,caddie,buxley,bumbling,bulky,buggered,brussel,brunettes,brumby,brotha,bronck,brisket,bridegroom,braided,bovary,bookkeeper,bluster,bloodline,blissfully,blase,billionaires,bicker,berrisford,bereft,berating,berate,bendy,belive,belated,beikoku,beens,bedspread,bawdy,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,awkwardly,auras,attuned,atheists,astaire,assuredly,arrivederci,appetit,appendectomy,apologetic,antihistamine,anesthesiologist,amulets,albie,alarmist,aiight,adstream,admirably,acquaint,abound,abominable,aaaaaaah,zekes,zatunica,wussy,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whisker,whims,whatiya,whadya,weirdly,weenies,waunt,washout,wanto,waning,victimless,verdad,veranda,vandaley,vancomycin,valise,vaguest,upshot,unzip,unwashed,untrained,unstuck,unprincipled,unmentionables,unjustly,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,tyndareus,turncoat,turlock,tulle,tryouts,trouper,triplette,trepkos,tremor,treeger,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,thumbprint,thankless,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tarred,tambourine,talentless,swooped,switcheroo,swirly,sweatpants,sunstroke,suitors,sugarcoat,subways,subterfuge,subservient,subletting,stunningly,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stifle,stealer,squeezes,squatter,squarely,sprouted,spool,spindly,speedos,soups,soundly,soulmates,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,skulk,skivvies,skewered,skewer,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,sharpened,shapeshifter,shadowing,shadoe,selectman,sefelt,seared,scrounging,scribbling,scooping,scintillating,schmoozing,scallops,sapphires,sanitarium,sanded,safes,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rewrote,revamp,retaliatory,reprimand,replicators,replaceable,remedied,relinquishing,rejoicing,reincarnated,reimbursed,reevaluate,redid,redefine,recreating,reconnected,rebelling,reassign,rearview,rayne,ravings,ratso,rambunctious,radiologist,quiver,quiero,queef,qualms,pyrotechnics,pulsating,psychosomatic,proverb,promiscuous,profanity,prioritize,preying,predisposition,precocious,precludes,prattling,prankster,povich,potting,postpartum,porridge,polluting,plowing,pistachio,pissin,pickpocket,physicals,peruse,pertains,personified,personalize,perjured,perfecting,pepys,pepperdine,pembry,peering,peels,pedophile,patties,passkey,paratrooper,paraphernalia,paralyzing,pandering,paltry,palpable,pagers,pachyderm,overstay,overestimated,overbite,outwit,outgrow,outbid,ooops,oomph,oohhh,oldie,obliterate,objectionable,nygma,notting,noches,nitty,nighters,newsstands,newborns,neurosurgery,nauseated,nastiest,narcolepsy,mutilate,muscled,murmur,mulva,mulling,mukada,muffled,morgues,moonbeams,monogamy,molester,molestation,molars,moans,misprint,mismatched,mirth,mindful,mimosas,millander,mescaline,menstrual,menage,mellowing,medevac,meddlesome,matey,manicures,malevolent,madmen,macaroons,lydell,lycra,lunchroom,lunching,lozenges,looped,litigious,liquidate,linoleum,lingk,limitless,limber,lilacs,ligature,liftoff,lemmiwinks,leggo,learnin,lazarre,lawyered,lactose,knelt,kenosha,kemosabe,jussy,junky,jordy,jimmies,jeriko,jakovasaur,issacs,isabela,irresponsibility,ironed,intoxication,insinuated,inherits,ingest,ingenue,inflexible,inflame,inevitability,inedible,inducement,indignant,indictments,indefensible,incomparable,incommunicado,improvising,impounded,illogical,ignoramus,hydrochloric,hydrate,hungover,humorless,humiliations,hugest,hoverdrone,hovel,hmmph,hitchhike,hibernating,henchman,helloooo,heirlooms,heartsick,headdress,hatches,harebrained,hapless,hanen,handsomer,hallows,habitual,guten,gummy,guiltier,guidebook,gstaad,gruff,griss,grieved,grata,gorignak,goosed,goofed,glowed,glitz,glimpses,glancing,gilmores,gianelli,geraniums,garroway,gangbusters,gamblers,galls,fuddy,frumpy,frowning,frothy,fro'tak,frere,fragrances,forgettin,follicles,flowery,flophouse,floatin,flirts,flings,flatfoot,fingerprinting,fingerprinted,fingering,finald,fillet,fianc,femoral,federales,fawkes,fascinates,farfel,fambly,falsified,fabricating,exterminators,expectant,excusez,excrement,excercises,evian,etins,esophageal,equivalency,equate,equalizer,entrees,enquire,endearment,empathetic,emailed,eggroll,earmuffs,dyslexic,duper,duesouth,drunker,druggie,dreadfully,dramatics,dragline,downplay,downers,dominatrix,doers,docket,docile,diversify,distracts,disloyalty,disinterested,discharging,disagreeable,dirtier,dinghy,dimwitted,dimoxinil,dimmy,diatribe,devising,deviate,detriment,desertion,depressants,depravity,deniability,delinquents,defiled,deepcore,deductive,decimate,deadbolt,dauthuille,dastardly,daiquiris,daggers,dachau,curiouser,curdled,cucamonga,cruller,cruces,crosswalk,crinkle,crescendo,cremate,counseled,couches,cornea,corday,copernicus,contrition,contemptible,constipated,conjoined,confounded,condescend,concoct,conch,compensating,committment,commandeered,comely,coddled,cockfight,cluttered,clunky,clownfish,cloaked,clenched,cleanin,civilised,circumcised,cimmeria,cilantro,chutzpah,chucking,chiseled,chicka,chattering,cervix,carrey,carpal,carnations,cappuccinos,candied,calluses,calisthenics,bushy,burners,budington,buchanans,brimming,braids,boycotting,bouncers,botticelli,botherin,bookkeeping,bogyman,bogged,bloodthirsty,blintzes,blanky,binturong,billable,bigboote,bewildered,betas,bequeath,behoove,befriend,bedpost,bedded,baudelaires,barreled,barboni,barbeque,bangin,baltus,bailout,backstabber,baccarat,awning,augie,arguillo,archway,apricots,apologising,annyong,anchorman,amenable,amazement,allspice,alannis,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,adrenal,acidosis,achoo,accessorizing,accentuate,abrasions,abductor,aaaahhh,aaaaaaaa,aaaaaaa,zeroing,zelner,zeldy,yevgeny,yeska,yellows,yeesh,yeahh,yamuri,wouldn't've,workmanship,woodsman,winnin,winked,wildness,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,westerburg,weeding,watermelons,washboard,waltzes,wafting,voulez,voluptuous,vitone,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,vasculitis,valets,upholstered,unwavering,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unglued,unequivocal,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,tugging,triads,trespasses,treehorn,traviata,trappers,transplants,trannie,tramping,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,thruster,thoughtfulness,thornwood,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surges,supermodels,superhighway,sunup,sun'll,sulfa,sugarless,sufficed,subside,strolled,stringy,strengthens,straightest,straightens,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stepladder,stepbrother,steers,steelheads,steakhouse,stathis,stankylecartmankennymr,standoffish,stalwart,squirted,spritz,sprig,sprawl,spousal,sphincter,spenders,spearmint,spatter,spangled,southey,soured,sonuvabitch,somethng,snuffed,sniffs,smokescreen,smilin,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skanks,sixed,siphoned,siphon,simpering,sigfried,sidearm,siddons,sickie,shuteye,shuffleboard,shrubberies,shrouded,showmanship,shouldn't've,shoplift,shiatsu,sentries,sentance,sensuality,seething,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schoolers,schmucks,scepters,scaly,scalps,scaffolding,sauces,sartorius,santen,salivating,sainthood,saget,saddens,rygalski,rusting,ruination,rueland,rudabaga,rottweiler,roofies,romantics,rollerblading,roldy,roadshow,rickets,rible,rheza,revisiting,retentive,resurface,restores,respite,resounding,resorting,resists,repulse,repressing,repaying,reneged,refunds,rediscover,redecorated,reconstructive,recommitted,recollect,receptacle,reassess,reanimation,realtors,razinin,rationalization,ratatouille,rashum,rasczak,rancheros,rampler,quizzing,quips,quartered,purring,pummeling,puede,proximo,prospectus,pronouncing,prolonging,procreation,proclamations,principled,prides,preoccupation,prego,precog,prattle,pounced,potshots,potpourri,porque,pomegranates,polenta,plying,pluie,plesac,playmates,plantains,pillowcase,piddle,pickers,photocopied,philistine,perpetuate,perpetually,perilous,pawned,pausing,pauper,parter,parlez,parlay,pally,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,outweighs,outings,ottos,orrin,orifice,orangutan,oopsy,ooooooooh,oooooo,ooohhhh,ocular,obstruct,obscenely,o'dwyer,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,nestled,nearsighted,ne'er,nastier,narco,nakedness,muted,mummified,mudda,mozzarella,moxica,motivator,motility,mothafucka,mortmain,mortgaged,mores,mongers,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mineshaft,millaney,microwaves,metzenbaum,mccovey,masterful,masochistic,marliston,marijawana,manya,mantumbi,malarkey,magnifique,madrona,madox,machida,m'hidi,lullabies,loveliness,lotions,looka,lompoc,litterbug,litigator,lithe,liquorice,linds,limericks,lightbulb,lewises,letch,lemec,layover,lavatory,laurels,lateness,laparotomy,laboring,kuato,kroff,krispy,krauts,knuckleheads,kitschy,kippers,kimbrow,keypad,keepsake,kebab,karloff,junket,judgemental,jointed,jezzie,jetting,jeeze,jeeter,jeesus,jeebs,janeane,jails,jackhammer,ixnay,irritates,irritability,irrevocable,irrefutable,irked,invoking,intricacies,interferon,intents,insubordinate,instructive,instinctive,inquisitive,inlay,injuns,inebriated,indignity,indecisive,incisors,incacha,inalienable,impresses,impregnate,impregnable,implosion,idolizes,hypothyroidism,hypoglycemic,huseni,humvee,huddling,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hikita,hikes,hightailed,hieroglyphics,heretofore,herbalist,hehey,hedriks,heartstrings,headmistress,headlight,hardheaded,happend,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,groan,greenbacks,gravedigger,grating,grasshoppers,grandiose,grandest,grafted,gooood,goood,gooks,godsakes,goaded,glamorama,giveth,gingham,ghostbusters,germane,georgy,gazzo,gazelles,gargle,garbled,galgenstein,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frighteningly,freebies,freakishly,forewarned,foreclose,forearms,fordson,fonics,flushes,flitting,flemmer,flabby,fishbowl,fidgeting,fevers,feigning,faxing,fatigued,fathoms,fatherless,fancier,fanatical,factored,eyelid,eyeglasses,expresso,expletive,expectin,excruciatingly,evidentiary,ever'thing,eurotrash,eubie,estrangement,erlich,epitome,entrap,enclose,emphysema,embers,emasculating,eighths,eardrum,dyslexia,duplicitous,dumpty,dumbledore,dufus,duddy,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,douggie,douchebag,dostoyevsky,doodling,don'tcha,domineering,doings,dogcatcher,doctoring,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,disavowed,dippy,diorama,dimmed,dilate,digitalis,diggory,dicing,diagnosing,devola,desolation,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,decrepit,deciphered,dawdle,dauphine,daresay,dangles,dampen,damndest,cucumbers,cucaracha,cryogenically,croaks,croaked,criticise,crisper,creepiest,creams,crackle,crackin,covertly,counterintelligence,corrosive,cordially,cops'll,convulsions,convoluted,conversing,conga,confrontational,confab,condolence,condiments,complicit,compiegne,commodus,comings,cometh,collusion,collared,cockeyed,clobber,clemonds,clarithromycin,cienega,christmasy,christmassy,chloroform,chippie,chested,cheeco,checklist,chauvinist,chandlers,chambermaid,chakras,cellophane,caveat,cataloguing,cartmanland,carples,carny,carded,caramels,cappy,caped,canvassing,callback,calibrated,calamine,buttermilk,butterfingers,bunsen,bulimia,bukatari,buildin,budged,brobich,bringer,brendell,brawling,bratty,braised,boyish,boundless,botch,boosh,bookies,bonbons,bodes,bobunk,bluntly,blossoming,bloomers,bloodstains,bloodhounds,blech,biter,biometric,bioethics,bijan,bigoted,bicep,bereaved,bellowing,belching,beholden,beached,batmobile,barcodes,barch,barbecuing,bandanna,backwater,backtrack,backdraft,augustino,atrophy,atrocity,atley,atchoo,asthmatic,assoc,armchair,arachnids,aptly,appetizing,antisocial,antagonizing,anorexia,anini,andersons,anagram,amputation,alleluia,airlock,aimless,agonized,agitate,aggravating,aerosol,acing,accomplishing,accidently,abuser,abstain,abnormally,aberration,aaaaahh,zlotys,zesty,zerzura,zapruder,zantopia,yelburton,yeess,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolchek,wishin,wiseguys,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,wherefore,wharvey,welts,wellstone,wedges,wavered,watchit,wastebasket,wango,waken,waitressed,wacquiem,vrykolaka,voula,vitally,visualizing,viciousness,vespers,vertes,verily,vegetarians,vater,vaporize,vannacutt,vallens,ussher,urinating,upping,unwitting,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undeserving,undermines,undergarments,unconcerned,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tribulations,tremont,tremoille,transcends,trafficker,touchin,tomfoolery,tinkered,tinfoil,tightrope,thousan,thoracotomy,thesaurus,thawing,thatta,tessio,temps,taxidermist,tator,tachycardia,t'akaya,swelco,sweetbreads,swatting,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,streetwalker,strategizing,straining,straightaway,stoli,stiffer,stickup,stens,steamroller,steadwell,steadfast,stateroom,stans,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spirals,speedboat,spectacles,speakerphone,southglen,souse,soundproof,soothsayer,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,snifter,sniffin,snickering,sneer,snarl,smila,slinking,slanted,slanderous,slammin,skimp,skilosh,siteid,sirloin,singe,sighing,sidekicks,sicken,showstopper,shoplifter,shimokawa,sherborne,shavadai,sharpshooters,sharking,shagged,shaddup,senorita,sesterces,sensuous,seahaven,scullery,scorcher,schotzie,schnoz,schmooze,schlep,schizo,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandstorm,sandalwood,salutations,sagman,s'okay,rsvp'd,rousted,rootin,romper,romanovs,rollercoaster,rolfie,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revoking,reverts,retrofit,retort,retinas,respirations,reprobate,replaying,repaint,renquist,renege,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,recriminations,rechecked,reassemble,rears,reamed,reacquaint,rayanne,ravish,rathole,raspail,rarest,rapists,rants,racketeer,quittin,quitters,quintessential,queremos,quellek,quelle,quasimodo,pyromaniac,puttanesca,puritanical,purer,puree,pungent,pummel,puedo,psychotherapist,prosecutorial,prosciutto,propositioning,procrastination,probationary,primping,preventative,prevails,preservatives,preachy,praetorians,practicality,powders,potus,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plummeted,plucking,plimpton,playthings,plastique,plainclothes,pinpointed,pinkus,pinks,pigskin,piffle,pictionary,piccata,photocopy,phobias,perignon,perfumes,pecks,pecked,patently,passable,parasailing,paramus,papier,paintbrush,pacer,paaiint,overtures,overthink,overstayed,overrule,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,orchestrate,oppress,opposable,oooohh,oomupwah,okeydokey,okaaay,ohashi,of'em,obscenities,oakie,o'gar,nurection,nostradamus,norther,norcom,nooch,nonsensical,nipped,nimbala,nervously,neckline,nebbleman,narwhal,nametag,n'n't,mycenae,muzak,muumuu,mumbled,mulvehill,muggings,muffet,mouthy,motivates,motaba,moocher,mongi,moley,moisturize,mohair,mocky,mmkay,mistuh,missis,misdeeds,mincemeat,miggs,miffed,methadone,messieur,menopausal,menagerie,mcgillicuddy,mayflowers,matrimonial,matick,masai,marzipan,maplewood,manzelle,mannequins,manhole,manhandle,malfunctions,madwoman,machiavelli,lynley,lynched,lurconis,lujack,lubricant,looove,loons,loofah,lonelyhearts,lollipops,lineswoman,lifers,lexter,lepner,lemony,leggy,leafy,leadeth,lazerus,lazare,lawford,languishing,lagoda,ladman,kundera,krinkle,krendler,kreigel,kowolski,knockdown,knifed,kneed,kneecap,kids'll,kennie,kenmore,keeled,kazootie,katzenmoyer,kasdan,karak,kapowski,kakistos,julyan,jockstrap,jobless,jiggly,jaunt,jarring,jabbering,irrigate,irrevocably,irrationally,ironies,invitro,intimated,intently,intentioned,intelligently,instill,instigator,instep,inopportune,innuendoes,inflate,infects,infamy,indiscretions,indiscreet,indio,indignities,indict,indecision,inconspicuous,inappropriately,impunity,impudent,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,idealist,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hunched,huffed,hubris,hubbub,hovercraft,houngan,hosed,horoscopes,hopelessness,hoodwinked,honorably,honeysuckle,homegirl,holiest,hippity,hildie,hieroglyphs,hexton,herein,heckle,heaping,healthilizer,headfirst,hatsue,harlot,hardwired,halothane,hairstyles,haagen,haaaaa,gutting,gummi,groundless,groaning,gristle,grills,graynamore,grabbin,goodes,goggle,glittering,glint,gleaming,glassy,girth,gimbal,giblets,gellers,geezers,geeze,garshaw,gargantuan,garfunkel,gangway,gandarium,gamut,galoshes,gallivanting,gainfully,gachnar,fusionlips,fusilli,furiously,frugal,fricking,frederika,freckling,frauds,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,fondling,fondled,fondle,folksy,fluttering,fluffing,floundering,flirtatious,flexing,flatterer,flaring,fixating,finchy,figurehead,fiendish,fertilize,ferment,fending,fellahs,feelers,fascinate,fantabulous,falsify,fallopian,faithless,fairer,fainter,failings,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,expelling,exorbitant,exhilarated,exertion,exerting,excercise,everbody,evaporated,escargot,escapee,erases,epizootics,epithelials,ephrum,entanglements,enslave,engrossed,emphatic,emeralds,ember,emancipated,elevates,ejaculate,effeminate,eccentricities,easygoing,earshot,dunks,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,donowitz,dominoes,diversions,distended,dissipate,disraeli,disqualify,disowned,dishwashing,disciplining,discerning,disappoints,dinged,digested,dicking,detonating,despising,depressor,depose,deport,dents,defused,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,deafening,dawning,dater,darkened,dappy,dallying,dagon,czechoslovakians,cuticles,cuteness,cupboards,culottes,cruisin,crosshairs,cronyn,criminalistics,creatively,creaming,crapping,cranny,cowed,contradicting,constipation,confining,confidences,conceiving,conceivably,concealment,compulsively,complainin,complacent,compels,communing,commode,comming,commensurate,columnists,colonoscopy,colchicine,coddling,clump,clubbed,clowning,cliffhanger,clang,cissy,choosers,choker,chiffon,channeled,chalet,cellmates,cathartic,caseload,carjack,canvass,canisters,candlestick,candlelit,camry,calzones,calitri,caldy,byline,butterball,bustier,burlap,bureaucrat,buffoons,buenas,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brays,brassieres,boysenberry,bowline,boooo,boonies,booklets,bookish,boogeyman,boogey,bogas,boardinghouse,bluuch,blundering,bluer,blowed,blotchy,blossomed,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,birdson,bings,bfmid,bfast,bettin,berkshires,benjamins,benevolence,benched,benatar,bellybutton,belabor,behooves,beddy,beaujolais,beattle,baxworth,baseless,barfing,bannish,bankrolled,banek,ballsy,ballpoint,baffling,badder,badda,bactine,backgammon,baako,aztreonam,authoritah,auctioning,arachtoids,apropos,aprons,apprised,apprehensive,anythng,antivenin,antichrist,anorexic,anoint,anguished,angioplasty,angio,amply,ampicillin,amphetamines,alternator,alcove,alabaster,airlifted,agrabah,affidavits,admonished,admonish,addled,addendum,accuser,accompli,absurdity,absolved,abrusso,abreast,aboot,abductions,abducting,aback,ababwa,aaahhhh,zorin,zinthar,zinfandel,zillions,zephyrs,zatarcs,zacks,youuu,yokels,yardstick,yammer,y'understand,wynette,wrung,wreaths,wowed,wouldn'ta,worming,wormed,workday,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,wenus,weirdoes,weaning,watusi,waponi,waistband,wackos,vouching,votre,vivica,viveca,vivant,vivacious,visor,visitin,visage,vicrum,vetted,ventriloquism,venison,varnsen,vaporized,vapid,vanstock,uuuuh,ushering,urologist,urination,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,uninsured,uninspired,unicycle,unhooked,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,understan,undershirt,underlings,underline,undercurrent,uncivilized,uncharacteristic,umpteenth,uglies,tuney,trumps,truckasaurus,trubshaw,trouser,tringle,trifling,trickster,trespassers,trespasser,traumas,trattoria,trashes,transgressions,trampling,tp'ed,toxoplasmosis,tounge,tortillas,topsy,topple,topnotch,tonsil,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,threepio,thoughtfully,thorkel,thommo,thing'll,thefts,that've,thanksgivings,tetherball,testikov,terraforming,tepid,tendonitis,tenboom,telex,teenybopper,tattered,tattaglias,tanneke,tailspin,tablecloth,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swaddling,swackhammer,svetkoff,supossed,superdad,sumptuous,sugary,sugai,subvert,substantiate,submersible,sublimating,subjugation,stymied,strychnine,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,steerage,steena,statuary,starlets,staggeringly,ssshhh,squaw,spurt,spungeon,spritzer,sprightly,sprays,sportswear,spoonful,splittin,splitsville,speedily,specialise,spastic,sparrin,souvlaki,southie,sourpuss,soupy,soundstage,soothes,somebody'd,softest,sociopathic,socialized,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,sloshed,sleight,skyrocket,skied,skewed,sixpence,sipowicz,singling,simulates,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shifu,shelve,shelbyville,sheepskin,sharpens,shaquille,shanshu,servings,sequined,seizes,seashells,scrambler,scopes,schnauzer,schmo,schizoid,scampered,savagely,saudis,santas,sandovals,sanding,saleswoman,sagging,s'cuse,rutting,ruthlessly,runneth,ruffians,rubes,rosalita,rollerblades,rohypnol,roasts,roadies,ritten,rippling,ripples,rigoletto,richardo,rethought,reshoot,reserving,reseda,rescuer,reread,requisitions,repute,reprogram,replenish,repetitious,reorganizing,reinventing,reinvented,reheat,refrigerators,reenter,recruiter,recliner,rawdy,rashes,rajeski,raison,raisers,rages,quinine,questscape,queller,pygmalion,pushers,pusan,purview,pumpin,pubescent,prudes,provolone,propriety,propped,procrastinate,processional,preyed,pretrial,portent,pooling,poofy,polloi,policia,poacher,pluses,pleasuring,platitudes,plateaued,plaguing,pittance,pinheads,pincushion,pimply,pimped,piggyback,piecing,phillipe,philipse,philby,pharaohs,petyr,petitioner,peshtigo,pesaram,persnickety,perpetrate,percolating,pepto,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,paltrow,palamon,padlock,paddling,oversleep,overheating,overdosed,overcharge,overblown,outrageously,ornery,opportune,oooooooooh,oohhhh,ohhhhhh,ogres,odorless,obliterated,nyong,nymphomaniac,ntozake,novocain,nough,nonnie,nonissue,nodules,nightmarish,nightline,niceties,newsman,needra,nedry,necking,navour,nauseam,nauls,narim,namath,nagged,naboo,n'sync,myslexia,mutator,mustafi,musketeer,murtaugh,murderess,munching,mumsy,muley,mouseville,mortifying,morgendorffers,moola,montel,mongoloid,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,millgate,mettle,metricconverter,meteors,menorah,mengele,melding,meanness,mcgruff,mcarnold,matzoh,matted,mastectomy,massager,marveling,marooned,marmaduke,marick,manhandled,manatees,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeovers,maiming,machismo,lumpectomy,lumbering,lucci,lording,lorca,lookouts,loogie,loners,loathed,lissen,lighthearted,lifer,lickin,lewen,levitation,lestercorp,lessee,lentils,legislate,legalizing,lederhosen,lawmen,lasskopf,lardner,lambeau,lamagra,ladonn,lactic,lacquer,labatier,krabappel,kooks,knickknacks,klutzy,kleynach,klendathu,kinross,kinkaid,kind'a,ketch,kesher,karikos,karenina,kanamits,junshi,jumbled,joust,jotted,jobson,jingling,jigalong,jerries,jellies,jeeps,javna,irresistable,internist,intercranial,inseminated,inquisitor,infuriate,inflating,infidelities,incessantly,incensed,incase,incapacitate,inasmuch,inaccuracies,imploding,impeding,impediments,immaturity,illegible,iditarod,icicles,ibuprofen,i'i'm,hymie,hydrolase,hunker,humps,humons,humidor,humdinger,humbling,huggin,huffing,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honks,honeymooners,homily,homeopathic,hitchhikers,hissed,hillnigger,hexavalent,hewwo,hershe,hermey,hergott,henny,hennigans,henhouse,hemolytic,helipad,heifer,hebrews,hebbing,heaved,headlock,harrowing,harnessed,hangovers,handi,handbasket,halfrek,hacene,gyges,guys're,gundersons,gumption,gruntmaster,grubs,grossie,groped,grins,greaseball,gravesite,gratuity,granma,grandfathers,grandbaby,gradski,gracing,gossips,gooble,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glares,givers,ginza,gimmie,gimmee,gennero,gemme,gazpacho,gazed,gassy,gargling,gandhiji,galvanized,gallbladder,gaaah,furtive,fumigation,fucka,fronkonsteen,frills,freezin,freewald,freeloader,frailty,forger,foolhardy,fondest,fomin,followin,follicle,flotation,flopping,floodgates,flogged,flicked,flenders,fleabag,fixings,fixable,fistful,firewater,firelight,fingerbang,finalizing,fillin,filipov,fiderer,felling,feldberg,feign,faunia,fatale,farkus,fallible,faithfulness,factoring,eyeful,extramarital,exterminated,exhume,exasperated,eviscerate,estoy,esmerelda,escapades,epoxy,enticed,enthused,entendre,engrossing,endorphins,emptive,emmys,eminently,embezzler,embarressed,embarrassingly,embalmed,eludes,eling,elated,eirie,egotitis,effecting,eerily,eecom,eczema,earthy,earlobes,eally,dyeing,dwells,duvet,duncans,dulcet,droves,droppin,drools,drey'auc,downriver,domesticity,dollop,doesnt,dobler,divulged,diversionary,distancing,dispensers,disorienting,disneyworld,dismissive,disingenuous,disheveled,disfiguring,dinning,dimming,diligently,dilettante,dilation,dickensian,diaphragms,devastatingly,destabilize,desecrate,deposing,deniece,demony,delving,delicates,deigned,defraud,deflower,defibrillator,defiantly,defenceless,defacing,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,darwinism,darnit,darks,danke,danieljackson,dangled,cytoxan,cutout,cutlery,curveball,curfews,cummerbund,crunches,crouched,crisps,cripples,crilly,cribs,crewman,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crackheads,coworker,couldn't've,corwins,coriander,copiously,convenes,contraceptives,contingencies,contaminating,conniption,condiment,concocting,comprehending,complacency,commendatore,comebacks,com'on,collarbone,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,closeted,cloistered,cleve,cleats,clarifying,clapped,cinnabar,chunnel,chumps,cholinesterase,choirboy,chocolatey,chlamydia,chigliak,cheesie,chauvinistic,chasm,chartreuse,charo,charnier,chapil,chalked,chadway,certifiably,cellulite,celled,cavalcade,cataloging,castrated,cassio,cashews,cartouche,carnivore,carcinogens,capulet,captivated,capt'n,cancellations,campin,callate,callar,caffeinated,cadavers,cacophony,cackle,buzzes,buttoning,busload,burglaries,burbs,buona,bunions,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,briefings,brewskies,breathalyzer,breakups,bratwurst,brania,braiding,brags,braggin,bradywood,bottomed,bossa,bordello,bookshelf,boogida,bondsman,bolder,boggles,bludgeoned,blowtorch,blotter,blips,blemish,bleaching,blainetologists,blading,blabbermouth,birdseed,bimmel,biloxi,biggly,bianchinni,betadine,berenson,belus,belloq,begets,befitting,beepers,beelzebub,beefed,bedridden,bedevere,beckons,beaded,baubles,bauble,battleground,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,bagman,baffles,backroom,babysat,baboons,averse,audiotape,auctioneer,atten,atcha,astonishment,arugula,arroz,antihistamines,annoyances,anesthesiology,anatomically,anachronism,amiable,amaretto,allahu,alight,aimin,ailment,afterglow,affronte,advil,adrenals,actualization,acrost,ached,accursed,accoutrements,absconded,aboveboard,abetted,aargh,aaaahh,zuwicky,zolda,ziploc,zakamatak,youve,yippie,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,y'mean,y'are,wuthering,wreaks,worrisome,workiiing,wooooooo,wonky,womanizing,wolodarsky,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,windthorne,windsurfing,windermere,wiggled,wiggen,whwhat,whodunit,whoaaa,whittling,whitesnake,whereof,wheezing,wheeze,whatd'ya,whataya,whammo,whackin,wellll,weightless,weevil,wedgies,webbing,weasly,wayside,waxes,waturi,washy,washrooms,wandell,waitaminute,waddya,waaaah,vornac,vishnoor,virulent,vindictiveness,vinceres,villier,vigeous,vestigial,ventilate,vented,venereal,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,urethra,upstaged,uploading,unwrapping,unwieldy,untapped,unsatisfied,unquenchable,unnerved,unmentionable,unlovable,unknowns,uninformed,unimpressed,unhappily,unguarded,unexplored,undergarment,undeniably,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,ululd,uhhhm,tweeze,tutsami,tushy,tuscarora,turkle,turghan,turbinium,tubers,trucoat,troxa,tropicana,triquetra,trimmers,triceps,trespassed,traya,traumatizing,transvestites,trainors,tradin,trackers,townies,tourelles,toucha,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tizzy,tippers,timmi,thwap,thusly,ththe,thrusts,throwers,throwed,throughway,thickening,thermonuclear,thelwall,thataway,terrifically,tendons,teleportation,telepathically,telekinetic,teetering,teaspoons,tarantulas,tapas,tanned,tangling,tamales,tailors,tahitian,tactful,tachy,tablespoon,syrah,synchronicity,synch,synapses,swooning,switchman,swimsuits,sweltering,sweetly,suvolte,suslov,surfed,supposition,suppertime,supervillains,superfluous,superego,sunspots,sunning,sunless,sundress,suckah,succotash,sublevel,subbasement,studious,striping,strenuously,straights,stonewalled,stillness,stilettos,stevesy,steno,steenwyck,stargates,stammering,staedert,squiggly,squiggle,squashing,squaring,spreadsheet,spramp,spotters,sporto,spooking,splendido,spittin,spirulina,spiky,spate,spartacus,spacerun,soonest,something'll,someth,somepin,someone'll,sofas,soberly,sobered,snowmen,snowbank,snowballing,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,slumlord,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skeptic,sitarides,sistah,sipped,sindell,simpletons,simony,silkwood,silks,silken,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,sheeny,shapetype,shaming,shallows,shackle,shabbily,shabbas,seppuku,senility,semite,semiautomatic,selznick,secretarial,sebacio,scuzzy,scummy,scrutinized,scrunchie,scribbled,scotches,scolded,scissor,schlub,scavenging,scarin,scarfing,scallions,scald,savour,savored,saute,sarcoidosis,sandbar,saluted,salish,saith,sailboats,sagittarius,sacre,saccharine,sacamano,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotisserie,rootie,roofy,roofie,romanticize,rittle,ristorante,rippin,rinsing,ringin,rincess,rickety,reveling,retest,retaliating,restorative,reston,restaurateur,reshoots,resetting,resentments,reprogramming,repossess,repartee,renzo,remore,remitting,remeber,relaxants,rejuvenate,rejections,regenerated,refocus,referrals,reeno,recycles,recrimination,reclining,recanting,reattach,reassigning,razgul,raved,rattlesnakes,rattles,rashly,raquetball,ransack,raisinettes,raheem,radisson,radishes,raban,quoth,qumari,quints,quilts,quilting,quien,quarreled,purty,purblind,punchbowl,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protectin,propping,proportioned,prophylactic,proofed,prompter,procreate,proclivities,prioritizing,prinze,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,pralines,pragmatist,powerbar,pottie,pottersville,potsie,potholes,posses,posies,portkey,porterhouse,pornographers,poring,poppycock,poppers,pomponi,pokin,poitier,podiatry,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pistachios,pirated,pinochle,pineapples,pinafore,pimples,piggly,piddling,picon,pickpockets,picchu,physiologically,physic,phobic,philandering,phenomenally,pheasants,pewter,petticoat,petronis,petitioning,perturbed,perpetuating,permutat,perishable,perimeters,perfumed,percocet,per'sus,pepperjack,penalize,pelting,pellet,peignoir,pedicures,peckers,pecans,pawning,paulsson,pattycake,patrolmen,patois,pathos,pasted,parishioner,parcheesi,parachuting,papayas,pantaloons,palpitations,palantine,paintballing,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlast,outlander,out've,orphey,orchestrating,openers,ooooooo,okies,ohhhhhhhhh,ohhhhhhhh,ogling,offbeat,obsessively,obeyed,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuances,nourishing,nosedive,norbu,nomlies,nomine,nixed,nihilist,nightshift,newmeat,neglectful,neediness,needin,naphthalene,nanocytes,nanite,naivete,n'yeah,mystifying,myhnegon,mutating,musing,mulled,muggy,muerto,muckraker,muchachos,mountainside,motherless,mosquitos,morphed,mopped,moodoo,moncho,mollem,moisturiser,mohicans,mocks,mistresses,misspent,misinterpretation,miscarry,minuses,mindee,mimes,millisecond,milked,mightn't,mightier,mierzwiak,microchips,meyerling,mesmerizing,mershaw,meecrob,medicate,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,matzah,matriarch,masturbated,masselin,martialed,marlboros,marksmanship,marinate,marchin,manicured,malnourished,malign,majorek,magnon,magnificently,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lydells,lusts,lucite,lubricants,lopper,lopped,loneliest,lonelier,lomez,lojack,loath,liquefy,lippy,limps,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,leotards,leanin,laxatives,lavished,latka,lanyard,lanky,landmines,lameness,laddies,lacerated,labored,l'amour,kreskin,kovitch,kournikova,kootchy,konoss,knknow,knickety,knackety,kmart,klicks,kiwanis,kissable,kindergartners,kilter,kidnet,kid'll,kicky,kickbacks,kickback,kholokov,kewpie,kendo,katra,kareoke,kafelnikov,kabob,junjun,jumba,julep,jordie,jondy,jolson,jenoff,jawbone,janitorial,janiro,ipecac,invigorated,intruded,intros,intravenously,interruptus,interrogations,interject,interfacing,interestin,insuring,instilled,insensitivity,inscrutable,inroads,innards,inlaid,injector,ingratitude,infuriates,infra,infliction,indelicate,incubators,incrimination,inconveniencing,inconsolable,incestuous,incas,incarcerate,inbreeding,impudence,impressionists,impeached,impassioned,imipenem,idling,idiosyncrasies,icebergs,hypotensive,hydrochloride,hushed,humus,humph,hummm,hulking,hubcaps,hubald,howya,howbout,how'll,housebroken,hotwire,hotspots,hotheaded,horrace,hopsfield,honto,honkin,honeymoons,homewrecker,hombres,hollers,hollerin,hoedown,hoboes,hobbling,hobble,hoarse,hinky,highlighters,hexes,heru'ur,hernias,heppleman,hell're,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,hayseed,haveo,hauls,hasten,harridan,harpoons,hardens,harcesis,harbouring,hangouts,halkein,haleh,halberstam,hairnet,hairdressers,hacky,haaaa,h'yah,gusta,gushy,gurgling,guilted,gruel,grudging,grrrrrr,grosses,groomsmen,griping,gravest,gratified,grated,goulash,goopy,goona,goodly,godliness,godawful,godamn,glycerin,glutes,glowy,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gilbey,gigglepuss,ghora,gestating,gelato,geishas,gearshift,gayness,gasped,gaslighting,garretts,garba,gablyczyck,g'head,fumigating,fumbling,fudged,fuckwad,fuck're,fuchsia,fretting,freshest,frenchies,freezers,fredrica,fraziers,fraidy,foxholes,fourty,fossilized,forsake,forfeits,foreclosed,foreal,footsies,florists,flopped,floorshow,floorboard,flinching,flecks,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fiver,fitzy,fishsticks,finetti,finelli,finagle,filko,fieldstone,fibber,ferrini,feedin,feasting,favore,fathering,farrouhk,farmin,fairytale,fairservice,factoid,facedown,fabled,eyeballin,extortionist,exquisitely,expedited,exorcise,existentialist,execs,exculpatory,exacerbate,everthing,eventuality,evander,euphoric,euphemisms,estamos,erred,entitle,enquiries,enormity,enfants,endive,encyclopedias,emulating,embittered,effortless,ectopic,ecirc,easely,earphones,earmarks,dweller,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,druthers,druggist,drossos,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dozing,dotes,dorkface,doorknobs,doohickey,donnatella,doncha,domicile,dokos,dobermans,dizzying,divola,ditsy,distaste,disservice,dislodged,dislodge,disinherit,disinformation,discounting,dinka,dimly,digesting,diello,diddling,dictatorships,dictators,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,derris,deplore,deplete,demure,demolitions,demean,delish,delbruck,delaford,degaulle,deftly,deformity,deflate,definatly,defector,decrypted,decontamination,decapitate,decanter,dardis,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechoslovakian,cymbal,cyberdyne,cutoffs,cuticle,curvaceous,curiousity,crowing,crowed,croutons,cropped,criminy,crescentis,crashers,cranwell,coverin,courtrooms,countenance,cosmically,cosign,corroboration,coroners,cornflakes,copperpot,copperhead,copacetic,coordsize,convulsing,consults,conjures,congenial,concealer,compactor,commercialism,cokey,cognizant,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clods,clocking,clings,clavicle,classless,clashing,clanking,clanging,clamping,civvies,citywide,circulatory,circuited,chronisters,chromic,choos,chloroformed,chillun,cheesed,chatterbox,chaperoned,channukah,cerebellum,centerpieces,centerfold,ceecee,ccedil,cavorting,cavemen,cauterized,cauldwell,catting,caterine,cassiopeia,carves,cartwheel,carpeted,carob,caressing,carelessly,careening,capricious,capitalistic,capillaries,candidly,camaraderie,callously,calfskin,caddies,buttholes,busywork,busses,burps,burgomeister,bunkhouse,bungchow,bugler,buffets,buffed,brutish,brusque,bronchitis,bromden,brolly,broached,brewskis,brewin,brean,breadwinner,brana,bountiful,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bombosity,bolting,boilerplate,bluey,blowback,blouses,bloodsuckers,bloodstained,bloat,bleeth,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,biltmore,bilked,big'uns,bidet,besotted,bernheim,benegas,bendiga,belushi,bellboys,belittling,behinds,begone,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,bathes,batak,baser,baseballs,barbella,bankrolling,bandaged,baerly,backlog,backin,babying,azkaban,awwwww,aviary,authorizes,austero,aunty,attics,atreus,astounded,astonish,artemus,arses,arintero,appraiser,apathetic,anybody'd,anxieties,anticlimactic,antar,anglos,angleman,anesthetist,androscoggin,andolini,andale,amway,amuck,amniocentesis,amnesiac,americano,amara,alvah,altruism,alternapalooza,alphabetize,alpaca,allus,allergist,alexandros,alaikum,akimbo,agoraphobia,agides,aggrhh,aftertaste,adoptions,adjuster,addictions,adamantium,activator,accomplishes,aberrant,aaaaargh,aaaaaaaaaaaaa,a'ight,zzzzzzz,zucchini,zookeeper,zirconia,zippers,zequiel,zellary,zeitgeist,zanuck,zagat,you'n,ylang,yes'm,yenta,yecchh,yecch,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,worshiping,wormy,wormtail,wormholes,woosh,wollsten,wolfing,woefully,wobbling,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whistled,whist,whinny,wheelies,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whacks,wewell,wetsuit,welluh,weeps,waylander,wavin,wassail,wasnt,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vorhees,voldemort,vivre,vittles,vindaloo,videogames,vichyssoise,vicarious,vesuvius,verguenza,ven't,velveteen,velour,velociraptor,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,vacuums,usurp,usernum,us'll,urinals,unyielding,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unpretentious,unnerstand,unmade,unimpeachable,unfashionable,underwrite,underlining,underling,underestimates,underappreciated,uncouth,uncork,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,ughuh,typewriters,twitches,twitched,twirly,twinkling,twinges,twiddling,turners,turnabout,tumblin,tryed,trowel,trousseau,trivialize,trifles,tribianni,trenchcoat,trembled,traumatize,transitory,transients,transfuse,transcribing,tranq,trampy,traipsed,trainin,trachea,traceable,touristy,toughie,toscanini,tortola,tortilla,torreon,toreador,tommorrow,tollbooth,tollans,toidy,togas,tofurkey,toddling,toddies,toasties,toadstool,to've,tingles,timin,timey,timetables,tightest,thuggee,thrusting,thrombus,throes,thrifty,thornharts,thinnest,thicket,thetas,thesulac,tethered,testaburger,tersenadine,terrif,terdlington,tepui,temping,tector,taxidermy,tastebuds,tartlets,tartabull,tar'd,tantamount,tangy,tangles,tamer,tabula,tabletops,tabithia,szechwan,synthedyne,svenjolly,svengali,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,superstore,supercilious,suntac,sunburned,summercliff,sullied,sugared,suckle,subtleties,substantiated,subsides,subliminal,subhuman,strowman,stroked,stroganoff,streetlight,straying,strainer,straighter,straightener,stoplight,stirrups,stewing,stereotyping,stepmommy,stephano,stashing,starshine,stairwells,squatsie,squandering,squalid,squabbling,squab,sprinkling,spreader,spongy,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,spearchucker,spatulas,southtown,soused,soshi,sorter,sorrowful,sooth,some'in,soliloquy,soiree,sodomized,sobriki,soaping,snows,snowcone,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smarten,smallish,slushy,slurring,sluman,slithers,slippin,sleuthing,sleeveless,skinless,skillfully,sketchbook,skagnetti,sista,sinning,singularly,sinewy,silverlake,siguto,signorina,sieve,sidearms,shying,shunning,shtud,shrieks,shorting,shortbread,shopkeepers,shmancy,shizzit,shitheads,shitfaced,shipmates,shiftless,shelving,shedlow,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,serviceable,sepsis,senores,sendin,semis,semanski,selflessly,seinfelds,seers,seeps,seductress,secaucus,sealant,scuttling,scusa,scrunched,scissorhands,schreber,schmancy,scamps,scalloped,savoir,savagery,sarong,sarnia,santangel,samool,sallow,salino,safecracker,sadism,sacrilegious,sabrini,sabath,s'aright,ruttheimer,rudest,rubbery,rousting,rotarian,roslin,roomed,romari,romanica,rolltop,rolfski,rockettes,roared,ringleader,riffing,ribcage,rewired,retrial,reting,resuscitated,restock,resale,reprogrammed,replicant,repentant,repellant,repays,repainting,renegotiating,rendez,remem,relived,relinquishes,relearn,relaxant,rekindling,rehydrate,refueled,refreshingly,refilling,reexamine,reeseman,redness,redeemable,redcoats,rectangles,recoup,reciprocated,reassessing,realy,realer,reachin,re'kali,rawlston,ravages,rappaports,ramoray,ramming,raindrops,rahesh,radials,racists,rabartu,quiches,quench,quarreling,quaintly,quadrants,putumayo,put'em,purifier,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,pterodactyl,psychodrama,psats,protestations,protectee,prosaic,propositioned,proclivity,probed,printouts,prevision,pressers,preset,preposition,preempt,preemie,preconceptions,prancan,powerpuff,potties,potpie,poseur,porthole,poops,pooping,pomade,polyps,polymerized,politeness,polisher,polack,pocketknife,poatia,plebeian,playgroup,platonically,platitude,plastering,plasmapheresis,plaids,placemats,pizzazz,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pileup,pilates,pigmen,pieeee,phrased,photocopies,phoebes,philistines,philanderer,pheromone,phasers,pfeffernuesse,pervs,perspire,personify,perservere,perplexed,perpetrating,perkiness,perjurer,periodontist,perfunctory,perdido,percodan,pentameter,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,paxcow,paused,patted,parkishoff,parkers,pardoning,paraplegic,paraphrasing,paperers,papered,pangs,paneling,palooza,palmed,palmdale,palatable,pacify,pacified,owwwww,oversexed,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outmaneuver,outfoxed,oughtn't,ostentatious,oshun,orthopedist,or'derves,ophthalmologist,operagirl,oozes,oooooooh,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrical,obeys,obeah,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,nourished,nonspecific,noing,noinch,nohoho,nobler,nitwits,newsprint,newspaperman,newscaster,neuropathy,netherworld,neediest,navasky,narcissists,napped,nafta,mache,mykonos,mutilating,mutherfucker,mutha,mutates,mutate,musn't,murchy,multitasking,mujeeb,mudslinging,muckraking,mousetrap,mourns,mournful,motherf,mostro,morphing,morphate,moralistic,moochy,mooching,monotonous,monopolize,monocle,molehill,moland,mofet,mockup,mobilizing,mmmmmmm,mitzvahs,mistreating,misstep,misjudge,misinformation,misdirected,miscarriages,miniskirt,mindwarped,minced,milquetoast,miguelito,mightily,midstream,midriff,mideast,microbe,methuselah,mesdames,mescal,men'll,memma,megaton,megara,megalomaniac,meeee,medulla,medivac,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,mateys,marshack,markles,marketable,mansiere,manservant,manse,manhandling,mallomars,malcontent,malaise,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,machu,macado,m'boy,m'appelle,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,loincloth,lofts,lodgers,lobbing,loaner,livered,liqueur,ligourin,lifesaving,lifeguards,lifeblood,liaisons,let'em,lesbianism,lence,lemonlyman,legitimize,leadin,lazars,lazarro,lawyering,laugher,laudanum,latrines,lations,laters,lapels,lakefront,lahit,lafortunata,lachrymose,l'italien,kwaini,kruczynski,kramerica,kowtow,kovinsky,korsekov,kopek,knowakowski,knievel,knacks,kiowas,killington,kickball,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,karajan,kamerev,kaggs,jujyfruit,jostled,jonestown,jokey,joists,jocko,jimmied,jiggled,jests,jenzen,jenko,jellyman,jedediah,jealitosis,jaunty,jarmel,jankle,jagoff,jagielski,jackrabbits,jabbing,jabberjaw,izzat,irresponsibly,irrepressible,irregularity,irredeemable,inuvik,intuitions,intubated,intimates,interminable,interloper,intercostal,instyle,instigate,instantaneously,ining,ingrown,ingesting,infusing,infringe,infinitum,infact,inequities,indubitably,indisputable,indescribably,indentation,indefinable,incontrovertible,inconsequential,incompletes,incoherently,inclement,incidentals,inarticulate,inadequacies,imprudent,improprieties,imprison,imprinted,impressively,impostors,importante,imperious,impale,immodest,immobile,imbedded,imbecilic,illegals,idn't,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,hotbed,hosing,hosers,horsehair,homebody,homebake,holing,holies,hoisting,hogwallop,hocks,hobbits,hoaxes,hmmmmm,hisses,hippest,hillbillies,hilarity,heurh,herniated,hermaphrodite,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heeey,hedda,heartbeats,heaped,healers,headstart,headsets,headlong,hawkland,havta,haulin,harvey'll,hanta,hansom,hangnail,handstand,handrail,handoff,hallucinogen,hallor,halitosis,haberdashery,gypped,guy'll,gumbel,guerillas,guava,guardrail,grunther,grunick,groppi,groomer,grodin,gripes,grinds,grifters,gretch,greevey,greasing,graveyards,grandkid,grainy,gouging,gooney,googly,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,glues,gloriously,glengarry,glassware,glamor,gimmicks,giggly,giambetti,ghoulish,ghettos,ghali,gether,geriatrics,gerbils,geosynchronous,georgio,gente,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,gantu,gangy,gangly,gangland,galling,gadda,furrowed,funnies,funkytown,fugimotto,fudging,fuckeen,frustrates,froufrou,froot,fromberge,frizzies,fritters,frightfully,friendliest,freeloading,freelancing,freakazoid,fraternization,framers,fornication,fornicating,forethought,footstool,foisting,focussing,focking,flurries,fluffed,flintstones,fledermaus,flayed,flawlessly,flatters,flashbang,flapped,fishies,firmer,fireproof,firebug,fingerpainting,finessed,findin,financials,finality,fillets,fiercest,fiefdom,fibbing,fervor,fentanyl,fenelon,fedorchuk,feckless,feathering,faucets,farewells,fantasyland,fanaticism,faltered,faggy,faberge,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,excels,exasperating,exacting,everybody'd,evasions,espressos,esmail,errrr,erratically,eroding,ernswiler,epcot,enthralled,ensenada,enriching,enrage,enhancer,endear,encrusted,encino,empathic,embezzle,emanates,electricians,eking,egomaniacal,egging,effacing,ectoplasm,eavesdropped,dummkopf,dugray,duchaisne,drunkard,drudge,droop,droids,drips,dripped,dribbles,drazens,downy,downsize,downpour,dosages,doppelganger,dopes,doohicky,dontcha,doneghy,divining,divest,diuretics,diuretic,distrustful,disrupts,dismemberment,dismember,disinfect,disillusionment,disheartening,discourteous,discotheque,discolored,dirtiest,diphtheria,dinks,dimpled,didya,dickwad,diatribes,diathesis,diabetics,deviants,detonates,detests,detestable,detaining,despondent,desecration,derision,derailing,deputized,depressors,dependant,dentures,denominators,demur,demonology,delts,dellarte,delacour,deflated,defib,defaced,decorators,deaqon,davola,datin,darwinian,darklighters,dandelions,dampened,damaskinos,dalrimple,d'peshu,d'hoffryn,d'astier,cynics,cutesy,cutaway,curmudgeon,curdle,culpability,cuisinart,cuffing,crypts,cryptid,crunched,crumblers,crudely,crosscheck,croon,crissake,crevasse,creswood,creepo,creases,creased,creaky,cranks,crabgrass,coveralls,couple'a,coughs,coslaw,corporeal,cornucopia,cornering,corks,cordoned,coolly,coolin,cookbooks,contrite,contented,constrictor,confound,confit,confiscating,condoned,conditioners,concussions,comprendo,comers,combustible,combusted,collingswood,coldness,coitus,codicil,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleanses,claymores,clammed,chugging,chronically,christsakes,choque,chompers,chiseling,chirpy,chirp,chinks,chingachgook,chickenpox,chickadee,chewin,chessboard,chargin,chanteuse,chandeliers,chamdo,chagrined,chaff,certs,certainties,cerreno,cerebrum,censured,cemetary,caterwauling,cataclysmic,casitas,cased,carvel,carting,carrear,carolling,carolers,carnie,cardiogram,carbuncle,capulets,canines,candaules,canape,caldecott,calamitous,cadillacs,cachet,cabeza,cabdriver,buzzards,butai,businesswomen,bungled,bumpkins,bummers,bulldoze,buffybot,bubut,bubbies,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,briskly,briefcases,bricked,breezing,breeher,breakable,breadstick,bravenet,braved,brandies,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boutonniere,bossed,bosomy,borans,boosts,bookshelves,bookends,boneless,bombarding,bollo,boinked,boink,bluest,bluebells,bloodshot,blockhead,blockbusters,blithely,blather,blankly,bladders,blackbeard,bitte,bippy,biogenetics,bilge,bigglesworth,bicuspids,beususe,betaseron,besmirch,bernece,bereavement,bentonville,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,behrle,beginnin,begining,beenie,beefs,beechwood,becau,beaverhausen,beakers,bazillion,baudouin,barrytown,barringtons,barneys,barbs,barbers,barbatus,bankrupted,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,automatics,authenticate,aught,aubyn,attired,attagirl,atrophied,asystole,astroturf,assertiveness,artichokes,arquillians,aright,archenemy,appraise,appeased,antin,anspaugh,anesthetics,anaphylactic,amscray,ambivalence,amalio,alriiight,alphabetized,alpena,alouette,allora,alliteration,allenwood,allegiances,algerians,alcerro,alastor,ahaha,agitators,aforethought,advertises,admonition,adirondacks,adenoids,acupuncturist,acula,actuarial,activators,actionable,achingly,accusers,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right\".split(\",\"),\n  male_names: \"james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,sammy,kristopher,levi,marcos,gustavo,jake,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,benedict,mose,hong,isreal,garret,fausto,arlen,zack,modesto,francesco,manual,gaylord,gaston,filiberto,deangelo,michale,granville,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,hosea,shad,santo,rudolf,rolf,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,elden,darell,broderick,alonso\".split(\",\")\n};\n\nmodule.exports = frequency_lists;\n\n//# sourceMappingURL=frequency_lists.js.map\n","// Generated by CoffeeScript 1.10.0\nvar time_estimates;\n\ntime_estimates = {\n  estimate_attack_times: function(guesses) {\n    var crack_times_display, crack_times_seconds, scenario, seconds;\n    crack_times_seconds = {\n      online_throttling_100_per_hour: guesses / (100 / 3600),\n      online_no_throttling_10_per_second: guesses / 10,\n      offline_slow_hashing_1e4_per_second: guesses / 1e4,\n      offline_fast_hashing_1e10_per_second: guesses / 1e10\n    };\n    crack_times_display = {};\n    for (scenario in crack_times_seconds) {\n      seconds = crack_times_seconds[scenario];\n      crack_times_display[scenario] = this.display_time(seconds);\n    }\n    return {\n      crack_times_seconds: crack_times_seconds,\n      crack_times_display: crack_times_display,\n      score: this.guesses_to_score(guesses)\n    };\n  },\n  guesses_to_score: function(guesses) {\n    var DELTA;\n    DELTA = 5;\n    if (guesses < 1e3 + DELTA) {\n      return 0;\n    } else if (guesses < 1e6 + DELTA) {\n      return 1;\n    } else if (guesses < 1e8 + DELTA) {\n      return 2;\n    } else if (guesses < 1e10 + DELTA) {\n      return 3;\n    } else {\n      return 4;\n    }\n  },\n  display_time: function(seconds) {\n    var base, century, day, display_num, display_str, hour, minute, month, ref, year;\n    minute = 60;\n    hour = minute * 60;\n    day = hour * 24;\n    month = day * 31;\n    year = month * 12;\n    century = year * 100;\n    ref = seconds < 1 ? [null, 'less than a second'] : seconds < minute ? (base = Math.round(seconds), [base, base + \" second\"]) : seconds < hour ? (base = Math.round(seconds / minute), [base, base + \" minute\"]) : seconds < day ? (base = Math.round(seconds / hour), [base, base + \" hour\"]) : seconds < month ? (base = Math.round(seconds / day), [base, base + \" day\"]) : seconds < year ? (base = Math.round(seconds / month), [base, base + \" month\"]) : seconds < century ? (base = Math.round(seconds / year), [base, base + \" year\"]) : [null, 'centuries'], display_num = ref[0], display_str = ref[1];\n    if ((display_num != null) && display_num !== 1) {\n      display_str += 's';\n    }\n    return display_str;\n  }\n};\n\nmodule.exports = time_estimates;\n\n//# sourceMappingURL=time_estimates.js.map\n","// Generated by CoffeeScript 1.10.0\nvar feedback, scoring;\n\nscoring = require('./scoring');\n\nfeedback = {\n  default_feedback: {\n    warning: '',\n    suggestions: [\"Use a few words, avoid common phrases\", \"No need for symbols, digits, or uppercase letters\"]\n  },\n  get_feedback: function(score, sequence) {\n    var extra_feedback, i, len, longest_match, match, ref;\n    if (sequence.length === 0) {\n      return this.default_feedback;\n    }\n    if (score > 2) {\n      return {\n        warning: '',\n        suggestions: []\n      };\n    }\n    longest_match = sequence[0];\n    ref = sequence.slice(1);\n    for (i = 0, len = ref.length; i < len; i++) {\n      match = ref[i];\n      if (match.token.length > longest_match.token.length) {\n        longest_match = match;\n      }\n    }\n    feedback = this.get_match_feedback(longest_match, sequence.length === 1);\n    extra_feedback = 'Add another word or two. Uncommon words are better.';\n    if (feedback != null) {\n      feedback.suggestions.unshift(extra_feedback);\n      if (feedback.warning == null) {\n        feedback.warning = '';\n      }\n    } else {\n      feedback = {\n        warning: '',\n        suggestions: [extra_feedback]\n      };\n    }\n    return feedback;\n  },\n  get_match_feedback: function(match, is_sole_match) {\n    var layout, warning;\n    switch (match.pattern) {\n      case 'dictionary':\n        return this.get_dictionary_match_feedback(match, is_sole_match);\n      case 'spatial':\n        layout = match.graph.toUpperCase();\n        warning = match.turns === 1 ? 'Straight rows of keys are easy to guess' : 'Short keyboard patterns are easy to guess';\n        return {\n          warning: warning,\n          suggestions: ['Use a longer keyboard pattern with more turns']\n        };\n      case 'repeat':\n        warning = match.base_token.length === 1 ? 'Repeats like \"aaa\" are easy to guess' : 'Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"';\n        return {\n          warning: warning,\n          suggestions: ['Avoid repeated words and characters']\n        };\n      case 'sequence':\n        return {\n          warning: \"Sequences like abc or 6543 are easy to guess\",\n          suggestions: ['Avoid sequences']\n        };\n      case 'regex':\n        if (match.regex_name === 'recent_year') {\n          return {\n            warning: \"Recent years are easy to guess\",\n            suggestions: ['Avoid recent years', 'Avoid years that are associated with you']\n          };\n        }\n        break;\n      case 'date':\n        return {\n          warning: \"Dates are often easy to guess\",\n          suggestions: ['Avoid dates and years that are associated with you']\n        };\n    }\n  },\n  get_dictionary_match_feedback: function(match, is_sole_match) {\n    var ref, result, suggestions, warning, word;\n    warning = match.dictionary_name === 'passwords' ? is_sole_match && !match.l33t && !match.reversed ? match.rank <= 10 ? 'This is a top-10 common password' : match.rank <= 100 ? 'This is a top-100 common password' : 'This is a very common password' : match.guesses_log10 <= 4 ? 'This is similar to a commonly used password' : void 0 : match.dictionary_name === 'english_wikipedia' ? is_sole_match ? 'A word by itself is easy to guess' : void 0 : (ref = match.dictionary_name) === 'surnames' || ref === 'male_names' || ref === 'female_names' ? is_sole_match ? 'Names and surnames by themselves are easy to guess' : 'Common names and surnames are easy to guess' : '';\n    suggestions = [];\n    word = match.token;\n    if (word.match(scoring.START_UPPER)) {\n      suggestions.push(\"Capitalization doesn't help very much\");\n    } else if (word.match(scoring.ALL_UPPER) && word.toLowerCase() !== word) {\n      suggestions.push(\"All-uppercase is almost as easy to guess as all-lowercase\");\n    }\n    if (match.reversed && match.token.length >= 4) {\n      suggestions.push(\"Reversed words aren't much harder to guess\");\n    }\n    if (match.l33t) {\n      suggestions.push(\"Predictable substitutions like '@' instead of 'a' don't help very much\");\n    }\n    result = {\n      warning: warning,\n      suggestions: suggestions\n    };\n    return result;\n  }\n};\n\nmodule.exports = feedback;\n\n//# sourceMappingURL=feedback.js.map\n","// Emoticons -> Emoji mapping.\n//\n// (!) Some patterns skipped, to avoid collisions\n// without increase matcher complicity. Than can change in future.\n//\n// Places to look for more emoticons info:\n//\n// - http://en.wikipedia.org/wiki/List_of_emoticons#Western\n// - https://github.com/wooorm/emoticon/blob/master/Support.md\n// - http://factoryjoe.com/projects/emoticons/\n//\n'use strict';\n\nmodule.exports = {\n  angry:            [ '>:(', '>:-(' ],\n  blush:            [ ':\")', ':-\")' ],\n  broken_heart:     [ '</3', '<\\\\3' ],\n  // :\\ and :-\\ not used because of conflict with markdown escaping\n  confused:         [ ':/', ':-/' ], // twemoji shows question\n  cry:              [ \":'(\", \":'-(\", ':,(', ':,-(' ],\n  frowning:         [ ':(', ':-(' ],\n  heart:            [ '<3' ],\n  imp:              [ ']:(', ']:-(' ],\n  innocent:         [ 'o:)', 'O:)', 'o:-)', 'O:-)', '0:)', '0:-)' ],\n  joy:              [ \":')\", \":'-)\", ':,)', ':,-)', \":'D\", \":'-D\", ':,D', ':,-D' ],\n  kissing:          [ ':*', ':-*' ],\n  laughing:         [ 'x-)', 'X-)' ],\n  neutral_face:     [ ':|', ':-|' ],\n  open_mouth:       [ ':o', ':-o', ':O', ':-O' ],\n  rage:             [ ':@', ':-@' ],\n  smile:            [ ':D', ':-D' ],\n  smiley:           [ ':)', ':-)' ],\n  smiling_imp:      [ ']:)', ']:-)' ],\n  sob:              [ \":,'(\", \":,'-(\", ';(', ';-(' ],\n  stuck_out_tongue: [ ':P', ':-P' ],\n  sunglasses:       [ '8-)', 'B-)' ],\n  sweat:            [ ',:(', ',:-(' ],\n  sweat_smile:      [ ',:)', ',:-)' ],\n  unamused:         [ ':s', ':-S', ':z', ':-Z', ':$', ':-$' ],\n  wink:             [ ';)', ';-)' ]\n};\n","'use strict';\n\nmodule.exports = function emoji_html(tokens, idx /*, options, env */) {\n  return tokens[idx].content;\n};\n","// Emojies & shortcuts replacement logic.\n//\n// Note: In theory, it could be faster to parse :smile: in inline chain and\n// leave only shortcuts here. But, who care...\n//\n\n'use strict';\n\n\nmodule.exports = function create_rule(md, emojies, shortcuts, scanRE, replaceRE) {\n  var arrayReplaceAt = md.utils.arrayReplaceAt,\n      ucm = md.utils.lib.ucmicro,\n      ZPCc = new RegExp([ ucm.Z.source, ucm.P.source, ucm.Cc.source ].join('|'));\n\n  function splitTextToken(text, level, Token) {\n    var token, last_pos = 0, nodes = [];\n\n    text.replace(replaceRE, function (match, offset, src) {\n      var emoji_name;\n      // Validate emoji name\n      if (shortcuts.hasOwnProperty(match)) {\n        // replace shortcut with full name\n        emoji_name = shortcuts[match];\n\n        // Don't allow letters before any shortcut (as in no \":/\" in http://)\n        if (offset > 0 && !ZPCc.test(src[offset - 1])) {\n          return;\n        }\n\n        // Don't allow letters after any shortcut\n        if (offset + match.length < src.length && !ZPCc.test(src[offset + match.length])) {\n          return;\n        }\n      } else {\n        emoji_name = match.slice(1, -1);\n      }\n\n      // Add new tokens to pending list\n      if (offset > last_pos) {\n        token         = new Token('text', '', 0);\n        token.content = text.slice(last_pos, offset);\n        nodes.push(token);\n      }\n\n      token         = new Token('emoji', '', 0);\n      token.markup  = emoji_name;\n      token.content = emojies[emoji_name];\n      nodes.push(token);\n\n      last_pos = offset + match.length;\n    });\n\n    if (last_pos < text.length) {\n      token         = new Token('text', '', 0);\n      token.content = text.slice(last_pos);\n      nodes.push(token);\n    }\n\n    return nodes;\n  }\n\n  return function emoji_replace(state) {\n    var i, j, l, tokens, token,\n        blockTokens = state.tokens,\n        autolinkLevel = 0;\n\n    for (j = 0, l = blockTokens.length; j < l; j++) {\n      if (blockTokens[j].type !== 'inline') { continue; }\n      tokens = blockTokens[j].children;\n\n      // We scan from the end, to keep position when new tags added.\n      // Use reversed logic in links start/end match\n      for (i = tokens.length - 1; i >= 0; i--) {\n        token = tokens[i];\n\n        if (token.type === 'link_open' || token.type === 'link_close') {\n          if (token.info === 'auto') { autolinkLevel -= token.nesting; }\n        }\n\n        if (token.type === 'text' && autolinkLevel === 0 && scanRE.test(token.content)) {\n          // replace current node\n          blockTokens[j].children = tokens = arrayReplaceAt(\n            tokens, i, splitTextToken(token.content, token.level, state.Token)\n          );\n        }\n      }\n    }\n  };\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n  if (!isObject(it)) {\n    throw TypeError(String(it) + ' is not an object');\n  } return it;\n};\n","// Convert input options to more useable format\n// and compile search regexp\n\n'use strict';\n\n\nfunction quoteRE(str) {\n  return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&');\n}\n\n\nmodule.exports = function normalize_opts(options) {\n  var emojies = options.defs,\n      shortcuts;\n\n  // Filter emojies by whitelist, if needed\n  if (options.enabled.length) {\n    emojies = Object.keys(emojies).reduce(function (acc, key) {\n      if (options.enabled.indexOf(key) >= 0) {\n        acc[key] = emojies[key];\n      }\n      return acc;\n    }, {});\n  }\n\n  // Flatten shortcuts to simple object: { alias: emoji_name }\n  shortcuts = Object.keys(options.shortcuts).reduce(function (acc, key) {\n    // Skip aliases for filtered emojies, to reduce regexp\n    if (!emojies[key]) { return acc; }\n\n    if (Array.isArray(options.shortcuts[key])) {\n      options.shortcuts[key].forEach(function (alias) {\n        acc[alias] = key;\n      });\n      return acc;\n    }\n\n    acc[options.shortcuts[key]] = key;\n    return acc;\n  }, {});\n\n  // Compile regexp\n  var names = Object.keys(emojies)\n                .map(function (name) { return ':' + name + ':'; })\n                .concat(Object.keys(shortcuts))\n                .sort()\n                .reverse()\n                .map(function (name) { return quoteRE(name); })\n                .join('|');\n  var scanRE = RegExp(names);\n  var replaceRE = RegExp(names, 'g');\n\n  return {\n    defs: emojies,\n    shortcuts: shortcuts,\n    scanRE: scanRE,\n    replaceRE: replaceRE\n  };\n};\n","'use strict';\n/**\n * If a pattern matches the token stream,\n * then run transform.\n */\n\nconst utils = require('./utils.js');\n\nmodule.exports = options => {\n  const __hr = new RegExp('^ {0,3}[-*_]{3,} ?'\n                          + utils.escapeRegExp(options.leftDelimiter)\n                          + '[^' + utils.escapeRegExp(options.rightDelimiter) + ']');\n\n  return ([\n    {\n      /**\n       * ```python {.cls}\n       * for i in range(10):\n       *     print(i)\n       * ```\n       */\n      name: 'fenced code blocks',\n      tests: [\n        {\n          shift: 0,\n          block: true,\n          info: utils.hasDelimiters('end', options)\n        }\n      ],\n      transform: (tokens, i) => {\n        let token = tokens[i];\n        let start = token.info.lastIndexOf(options.leftDelimiter);\n        let attrs = utils.getAttrs(token.info, start, options);\n        utils.addAttrs(attrs, token);\n        token.info = utils.removeDelimiter(token.info, options);\n      }\n    }, {\n      /**\n       * bla `click()`{.c} ![](img.png){.d}\n       *\n       * differs from 'inline attributes' as it does\n       * not have a closing tag (nesting: -1)\n       */\n      name: 'inline nesting 0',\n      tests: [\n        {\n          shift: 0,\n          type: 'inline',\n          children: [\n            {\n              shift: -1,\n              type: (str) => str === 'image' || str === 'code_inline'\n            }, {\n              shift: 0,\n              type: 'text',\n              content: utils.hasDelimiters('start', options)\n            }\n          ]\n        }\n      ],\n      transform: (tokens, i, j) => {\n        let token = tokens[i].children[j];\n        let endChar = token.content.indexOf(options.rightDelimiter);\n        let attrToken = tokens[i].children[j - 1];\n        let attrs = utils.getAttrs(token.content, 0, options);\n        utils.addAttrs(attrs, attrToken);\n        if (token.content.length === (endChar + options.rightDelimiter.length)) {\n          tokens[i].children.splice(j, 1);\n        } else {\n          token.content = token.content.slice(endChar + options.rightDelimiter.length);\n        }\n      }\n    }, {\n      /**\n       * | h1 |\n       * | -- |\n       * | c1 |\n       * {.c}\n       */\n      name: 'tables',\n      tests: [\n        {\n          // let this token be i, such that for-loop continues at\n          // next token after tokens.splice\n          shift: 0,\n          type: 'table_close'\n        }, {\n          shift: 1,\n          type: 'paragraph_open'\n        }, {\n          shift: 2,\n          type: 'inline',\n          content: utils.hasDelimiters('only', options)\n        }\n      ],\n      transform: (tokens, i) => {\n        let token = tokens[i + 2];\n        let tableOpen = utils.getMatchingOpeningToken(tokens, i);\n        let attrs = utils.getAttrs(token.content, 0, options);\n        // add attributes\n        utils.addAttrs(attrs, tableOpen);\n        // remove <p>{.c}</p>\n        tokens.splice(i + 1, 3);\n      }\n    }, {\n      /**\n       * *emphasis*{.with attrs=1}\n       */\n      name: 'inline attributes',\n      tests: [\n        {\n          shift: 0,\n          type: 'inline',\n          children: [\n            {\n              shift: -1,\n              nesting: -1  // closing inline tag, </em>{.a}\n            }, {\n              shift: 0,\n              type: 'text',\n              content: utils.hasDelimiters('start', options)\n            }\n          ]\n        }\n      ],\n      transform: (tokens, i, j) => {\n        let token = tokens[i].children[j];\n        let content = token.content;\n        let attrs = utils.getAttrs(content, 0, options);\n        let openingToken = utils.getMatchingOpeningToken(tokens[i].children, j - 1);\n        utils.addAttrs(attrs, openingToken);\n        token.content = content.slice(content.indexOf(options.rightDelimiter) + options.rightDelimiter.length);\n      }\n    }, {\n      /**\n       * - item\n       * {.a}\n       */\n      name: 'list softbreak',\n      tests: [\n        {\n          shift: -2,\n          type: 'list_item_open'\n        }, {\n          shift: 0,\n          type: 'inline',\n          children: [\n            {\n              position: -2,\n              type: 'softbreak'\n            }, {\n              position: -1,\n              content: utils.hasDelimiters('only', options)\n            }\n          ]\n        }\n      ],\n      transform: (tokens, i, j) => {\n        let token = tokens[i].children[j];\n        let content = token.content;\n        let attrs = utils.getAttrs(content, 0, options);\n        let ii = i - 2;\n        while (tokens[ii - 1] &&\n          tokens[ii - 1].type !== 'ordered_list_open' &&\n          tokens[ii - 1].type !== 'bullet_list_open') { ii--; }\n        utils.addAttrs(attrs, tokens[ii - 1]);\n        tokens[i].children = tokens[i].children.slice(0, -2);\n      }\n    }, {\n      /**\n       * - nested list\n       *   - with double \\n\n       *   {.a} <-- apply to nested ul\n       *\n       * {.b} <-- apply to root <ul>\n       */\n      name: 'list double softbreak',\n      tests: [\n        {\n          // let this token be i = 0 so that we can erase\n          // the <p>{.a}</p> tokens below\n          shift: 0,\n          type: (str) =>\n            str === 'bullet_list_close' ||\n            str === 'ordered_list_close'\n        }, {\n          shift: 1,\n          type: 'paragraph_open'\n        }, {\n          shift: 2,\n          type: 'inline',\n          content: utils.hasDelimiters('only', options),\n          children: (arr) => arr.length === 1\n        }, {\n          shift: 3,\n          type: 'paragraph_close'\n        }\n      ],\n      transform: (tokens, i) => {\n        let token = tokens[i + 2];\n        let content = token.content;\n        let attrs = utils.getAttrs(content, 0, options);\n        let openingToken = utils.getMatchingOpeningToken(tokens, i);\n        utils.addAttrs(attrs, openingToken);\n        tokens.splice(i + 1, 3);\n      }\n    }, {\n      /**\n       * - end of {.list-item}\n       */\n      name: 'list item end',\n      tests: [\n        {\n          shift: -2,\n          type: 'list_item_open'\n        }, {\n          shift: 0,\n          type: 'inline',\n          children: [\n            {\n              position: -1,\n              content: utils.hasDelimiters('end', options)\n            }\n          ]\n        }\n      ],\n      transform: (tokens, i, j) => {\n        let token = tokens[i].children[j];\n        let content = token.content;\n        let attrs = utils.getAttrs(content, content.lastIndexOf(options.leftDelimiter), options);\n        utils.addAttrs(attrs, tokens[i - 2]);\n        let trimmed = content.slice(0, content.lastIndexOf(options.leftDelimiter));\n        token.content = last(trimmed) !== ' ' ?\n          trimmed : trimmed.slice(0, -1);\n      }\n    }, {\n      /**\n       * something with softbreak\n       * {.cls}\n       */\n      name: '\\n{.a} softbreak then curly in start',\n      tests: [\n        {\n          shift: 0,\n          type: 'inline',\n          children: [\n            {\n              position: -2,\n              type: 'softbreak'\n            }, {\n              position: -1,\n              type: 'text',\n              content: utils.hasDelimiters('only', options)\n            }\n          ]\n        }\n      ],\n      transform: (tokens, i, j) => {\n        let token = tokens[i].children[j];\n        let attrs = utils.getAttrs(token.content, 0, options);\n        // find last closing tag\n        let ii = i + 1;\n        while (tokens[ii + 1] && tokens[ii + 1].nesting === -1) { ii++; }\n        let openingToken = utils.getMatchingOpeningToken(tokens, ii);\n        utils.addAttrs(attrs, openingToken);\n        tokens[i].children = tokens[i].children.slice(0, -2);\n      }\n    }, {\n      /**\n       * horizontal rule --- {#id}\n       */\n      name: 'horizontal rule',\n      tests: [\n        {\n          shift: 0,\n          type: 'paragraph_open'\n        },\n        {\n          shift: 1,\n          type: 'inline',\n          children: (arr) => arr.length === 1,\n          content: (str) => str.match(__hr) !== null,\n        },\n        {\n          shift: 2,\n          type: 'paragraph_close'\n        }\n      ],\n      transform: (tokens, i) => {\n        let token = tokens[i];\n        token.type = 'hr';\n        token.tag = 'hr';\n        token.nesting = 0;\n        let content = tokens[i + 1].content;\n        let start = content.lastIndexOf(options.leftDelimiter);\n        token.attrs = utils.getAttrs(content, start, options);\n        token.markup = content;\n        tokens.splice(i + 1, 2);\n      }\n    }, {\n      /**\n       * end of {.block}\n       */\n      name: 'end of block',\n      tests: [\n        {\n          shift: 0,\n          type: 'inline',\n          children: [\n            {\n              position: -1,\n              content: utils.hasDelimiters('end', options),\n              type: (t) => t !== 'code_inline'\n            }\n          ]\n        }\n      ],\n      transform: (tokens, i, j) => {\n        let token = tokens[i].children[j];\n        let content = token.content;\n        let attrs = utils.getAttrs(content, content.lastIndexOf(options.leftDelimiter), options);\n        let ii = i + 1;\n        while (tokens[ii + 1] && tokens[ii + 1].nesting === -1) { ii++; }\n        let openingToken = utils.getMatchingOpeningToken(tokens, ii);\n        utils.addAttrs(attrs, openingToken);\n        let trimmed = content.slice(0, content.lastIndexOf(options.leftDelimiter));\n        token.content = last(trimmed) !== ' ' ?\n          trimmed : trimmed.slice(0, -1);\n      }\n    }\n  ]);\n};\n\n// get last element of array or string\nfunction last(arr) {\n  return arr.slice(-1)[0];\n}","'use strict';\n/**\n * parse {.class #id key=val} strings\n * @param {string} str: string to parse\n * @param {int} start: where to start parsing (including {)\n * @returns {2d array}: [['key', 'val'], ['class', 'red']]\n */\nexports.getAttrs = function (str, start, options) {\n  // not tab, line feed, form feed, space, solidus, greater than sign, quotation mark, apostrophe and equals sign\n  const allowedKeyChars = /[^\\t\\n\\f />\"'=]/;\n  const pairSeparator = ' ';\n  const keySeparator = '=';\n  const classChar = '.';\n  const idChar = '#';\n\n  const attrs = [];\n  let key = '';\n  let value = '';\n  let parsingKey = true;\n  let valueInsideQuotes = false;\n\n  // read inside {}\n  // start + left delimiter length to avoid beginning {\n  // breaks when } is found or end of string\n  for (let i = start + options.leftDelimiter.length; i < str.length; i++) {\n    if (str.slice(i, i + options.rightDelimiter.length) === options.rightDelimiter) {\n      if (key !== '') { attrs.push([key, value]); }\n      break;\n    }\n    let char_ = str.charAt(i);\n\n    // switch to reading value if equal sign\n    if (char_ === keySeparator && parsingKey) {\n      parsingKey = false;\n      continue;\n    }\n\n    // {.class} {..css-module}\n    if (char_ === classChar && key === '') {\n      if (str.charAt(i + 1) === classChar) {\n        key = 'css-module';\n        i += 1;\n      } else {\n        key = 'class';\n      }\n      parsingKey = false;\n      continue;\n    }\n\n    // {#id}\n    if (char_ === idChar && key === '') {\n      key = 'id';\n      parsingKey = false;\n      continue;\n    }\n\n    // {value=\"inside quotes\"}\n    if (char_ === '\"' && value === '') {\n      valueInsideQuotes = true;\n      continue;\n    }\n    if (char_ === '\"' && valueInsideQuotes) {\n      valueInsideQuotes = false;\n      continue;\n    }\n\n    // read next key/value pair\n    if ((char_ === pairSeparator && !valueInsideQuotes)) {\n      if (key === '') {\n        // beginning or ending space: { .red } vs {.red}\n        continue;\n      }\n      attrs.push([key, value]);\n      key = '';\n      value = '';\n      parsingKey = true;\n      continue;\n    }\n\n    // continue if character not allowed\n    if (parsingKey && char_.search(allowedKeyChars) === -1) {\n      continue;\n    }\n\n    // no other conditions met; append to key/value\n    if (parsingKey) {\n      key += char_;\n      continue;\n    }\n    value += char_;\n  }\n\n  if (options.allowedAttributes && options.allowedAttributes.length) {\n    let allowedAttributes = options.allowedAttributes;\n\n    return attrs.filter(function (attrPair) {\n      let attr = attrPair[0];\n\n      function isAllowedAttribute (allowedAttribute) {\n        return (attr === allowedAttribute\n          || (allowedAttribute instanceof RegExp && allowedAttribute.test(attr))\n        );\n      }\n\n      return allowedAttributes.some(isAllowedAttribute);\n    });\n\n  } else {\n    return attrs;\n  }\n};\n\n/**\n * add attributes from [['key', 'val']] list\n * @param {array} attrs: [['key', 'val']]\n * @param {token} token: which token to add attributes\n * @returns token\n */\nexports.addAttrs = function (attrs, token) {\n  for (let j = 0, l = attrs.length; j < l; ++j) {\n    let key = attrs[j][0];\n    if (key === 'class') {\n      token.attrJoin('class', attrs[j][1]);\n    } else if (key === 'css-module') {\n      token.attrJoin('css-module', attrs[j][1]);\n    } else {\n      token.attrPush(attrs[j]);\n    }\n  }\n  return token;\n};\n\n/**\n * Does string have properly formatted curly?\n *\n * start: '{.a} asdf'\n * middle: 'a{.b}c'\n * end: 'asdf {.a}'\n * only: '{.a}'\n *\n * @param {string} where to expect {} curly. start, middle, end or only.\n * @return {function(string)} Function which testes if string has curly.\n */\nexports.hasDelimiters = function (where, options) {\n\n  if (!where) {\n    throw new Error('Parameter `where` not passed. Should be \"start\", \"middle\", \"end\" or \"only\".');\n  }\n\n  /**\n   * @param {string} str\n   * @return {boolean}\n   */\n  return function (str) {\n    // we need minimum three chars, for example {b}\n    let minCurlyLength = options.leftDelimiter.length + 1 + options.rightDelimiter.length;\n    if (!str || typeof str !== 'string' || str.length < minCurlyLength) {\n      return false;\n    }\n\n    function validCurlyLength (curly) {\n      let isClass = curly.charAt(options.leftDelimiter.length) === '.';\n      let isId = curly.charAt(options.leftDelimiter.length) === '#';\n      return (isClass || isId)\n        ? curly.length >= (minCurlyLength + 1)\n        : curly.length >= minCurlyLength;\n    }\n\n    let start, end, slice, nextChar;\n    let rightDelimiterMinimumShift = minCurlyLength - options.rightDelimiter.length;\n    switch (where) {\n    case 'start':\n      // first char should be {, } found in char 2 or more\n      slice = str.slice(0, options.leftDelimiter.length);\n      start = slice === options.leftDelimiter ? 0 : -1;\n      end = start === -1 ? -1 : str.indexOf(options.rightDelimiter, rightDelimiterMinimumShift);\n      // check if next character is not one of the delimiters\n      nextChar = str.charAt(end + options.rightDelimiter.length);\n      if (nextChar && options.rightDelimiter.indexOf(nextChar) !== -1) {\n        end = -1;\n      }\n      break;\n\n    case 'end':\n      // last char should be }\n      start = str.lastIndexOf(options.leftDelimiter);\n      end = start === -1 ? -1 : str.indexOf(options.rightDelimiter, start + rightDelimiterMinimumShift);\n      end = end === str.length - options.rightDelimiter.length ? end : -1;\n      break;\n\n    case 'only':\n      // '{.a}'\n      slice = str.slice(0, options.leftDelimiter.length);\n      start = slice === options.leftDelimiter ? 0 : -1;\n      slice = str.slice(str.length - options.rightDelimiter.length);\n      end = slice === options.rightDelimiter ? str.length - options.rightDelimiter.length : -1;\n      break;\n    }\n\n    return start !== -1 && end !== -1 && validCurlyLength(str.substring(start, end + options.rightDelimiter.length));\n  };\n};\n\n/**\n * Removes last curly from string.\n */\nexports.removeDelimiter = function (str, options) {\n  const start = escapeRegExp(options.leftDelimiter);\n  const end = escapeRegExp(options.rightDelimiter);\n\n  let curly = new RegExp(\n    '[ \\\\n]?' + start + '[^' + start + end + ']+' + end + '$'\n  );\n  let pos = str.search(curly);\n\n  return pos !== -1 ? str.slice(0, pos) : str;\n};\n\n/**\n * Escapes special characters in string s such that the string\n * can be used in `new RegExp`. For example \"[\" becomes \"\\\\[\".\n *\n * @param {string} s Regex string.\n * @return {string} Escaped string.\n */\nfunction escapeRegExp (s) {\n  return s.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\nexports.escapeRegExp = escapeRegExp;\n\n/**\n * find corresponding opening block\n */\nexports.getMatchingOpeningToken = function (tokens, i) {\n  if (tokens[i].type === 'softbreak') {\n    return false;\n  }\n  // non closing blocks, example img\n  if (tokens[i].nesting === 0) {\n    return tokens[i];\n  }\n\n  // inline tokens changes level on same token\n  // that have .nesting +- 1\n  let level = tokens[i].block\n    ? tokens[i].level\n    : tokens[i].level + 1;  // adjust for inline tokens\n\n  let type = tokens[i].type.replace('_close', '_open');\n\n  for (; i >= 0; --i) {\n    if (tokens[i].type === type && tokens[i].level === level) {\n      return tokens[i];\n    }\n  }\n};\n\n\n/**\n * from https://github.com/markdown-it/markdown-it/blob/master/lib/common/utils.js\n */\nlet HTML_ESCAPE_TEST_RE = /[&<>\"]/;\nlet HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g;\nlet HTML_REPLACEMENTS = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;'\n};\n\nfunction replaceUnsafeChar(ch) {\n  return HTML_REPLACEMENTS[ch];\n}\n\nexports.escapeHtml = function (str) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar);\n  }\n  return str;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n  return IndexedObject(requireObjectCoercible(it));\n};\n","import { ValidationController } from 'aurelia-validation';\nimport { Container } from 'aurelia-dependency-injection';\nimport { ValidationControllerFactory } from 'aurelia-validation';\n\nimport { ValidationRenderer, RenderInstruction, ValidateResult } from 'aurelia-validation';\n\nexport class BootstrapFormRenderer {\n  render(instruction: RenderInstruction) {\n\n    for (let { result, elements } of instruction.unrender) {\n      for (let element of elements) {\n        this.remove(element, result);\n      }\n    }\n\n    for (let { result, elements } of instruction.render) {\n      for (let element of elements) {\n        this.add(element, result);\n      }\n    }\n  }\n\n  add(element: Element, result: ValidateResult) {\n    if (result.valid) {\n      return;\n    }\n\n    // add the is-invalid class to the enclosing form-group div\n    element.classList.add('is-invalid');\n\n    const formGroup = element.closest('.form-group');\n    if (!formGroup) {\n      return;\n    }\n\n    // add help-block\n    const message = document.createElement('div');\n    message.className = 'invalid-feedback';\n    message.textContent = result.message;\n    message.id = `validation-message-${result.id}`;\n    formGroup.appendChild(message);\n  }\n\n  remove(element: Element, result: ValidateResult) {\n    if (result.valid) {\n      return;\n    }\n\n    const formGroup = element.closest('.form-group');\n    if (!formGroup) {\n      return;\n    }\n\n    // remove help-block\n    const message = formGroup.querySelector(`#validation-message-${result.id}`);\n    if (message) {\n      formGroup.removeChild(message);\n\n      // remove the is-invalid class from the enclosing form-group div\n      if (formGroup.querySelectorAll('.invalid-feedback').length === 0) {\n        element.classList.remove('is-invalid');\n      }\n    }\n  }\n}\n\nexport class BootstrapValidationControllerFactory extends ValidationControllerFactory {\n  constructor(container: Container) {\n    super(container);\n  }\n  public static get(container: Container) {\n    return new BootstrapValidationControllerFactory(container);\n  }\n\n  createForCurrentScope(): ValidationController {\n    let ctrl = super.createForCurrentScope();\n    ctrl.addRenderer(new BootstrapFormRenderer());\n    return ctrl;\n  }\n}\n\nexport class BootstrapValidationController extends ValidationController {\n  public static get(container: Container) {\n    return new BootstrapValidationControllerFactory(container).createForCurrentScope();\n  }\n}\n\n(BootstrapValidationController as any)['protocol:aurelia:resolver'] = true;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar firebase = _interopDefault(require('@firebase/app'));\nvar tslib_1 = require('tslib');\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Standard error codes for different ways a request can fail, as defined by:\r\n * https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto\r\n *\r\n * This map is used primarily to convert from a backend error code string to\r\n * a client SDK error code string, and make sure it's in the supported set.\r\n */\r\nvar errorCodeMap = {\r\n    OK: 'ok',\r\n    CANCELLED: 'cancelled',\r\n    UNKNOWN: 'unknown',\r\n    INVALID_ARGUMENT: 'invalid-argument',\r\n    DEADLINE_EXCEEDED: 'deadline-exceeded',\r\n    NOT_FOUND: 'not-found',\r\n    ALREADY_EXISTS: 'already-exists',\r\n    PERMISSION_DENIED: 'permission-denied',\r\n    UNAUTHENTICATED: 'unauthenticated',\r\n    RESOURCE_EXHAUSTED: 'resource-exhausted',\r\n    FAILED_PRECONDITION: 'failed-precondition',\r\n    ABORTED: 'aborted',\r\n    OUT_OF_RANGE: 'out-of-range',\r\n    UNIMPLEMENTED: 'unimplemented',\r\n    INTERNAL: 'internal',\r\n    UNAVAILABLE: 'unavailable',\r\n    DATA_LOSS: 'data-loss'\r\n};\r\n/**\r\n * An explicit error that can be thrown from a handler to send an error to the\r\n * client that called the function.\r\n */\r\nvar HttpsErrorImpl = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HttpsErrorImpl, _super);\r\n    function HttpsErrorImpl(code, message, details) {\r\n        var _this = _super.call(this, message) || this;\r\n        // This is a workaround for a bug in TypeScript when extending Error:\r\n        // tslint:disable-next-line\r\n        // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n        Object.setPrototypeOf(_this, HttpsErrorImpl.prototype);\r\n        _this.code = code;\r\n        _this.details = details;\r\n        return _this;\r\n    }\r\n    return HttpsErrorImpl;\r\n}(Error));\r\n/**\r\n * Takes an HTTP status code and returns the corresponding ErrorCode.\r\n * This is the standard HTTP status code -> error mapping defined in:\r\n * https://github.com/googleapis/googleapis/blob/master/google/rpc/code.proto\r\n *\r\n * @param status An HTTP status code.\r\n * @return The corresponding ErrorCode, or ErrorCode.UNKNOWN if none.\r\n */\r\nfunction codeForHTTPStatus(status) {\r\n    // Make sure any successful status is OK.\r\n    if (status >= 200 && status < 300) {\r\n        return 'ok';\r\n    }\r\n    switch (status) {\r\n        case 0:\r\n            // This can happen if the server returns 500.\r\n            return 'internal';\r\n        case 400:\r\n            return 'invalid-argument';\r\n        case 401:\r\n            return 'unauthenticated';\r\n        case 403:\r\n            return 'permission-denied';\r\n        case 404:\r\n            return 'not-found';\r\n        case 409:\r\n            return 'aborted';\r\n        case 429:\r\n            return 'resource-exhausted';\r\n        case 499:\r\n            return 'cancelled';\r\n        case 500:\r\n            return 'internal';\r\n        case 501:\r\n            return 'unimplemented';\r\n        case 503:\r\n            return 'unavailable';\r\n        case 504:\r\n            return 'deadline-exceeded';\r\n    }\r\n    return 'unknown';\r\n}\r\n/**\r\n * Takes an HTTP response and returns the corresponding Error, if any.\r\n */\r\nfunction _errorForResponse(status, bodyJSON, serializer) {\r\n    var code = codeForHTTPStatus(status);\r\n    // Start with reasonable defaults from the status code.\r\n    var description = code;\r\n    var details = undefined;\r\n    // Then look through the body for explicit details.\r\n    try {\r\n        var errorJSON = bodyJSON.error;\r\n        if (errorJSON) {\r\n            var status_1 = errorJSON.status;\r\n            if (typeof status_1 === 'string') {\r\n                if (!errorCodeMap[status_1]) {\r\n                    // They must've included an unknown error code in the body.\r\n                    return new HttpsErrorImpl('internal', 'internal');\r\n                }\r\n                code = errorCodeMap[status_1];\r\n            }\r\n            // TODO(klimt): Add better default descriptions for error enums.\r\n            // The default description needs to be updated for the new code.\r\n            description = status_1;\r\n            var message = errorJSON.message;\r\n            if (typeof message === 'string') {\r\n                description = message;\r\n            }\r\n            details = errorJSON.details;\r\n            if (details !== undefined) {\r\n                details = serializer.decode(details);\r\n            }\r\n        }\r\n    }\r\n    catch (e) {\r\n        // If we couldn't parse explicit error data, that's fine.\r\n    }\r\n    if (code === 'ok') {\r\n        // Technically, there's an edge case where a developer could explicitly\r\n        // return an error code of OK, and we will treat it as success, but that\r\n        // seems reasonable.\r\n        return null;\r\n    }\r\n    return new HttpsErrorImpl(code, description, details);\r\n}\n\n/**\r\n * Helper class to get metadata that should be included with a function call.\r\n */\r\nvar ContextProvider = /** @class */ (function () {\r\n    function ContextProvider(app) {\r\n        this.app = app;\r\n    }\r\n    ContextProvider.prototype.getAuthToken = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var token, e_1;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        _a.trys.push([0, 2, , 3]);\r\n                        return [4 /*yield*/, this.app.INTERNAL.getToken()];\r\n                    case 1:\r\n                        token = _a.sent();\r\n                        if (!token) {\r\n                            return [2 /*return*/, undefined];\r\n                        }\r\n                        return [2 /*return*/, token.accessToken];\r\n                    case 2:\r\n                        e_1 = _a.sent();\r\n                        // If there's any error when trying to get the auth token, leave it off.\r\n                        return [2 /*return*/, undefined];\r\n                    case 3: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    ContextProvider.prototype.getInstanceIdToken = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var messaging, token, e_2;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        _a.trys.push([0, 2, , 3]);\r\n                        // HACK: Until we have a separate instanceId package, this is a quick way\r\n                        // to load in the messaging instance for this app.\r\n                        if (!this.app.messaging) {\r\n                            return [2 /*return*/, undefined];\r\n                        }\r\n                        messaging = this.app.messaging();\r\n                        return [4 /*yield*/, messaging.getToken()];\r\n                    case 1:\r\n                        token = _a.sent();\r\n                        if (!token) {\r\n                            return [2 /*return*/, undefined];\r\n                        }\r\n                        return [2 /*return*/, token];\r\n                    case 2:\r\n                        e_2 = _a.sent();\r\n                        // We don't warn on this, because it usually means messaging isn't set up.\r\n                        // console.warn('Failed to retrieve instance id token.', e);\r\n                        // If there's any error when trying to get the token, leave it off.\r\n                        return [2 /*return*/, undefined];\r\n                    case 3: return [2 /*return*/];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    ContextProvider.prototype.getContext = function () {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var authToken, instanceIdToken;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0: return [4 /*yield*/, this.getAuthToken()];\r\n                    case 1:\r\n                        authToken = _a.sent();\r\n                        return [4 /*yield*/, this.getInstanceIdToken()];\r\n                    case 2:\r\n                        instanceIdToken = _a.sent();\r\n                        return [2 /*return*/, { authToken: authToken, instanceIdToken: instanceIdToken }];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return ContextProvider;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar LONG_TYPE = 'type.googleapis.com/google.protobuf.Int64Value';\r\nvar UNSIGNED_LONG_TYPE = 'type.googleapis.com/google.protobuf.UInt64Value';\r\nfunction mapValues(o, f) {\r\n    var result = {};\r\n    for (var key in o) {\r\n        if (o.hasOwnProperty(key)) {\r\n            result[key] = f(o[key]);\r\n        }\r\n    }\r\n    return result;\r\n}\r\nvar Serializer = /** @class */ (function () {\r\n    function Serializer() {\r\n    }\r\n    // Takes data and encodes it in a JSON-friendly way, such that types such as\r\n    // Date are preserved.\r\n    Serializer.prototype.encode = function (data) {\r\n        var _this = this;\r\n        if (data === null || data === undefined) {\r\n            return null;\r\n        }\r\n        if (data instanceof Number) {\r\n            data = data.valueOf();\r\n        }\r\n        if (typeof data === 'number' && isFinite(data)) {\r\n            // Any number in JS is safe to put directly in JSON and parse as a double\r\n            // without any loss of precision.\r\n            return data;\r\n        }\r\n        if (data === true || data === false) {\r\n            return data;\r\n        }\r\n        if (Object.prototype.toString.call(data) === '[object String]') {\r\n            return data;\r\n        }\r\n        if (Array.isArray(data)) {\r\n            return data.map(function (x) { return _this.encode(x); });\r\n        }\r\n        if (typeof data === 'function' || typeof data === 'object') {\r\n            return mapValues(data, function (x) { return _this.encode(x); });\r\n        }\r\n        // If we got this far, the data is not encodable.\r\n        throw new Error('Data cannot be encoded in JSON: ' + data);\r\n    };\r\n    // Takes data that's been encoded in a JSON-friendly form and returns a form\r\n    // with richer datatypes, such as Dates, etc.\r\n    Serializer.prototype.decode = function (json) {\r\n        var _this = this;\r\n        if (json === null) {\r\n            return json;\r\n        }\r\n        if (json['@type']) {\r\n            switch (json['@type']) {\r\n                case LONG_TYPE:\r\n                // Fall through and handle this the same as unsigned.\r\n                case UNSIGNED_LONG_TYPE: {\r\n                    // Technically, this could work return a valid number for malformed\r\n                    // data if there was a number followed by garbage. But it's just not\r\n                    // worth all the extra code to detect that case.\r\n                    var value = parseFloat(json.value);\r\n                    if (isNaN(value)) {\r\n                        throw new Error('Data cannot be decoded from JSON: ' + json);\r\n                    }\r\n                    return value;\r\n                }\r\n                default: {\r\n                    throw new Error('Data cannot be decoded from JSON: ' + json);\r\n                }\r\n            }\r\n        }\r\n        if (Array.isArray(json)) {\r\n            return json.map(function (x) { return _this.decode(x); });\r\n        }\r\n        if (typeof json === 'function' || typeof json === 'object') {\r\n            return mapValues(json, function (x) { return _this.decode(x); });\r\n        }\r\n        // Anything else is safe to return.\r\n        return json;\r\n    };\r\n    return Serializer;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a Promise that will be rejected after the given duration.\r\n * The error will be of type HttpsErrorImpl.\r\n *\r\n * @param millis Number of milliseconds to wait before rejecting.\r\n */\r\nfunction failAfter(millis) {\r\n    return new Promise(function (_, reject) {\r\n        setTimeout(function () {\r\n            reject(new HttpsErrorImpl('deadline-exceeded', 'deadline-exceeded'));\r\n        }, millis);\r\n    });\r\n}\r\n/**\r\n * The main class for the Firebase Functions SDK.\r\n */\r\nvar Service = /** @class */ (function () {\r\n    /**\r\n     * Creates a new Functions service for the given app and (optional) region.\r\n     * @param app_ The FirebaseApp to use.\r\n     * @param region_ The region to call functions in.\r\n     */\r\n    function Service(app_, region_) {\r\n        var _this = this;\r\n        if (region_ === void 0) { region_ = 'us-central1'; }\r\n        this.app_ = app_;\r\n        this.region_ = region_;\r\n        this.serializer = new Serializer();\r\n        this.emulatorOrigin = null;\r\n        this.INTERNAL = {\r\n            delete: function () {\r\n                return _this.deleteService();\r\n            }\r\n        };\r\n        this.contextProvider = new ContextProvider(app_);\r\n        // Cancels all ongoing requests when resolved.\r\n        this.cancelAllRequests = new Promise(function (resolve) {\r\n            _this.deleteService = function () {\r\n                return resolve();\r\n            };\r\n        });\r\n    }\r\n    Object.defineProperty(Service.prototype, \"app\", {\r\n        get: function () {\r\n            return this.app_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Returns the URL for a callable with the given name.\r\n     * @param name The name of the callable.\r\n     */\r\n    Service.prototype._url = function (name) {\r\n        var projectId = this.app_.options.projectId;\r\n        var region = this.region_;\r\n        if (this.emulatorOrigin !== null) {\r\n            var origin_1 = this.emulatorOrigin;\r\n            return origin_1 + \"/\" + projectId + \"/\" + region + \"/\" + name;\r\n        }\r\n        return \"https://\" + region + \"-\" + projectId + \".cloudfunctions.net/\" + name;\r\n    };\r\n    /**\r\n     * Changes this instance to point to a Cloud Functions emulator running\r\n     * locally. See https://firebase.google.com/docs/functions/local-emulator\r\n     *\r\n     * @param origin The origin of the local emulator, such as\r\n     * \"http://localhost:5005\".\r\n     */\r\n    Service.prototype.useFunctionsEmulator = function (origin) {\r\n        this.emulatorOrigin = origin;\r\n    };\r\n    /**\r\n     * Returns a reference to the callable https trigger with the given name.\r\n     * @param name The name of the trigger.\r\n     */\r\n    Service.prototype.httpsCallable = function (name, options) {\r\n        var _this = this;\r\n        var callable = function (data) {\r\n            return _this.call(name, data, options || {});\r\n        };\r\n        return callable;\r\n    };\r\n    /**\r\n     * Does an HTTP POST and returns the completed response.\r\n     * @param url The url to post to.\r\n     * @param body The JSON body of the post.\r\n     * @param headers The HTTP headers to include in the request.\r\n     * @return A Promise that will succeed when the request finishes.\r\n     */\r\n    Service.prototype.postJSON = function (url, body, headers) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var response, e_1, json, e_2;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        headers.append('Content-Type', 'application/json');\r\n                        _a.label = 1;\r\n                    case 1:\r\n                        _a.trys.push([1, 3, , 4]);\r\n                        return [4 /*yield*/, fetch(url, {\r\n                                method: 'POST',\r\n                                body: JSON.stringify(body),\r\n                                headers: headers\r\n                            })];\r\n                    case 2:\r\n                        response = _a.sent();\r\n                        return [3 /*break*/, 4];\r\n                    case 3:\r\n                        e_1 = _a.sent();\r\n                        // This could be an unhandled error on the backend, or it could be a\r\n                        // network error. There's no way to know, since an unhandled error on the\r\n                        // backend will fail to set the proper CORS header, and thus will be\r\n                        // treated as a network error by fetch.\r\n                        return [2 /*return*/, {\r\n                                status: 0,\r\n                                json: null\r\n                            }];\r\n                    case 4:\r\n                        json = null;\r\n                        _a.label = 5;\r\n                    case 5:\r\n                        _a.trys.push([5, 7, , 8]);\r\n                        return [4 /*yield*/, response.json()];\r\n                    case 6:\r\n                        json = _a.sent();\r\n                        return [3 /*break*/, 8];\r\n                    case 7:\r\n                        e_2 = _a.sent();\r\n                        return [3 /*break*/, 8];\r\n                    case 8: return [2 /*return*/, {\r\n                            status: response.status,\r\n                            json: json\r\n                        }];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    /**\r\n     * Calls a callable function asynchronously and returns the result.\r\n     * @param name The name of the callable trigger.\r\n     * @param data The data to pass as params to the function.s\r\n     */\r\n    Service.prototype.call = function (name, data, options) {\r\n        return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n            var url, body, headers, context, timeout, response, error, responseData, decodedData;\r\n            return tslib_1.__generator(this, function (_a) {\r\n                switch (_a.label) {\r\n                    case 0:\r\n                        url = this._url(name);\r\n                        // Encode any special types, such as dates, in the input data.\r\n                        data = this.serializer.encode(data);\r\n                        body = { data: data };\r\n                        headers = new Headers();\r\n                        return [4 /*yield*/, this.contextProvider.getContext()];\r\n                    case 1:\r\n                        context = _a.sent();\r\n                        if (context.authToken) {\r\n                            headers.append('Authorization', 'Bearer ' + context.authToken);\r\n                        }\r\n                        if (context.instanceIdToken) {\r\n                            headers.append('Firebase-Instance-ID-Token', context.instanceIdToken);\r\n                        }\r\n                        timeout = options.timeout || 70000;\r\n                        return [4 /*yield*/, Promise.race([\r\n                                this.postJSON(url, body, headers),\r\n                                failAfter(timeout),\r\n                                this.cancelAllRequests\r\n                            ])];\r\n                    case 2:\r\n                        response = _a.sent();\r\n                        // If service was deleted, interrupted response throws an error.\r\n                        if (!response) {\r\n                            throw new HttpsErrorImpl('cancelled', 'Firebase Functions instance was deleted.');\r\n                        }\r\n                        error = _errorForResponse(response.status, response.json, this.serializer);\r\n                        if (error) {\r\n                            throw error;\r\n                        }\r\n                        if (!response.json) {\r\n                            throw new HttpsErrorImpl('internal', 'Response is not valid JSON object.');\r\n                        }\r\n                        responseData = response.json.data;\r\n                        // TODO(klimt): For right now, allow \"result\" instead of \"data\", for\r\n                        // backwards compatibility.\r\n                        if (typeof responseData === 'undefined') {\r\n                            responseData = response.json.result;\r\n                        }\r\n                        if (typeof responseData === 'undefined') {\r\n                            // Consider the response malformed.\r\n                            throw new HttpsErrorImpl('internal', 'Response is missing data field.');\r\n                        }\r\n                        decodedData = this.serializer.decode(responseData);\r\n                        return [2 /*return*/, { data: decodedData }];\r\n                }\r\n            });\r\n        });\r\n    };\r\n    return Service;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Type constant for Firebase Functions.\r\n */\r\nvar FUNCTIONS_TYPE = 'functions';\r\nfunction factory(app, unused, region) {\r\n    return new Service(app, region);\r\n}\r\nfunction registerFunctions(instance) {\r\n    var namespaceExports = {\r\n        // no-inline\r\n        Functions: Service\r\n    };\r\n    instance.INTERNAL.registerService(FUNCTIONS_TYPE, factory, namespaceExports, \r\n    // We don't need to wait on any AppHooks.\r\n    undefined, \r\n    // Allow multiple functions instances per app.\r\n    true);\r\n}\r\nregisterFunctions(firebase);\n\nexports.registerFunctions = registerFunctions;\n//# sourceMappingURL=index.cjs.js.map\n","// With default aurelia-loader-webpack config, this module is added as an extra entry\n// before any other code executes so that PAL.Loader is properly configured.\n// There are several tricky points worth noticing.\n// \n// We don't add aurelia-loader-webpack itself as an entry point (used to until 2.0 RC2)\n// because it (transitively) brings too much bagage with itself, most notably polyfills.\n// This made it super-hard to add other polyfills before Aurelia's and led to various bugs.\n//\n// We don't add custom code in aurelia-pal or aurelia-loader or aurelia-bootstrapper to detect\n// the Webpack environment and configure the loader because they might live in a DLL.\n// If they do, they would bring aurelia-loader-webpack along in the DLL and this is a special \n// library that *has to be in the main chunk.*\n//\n// The over-complicated design I've settled upon in the end is to use this special module\n// as an entry point that configures aurelia-loader-webpack. It has minimal static imports:\n// just aurelia-pal, which itself has no other dependencies and doesn't run much code.\n// It hacks the loader field into a getter so that it can synchronously load aurelia-loader-webpack\n// just in time when it is demanded by aurelia-bootstrapper.\n// This enables users to load polyfills before aurelia-loader-webpack is actually loaded.\n\nimport { PLATFORM } from \"aurelia-pal\";\n\nvar Loader;\n\nObject.defineProperty(PLATFORM, \"Loader\", {\n  get: function() {\n    return Loader || (Loader = require(\"aurelia-loader-webpack\").WebpackLoader);\n  },\n  set: function(value) {\n    Loader = value;\n  }\n});\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n    function verb(n) { return function (v) { return step([n, v]); }; }\n    function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (_) try {\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n            if (y = 0, t) op = [op[0] & 2, t.value];\n            switch (op[0]) {\n                case 0: case 1: t = op; break;\n                case 4: _.label++; return { value: op[1], done: false };\n                case 5: _.label++; y = op[1]; op = [0]; continue;\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\n                default:\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                    if (t[2]) _.ops.pop();\n                    _.trys.pop(); continue;\n            }\n            op = body.call(thisArg, _);\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n    }\n};\nimport { Origin } from 'aurelia-metadata';\nimport { Loader } from 'aurelia-loader';\nimport { DOM, PLATFORM } from 'aurelia-pal';\n/**\n* An implementation of the TemplateLoader interface implemented with text-based loading.\n*/\nvar TextTemplateLoader = /** @class */ (function () {\n    function TextTemplateLoader() {\n    }\n    /**\n    * Loads a template.\n    * @param loader The loader that is requesting the template load.\n    * @param entry The TemplateRegistryEntry to load and populate with a template.\n    * @return A promise which resolves when the TemplateRegistryEntry is loaded with a template.\n    */\n    TextTemplateLoader.prototype.loadTemplate = function (loader, entry) {\n        return __awaiter(this, void 0, void 0, function () {\n            var text;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, loader.loadText(entry.address)];\n                    case 1:\n                        text = _a.sent();\n                        entry.template = DOM.createTemplateFromMarkup(text);\n                        return [2 /*return*/];\n                }\n            });\n        });\n    };\n    return TextTemplateLoader;\n}());\nexport { TextTemplateLoader };\nexport function ensureOriginOnExports(moduleExports, moduleId) {\n    var target = moduleExports;\n    var key;\n    var exportedValue;\n    if (target.__useDefault) {\n        target = target.default;\n    }\n    Origin.set(target, new Origin(moduleId, 'default'));\n    if (typeof target === 'object') {\n        for (key in target) {\n            exportedValue = target[key];\n            if (typeof exportedValue === 'function') {\n                Origin.set(exportedValue, new Origin(moduleId, key));\n            }\n        }\n    }\n    return moduleExports;\n}\n/**\n* A default implementation of the Loader abstraction which works with webpack (extended common-js style).\n*/\nvar WebpackLoader = /** @class */ (function (_super) {\n    __extends(WebpackLoader, _super);\n    function WebpackLoader() {\n        var _this = _super.call(this) || this;\n        _this.moduleRegistry = Object.create(null);\n        _this.loaderPlugins = Object.create(null);\n        _this.modulesBeingLoaded = new Map();\n        _this.useTemplateLoader(new TextTemplateLoader());\n        _this.addPlugin('template-registry-entry', {\n            fetch: function (moduleId) { return __awaiter(_this, void 0, void 0, function () {\n                var HmrContext, entry;\n                var _this = this;\n                return __generator(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            // HMR:\n                            if (module.hot) {\n                                if (!this.hmrContext) {\n                                    HmrContext = require('aurelia-hot-module-reload').HmrContext;\n                                    this.hmrContext = new HmrContext(this);\n                                }\n                                module.hot.accept(moduleId, function () { return __awaiter(_this, void 0, void 0, function () {\n                                    return __generator(this, function (_a) {\n                                        switch (_a.label) {\n                                            case 0: return [4 /*yield*/, this.hmrContext.handleViewChange(moduleId)];\n                                            case 1:\n                                                _a.sent();\n                                                return [2 /*return*/];\n                                        }\n                                    });\n                                }); });\n                            }\n                            entry = this.getOrCreateTemplateRegistryEntry(moduleId);\n                            if (!!entry.templateIsLoaded) return [3 /*break*/, 2];\n                            return [4 /*yield*/, this.templateLoader.loadTemplate(this, entry)];\n                        case 1:\n                            _a.sent();\n                            _a.label = 2;\n                        case 2: return [2 /*return*/, entry];\n                    }\n                });\n            }); }\n        });\n        PLATFORM.eachModule = function (callback) {\n            var registry = __webpack_require__.c;\n            var cachedModuleIds = Object.getOwnPropertyNames(registry);\n            cachedModuleIds\n                // Note: we use .some here like a .forEach that can be \"break\"ed out of.\n                // It will stop iterating only when a truthy value is returned.\n                // Even though the docs say \"true\" explicitly, loader-default also goes by truthy\n                // and this is to keep it consistent with that.\n                .some(function (moduleId) {\n                var moduleExports = registry[moduleId].exports;\n                if (typeof moduleExports === 'object') {\n                    return callback(moduleId, moduleExports);\n                }\n                return false;\n            });\n        };\n        return _this;\n    }\n    WebpackLoader.prototype._import = function (address, defaultHMR) {\n        if (defaultHMR === void 0) { defaultHMR = true; }\n        return __awaiter(this, void 0, void 0, function () {\n            var addressParts, moduleId, loaderPlugin, plugin_1, asyncModuleId, callback;\n            var _this = this;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        addressParts = address.split('!');\n                        moduleId = addressParts.splice(addressParts.length - 1, 1)[0];\n                        loaderPlugin = addressParts.length === 1 ? addressParts[0] : null;\n                        if (!loaderPlugin) return [3 /*break*/, 2];\n                        plugin_1 = this.loaderPlugins[loaderPlugin];\n                        if (!plugin_1) {\n                            throw new Error(\"Plugin \" + loaderPlugin + \" is not registered in the loader.\");\n                        }\n                        if (module.hot && plugin_1.hot) {\n                            module.hot.accept(moduleId, function () { return plugin_1.hot(moduleId); });\n                        }\n                        return [4 /*yield*/, plugin_1.fetch(moduleId)];\n                    case 1: return [2 /*return*/, _a.sent()];\n                    case 2:\n                        if (__webpack_require__.m[moduleId]) {\n                            if (defaultHMR && module.hot && this.hmrContext) {\n                                module.hot.accept(moduleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\n                            }\n                            return [2 /*return*/, __webpack_require__(moduleId)];\n                        }\n                        asyncModuleId = \"async!\" + moduleId;\n                        if (!__webpack_require__.m[asyncModuleId]) return [3 /*break*/, 4];\n                        if (defaultHMR && module.hot && this.hmrContext) {\n                            module.hot.accept(moduleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\n                            module.hot.accept(asyncModuleId, function () { return _this.hmrContext.handleModuleChange(moduleId, module.hot); });\n                        }\n                        callback = __webpack_require__(asyncModuleId);\n                        return [4 /*yield*/, new Promise(callback)];\n                    case 3: return [2 /*return*/, _a.sent()];\n                    case 4: throw new Error(\"Unable to find module with ID: \" + moduleId);\n                }\n            });\n        });\n    };\n    /**\n    * Maps a module id to a source.\n    * @param id The module id.\n    * @param source The source to map the module to.\n    */\n    WebpackLoader.prototype.map = function (id, source) { };\n    /**\n    * Normalizes a module id.\n    * @param moduleId The module id to normalize.\n    * @param relativeTo What the module id should be normalized relative to.\n    * @return The normalized module id.\n    */\n    WebpackLoader.prototype.normalizeSync = function (moduleId, relativeTo) {\n        return moduleId;\n    };\n    /**\n    * Normalizes a module id.\n    * @param moduleId The module id to normalize.\n    * @param relativeTo What the module id should be normalized relative to.\n    * @return The normalized module id.\n    */\n    WebpackLoader.prototype.normalize = function (moduleId, relativeTo) {\n        return Promise.resolve(moduleId);\n    };\n    /**\n    * Instructs the loader to use a specific TemplateLoader instance for loading templates\n    * @param templateLoader The instance of TemplateLoader to use for loading templates.\n    */\n    WebpackLoader.prototype.useTemplateLoader = function (templateLoader) {\n        this.templateLoader = templateLoader;\n    };\n    /**\n    * Loads a collection of modules.\n    * @param ids The set of module ids to load.\n    * @return A Promise for an array of loaded modules.\n    */\n    WebpackLoader.prototype.loadAllModules = function (ids) {\n        var _this = this;\n        return Promise.all(ids.map(function (id) { return _this.loadModule(id); }));\n    };\n    /**\n    * Loads a module.\n    * @param moduleId The module ID to load.\n    * @return A Promise for the loaded module.\n    */\n    WebpackLoader.prototype.loadModule = function (moduleId, defaultHMR) {\n        if (defaultHMR === void 0) { defaultHMR = true; }\n        return __awaiter(this, void 0, void 0, function () {\n            var existing, beingLoaded, moduleExports;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0:\n                        existing = this.moduleRegistry[moduleId];\n                        if (existing) {\n                            return [2 /*return*/, existing];\n                        }\n                        beingLoaded = this.modulesBeingLoaded.get(moduleId);\n                        if (beingLoaded) {\n                            return [2 /*return*/, beingLoaded];\n                        }\n                        beingLoaded = this._import(moduleId, defaultHMR);\n                        this.modulesBeingLoaded.set(moduleId, beingLoaded);\n                        return [4 /*yield*/, beingLoaded];\n                    case 1:\n                        moduleExports = _a.sent();\n                        this.moduleRegistry[moduleId] = ensureOriginOnExports(moduleExports, moduleId);\n                        this.modulesBeingLoaded.delete(moduleId);\n                        return [2 /*return*/, moduleExports];\n                }\n            });\n        });\n    };\n    /**\n    * Loads a template.\n    * @param url The url of the template to load.\n    * @return A Promise for a TemplateRegistryEntry containing the template.\n    */\n    WebpackLoader.prototype.loadTemplate = function (url) {\n        return this.loadModule(this.applyPluginToUrl(url, 'template-registry-entry'), false);\n    };\n    /**\n    * Loads a text-based resource.\n    * @param url The url of the text file to load.\n    * @return A Promise for text content.\n    */\n    WebpackLoader.prototype.loadText = function (url) {\n        return __awaiter(this, void 0, void 0, function () {\n            var result;\n            return __generator(this, function (_a) {\n                switch (_a.label) {\n                    case 0: return [4 /*yield*/, this.loadModule(url, false)];\n                    case 1:\n                        result = _a.sent();\n                        if (result instanceof Array && result[0] instanceof Array && result.hasOwnProperty('toString')) {\n                            // we're dealing with a file loaded using the css-loader:\n                            return [2 /*return*/, result.toString()];\n                        }\n                        return [2 /*return*/, result];\n                }\n            });\n        });\n    };\n    /**\n    * Alters a module id so that it includes a plugin loader.\n    * @param url The url of the module to load.\n    * @param pluginName The plugin to apply to the module id.\n    * @return The plugin-based module id.\n    */\n    WebpackLoader.prototype.applyPluginToUrl = function (url, pluginName) {\n        return pluginName + \"!\" + url;\n    };\n    /**\n    * Registers a plugin with the loader.\n    * @param pluginName The name of the plugin.\n    * @param implementation The plugin implementation.\n    */\n    WebpackLoader.prototype.addPlugin = function (pluginName, implementation) {\n        this.loaderPlugins[pluginName] = implementation;\n    };\n    return WebpackLoader;\n}(Loader));\nexport { WebpackLoader };\nPLATFORM.Loader = WebpackLoader;\n","module.exports = function(originalModule) {\n\tif (!originalModule.webpackPolyfill) {\n\t\tvar module = Object.create(originalModule);\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"exports\", {\n\t\t\tenumerable: true\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport 'aurelia-polyfills';\nimport { PLATFORM, isInitialized } from 'aurelia-pal';\n\nvar bootstrapPromises = [];\nvar startResolve = void 0;\n\nvar startPromise = new Promise(function (resolve) {\n  return startResolve = resolve;\n});\nvar host = PLATFORM.global;\nvar isNodeLike = typeof process !== 'undefined' && !process.browser;\n\nfunction ready() {\n  if (!host.document || host.document.readyState === 'complete') {\n    return Promise.resolve();\n  }\n\n  return new Promise(function (resolve) {\n    host.document.addEventListener('DOMContentLoaded', completed);\n    host.addEventListener('load', completed);\n\n    function completed() {\n      host.document.removeEventListener('DOMContentLoaded', completed);\n      host.removeEventListener('load', completed);\n      resolve();\n    }\n  });\n}\n\nfunction createLoader() {\n  if (PLATFORM.Loader) {\n    return Promise.resolve(new PLATFORM.Loader());\n  }\n\n  if (typeof AURELIA_WEBPACK_2_0 === 'undefined') {\n    if (typeof __webpack_require__ !== 'undefined') {\n      var m = __webpack_require__(require.resolve('aurelia-loader-webpack'));\n      return Promise.resolve(new m.WebpackLoader());\n    }\n\n    if (host.System && typeof host.System.config === 'function') {\n      return host.System.normalize('aurelia-bootstrapper').then(function (bsn) {\n        return host.System.normalize('aurelia-loader-default', bsn);\n      }).then(function (loaderName) {\n        return host.System.import(loaderName).then(function (m) {\n          return new m.DefaultLoader();\n        });\n      });\n    }\n\n    if (typeof host.require === 'function' && typeof host.define === 'function' && _typeof(host.define.amd) === 'object') {\n      return new Promise(function (resolve, reject) {\n        return host.require(['aurelia-loader-default'], function (m) {\n          return resolve(new m.DefaultLoader());\n        }, reject);\n      });\n    }\n\n    if (isNodeLike && typeof module !== 'undefined' && typeof module.require !== 'undefined') {\n      var _m = module.require('aurelia-loader-nodejs');\n      return Promise.resolve(new _m.NodeJsLoader());\n    }\n  }\n\n  return Promise.reject('No PLATFORM.Loader is defined and there is neither a System API (ES6) or a Require API (AMD) globally available to load your app.');\n}\n\nfunction initializePal(loader) {\n  if (isInitialized) return Promise.resolve();\n\n  var type = void 0;\n\n  var isRenderer = isNodeLike && (process.type === 'renderer' || process.versions['node-webkit']);\n\n  if (isNodeLike && !isRenderer) {\n    type = 'nodejs';\n  } else if (typeof window !== 'undefined') {\n    type = 'browser';\n  } else if (typeof self !== 'undefined') {\n    type = 'worker';\n  } else {\n    throw new Error('Could not determine platform implementation to load.');\n  }\n\n  return loader.loadModule('aurelia-pal-' + type).then(function (palModule) {\n    return type === 'nodejs' && !isInitialized && palModule.globalize() || palModule.initialize();\n  });\n}\n\nfunction preparePlatform(loader) {\n  var map = function map(moduleId, relativeTo) {\n    return loader.normalize(moduleId, relativeTo).then(function (normalized) {\n      loader.map(moduleId, normalized);\n      return normalized;\n    });\n  };\n\n  return initializePal(loader).then(function () {\n    return loader.normalize('aurelia-bootstrapper');\n  }).then(function (bootstrapperName) {\n    var frameworkPromise = map(PLATFORM.moduleName('aurelia-framework', { exports: ['Aurelia'] }), bootstrapperName);\n\n    return Promise.all([frameworkPromise, frameworkPromise.then(function (frameworkName) {\n      return map('aurelia-dependency-injection', frameworkName);\n    }), map('aurelia-router', bootstrapperName), map('aurelia-logging-console', bootstrapperName)]);\n  }).then(function (_ref) {\n    var frameworkName = _ref[0];\n    return loader.loadModule(frameworkName);\n  }).then(function (fx) {\n    return startResolve(function () {\n      return new fx.Aurelia(loader);\n    });\n  });\n}\n\nfunction config(appHost, configModuleId, aurelia) {\n  aurelia.host = appHost;\n  aurelia.configModuleId = configModuleId || null;\n\n  if (configModuleId) {\n    return aurelia.loader.loadModule(configModuleId).then(function (customConfig) {\n      if (!customConfig.configure) {\n        throw new Error('Cannot initialize module \\'' + configModuleId + '\\' without a configure function.');\n      }\n\n      return customConfig.configure(aurelia);\n    });\n  }\n\n  aurelia.use.standardConfiguration().developmentLogging();\n\n  return aurelia.start().then(function () {\n    return aurelia.setRoot();\n  });\n}\n\nfunction run() {\n  return ready().then(createLoader).then(preparePlatform).then(function () {\n    var appHosts = host.document.querySelectorAll('[aurelia-app],[data-aurelia-app]');\n    for (var i = 0, ii = appHosts.length; i < ii; ++i) {\n      var appHost = appHosts[i];\n      var moduleId = appHost.getAttribute('aurelia-app') || appHost.getAttribute('data-aurelia-app');\n      bootstrap(config.bind(null, appHost, moduleId));\n    }\n\n    var toConsole = console.error.bind(console);\n    var bootstraps = bootstrapPromises.map(function (p) {\n      return p.catch(toConsole);\n    });\n    bootstrapPromises = null;\n    return Promise.all(bootstraps);\n  });\n}\n\nexport function bootstrap(configure) {\n  var p = startPromise.then(function (factory) {\n    return configure(factory());\n  });\n  if (bootstrapPromises) bootstrapPromises.push(p);\n  return p;\n}\n\nexport var starting = run();","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport { PLATFORM } from 'aurelia-pal';\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function (Object, GOPS) {\n    'use strict';\n\n    if (GOPS in Object) return;\n\n    var setDescriptor,\n        G = PLATFORM.global,\n        id = 0,\n        random = '' + Math.random(),\n        prefix = '__\\x01symbol:',\n        prefixLength = prefix.length,\n        internalSymbol = '__\\x01symbol@@' + random,\n        DP = 'defineProperty',\n        DPies = 'defineProperties',\n        GOPN = 'getOwnPropertyNames',\n        GOPD = 'getOwnPropertyDescriptor',\n        PIE = 'propertyIsEnumerable',\n        gOPN = Object[GOPN],\n        gOPD = Object[GOPD],\n        create = Object.create,\n        keys = Object.keys,\n        defineProperty = Object[DP],\n        $defineProperties = Object[DPies],\n        descriptor = gOPD(Object, GOPN),\n        ObjectProto = Object.prototype,\n        hOP = ObjectProto.hasOwnProperty,\n        pIE = ObjectProto[PIE],\n        toString = ObjectProto.toString,\n        indexOf = Array.prototype.indexOf || function (v) {\n      for (var i = this.length; i-- && this[i] !== v;) {}\n      return i;\n    },\n        addInternalIfNeeded = function addInternalIfNeeded(o, uid, enumerable) {\n      if (!hOP.call(o, internalSymbol)) {\n        defineProperty(o, internalSymbol, {\n          enumerable: false,\n          configurable: false,\n          writable: false,\n          value: {}\n        });\n      }\n      o[internalSymbol]['@@' + uid] = enumerable;\n    },\n        createWithSymbols = function createWithSymbols(proto, descriptors) {\n      var self = create(proto);\n      if (descriptors !== null && (typeof descriptors === 'undefined' ? 'undefined' : _typeof(descriptors)) === 'object') {\n        gOPN(descriptors).forEach(function (key) {\n          if (propertyIsEnumerable.call(descriptors, key)) {\n            $defineProperty(self, key, descriptors[key]);\n          }\n        });\n      }\n      return self;\n    },\n        copyAsNonEnumerable = function copyAsNonEnumerable(descriptor) {\n      var newDescriptor = create(descriptor);\n      newDescriptor.enumerable = false;\n      return newDescriptor;\n    },\n        get = function get() {},\n        onlyNonSymbols = function onlyNonSymbols(name) {\n      return name != internalSymbol && !hOP.call(source, name);\n    },\n        onlySymbols = function onlySymbols(name) {\n      return name != internalSymbol && hOP.call(source, name);\n    },\n        propertyIsEnumerable = function propertyIsEnumerable(key) {\n      var uid = '' + key;\n      return onlySymbols(uid) ? hOP.call(this, uid) && this[internalSymbol] && this[internalSymbol]['@@' + uid] : pIE.call(this, key);\n    },\n        setAndGetSymbol = function setAndGetSymbol(uid) {\n      var descriptor = {\n        enumerable: false,\n        configurable: true,\n        get: get,\n        set: function set(value) {\n          setDescriptor(this, uid, {\n            enumerable: false,\n            configurable: true,\n            writable: true,\n            value: value\n          });\n          addInternalIfNeeded(this, uid, true);\n        }\n      };\n      defineProperty(ObjectProto, uid, descriptor);\n      return source[uid] = defineProperty(Object(uid), 'constructor', sourceConstructor);\n    },\n        _Symbol = function _Symbol2(description) {\n      if (this && this !== G) {\n        throw new TypeError('Symbol is not a constructor');\n      }\n      return setAndGetSymbol(prefix.concat(description || '', random, ++id));\n    },\n        source = create(null),\n        sourceConstructor = { value: _Symbol },\n        sourceMap = function sourceMap(uid) {\n      return source[uid];\n    },\n        $defineProperty = function defineProp(o, key, descriptor) {\n      var uid = '' + key;\n      if (onlySymbols(uid)) {\n        setDescriptor(o, uid, descriptor.enumerable ? copyAsNonEnumerable(descriptor) : descriptor);\n        addInternalIfNeeded(o, uid, !!descriptor.enumerable);\n      } else {\n        defineProperty(o, key, descriptor);\n      }\n      return o;\n    },\n        $getOwnPropertySymbols = function getOwnPropertySymbols(o) {\n      var cof = toString.call(o);\n      o = cof === '[object String]' ? o.split('') : Object(o);\n      return gOPN(o).filter(onlySymbols).map(sourceMap);\n    };\n\n    descriptor.value = $defineProperty;\n    defineProperty(Object, DP, descriptor);\n\n    descriptor.value = $getOwnPropertySymbols;\n    defineProperty(Object, GOPS, descriptor);\n\n    var cachedWindowNames = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' ? Object.getOwnPropertyNames(window) : [];\n    var originalObjectGetOwnPropertyNames = Object.getOwnPropertyNames;\n    descriptor.value = function getOwnPropertyNames(o) {\n      if (toString.call(o) === '[object Window]') {\n        try {\n          return originalObjectGetOwnPropertyNames(o);\n        } catch (e) {\n          return [].concat([], cachedWindowNames);\n        }\n      }\n      return gOPN(o).filter(onlyNonSymbols);\n    };\n    defineProperty(Object, GOPN, descriptor);\n\n    descriptor.value = function defineProperties(o, descriptors) {\n      var symbols = $getOwnPropertySymbols(descriptors);\n      if (symbols.length) {\n        keys(descriptors).concat(symbols).forEach(function (uid) {\n          if (propertyIsEnumerable.call(descriptors, uid)) {\n            $defineProperty(o, uid, descriptors[uid]);\n          }\n        });\n      } else {\n        $defineProperties(o, descriptors);\n      }\n      return o;\n    };\n    defineProperty(Object, DPies, descriptor);\n\n    descriptor.value = propertyIsEnumerable;\n    defineProperty(ObjectProto, PIE, descriptor);\n\n    descriptor.value = _Symbol;\n    defineProperty(G, 'Symbol', descriptor);\n\n    descriptor.value = function (key) {\n      var uid = prefix.concat(prefix, key, random);\n      return uid in ObjectProto ? source[uid] : setAndGetSymbol(uid);\n    };\n    defineProperty(_Symbol, 'for', descriptor);\n\n    descriptor.value = function (symbol) {\n      return hOP.call(source, symbol) ? symbol.slice(prefixLength * 2, -random.length) : void 0;\n    };\n    defineProperty(_Symbol, 'keyFor', descriptor);\n\n    descriptor.value = function getOwnPropertyDescriptor(o, key) {\n      var descriptor = gOPD(o, key);\n      if (descriptor && onlySymbols(key)) {\n        descriptor.enumerable = propertyIsEnumerable.call(o, key);\n      }\n      return descriptor;\n    };\n    defineProperty(Object, GOPD, descriptor);\n\n    descriptor.value = function (proto, descriptors) {\n      return arguments.length === 1 ? create(proto) : createWithSymbols(proto, descriptors);\n    };\n    defineProperty(Object, 'create', descriptor);\n\n    descriptor.value = function () {\n      var str = toString.call(this);\n      return str === '[object String]' && onlySymbols(this) ? '[object Symbol]' : str;\n    };\n    defineProperty(ObjectProto, 'toString', descriptor);\n\n    try {\n      setDescriptor = create(defineProperty({}, prefix, {\n        get: function get() {\n          return defineProperty(this, prefix, { value: false })[prefix];\n        }\n      }))[prefix] || defineProperty;\n    } catch (o_O) {\n      setDescriptor = function setDescriptor(o, key, descriptor) {\n        var protoDescriptor = gOPD(ObjectProto, key);\n        delete ObjectProto[key];\n        defineProperty(o, key, descriptor);\n        defineProperty(ObjectProto, key, protoDescriptor);\n      };\n    }\n  })(Object, 'getOwnPropertySymbols');\n\n  (function (O, S) {\n    var dP = O.defineProperty,\n        ObjectProto = O.prototype,\n        toString = ObjectProto.toString,\n        toStringTag = 'toStringTag',\n        descriptor;\n    ['iterator', 'match', 'replace', 'search', 'split', 'hasInstance', 'isConcatSpreadable', 'unscopables', 'species', 'toPrimitive', toStringTag].forEach(function (name) {\n      if (!(name in Symbol)) {\n        dP(Symbol, name, { value: Symbol(name) });\n        switch (name) {\n          case toStringTag:\n            descriptor = O.getOwnPropertyDescriptor(ObjectProto, 'toString');\n            descriptor.value = function () {\n              var str = toString.call(this),\n                  tst = typeof this === 'undefined' || this === null ? undefined : this[Symbol.toStringTag];\n              return typeof tst === 'undefined' ? str : '[object ' + tst + ']';\n            };\n            dP(ObjectProto, 'toString', descriptor);\n            break;\n        }\n      }\n    });\n  })(Object, Symbol);\n\n  (function (Si, AP, SP) {\n\n    function returnThis() {\n      return this;\n    }\n\n    if (!AP[Si]) AP[Si] = function () {\n      var i = 0,\n          self = this,\n          iterator = {\n        next: function next() {\n          var done = self.length <= i;\n          return done ? { done: done } : { done: done, value: self[i++] };\n        }\n      };\n      iterator[Si] = returnThis;\n      return iterator;\n    };\n\n    if (!SP[Si]) SP[Si] = function () {\n      var fromCodePoint = String.fromCodePoint,\n          self = this,\n          i = 0,\n          length = self.length,\n          iterator = {\n        next: function next() {\n          var done = length <= i,\n              c = done ? '' : fromCodePoint(self.codePointAt(i));\n          i += c.length;\n          return done ? { done: done } : { done: done, value: c };\n        }\n      };\n      iterator[Si] = returnThis;\n      return iterator;\n    };\n  })(Symbol.iterator, Array.prototype, String.prototype);\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  Number.isNaN = Number.isNaN || function (value) {\n    return value !== value;\n  };\n\n  Number.isFinite = Number.isFinite || function (value) {\n    return typeof value === \"number\" && isFinite(value);\n  };\n}\n\nif (!String.prototype.endsWith || function () {\n  try {\n    return !\"ab\".endsWith(\"a\", 1);\n  } catch (e) {\n    return true;\n  }\n}()) {\n  String.prototype.endsWith = function (searchString, position) {\n    var subjectString = this.toString();\n    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n      position = subjectString.length;\n    }\n    position -= searchString.length;\n    var lastIndex = subjectString.indexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n  };\n}\n\nif (!String.prototype.startsWith || function () {\n  try {\n    return !\"ab\".startsWith(\"b\", 1);\n  } catch (e) {\n    return true;\n  }\n}()) {\n  String.prototype.startsWith = function (searchString, position) {\n    position = position || 0;\n    return this.substr(position, searchString.length) === searchString;\n  };\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  if (!Array.from) {\n    Array.from = function () {\n      var toInteger = function toInteger(it) {\n        return isNaN(it = +it) ? 0 : (it > 0 ? Math.floor : Math.ceil)(it);\n      };\n      var toLength = function toLength(it) {\n        return it > 0 ? Math.min(toInteger(it), 0x1fffffffffffff) : 0;\n      };\n      var iterCall = function iterCall(iter, fn, val, index) {\n        try {\n          return fn(val, index);\n        } catch (E) {\n          if (typeof iter.return == 'function') iter.return();\n          throw E;\n        }\n      };\n\n      return function from(arrayLike) {\n        var O = Object(arrayLike),\n            C = typeof this == 'function' ? this : Array,\n            aLen = arguments.length,\n            mapfn = aLen > 1 ? arguments[1] : undefined,\n            mapping = mapfn !== undefined,\n            index = 0,\n            iterFn = O[Symbol.iterator],\n            length,\n            result,\n            step,\n            iterator;\n        if (mapping) mapfn = mapfn.bind(aLen > 2 ? arguments[2] : undefined);\n        if (iterFn != undefined && !Array.isArray(arrayLike)) {\n          for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n            result[index] = mapping ? iterCall(iterator, mapfn, step.value, index) : step.value;\n          }\n        } else {\n          length = toLength(O.length);\n          for (result = new C(length); length > index; index++) {\n            result[index] = mapping ? mapfn(O[index], index) : O[index];\n          }\n        }\n        result.length = index;\n        return result;\n      };\n    }();\n  }\n\n  if (!Array.prototype.find) {\n    Object.defineProperty(Array.prototype, 'find', {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: function value(predicate) {\n        if (this === null) {\n          throw new TypeError('Array.prototype.find called on null or undefined');\n        }\n        if (typeof predicate !== 'function') {\n          throw new TypeError('predicate must be a function');\n        }\n        var list = Object(this);\n        var length = list.length >>> 0;\n        var thisArg = arguments[1];\n        var value;\n\n        for (var i = 0; i < length; i++) {\n          value = list[i];\n          if (predicate.call(thisArg, value, i, list)) {\n            return value;\n          }\n        }\n        return undefined;\n      }\n    });\n  }\n\n  if (!Array.prototype.findIndex) {\n    Object.defineProperty(Array.prototype, 'findIndex', {\n      configurable: true,\n      writable: true,\n      enumerable: false,\n      value: function value(predicate) {\n        if (this === null) {\n          throw new TypeError('Array.prototype.findIndex called on null or undefined');\n        }\n        if (typeof predicate !== 'function') {\n          throw new TypeError('predicate must be a function');\n        }\n        var list = Object(this);\n        var length = list.length >>> 0;\n        var thisArg = arguments[1];\n        var value;\n\n        for (var i = 0; i < length; i++) {\n          value = list[i];\n          if (predicate.call(thisArg, value, i, list)) {\n            return i;\n          }\n        }\n        return -1;\n      }\n    });\n  }\n}\n\nif (typeof FEATURE_NO_ES2016 === 'undefined' && !Array.prototype.includes) {\n  Object.defineProperty(Array.prototype, 'includes', {\n    configurable: true,\n    writable: true,\n    enumerable: false,\n    value: function value(searchElement) {\n      var O = Object(this);\n      var len = parseInt(O.length) || 0;\n      if (len === 0) {\n        return false;\n      }\n      var n = parseInt(arguments[1]) || 0;\n      var k;\n      if (n >= 0) {\n        k = n;\n      } else {\n        k = len + n;\n        if (k < 0) {\n          k = 0;\n        }\n      }\n      var currentElement;\n      while (k < len) {\n        currentElement = O[k];\n        if (searchElement === currentElement || searchElement !== searchElement && currentElement !== currentElement) {\n          return true;\n        }\n        k++;\n      }\n      return false;\n    }\n  });\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function () {\n    var needsFix = false;\n\n    try {\n      var s = Object.keys('a');\n      needsFix = s.length !== 1 || s[0] !== '0';\n    } catch (e) {\n      needsFix = true;\n    }\n\n    if (needsFix) {\n      Object.keys = function () {\n        var hasOwnProperty = Object.prototype.hasOwnProperty,\n            hasDontEnumBug = !{ toString: null }.propertyIsEnumerable('toString'),\n            dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'],\n            dontEnumsLength = dontEnums.length;\n\n        return function (obj) {\n          if (obj === undefined || obj === null) {\n            throw TypeError('Cannot convert undefined or null to object');\n          }\n\n          obj = Object(obj);\n\n          var result = [],\n              prop,\n              i;\n\n          for (prop in obj) {\n            if (hasOwnProperty.call(obj, prop)) {\n              result.push(prop);\n            }\n          }\n\n          if (hasDontEnumBug) {\n            for (i = 0; i < dontEnumsLength; i++) {\n              if (hasOwnProperty.call(obj, dontEnums[i])) {\n                result.push(dontEnums[i]);\n              }\n            }\n          }\n\n          return result;\n        };\n      }();\n    }\n  })();\n\n  (function (O) {\n    if ('assign' in O) {\n      return;\n    }\n\n    O.defineProperty(O, 'assign', {\n      configurable: true,\n      writable: true,\n      value: function () {\n        var gOPS = O.getOwnPropertySymbols,\n            pIE = O.propertyIsEnumerable,\n            filterOS = gOPS ? function (self) {\n          return gOPS(self).filter(pIE, self);\n        } : function () {\n          return Array.prototype;\n        };\n\n        return function assign(where) {\n          if (gOPS && !(where instanceof O)) {\n            console.warn('problematic Symbols', where);\n          }\n\n          function set(keyOrSymbol) {\n            where[keyOrSymbol] = arg[keyOrSymbol];\n          }\n\n          for (var i = 1, ii = arguments.length; i < ii; ++i) {\n            var arg = arguments[i];\n\n            if (arg === null || arg === undefined) {\n              continue;\n            }\n\n            O.keys(arg).concat(filterOS(arg)).forEach(set);\n          }\n\n          return where;\n        };\n      }()\n    });\n  })(Object);\n\n  if (!Object.is) {\n    Object.is = function (x, y) {\n      if (x === y) {\n        return x !== 0 || 1 / x === 1 / y;\n      } else {\n        return x !== x && y !== y;\n      }\n    };\n  }\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  (function (global) {\n    var i;\n\n    var defineProperty = Object.defineProperty,\n        is = function is(a, b) {\n      return a === b || a !== a && b !== b;\n    };\n\n    if (typeof WeakMap == 'undefined') {\n      global.WeakMap = createCollection({\n        'delete': sharedDelete,\n\n        clear: sharedClear,\n\n        get: sharedGet,\n\n        has: mapHas,\n\n        set: sharedSet\n      }, true);\n    }\n\n    if (typeof Map == 'undefined' || typeof new Map().values !== 'function' || !new Map().values().next) {\n      var _createCollection;\n\n      global.Map = createCollection((_createCollection = {\n        'delete': sharedDelete,\n\n        has: mapHas,\n\n        get: sharedGet,\n\n        set: sharedSet,\n\n        keys: sharedKeys,\n\n        values: sharedValues,\n\n        entries: mapEntries,\n\n        forEach: sharedForEach,\n\n        clear: sharedClear\n      }, _createCollection[Symbol.iterator] = mapEntries, _createCollection));\n    }\n\n    if (typeof Set == 'undefined' || typeof new Set().values !== 'function' || !new Set().values().next) {\n      var _createCollection2;\n\n      global.Set = createCollection((_createCollection2 = {\n        has: setHas,\n\n        add: sharedAdd,\n\n        'delete': sharedDelete,\n\n        clear: sharedClear,\n\n        keys: sharedValues,\n        values: sharedValues,\n\n        entries: setEntries,\n\n        forEach: sharedForEach\n      }, _createCollection2[Symbol.iterator] = sharedValues, _createCollection2));\n    }\n\n    if (typeof WeakSet == 'undefined') {\n      global.WeakSet = createCollection({\n        'delete': sharedDelete,\n\n        add: sharedAdd,\n\n        clear: sharedClear,\n\n        has: setHas\n      }, true);\n    }\n\n    function createCollection(proto, objectOnly) {\n      function Collection(a) {\n        if (!this || this.constructor !== Collection) return new Collection(a);\n        this._keys = [];\n        this._values = [];\n        this._itp = [];\n        this.objectOnly = objectOnly;\n\n        if (a) init.call(this, a);\n      }\n\n      if (!objectOnly) {\n        defineProperty(proto, 'size', {\n          get: sharedSize\n        });\n      }\n\n      proto.constructor = Collection;\n      Collection.prototype = proto;\n\n      return Collection;\n    }\n\n    function init(a) {\n      var i;\n\n      if (this.add) a.forEach(this.add, this);else a.forEach(function (a) {\n          this.set(a[0], a[1]);\n        }, this);\n    }\n\n    function sharedDelete(key) {\n      if (this.has(key)) {\n        this._keys.splice(i, 1);\n        this._values.splice(i, 1);\n\n        this._itp.forEach(function (p) {\n          if (i < p[0]) p[0]--;\n        });\n      }\n\n      return -1 < i;\n    };\n\n    function sharedGet(key) {\n      return this.has(key) ? this._values[i] : undefined;\n    }\n\n    function has(list, key) {\n      if (this.objectOnly && key !== Object(key)) throw new TypeError(\"Invalid value used as weak collection key\");\n\n      if (key != key || key === 0) for (i = list.length; i-- && !is(list[i], key);) {} else i = list.indexOf(key);\n      return -1 < i;\n    }\n\n    function setHas(value) {\n      return has.call(this, this._values, value);\n    }\n\n    function mapHas(value) {\n      return has.call(this, this._keys, value);\n    }\n\n    function sharedSet(key, value) {\n      this.has(key) ? this._values[i] = value : this._values[this._keys.push(key) - 1] = value;\n      return this;\n    }\n\n    function sharedAdd(value) {\n      if (!this.has(value)) this._values.push(value);\n      return this;\n    }\n\n    function sharedClear() {\n      (this._keys || 0).length = this._values.length = 0;\n    }\n\n    function sharedKeys() {\n      return sharedIterator(this._itp, this._keys);\n    }\n\n    function sharedValues() {\n      return sharedIterator(this._itp, this._values);\n    }\n\n    function mapEntries() {\n      return sharedIterator(this._itp, this._keys, this._values);\n    }\n\n    function setEntries() {\n      return sharedIterator(this._itp, this._values, this._values);\n    }\n\n    function sharedIterator(itp, array, array2) {\n      var _ref;\n\n      var p = [0],\n          done = false;\n      itp.push(p);\n      return _ref = {}, _ref[Symbol.iterator] = function () {\n        return this;\n      }, _ref.next = function next() {\n        var v,\n            k = p[0];\n        if (!done && k < array.length) {\n          v = array2 ? [array[k], array2[k]] : array[k];\n          p[0]++;\n        } else {\n          done = true;\n          itp.splice(itp.indexOf(p), 1);\n        }\n        return { done: done, value: v };\n      }, _ref;\n    }\n\n    function sharedSize() {\n      return this._values.length;\n    }\n\n    function sharedForEach(callback, context) {\n      var it = this.entries();\n      for (;;) {\n        var r = it.next();\n        if (r.done) break;\n        callback.call(context, r.value[1], r.value[0], this);\n      }\n    }\n  })(PLATFORM.global);\n}\n\nif (typeof FEATURE_NO_ES2015 === 'undefined') {\n\n  var bind = Function.prototype.bind;\n\n  if (typeof PLATFORM.global.Reflect === 'undefined') {\n    PLATFORM.global.Reflect = {};\n  }\n\n  if (typeof Reflect.defineProperty !== 'function') {\n    Reflect.defineProperty = function (target, propertyKey, descriptor) {\n      if ((typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' ? target === null : typeof target !== 'function') {\n        throw new TypeError('Reflect.defineProperty called on non-object');\n      }\n      try {\n        Object.defineProperty(target, propertyKey, descriptor);\n        return true;\n      } catch (e) {\n        return false;\n      }\n    };\n  }\n\n  if (typeof Reflect.construct !== 'function') {\n    Reflect.construct = function (Target, args) {\n      if (args) {\n        switch (args.length) {\n          case 0:\n            return new Target();\n          case 1:\n            return new Target(args[0]);\n          case 2:\n            return new Target(args[0], args[1]);\n          case 3:\n            return new Target(args[0], args[1], args[2]);\n          case 4:\n            return new Target(args[0], args[1], args[2], args[3]);\n        }\n      }\n\n      var a = [null];\n      a.push.apply(a, args);\n      return new (bind.apply(Target, a))();\n    };\n  }\n\n  if (typeof Reflect.ownKeys !== 'function') {\n    Reflect.ownKeys = function (o) {\n      return Object.getOwnPropertyNames(o).concat(Object.getOwnPropertySymbols(o));\n    };\n  }\n}\n\nif (typeof FEATURE_NO_ESNEXT === 'undefined') {\n\n  var emptyMetadata = Object.freeze({});\n  var metadataContainerKey = '__metadata__';\n\n  if (typeof Reflect.getOwnMetadata !== 'function') {\n    Reflect.getOwnMetadata = function (metadataKey, target, targetKey) {\n      if (target.hasOwnProperty(metadataContainerKey)) {\n        return (target[metadataContainerKey][targetKey] || emptyMetadata)[metadataKey];\n      }\n    };\n  }\n\n  if (typeof Reflect.defineMetadata !== 'function') {\n    Reflect.defineMetadata = function (metadataKey, metadataValue, target, targetKey) {\n      var metadataContainer = target.hasOwnProperty(metadataContainerKey) ? target[metadataContainerKey] : target[metadataContainerKey] = {};\n      var targetContainer = metadataContainer[targetKey] || (metadataContainer[targetKey] = {});\n      targetContainer[metadataKey] = metadataValue;\n    };\n  }\n\n  if (typeof Reflect.metadata !== 'function') {\n    Reflect.metadata = function (metadataKey, metadataValue) {\n      return function (target, targetKey) {\n        Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);\n      };\n    };\n  }\n}","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n  if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n  return it;\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\n(module.exports = function (key, value) {\n  return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n  version: '3.0.1',\n  mode: require('../internals/is-pure') ? 'pure' : 'global',\n  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","module.exports = function (bitmap, value) {\n  return {\n    enumerable: !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable: !(bitmap & 4),\n    value: value\n  };\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar TO_STRING_TAG = require('../internals/well-known-symbol')('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n  if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n    defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n  }\n};\n","\n\nfunction mi(name) {\n  throw new Error('History must implement ' + name + '().');\n}\n\nexport var History = function () {\n  function History() {\n    \n  }\n\n  History.prototype.activate = function activate(options) {\n    mi('activate');\n  };\n\n  History.prototype.deactivate = function deactivate() {\n    mi('deactivate');\n  };\n\n  History.prototype.getAbsoluteRoot = function getAbsoluteRoot() {\n    mi('getAbsoluteRoot');\n  };\n\n  History.prototype.navigate = function navigate(fragment, options) {\n    mi('navigate');\n  };\n\n  History.prototype.navigateBack = function navigateBack() {\n    mi('navigateBack');\n  };\n\n  History.prototype.setTitle = function setTitle(title) {\n    mi('setTitle');\n  };\n\n  History.prototype.setState = function setState(key, value) {\n    mi('setState');\n  };\n\n  History.prototype.getState = function getState(key) {\n    mi('getState');\n  };\n\n  History.prototype.getHistoryIndex = function getHistoryIndex() {\n    mi('getHistoryIndex');\n  };\n\n  History.prototype.go = function go(movement) {\n    mi('go');\n  };\n\n  return History;\n}();","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _class, _temp, _class2, _temp2, _dec, _class3, _dec2, _class4, _dec3, _class5, _dec4, _class6, _dec5, _class7, _dec6, _class8, _class9, _temp3, _class10, _temp4, _class12, _dec7, _class14, _dec8, _class15, _class16, _temp5, _dec9, _class17, _dec10, _class18, _dec11, _class19;\n\n\n\nimport * as LogManager from 'aurelia-logging';\nimport { metadata, Origin, protocol } from 'aurelia-metadata';\nimport { DOM, PLATFORM, FEATURE } from 'aurelia-pal';\nimport { TemplateRegistryEntry, Loader } from 'aurelia-loader';\nimport { relativeToFile } from 'aurelia-path';\nimport { Scope, Expression, ValueConverterResource, BindingBehaviorResource, camelCase, Binding, createOverrideContext, subscriberCollection, bindingMode, ObserverLocator, EventManager } from 'aurelia-binding';\nimport { Container, resolver, inject } from 'aurelia-dependency-injection';\nimport { TaskQueue } from 'aurelia-task-queue';\n\nexport var animationEvent = {\n  enterBegin: 'animation:enter:begin',\n  enterActive: 'animation:enter:active',\n  enterDone: 'animation:enter:done',\n  enterTimeout: 'animation:enter:timeout',\n\n  leaveBegin: 'animation:leave:begin',\n  leaveActive: 'animation:leave:active',\n  leaveDone: 'animation:leave:done',\n  leaveTimeout: 'animation:leave:timeout',\n\n  staggerNext: 'animation:stagger:next',\n\n  removeClassBegin: 'animation:remove-class:begin',\n  removeClassActive: 'animation:remove-class:active',\n  removeClassDone: 'animation:remove-class:done',\n  removeClassTimeout: 'animation:remove-class:timeout',\n\n  addClassBegin: 'animation:add-class:begin',\n  addClassActive: 'animation:add-class:active',\n  addClassDone: 'animation:add-class:done',\n  addClassTimeout: 'animation:add-class:timeout',\n\n  animateBegin: 'animation:animate:begin',\n  animateActive: 'animation:animate:active',\n  animateDone: 'animation:animate:done',\n  animateTimeout: 'animation:animate:timeout',\n\n  sequenceBegin: 'animation:sequence:begin',\n  sequenceDone: 'animation:sequence:done'\n};\n\nexport var Animator = function () {\n  function Animator() {\n    \n  }\n\n  Animator.prototype.enter = function enter(element) {\n    return Promise.resolve(false);\n  };\n\n  Animator.prototype.leave = function leave(element) {\n    return Promise.resolve(false);\n  };\n\n  Animator.prototype.removeClass = function removeClass(element, className) {\n    element.classList.remove(className);\n    return Promise.resolve(false);\n  };\n\n  Animator.prototype.addClass = function addClass(element, className) {\n    element.classList.add(className);\n    return Promise.resolve(false);\n  };\n\n  Animator.prototype.animate = function animate(element, className) {\n    return Promise.resolve(false);\n  };\n\n  Animator.prototype.runSequence = function runSequence(animations) {};\n\n  Animator.prototype.registerEffect = function registerEffect(effectName, properties) {};\n\n  Animator.prototype.unregisterEffect = function unregisterEffect(effectName) {};\n\n  return Animator;\n}();\n\nexport var CompositionTransactionNotifier = function () {\n  function CompositionTransactionNotifier(owner) {\n    \n\n    this.owner = owner;\n    this.owner._compositionCount++;\n  }\n\n  CompositionTransactionNotifier.prototype.done = function done() {\n    this.owner._compositionCount--;\n    this.owner._tryCompleteTransaction();\n  };\n\n  return CompositionTransactionNotifier;\n}();\n\nexport var CompositionTransactionOwnershipToken = function () {\n  function CompositionTransactionOwnershipToken(owner) {\n    \n\n    this.owner = owner;\n    this.owner._ownershipToken = this;\n    this.thenable = this._createThenable();\n  }\n\n  CompositionTransactionOwnershipToken.prototype.waitForCompositionComplete = function waitForCompositionComplete() {\n    this.owner._tryCompleteTransaction();\n    return this.thenable;\n  };\n\n  CompositionTransactionOwnershipToken.prototype.resolve = function resolve() {\n    this._resolveCallback();\n  };\n\n  CompositionTransactionOwnershipToken.prototype._createThenable = function _createThenable() {\n    var _this = this;\n\n    return new Promise(function (resolve, reject) {\n      _this._resolveCallback = resolve;\n    });\n  };\n\n  return CompositionTransactionOwnershipToken;\n}();\n\nexport var CompositionTransaction = function () {\n  function CompositionTransaction() {\n    \n\n    this._ownershipToken = null;\n    this._compositionCount = 0;\n  }\n\n  CompositionTransaction.prototype.tryCapture = function tryCapture() {\n    return this._ownershipToken === null ? new CompositionTransactionOwnershipToken(this) : null;\n  };\n\n  CompositionTransaction.prototype.enlist = function enlist() {\n    return new CompositionTransactionNotifier(this);\n  };\n\n  CompositionTransaction.prototype._tryCompleteTransaction = function _tryCompleteTransaction() {\n    if (this._compositionCount <= 0) {\n      this._compositionCount = 0;\n\n      if (this._ownershipToken !== null) {\n        var token = this._ownershipToken;\n        this._ownershipToken = null;\n        token.resolve();\n      }\n    }\n  };\n\n  return CompositionTransaction;\n}();\n\nvar capitalMatcher = /([A-Z])/g;\n\nfunction addHyphenAndLower(char) {\n  return '-' + char.toLowerCase();\n}\n\nexport function _hyphenate(name) {\n  return (name.charAt(0).toLowerCase() + name.slice(1)).replace(capitalMatcher, addHyphenAndLower);\n}\n\nexport function _isAllWhitespace(node) {\n  return !(node.auInterpolationTarget || /[^\\t\\n\\r ]/.test(node.textContent));\n}\n\nexport var ViewEngineHooksResource = function () {\n  function ViewEngineHooksResource() {\n    \n  }\n\n  ViewEngineHooksResource.prototype.initialize = function initialize(container, target) {\n    this.instance = container.get(target);\n  };\n\n  ViewEngineHooksResource.prototype.register = function register(registry, name) {\n    registry.registerViewEngineHooks(this.instance);\n  };\n\n  ViewEngineHooksResource.prototype.load = function load(container, target) {};\n\n  ViewEngineHooksResource.convention = function convention(name) {\n    if (name.endsWith('ViewEngineHooks')) {\n      return new ViewEngineHooksResource();\n    }\n  };\n\n  return ViewEngineHooksResource;\n}();\n\nexport function viewEngineHooks(target) {\n  var deco = function deco(t) {\n    metadata.define(metadata.resource, new ViewEngineHooksResource(), t);\n  };\n\n  return target ? deco(target) : deco;\n}\n\nexport var ElementEvents = (_temp = _class = function () {\n  function ElementEvents(element) {\n    \n\n    this.element = element;\n    this.subscriptions = {};\n  }\n\n  ElementEvents.prototype._enqueueHandler = function _enqueueHandler(handler) {\n    this.subscriptions[handler.eventName] = this.subscriptions[handler.eventName] || [];\n    this.subscriptions[handler.eventName].push(handler);\n  };\n\n  ElementEvents.prototype._dequeueHandler = function _dequeueHandler(handler) {\n    var index = void 0;\n    var subscriptions = this.subscriptions[handler.eventName];\n    if (subscriptions) {\n      index = subscriptions.indexOf(handler);\n      if (index > -1) {\n        subscriptions.splice(index, 1);\n      }\n    }\n    return handler;\n  };\n\n  ElementEvents.prototype.publish = function publish(eventName) {\n    var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var bubbles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    var cancelable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n\n    var event = DOM.createCustomEvent(eventName, { cancelable: cancelable, bubbles: bubbles, detail: detail });\n    this.element.dispatchEvent(event);\n  };\n\n  ElementEvents.prototype.subscribe = function subscribe(eventName, handler, captureOrOptions) {\n    if (typeof handler === 'function') {\n      if (captureOrOptions === undefined) {\n        captureOrOptions = ElementEvents.defaultListenerOptions;\n      }\n      var eventHandler = new EventHandlerImpl(this, eventName, handler, captureOrOptions, false);\n      return eventHandler;\n    }\n\n    return undefined;\n  };\n\n  ElementEvents.prototype.subscribeOnce = function subscribeOnce(eventName, handler, captureOrOptions) {\n    if (typeof handler === 'function') {\n      if (captureOrOptions === undefined) {\n        captureOrOptions = ElementEvents.defaultListenerOptions;\n      }\n      var eventHandler = new EventHandlerImpl(this, eventName, handler, captureOrOptions, true);\n      return eventHandler;\n    }\n\n    return undefined;\n  };\n\n  ElementEvents.prototype.dispose = function dispose(eventName) {\n    if (eventName && typeof eventName === 'string') {\n      var subscriptions = this.subscriptions[eventName];\n      if (subscriptions) {\n        while (subscriptions.length) {\n          var subscription = subscriptions.pop();\n          if (subscription) {\n            subscription.dispose();\n          }\n        }\n      }\n    } else {\n      this.disposeAll();\n    }\n  };\n\n  ElementEvents.prototype.disposeAll = function disposeAll() {\n    for (var _key in this.subscriptions) {\n      this.dispose(_key);\n    }\n  };\n\n  return ElementEvents;\n}(), _class.defaultListenerOptions = true, _temp);\n\nvar EventHandlerImpl = function () {\n  function EventHandlerImpl(owner, eventName, handler, captureOrOptions, once) {\n    \n\n    this.owner = owner;\n    this.eventName = eventName;\n    this.handler = handler;\n\n    this.capture = typeof captureOrOptions === 'boolean' ? captureOrOptions : captureOrOptions.capture;\n    this.bubbles = !this.capture;\n    this.captureOrOptions = captureOrOptions;\n    this.once = once;\n    owner.element.addEventListener(eventName, this, captureOrOptions);\n    owner._enqueueHandler(this);\n  }\n\n  EventHandlerImpl.prototype.handleEvent = function handleEvent(e) {\n    var fn = this.handler;\n    fn(e);\n    if (this.once) {\n      this.dispose();\n    }\n  };\n\n  EventHandlerImpl.prototype.dispose = function dispose() {\n    this.owner.element.removeEventListener(this.eventName, this, this.captureOrOptions);\n    this.owner._dequeueHandler(this);\n    this.owner = this.handler = null;\n  };\n\n  return EventHandlerImpl;\n}();\n\nexport var ResourceLoadContext = function () {\n  function ResourceLoadContext() {\n    \n\n    this.dependencies = {};\n  }\n\n  ResourceLoadContext.prototype.addDependency = function addDependency(url) {\n    this.dependencies[url] = true;\n  };\n\n  ResourceLoadContext.prototype.hasDependency = function hasDependency(url) {\n    return url in this.dependencies;\n  };\n\n  return ResourceLoadContext;\n}();\n\nexport var ViewCompileInstruction = function ViewCompileInstruction() {\n  var targetShadowDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n  var compileSurrogate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  \n\n  this.targetShadowDOM = targetShadowDOM;\n  this.compileSurrogate = compileSurrogate;\n  this.associatedModuleId = null;\n};\n\nViewCompileInstruction.normal = new ViewCompileInstruction();\n\nexport var BehaviorInstruction = function () {\n  function BehaviorInstruction() {\n    \n  }\n\n  BehaviorInstruction.enhance = function enhance() {\n    var instruction = new BehaviorInstruction();\n    instruction.enhance = true;\n    return instruction;\n  };\n\n  BehaviorInstruction.unitTest = function unitTest(type, attributes) {\n    var instruction = new BehaviorInstruction();\n    instruction.type = type;\n    instruction.attributes = attributes || {};\n    return instruction;\n  };\n\n  BehaviorInstruction.element = function element(node, type) {\n    var instruction = new BehaviorInstruction();\n    instruction.type = type;\n    instruction.attributes = {};\n    instruction.anchorIsContainer = !(node.hasAttribute('containerless') || type.containerless);\n    instruction.initiatedByBehavior = true;\n    return instruction;\n  };\n\n  BehaviorInstruction.attribute = function attribute(attrName, type) {\n    var instruction = new BehaviorInstruction();\n    instruction.attrName = attrName;\n    instruction.type = type || null;\n    instruction.attributes = {};\n    return instruction;\n  };\n\n  BehaviorInstruction.dynamic = function dynamic(host, viewModel, viewFactory) {\n    var instruction = new BehaviorInstruction();\n    instruction.host = host;\n    instruction.viewModel = viewModel;\n    instruction.viewFactory = viewFactory;\n    instruction.inheritBindingContext = true;\n    return instruction;\n  };\n\n  return BehaviorInstruction;\n}();\n\nvar biProto = BehaviorInstruction.prototype;\nbiProto.initiatedByBehavior = false;\nbiProto.enhance = false;\nbiProto.partReplacements = null;\nbiProto.viewFactory = null;\nbiProto.originalAttrName = null;\nbiProto.skipContentProcessing = false;\nbiProto.contentFactory = null;\nbiProto.viewModel = null;\nbiProto.anchorIsContainer = false;\nbiProto.host = null;\nbiProto.attributes = null;\nbiProto.type = null;\nbiProto.attrName = null;\nbiProto.inheritBindingContext = false;\n\nBehaviorInstruction.normal = new BehaviorInstruction();\n\nexport var TargetInstruction = (_temp2 = _class2 = function () {\n  function TargetInstruction() {\n    \n  }\n\n  TargetInstruction.shadowSlot = function shadowSlot(parentInjectorId) {\n    var instruction = new TargetInstruction();\n    instruction.parentInjectorId = parentInjectorId;\n    instruction.shadowSlot = true;\n    return instruction;\n  };\n\n  TargetInstruction.contentExpression = function contentExpression(expression) {\n    var instruction = new TargetInstruction();\n    instruction.contentExpression = expression;\n    return instruction;\n  };\n\n  TargetInstruction.letElement = function letElement(expressions) {\n    var instruction = new TargetInstruction();\n    instruction.expressions = expressions;\n    instruction.letElement = true;\n    return instruction;\n  };\n\n  TargetInstruction.lifting = function lifting(parentInjectorId, liftingInstruction) {\n    var instruction = new TargetInstruction();\n    instruction.parentInjectorId = parentInjectorId;\n    instruction.expressions = TargetInstruction.noExpressions;\n    instruction.behaviorInstructions = [liftingInstruction];\n    instruction.viewFactory = liftingInstruction.viewFactory;\n    instruction.providers = [liftingInstruction.type.target];\n    instruction.lifting = true;\n    return instruction;\n  };\n\n  TargetInstruction.normal = function normal(injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction) {\n    var instruction = new TargetInstruction();\n    instruction.injectorId = injectorId;\n    instruction.parentInjectorId = parentInjectorId;\n    instruction.providers = providers;\n    instruction.behaviorInstructions = behaviorInstructions;\n    instruction.expressions = expressions;\n    instruction.anchorIsContainer = elementInstruction ? elementInstruction.anchorIsContainer : true;\n    instruction.elementInstruction = elementInstruction;\n    return instruction;\n  };\n\n  TargetInstruction.surrogate = function surrogate(providers, behaviorInstructions, expressions, values) {\n    var instruction = new TargetInstruction();\n    instruction.expressions = expressions;\n    instruction.behaviorInstructions = behaviorInstructions;\n    instruction.providers = providers;\n    instruction.values = values;\n    return instruction;\n  };\n\n  return TargetInstruction;\n}(), _class2.noExpressions = Object.freeze([]), _temp2);\n\nvar tiProto = TargetInstruction.prototype;\n\ntiProto.injectorId = null;\ntiProto.parentInjectorId = null;\n\ntiProto.shadowSlot = false;\ntiProto.slotName = null;\ntiProto.slotFallbackFactory = null;\n\ntiProto.contentExpression = null;\ntiProto.letElement = false;\n\ntiProto.expressions = null;\ntiProto.expressions = null;\ntiProto.providers = null;\n\ntiProto.viewFactory = null;\n\ntiProto.anchorIsContainer = false;\ntiProto.elementInstruction = null;\ntiProto.lifting = false;\n\ntiProto.values = null;\n\nexport var viewStrategy = protocol.create('aurelia:view-strategy', {\n  validate: function validate(target) {\n    if (!(typeof target.loadViewFactory === 'function')) {\n      return 'View strategies must implement: loadViewFactory(viewEngine: ViewEngine, compileInstruction: ViewCompileInstruction, loadContext?: ResourceLoadContext): Promise<ViewFactory>';\n    }\n\n    return true;\n  },\n  compose: function compose(target) {\n    if (!(typeof target.makeRelativeTo === 'function')) {\n      target.makeRelativeTo = PLATFORM.noop;\n    }\n  }\n});\n\nexport var RelativeViewStrategy = (_dec = viewStrategy(), _dec(_class3 = function () {\n  function RelativeViewStrategy(path) {\n    \n\n    this.path = path;\n    this.absolutePath = null;\n  }\n\n  RelativeViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    if (this.absolutePath === null && this.moduleId) {\n      this.absolutePath = relativeToFile(this.path, this.moduleId);\n    }\n\n    compileInstruction.associatedModuleId = this.moduleId;\n    return viewEngine.loadViewFactory(this.absolutePath || this.path, compileInstruction, loadContext, target);\n  };\n\n  RelativeViewStrategy.prototype.makeRelativeTo = function makeRelativeTo(file) {\n    if (this.absolutePath === null) {\n      this.absolutePath = relativeToFile(this.path, file);\n    }\n  };\n\n  return RelativeViewStrategy;\n}()) || _class3);\n\nexport var ConventionalViewStrategy = (_dec2 = viewStrategy(), _dec2(_class4 = function () {\n  function ConventionalViewStrategy(viewLocator, origin) {\n    \n\n    this.moduleId = origin.moduleId;\n    this.viewUrl = viewLocator.convertOriginToViewUrl(origin);\n  }\n\n  ConventionalViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    compileInstruction.associatedModuleId = this.moduleId;\n    return viewEngine.loadViewFactory(this.viewUrl, compileInstruction, loadContext, target);\n  };\n\n  return ConventionalViewStrategy;\n}()) || _class4);\n\nexport var NoViewStrategy = (_dec3 = viewStrategy(), _dec3(_class5 = function () {\n  function NoViewStrategy(dependencies, dependencyBaseUrl) {\n    \n\n    this.dependencies = dependencies || null;\n    this.dependencyBaseUrl = dependencyBaseUrl || '';\n  }\n\n  NoViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    var entry = this.entry;\n    var dependencies = this.dependencies;\n\n    if (entry && entry.factoryIsReady) {\n      return Promise.resolve(null);\n    }\n\n    this.entry = entry = new TemplateRegistryEntry(this.moduleId || this.dependencyBaseUrl);\n\n    entry.dependencies = [];\n    entry.templateIsLoaded = true;\n\n    if (dependencies !== null) {\n      for (var i = 0, ii = dependencies.length; i < ii; ++i) {\n        var current = dependencies[i];\n\n        if (typeof current === 'string' || typeof current === 'function') {\n          entry.addDependency(current);\n        } else {\n          entry.addDependency(current.from, current.as);\n        }\n      }\n    }\n\n    compileInstruction.associatedModuleId = this.moduleId;\n\n    return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\n  };\n\n  return NoViewStrategy;\n}()) || _class5);\n\nexport var TemplateRegistryViewStrategy = (_dec4 = viewStrategy(), _dec4(_class6 = function () {\n  function TemplateRegistryViewStrategy(moduleId, entry) {\n    \n\n    this.moduleId = moduleId;\n    this.entry = entry;\n  }\n\n  TemplateRegistryViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    var entry = this.entry;\n\n    if (entry.factoryIsReady) {\n      return Promise.resolve(entry.factory);\n    }\n\n    compileInstruction.associatedModuleId = this.moduleId;\n    return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\n  };\n\n  return TemplateRegistryViewStrategy;\n}()) || _class6);\n\nexport var InlineViewStrategy = (_dec5 = viewStrategy(), _dec5(_class7 = function () {\n  function InlineViewStrategy(markup, dependencies, dependencyBaseUrl) {\n    \n\n    this.markup = markup;\n    this.dependencies = dependencies || null;\n    this.dependencyBaseUrl = dependencyBaseUrl || '';\n  }\n\n  InlineViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    var entry = this.entry;\n    var dependencies = this.dependencies;\n\n    if (entry && entry.factoryIsReady) {\n      return Promise.resolve(entry.factory);\n    }\n\n    this.entry = entry = new TemplateRegistryEntry(this.moduleId || this.dependencyBaseUrl);\n    entry.template = DOM.createTemplateFromMarkup(this.markup);\n\n    if (dependencies !== null) {\n      for (var i = 0, ii = dependencies.length; i < ii; ++i) {\n        var current = dependencies[i];\n\n        if (typeof current === 'string' || typeof current === 'function') {\n          entry.addDependency(current);\n        } else {\n          entry.addDependency(current.from, current.as);\n        }\n      }\n    }\n\n    compileInstruction.associatedModuleId = this.moduleId;\n    return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);\n  };\n\n  return InlineViewStrategy;\n}()) || _class7);\n\nexport var StaticViewStrategy = (_dec6 = viewStrategy(), _dec6(_class8 = function () {\n  function StaticViewStrategy(config) {\n    \n\n    if (typeof config === 'string' || config instanceof DOM.Element && config.tagName === 'TEMPLATE') {\n      config = {\n        template: config\n      };\n    }\n    this.template = config.template;\n    this.dependencies = config.dependencies || [];\n    this.factoryIsReady = false;\n    this.onReady = null;\n    this.moduleId = 'undefined';\n  }\n\n  StaticViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {\n    var _this2 = this;\n\n    if (this.factoryIsReady) {\n      return Promise.resolve(this.factory);\n    }\n    var deps = this.dependencies;\n    deps = typeof deps === 'function' ? deps() : deps;\n    deps = deps ? deps : [];\n    deps = Array.isArray(deps) ? deps : [deps];\n\n    return Promise.all(deps).then(function (dependencies) {\n      var container = viewEngine.container;\n      var appResources = viewEngine.appResources;\n      var viewCompiler = viewEngine.viewCompiler;\n      var viewResources = new ViewResources(appResources);\n\n      var resource = void 0;\n      var elDeps = [];\n\n      if (target) {\n        viewResources.autoRegister(container, target);\n      }\n\n      for (var _iterator = dependencies, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var dep = _ref;\n\n        if (typeof dep === 'function') {\n          resource = viewResources.autoRegister(container, dep);\n          if (resource.elementName !== null) {\n            elDeps.push(resource);\n          }\n        } else if (dep && (typeof dep === 'undefined' ? 'undefined' : _typeof(dep)) === 'object') {\n          for (var _key2 in dep) {\n            var exported = dep[_key2];\n            if (typeof exported === 'function') {\n              resource = viewResources.autoRegister(container, exported);\n              if (resource.elementName !== null) {\n                elDeps.push(resource);\n              }\n            }\n          }\n        } else {\n          throw new Error('dependency neither function nor object. Received: \"' + (typeof dep === 'undefined' ? 'undefined' : _typeof(dep)) + '\"');\n        }\n      }\n\n      return Promise.all(elDeps.map(function (el) {\n        return el.load(container, el.target);\n      })).then(function () {\n        var factory = _this2.template !== null ? viewCompiler.compile(_this2.template, viewResources, compileInstruction) : null;\n        _this2.factoryIsReady = true;\n        _this2.factory = factory;\n        return factory;\n      });\n    });\n  };\n\n  return StaticViewStrategy;\n}()) || _class8);\n\nexport var ViewLocator = (_temp3 = _class9 = function () {\n  function ViewLocator() {\n    \n  }\n\n  ViewLocator.prototype.getViewStrategy = function getViewStrategy(value) {\n    if (!value) {\n      return null;\n    }\n\n    if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && 'getViewStrategy' in value) {\n      var _origin = Origin.get(value.constructor);\n\n      value = value.getViewStrategy();\n\n      if (typeof value === 'string') {\n        value = new RelativeViewStrategy(value);\n      }\n\n      viewStrategy.assert(value);\n\n      if (_origin.moduleId) {\n        value.makeRelativeTo(_origin.moduleId);\n      }\n\n      return value;\n    }\n\n    if (typeof value === 'string') {\n      value = new RelativeViewStrategy(value);\n    }\n\n    if (viewStrategy.validate(value)) {\n      return value;\n    }\n\n    if (typeof value !== 'function') {\n      value = value.constructor;\n    }\n\n    if ('$view' in value) {\n      var c = value.$view;\n      var _view = void 0;\n      c = typeof c === 'function' ? c.call(value) : c;\n      if (c === null) {\n        _view = new NoViewStrategy();\n      } else {\n        _view = c instanceof StaticViewStrategy ? c : new StaticViewStrategy(c);\n      }\n      metadata.define(ViewLocator.viewStrategyMetadataKey, _view, value);\n      return _view;\n    }\n\n    var origin = Origin.get(value);\n    var strategy = metadata.get(ViewLocator.viewStrategyMetadataKey, value);\n\n    if (!strategy) {\n      if (!origin.moduleId) {\n        throw new Error('Cannot determine default view strategy for object.', value);\n      }\n\n      strategy = this.createFallbackViewStrategy(origin);\n    } else if (origin.moduleId) {\n      strategy.moduleId = origin.moduleId;\n    }\n\n    return strategy;\n  };\n\n  ViewLocator.prototype.createFallbackViewStrategy = function createFallbackViewStrategy(origin) {\n    return new ConventionalViewStrategy(this, origin);\n  };\n\n  ViewLocator.prototype.convertOriginToViewUrl = function convertOriginToViewUrl(origin) {\n    var moduleId = origin.moduleId;\n    var id = moduleId.endsWith('.js') || moduleId.endsWith('.ts') ? moduleId.substring(0, moduleId.length - 3) : moduleId;\n    return id + '.html';\n  };\n\n  return ViewLocator;\n}(), _class9.viewStrategyMetadataKey = 'aurelia:view-strategy', _temp3);\n\nfunction mi(name) {\n  throw new Error('BindingLanguage must implement ' + name + '().');\n}\n\nexport var BindingLanguage = function () {\n  function BindingLanguage() {\n    \n  }\n\n  BindingLanguage.prototype.inspectAttribute = function inspectAttribute(resources, elementName, attrName, attrValue) {\n    mi('inspectAttribute');\n  };\n\n  BindingLanguage.prototype.createAttributeInstruction = function createAttributeInstruction(resources, element, info, existingInstruction) {\n    mi('createAttributeInstruction');\n  };\n\n  BindingLanguage.prototype.createLetExpressions = function createLetExpressions(resources, element) {\n    mi('createLetExpressions');\n  };\n\n  BindingLanguage.prototype.inspectTextContent = function inspectTextContent(resources, value) {\n    mi('inspectTextContent');\n  };\n\n  return BindingLanguage;\n}();\n\nvar noNodes = Object.freeze([]);\n\nexport var SlotCustomAttribute = function () {\n  SlotCustomAttribute.inject = function inject() {\n    return [DOM.Element];\n  };\n\n  function SlotCustomAttribute(element) {\n    \n\n    this.element = element;\n    this.element.auSlotAttribute = this;\n  }\n\n  SlotCustomAttribute.prototype.valueChanged = function valueChanged(newValue, oldValue) {};\n\n  return SlotCustomAttribute;\n}();\n\nexport var PassThroughSlot = function () {\n  function PassThroughSlot(anchor, name, destinationName, fallbackFactory) {\n    \n\n    this.anchor = anchor;\n    this.anchor.viewSlot = this;\n    this.name = name;\n    this.destinationName = destinationName;\n    this.fallbackFactory = fallbackFactory;\n    this.destinationSlot = null;\n    this.projections = 0;\n    this.contentView = null;\n\n    var attr = new SlotCustomAttribute(this.anchor);\n    attr.value = this.destinationName;\n  }\n\n  PassThroughSlot.prototype.renderFallbackContent = function renderFallbackContent(view, nodes, projectionSource, index) {\n    if (this.contentView === null) {\n      this.contentView = this.fallbackFactory.create(this.ownerView.container);\n      this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);\n\n      var slots = Object.create(null);\n      slots[this.destinationSlot.name] = this.destinationSlot;\n\n      ShadowDOM.distributeView(this.contentView, slots, projectionSource, index, this.destinationSlot.name);\n    }\n  };\n\n  PassThroughSlot.prototype.passThroughTo = function passThroughTo(destinationSlot) {\n    this.destinationSlot = destinationSlot;\n  };\n\n  PassThroughSlot.prototype.addNode = function addNode(view, node, projectionSource, index) {\n    if (this.contentView !== null) {\n      this.contentView.removeNodes();\n      this.contentView.detached();\n      this.contentView.unbind();\n      this.contentView = null;\n    }\n\n    if (node.viewSlot instanceof PassThroughSlot) {\n      node.viewSlot.passThroughTo(this);\n      return;\n    }\n\n    this.projections++;\n    this.destinationSlot.addNode(view, node, projectionSource, index);\n  };\n\n  PassThroughSlot.prototype.removeView = function removeView(view, projectionSource) {\n    this.projections--;\n    this.destinationSlot.removeView(view, projectionSource);\n\n    if (this.needsFallbackRendering) {\n      this.renderFallbackContent(null, noNodes, projectionSource);\n    }\n  };\n\n  PassThroughSlot.prototype.removeAll = function removeAll(projectionSource) {\n    this.projections = 0;\n    this.destinationSlot.removeAll(projectionSource);\n\n    if (this.needsFallbackRendering) {\n      this.renderFallbackContent(null, noNodes, projectionSource);\n    }\n  };\n\n  PassThroughSlot.prototype.projectFrom = function projectFrom(view, projectionSource) {\n    this.destinationSlot.projectFrom(view, projectionSource);\n  };\n\n  PassThroughSlot.prototype.created = function created(ownerView) {\n    this.ownerView = ownerView;\n  };\n\n  PassThroughSlot.prototype.bind = function bind(view) {\n    if (this.contentView) {\n      this.contentView.bind(view.bindingContext, view.overrideContext);\n    }\n  };\n\n  PassThroughSlot.prototype.attached = function attached() {\n    if (this.contentView) {\n      this.contentView.attached();\n    }\n  };\n\n  PassThroughSlot.prototype.detached = function detached() {\n    if (this.contentView) {\n      this.contentView.detached();\n    }\n  };\n\n  PassThroughSlot.prototype.unbind = function unbind() {\n    if (this.contentView) {\n      this.contentView.unbind();\n    }\n  };\n\n  _createClass(PassThroughSlot, [{\n    key: 'needsFallbackRendering',\n    get: function get() {\n      return this.fallbackFactory && this.projections === 0;\n    }\n  }]);\n\n  return PassThroughSlot;\n}();\n\nexport var ShadowSlot = function () {\n  function ShadowSlot(anchor, name, fallbackFactory) {\n    \n\n    this.anchor = anchor;\n    this.anchor.isContentProjectionSource = true;\n    this.anchor.viewSlot = this;\n    this.name = name;\n    this.fallbackFactory = fallbackFactory;\n    this.contentView = null;\n    this.projections = 0;\n    this.children = [];\n    this.projectFromAnchors = null;\n    this.destinationSlots = null;\n  }\n\n  ShadowSlot.prototype.addNode = function addNode(view, node, projectionSource, index, destination) {\n    if (this.contentView !== null) {\n      this.contentView.removeNodes();\n      this.contentView.detached();\n      this.contentView.unbind();\n      this.contentView = null;\n    }\n\n    if (node.viewSlot instanceof PassThroughSlot) {\n      node.viewSlot.passThroughTo(this);\n      return;\n    }\n\n    if (this.destinationSlots !== null) {\n      ShadowDOM.distributeNodes(view, [node], this.destinationSlots, this, index);\n    } else {\n      node.auOwnerView = view;\n      node.auProjectionSource = projectionSource;\n      node.auAssignedSlot = this;\n\n      var anchor = this._findAnchor(view, node, projectionSource, index);\n      var parent = anchor.parentNode;\n\n      parent.insertBefore(node, anchor);\n      this.children.push(node);\n      this.projections++;\n    }\n  };\n\n  ShadowSlot.prototype.removeView = function removeView(view, projectionSource) {\n    if (this.destinationSlots !== null) {\n      ShadowDOM.undistributeView(view, this.destinationSlots, this);\n    } else if (this.contentView && this.contentView.hasSlots) {\n      ShadowDOM.undistributeView(view, this.contentView.slots, projectionSource);\n    } else {\n      var found = this.children.find(function (x) {\n        return x.auSlotProjectFrom === projectionSource;\n      });\n      if (found) {\n        var _children = found.auProjectionChildren;\n\n        for (var i = 0, ii = _children.length; i < ii; ++i) {\n          var _child = _children[i];\n\n          if (_child.auOwnerView === view) {\n            _children.splice(i, 1);\n            view.fragment.appendChild(_child);\n            i--;ii--;\n            this.projections--;\n          }\n        }\n\n        if (this.needsFallbackRendering) {\n          this.renderFallbackContent(view, noNodes, projectionSource);\n        }\n      }\n    }\n  };\n\n  ShadowSlot.prototype.removeAll = function removeAll(projectionSource) {\n    if (this.destinationSlots !== null) {\n      ShadowDOM.undistributeAll(this.destinationSlots, this);\n    } else if (this.contentView && this.contentView.hasSlots) {\n      ShadowDOM.undistributeAll(this.contentView.slots, projectionSource);\n    } else {\n      var found = this.children.find(function (x) {\n        return x.auSlotProjectFrom === projectionSource;\n      });\n\n      if (found) {\n        var _children2 = found.auProjectionChildren;\n        for (var i = 0, ii = _children2.length; i < ii; ++i) {\n          var _child2 = _children2[i];\n          _child2.auOwnerView.fragment.appendChild(_child2);\n          this.projections--;\n        }\n\n        found.auProjectionChildren = [];\n\n        if (this.needsFallbackRendering) {\n          this.renderFallbackContent(null, noNodes, projectionSource);\n        }\n      }\n    }\n  };\n\n  ShadowSlot.prototype._findAnchor = function _findAnchor(view, node, projectionSource, index) {\n    if (projectionSource) {\n      var found = this.children.find(function (x) {\n        return x.auSlotProjectFrom === projectionSource;\n      });\n      if (found) {\n        if (index !== undefined) {\n          var _children3 = found.auProjectionChildren;\n          var viewIndex = -1;\n          var lastView = void 0;\n\n          for (var i = 0, ii = _children3.length; i < ii; ++i) {\n            var current = _children3[i];\n\n            if (current.auOwnerView !== lastView) {\n              viewIndex++;\n              lastView = current.auOwnerView;\n\n              if (viewIndex >= index && lastView !== view) {\n                _children3.splice(i, 0, node);\n                return current;\n              }\n            }\n          }\n        }\n\n        found.auProjectionChildren.push(node);\n        return found;\n      }\n    }\n\n    return this.anchor;\n  };\n\n  ShadowSlot.prototype.projectTo = function projectTo(slots) {\n    this.destinationSlots = slots;\n  };\n\n  ShadowSlot.prototype.projectFrom = function projectFrom(view, projectionSource) {\n    var anchor = DOM.createComment('anchor');\n    var parent = this.anchor.parentNode;\n    anchor.auSlotProjectFrom = projectionSource;\n    anchor.auOwnerView = view;\n    anchor.auProjectionChildren = [];\n    parent.insertBefore(anchor, this.anchor);\n    this.children.push(anchor);\n\n    if (this.projectFromAnchors === null) {\n      this.projectFromAnchors = [];\n    }\n\n    this.projectFromAnchors.push(anchor);\n  };\n\n  ShadowSlot.prototype.renderFallbackContent = function renderFallbackContent(view, nodes, projectionSource, index) {\n    if (this.contentView === null) {\n      this.contentView = this.fallbackFactory.create(this.ownerView.container);\n      this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);\n      this.contentView.insertNodesBefore(this.anchor);\n    }\n\n    if (this.contentView.hasSlots) {\n      var slots = this.contentView.slots;\n      var projectFromAnchors = this.projectFromAnchors;\n\n      if (projectFromAnchors !== null) {\n        for (var slotName in slots) {\n          var slot = slots[slotName];\n\n          for (var i = 0, ii = projectFromAnchors.length; i < ii; ++i) {\n            var anchor = projectFromAnchors[i];\n            slot.projectFrom(anchor.auOwnerView, anchor.auSlotProjectFrom);\n          }\n        }\n      }\n\n      this.fallbackSlots = slots;\n      ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index);\n    }\n  };\n\n  ShadowSlot.prototype.created = function created(ownerView) {\n    this.ownerView = ownerView;\n  };\n\n  ShadowSlot.prototype.bind = function bind(view) {\n    if (this.contentView) {\n      this.contentView.bind(view.bindingContext, view.overrideContext);\n    }\n  };\n\n  ShadowSlot.prototype.attached = function attached() {\n    if (this.contentView) {\n      this.contentView.attached();\n    }\n  };\n\n  ShadowSlot.prototype.detached = function detached() {\n    if (this.contentView) {\n      this.contentView.detached();\n    }\n  };\n\n  ShadowSlot.prototype.unbind = function unbind() {\n    if (this.contentView) {\n      this.contentView.unbind();\n    }\n  };\n\n  _createClass(ShadowSlot, [{\n    key: 'needsFallbackRendering',\n    get: function get() {\n      return this.fallbackFactory && this.projections === 0;\n    }\n  }]);\n\n  return ShadowSlot;\n}();\n\nexport var ShadowDOM = (_temp4 = _class10 = function () {\n  function ShadowDOM() {\n    \n  }\n\n  ShadowDOM.getSlotName = function getSlotName(node) {\n    if (node.auSlotAttribute === undefined) {\n      return ShadowDOM.defaultSlotKey;\n    }\n\n    return node.auSlotAttribute.value;\n  };\n\n  ShadowDOM.distributeView = function distributeView(view, slots, projectionSource, index, destinationOverride) {\n    var nodes = void 0;\n\n    if (view === null) {\n      nodes = noNodes;\n    } else {\n      var childNodes = view.fragment.childNodes;\n      var ii = childNodes.length;\n      nodes = new Array(ii);\n\n      for (var i = 0; i < ii; ++i) {\n        nodes[i] = childNodes[i];\n      }\n    }\n\n    ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index, destinationOverride);\n  };\n\n  ShadowDOM.undistributeView = function undistributeView(view, slots, projectionSource) {\n    for (var slotName in slots) {\n      slots[slotName].removeView(view, projectionSource);\n    }\n  };\n\n  ShadowDOM.undistributeAll = function undistributeAll(slots, projectionSource) {\n    for (var slotName in slots) {\n      slots[slotName].removeAll(projectionSource);\n    }\n  };\n\n  ShadowDOM.distributeNodes = function distributeNodes(view, nodes, slots, projectionSource, index, destinationOverride) {\n    for (var i = 0, ii = nodes.length; i < ii; ++i) {\n      var currentNode = nodes[i];\n      var nodeType = currentNode.nodeType;\n\n      if (currentNode.isContentProjectionSource) {\n        currentNode.viewSlot.projectTo(slots);\n\n        for (var slotName in slots) {\n          slots[slotName].projectFrom(view, currentNode.viewSlot);\n        }\n\n        nodes.splice(i, 1);\n        ii--;i--;\n      } else if (nodeType === 1 || nodeType === 3 || currentNode.viewSlot instanceof PassThroughSlot) {\n        if (nodeType === 3 && _isAllWhitespace(currentNode)) {\n          nodes.splice(i, 1);\n          ii--;i--;\n        } else {\n          var found = slots[destinationOverride || ShadowDOM.getSlotName(currentNode)];\n\n          if (found) {\n            found.addNode(view, currentNode, projectionSource, index);\n            nodes.splice(i, 1);\n            ii--;i--;\n          }\n        }\n      } else {\n        nodes.splice(i, 1);\n        ii--;i--;\n      }\n    }\n\n    for (var _slotName in slots) {\n      var slot = slots[_slotName];\n\n      if (slot.needsFallbackRendering) {\n        slot.renderFallbackContent(view, nodes, projectionSource, index);\n      }\n    }\n  };\n\n  return ShadowDOM;\n}(), _class10.defaultSlotKey = '__au-default-slot-key__', _temp4);\n\nfunction register(lookup, name, resource, type) {\n  if (!name) {\n    return;\n  }\n\n  var existing = lookup[name];\n  if (existing) {\n    if (existing !== resource) {\n      throw new Error('Attempted to register ' + type + ' when one with the same name already exists. Name: ' + name + '.');\n    }\n\n    return;\n  }\n\n  lookup[name] = resource;\n}\n\nexport function validateBehaviorName(name, type) {\n  if (/[A-Z]/.test(name)) {\n    var newName = _hyphenate(name);\n    LogManager.getLogger('templating').warn('\\'' + name + '\\' is not a valid ' + type + ' name and has been converted to \\'' + newName + '\\'. Upper-case letters are not allowed because the DOM is not case-sensitive.');\n    return newName;\n  }\n  return name;\n}\n\nvar conventionMark = '__au_resource__';\n\nexport var ViewResources = function () {\n  ViewResources.convention = function convention(target, existing) {\n    var resource = void 0;\n\n    if (existing && conventionMark in existing) {\n      return existing;\n    }\n    if ('$resource' in target) {\n      var config = target.$resource;\n\n      if (typeof config === 'string') {\n        resource = existing || new HtmlBehaviorResource();\n        resource[conventionMark] = true;\n        if (!resource.elementName) {\n          resource.elementName = validateBehaviorName(config, 'custom element');\n        }\n      } else {\n        if (typeof config === 'function') {\n          config = config.call(target);\n        }\n        if (typeof config === 'string') {\n          config = { name: config };\n        }\n\n        config = Object.assign({}, config);\n\n        var resourceType = config.type || 'element';\n\n        var _name = config.name;\n        switch (resourceType) {\n          case 'element':case 'attribute':\n            resource = existing || new HtmlBehaviorResource();\n            resource[conventionMark] = true;\n            if (resourceType === 'element') {\n              if (!resource.elementName) {\n                resource.elementName = _name ? validateBehaviorName(_name, 'custom element') : _hyphenate(target.name);\n              }\n            } else {\n              if (!resource.attributeName) {\n                resource.attributeName = _name ? validateBehaviorName(_name, 'custom attribute') : _hyphenate(target.name);\n              }\n            }\n            if ('templateController' in config) {\n              config.liftsContent = config.templateController;\n              delete config.templateController;\n            }\n            if ('defaultBindingMode' in config && resource.attributeDefaultBindingMode !== undefined) {\n              config.attributeDefaultBindingMode = config.defaultBindingMode;\n              delete config.defaultBindingMode;\n            }\n\n            delete config.name;\n\n            Object.assign(resource, config);\n            break;\n          case 'valueConverter':\n            resource = new ValueConverterResource(camelCase(_name || target.name));\n            break;\n          case 'bindingBehavior':\n            resource = new BindingBehaviorResource(camelCase(_name || target.name));\n            break;\n          case 'viewEngineHooks':\n            resource = new ViewEngineHooksResource();\n            break;\n        }\n      }\n\n      if (resource instanceof HtmlBehaviorResource) {\n        var _bindables = typeof config === 'string' ? undefined : config.bindables;\n        var currentProps = resource.properties;\n        if (Array.isArray(_bindables)) {\n          for (var i = 0, ii = _bindables.length; ii > i; ++i) {\n            var prop = _bindables[i];\n            if (!prop || typeof prop !== 'string' && !prop.name) {\n              throw new Error('Invalid bindable property at \"' + i + '\" for class \"' + target.name + '\". Expected either a string or an object with \"name\" property.');\n            }\n            var newProp = new BindableProperty(prop);\n\n            var existed = false;\n            for (var j = 0, jj = currentProps.length; jj > j; ++j) {\n              if (currentProps[j].name === newProp.name) {\n                existed = true;\n                break;\n              }\n            }\n            if (existed) {\n              continue;\n            }\n            newProp.registerWith(target, resource);\n          }\n        }\n      }\n    }\n    return resource;\n  };\n\n  function ViewResources(parent, viewUrl) {\n    \n\n    this.bindingLanguage = null;\n\n    this.parent = parent || null;\n    this.hasParent = this.parent !== null;\n    this.viewUrl = viewUrl || '';\n    this.lookupFunctions = {\n      valueConverters: this.getValueConverter.bind(this),\n      bindingBehaviors: this.getBindingBehavior.bind(this)\n    };\n    this.attributes = Object.create(null);\n    this.elements = Object.create(null);\n    this.valueConverters = Object.create(null);\n    this.bindingBehaviors = Object.create(null);\n    this.attributeMap = Object.create(null);\n    this.values = Object.create(null);\n    this.beforeCompile = this.afterCompile = this.beforeCreate = this.afterCreate = this.beforeBind = this.beforeUnbind = false;\n  }\n\n  ViewResources.prototype._tryAddHook = function _tryAddHook(obj, name) {\n    if (typeof obj[name] === 'function') {\n      var func = obj[name].bind(obj);\n      var counter = 1;\n      var callbackName = void 0;\n\n      while (this[callbackName = name + counter.toString()] !== undefined) {\n        counter++;\n      }\n\n      this[name] = true;\n      this[callbackName] = func;\n    }\n  };\n\n  ViewResources.prototype._invokeHook = function _invokeHook(name, one, two, three, four) {\n    if (this.hasParent) {\n      this.parent._invokeHook(name, one, two, three, four);\n    }\n\n    if (this[name]) {\n      this[name + '1'](one, two, three, four);\n\n      var callbackName = name + '2';\n      if (this[callbackName]) {\n        this[callbackName](one, two, three, four);\n\n        callbackName = name + '3';\n        if (this[callbackName]) {\n          this[callbackName](one, two, three, four);\n\n          var counter = 4;\n\n          while (this[callbackName = name + counter.toString()] !== undefined) {\n            this[callbackName](one, two, three, four);\n            counter++;\n          }\n        }\n      }\n    }\n  };\n\n  ViewResources.prototype.registerViewEngineHooks = function registerViewEngineHooks(hooks) {\n    this._tryAddHook(hooks, 'beforeCompile');\n    this._tryAddHook(hooks, 'afterCompile');\n    this._tryAddHook(hooks, 'beforeCreate');\n    this._tryAddHook(hooks, 'afterCreate');\n    this._tryAddHook(hooks, 'beforeBind');\n    this._tryAddHook(hooks, 'beforeUnbind');\n  };\n\n  ViewResources.prototype.getBindingLanguage = function getBindingLanguage(bindingLanguageFallback) {\n    return this.bindingLanguage || (this.bindingLanguage = bindingLanguageFallback);\n  };\n\n  ViewResources.prototype.patchInParent = function patchInParent(newParent) {\n    var originalParent = this.parent;\n\n    this.parent = newParent || null;\n    this.hasParent = this.parent !== null;\n\n    if (newParent.parent === null) {\n      newParent.parent = originalParent;\n      newParent.hasParent = originalParent !== null;\n    }\n  };\n\n  ViewResources.prototype.relativeToView = function relativeToView(path) {\n    return relativeToFile(path, this.viewUrl);\n  };\n\n  ViewResources.prototype.registerElement = function registerElement(tagName, behavior) {\n    register(this.elements, tagName, behavior, 'an Element');\n  };\n\n  ViewResources.prototype.getElement = function getElement(tagName) {\n    return this.elements[tagName] || (this.hasParent ? this.parent.getElement(tagName) : null);\n  };\n\n  ViewResources.prototype.mapAttribute = function mapAttribute(attribute) {\n    return this.attributeMap[attribute] || (this.hasParent ? this.parent.mapAttribute(attribute) : null);\n  };\n\n  ViewResources.prototype.registerAttribute = function registerAttribute(attribute, behavior, knownAttribute) {\n    this.attributeMap[attribute] = knownAttribute;\n    register(this.attributes, attribute, behavior, 'an Attribute');\n  };\n\n  ViewResources.prototype.getAttribute = function getAttribute(attribute) {\n    return this.attributes[attribute] || (this.hasParent ? this.parent.getAttribute(attribute) : null);\n  };\n\n  ViewResources.prototype.registerValueConverter = function registerValueConverter(name, valueConverter) {\n    register(this.valueConverters, name, valueConverter, 'a ValueConverter');\n  };\n\n  ViewResources.prototype.getValueConverter = function getValueConverter(name) {\n    return this.valueConverters[name] || (this.hasParent ? this.parent.getValueConverter(name) : null);\n  };\n\n  ViewResources.prototype.registerBindingBehavior = function registerBindingBehavior(name, bindingBehavior) {\n    register(this.bindingBehaviors, name, bindingBehavior, 'a BindingBehavior');\n  };\n\n  ViewResources.prototype.getBindingBehavior = function getBindingBehavior(name) {\n    return this.bindingBehaviors[name] || (this.hasParent ? this.parent.getBindingBehavior(name) : null);\n  };\n\n  ViewResources.prototype.registerValue = function registerValue(name, value) {\n    register(this.values, name, value, 'a value');\n  };\n\n  ViewResources.prototype.getValue = function getValue(name) {\n    return this.values[name] || (this.hasParent ? this.parent.getValue(name) : null);\n  };\n\n  ViewResources.prototype.autoRegister = function autoRegister(container, impl) {\n    var resourceTypeMeta = metadata.getOwn(metadata.resource, impl);\n    if (resourceTypeMeta) {\n      if (resourceTypeMeta instanceof HtmlBehaviorResource) {\n        ViewResources.convention(impl, resourceTypeMeta);\n\n        if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n          HtmlBehaviorResource.convention(impl.name, resourceTypeMeta);\n        }\n        if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n          resourceTypeMeta.elementName = _hyphenate(impl.name);\n        }\n      }\n    } else {\n      resourceTypeMeta = ViewResources.convention(impl) || HtmlBehaviorResource.convention(impl.name) || ValueConverterResource.convention(impl.name) || BindingBehaviorResource.convention(impl.name) || ViewEngineHooksResource.convention(impl.name);\n      if (!resourceTypeMeta) {\n        resourceTypeMeta = new HtmlBehaviorResource();\n        resourceTypeMeta.elementName = _hyphenate(impl.name);\n      }\n      metadata.define(metadata.resource, resourceTypeMeta, impl);\n    }\n    resourceTypeMeta.initialize(container, impl);\n    resourceTypeMeta.register(this);\n    return resourceTypeMeta;\n  };\n\n  return ViewResources;\n}();\n\nexport var View = function () {\n  function View(container, viewFactory, fragment, controllers, bindings, children, slots) {\n    \n\n    this.container = container;\n    this.viewFactory = viewFactory;\n    this.resources = viewFactory.resources;\n    this.fragment = fragment;\n    this.firstChild = fragment.firstChild;\n    this.lastChild = fragment.lastChild;\n    this.controllers = controllers;\n    this.bindings = bindings;\n    this.children = children;\n    this.slots = slots;\n    this.hasSlots = false;\n    this.fromCache = false;\n    this.isBound = false;\n    this.isAttached = false;\n    this.bindingContext = null;\n    this.overrideContext = null;\n    this.controller = null;\n    this.viewModelScope = null;\n    this.animatableElement = undefined;\n    this._isUserControlled = false;\n    this.contentView = null;\n\n    for (var _key3 in slots) {\n      this.hasSlots = true;\n      break;\n    }\n  }\n\n  View.prototype.returnToCache = function returnToCache() {\n    this.viewFactory.returnViewToCache(this);\n  };\n\n  View.prototype.created = function created() {\n    var i = void 0;\n    var ii = void 0;\n    var controllers = this.controllers;\n\n    for (i = 0, ii = controllers.length; i < ii; ++i) {\n      controllers[i].created(this);\n    }\n  };\n\n  View.prototype.bind = function bind(bindingContext, overrideContext, _systemUpdate) {\n    var controllers = void 0;\n    var bindings = void 0;\n    var children = void 0;\n    var i = void 0;\n    var ii = void 0;\n\n    if (_systemUpdate && this._isUserControlled) {\n      return;\n    }\n\n    if (this.isBound) {\n      if (this.bindingContext === bindingContext) {\n        return;\n      }\n\n      this.unbind();\n    }\n\n    this.isBound = true;\n    this.bindingContext = bindingContext;\n    this.overrideContext = overrideContext || createOverrideContext(bindingContext);\n\n    this.resources._invokeHook('beforeBind', this);\n\n    bindings = this.bindings;\n    for (i = 0, ii = bindings.length; i < ii; ++i) {\n      bindings[i].bind(this);\n    }\n\n    if (this.viewModelScope !== null) {\n      bindingContext.bind(this.viewModelScope.bindingContext, this.viewModelScope.overrideContext);\n      this.viewModelScope = null;\n    }\n\n    controllers = this.controllers;\n    for (i = 0, ii = controllers.length; i < ii; ++i) {\n      controllers[i].bind(this);\n    }\n\n    children = this.children;\n    for (i = 0, ii = children.length; i < ii; ++i) {\n      children[i].bind(bindingContext, overrideContext, true);\n    }\n\n    if (this.hasSlots) {\n      ShadowDOM.distributeView(this.contentView, this.slots);\n    }\n  };\n\n  View.prototype.addBinding = function addBinding(binding) {\n    this.bindings.push(binding);\n\n    if (this.isBound) {\n      binding.bind(this);\n    }\n  };\n\n  View.prototype.unbind = function unbind() {\n    var controllers = void 0;\n    var bindings = void 0;\n    var children = void 0;\n    var i = void 0;\n    var ii = void 0;\n\n    if (this.isBound) {\n      this.isBound = false;\n      this.resources._invokeHook('beforeUnbind', this);\n\n      if (this.controller !== null) {\n        this.controller.unbind();\n      }\n\n      bindings = this.bindings;\n      for (i = 0, ii = bindings.length; i < ii; ++i) {\n        bindings[i].unbind();\n      }\n\n      controllers = this.controllers;\n      for (i = 0, ii = controllers.length; i < ii; ++i) {\n        controllers[i].unbind();\n      }\n\n      children = this.children;\n      for (i = 0, ii = children.length; i < ii; ++i) {\n        children[i].unbind();\n      }\n\n      this.bindingContext = null;\n      this.overrideContext = null;\n    }\n  };\n\n  View.prototype.insertNodesBefore = function insertNodesBefore(refNode) {\n    refNode.parentNode.insertBefore(this.fragment, refNode);\n  };\n\n  View.prototype.appendNodesTo = function appendNodesTo(parent) {\n    parent.appendChild(this.fragment);\n  };\n\n  View.prototype.removeNodes = function removeNodes() {\n    var fragment = this.fragment;\n    var current = this.firstChild;\n    var end = this.lastChild;\n    var next = void 0;\n\n    while (current) {\n      next = current.nextSibling;\n      fragment.appendChild(current);\n\n      if (current === end) {\n        break;\n      }\n\n      current = next;\n    }\n  };\n\n  View.prototype.attached = function attached() {\n    var controllers = void 0;\n    var children = void 0;\n    var i = void 0;\n    var ii = void 0;\n\n    if (this.isAttached) {\n      return;\n    }\n\n    this.isAttached = true;\n\n    if (this.controller !== null) {\n      this.controller.attached();\n    }\n\n    controllers = this.controllers;\n    for (i = 0, ii = controllers.length; i < ii; ++i) {\n      controllers[i].attached();\n    }\n\n    children = this.children;\n    for (i = 0, ii = children.length; i < ii; ++i) {\n      children[i].attached();\n    }\n  };\n\n  View.prototype.detached = function detached() {\n    var controllers = void 0;\n    var children = void 0;\n    var i = void 0;\n    var ii = void 0;\n\n    if (this.isAttached) {\n      this.isAttached = false;\n\n      if (this.controller !== null) {\n        this.controller.detached();\n      }\n\n      controllers = this.controllers;\n      for (i = 0, ii = controllers.length; i < ii; ++i) {\n        controllers[i].detached();\n      }\n\n      children = this.children;\n      for (i = 0, ii = children.length; i < ii; ++i) {\n        children[i].detached();\n      }\n    }\n  };\n\n  return View;\n}();\n\nfunction getAnimatableElement(view) {\n  if (view.animatableElement !== undefined) {\n    return view.animatableElement;\n  }\n\n  var current = view.firstChild;\n\n  while (current && current.nodeType !== 1) {\n    current = current.nextSibling;\n  }\n\n  if (current && current.nodeType === 1) {\n    return view.animatableElement = current.classList.contains('au-animate') ? current : null;\n  }\n\n  return view.animatableElement = null;\n}\n\nexport var ViewSlot = function () {\n  function ViewSlot(anchor, anchorIsContainer) {\n    var animator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Animator.instance;\n\n    \n\n    this.anchor = anchor;\n    this.anchorIsContainer = anchorIsContainer;\n    this.bindingContext = null;\n    this.overrideContext = null;\n    this.animator = animator;\n    this.children = [];\n    this.isBound = false;\n    this.isAttached = false;\n    this.contentSelectors = null;\n    anchor.viewSlot = this;\n    anchor.isContentProjectionSource = false;\n  }\n\n  ViewSlot.prototype.animateView = function animateView(view) {\n    var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'enter';\n\n    var animatableElement = getAnimatableElement(view);\n\n    if (animatableElement !== null) {\n      switch (direction) {\n        case 'enter':\n          return this.animator.enter(animatableElement);\n        case 'leave':\n          return this.animator.leave(animatableElement);\n        default:\n          throw new Error('Invalid animation direction: ' + direction);\n      }\n    }\n  };\n\n  ViewSlot.prototype.transformChildNodesIntoView = function transformChildNodesIntoView() {\n    var parent = this.anchor;\n\n    this.children.push({\n      fragment: parent,\n      firstChild: parent.firstChild,\n      lastChild: parent.lastChild,\n      returnToCache: function returnToCache() {},\n      removeNodes: function removeNodes() {\n        var last = void 0;\n\n        while (last = parent.lastChild) {\n          parent.removeChild(last);\n        }\n      },\n      created: function created() {},\n      bind: function bind() {},\n      unbind: function unbind() {},\n      attached: function attached() {},\n      detached: function detached() {}\n    });\n  };\n\n  ViewSlot.prototype.bind = function bind(bindingContext, overrideContext) {\n    var i = void 0;\n    var ii = void 0;\n    var children = void 0;\n\n    if (this.isBound) {\n      if (this.bindingContext === bindingContext) {\n        return;\n      }\n\n      this.unbind();\n    }\n\n    this.isBound = true;\n    this.bindingContext = bindingContext = bindingContext || this.bindingContext;\n    this.overrideContext = overrideContext = overrideContext || this.overrideContext;\n\n    children = this.children;\n    for (i = 0, ii = children.length; i < ii; ++i) {\n      children[i].bind(bindingContext, overrideContext, true);\n    }\n  };\n\n  ViewSlot.prototype.unbind = function unbind() {\n    if (this.isBound) {\n      var i = void 0;\n      var ii = void 0;\n      var _children4 = this.children;\n\n      this.isBound = false;\n      this.bindingContext = null;\n      this.overrideContext = null;\n\n      for (i = 0, ii = _children4.length; i < ii; ++i) {\n        _children4[i].unbind();\n      }\n    }\n  };\n\n  ViewSlot.prototype.add = function add(view) {\n    if (this.anchorIsContainer) {\n      view.appendNodesTo(this.anchor);\n    } else {\n      view.insertNodesBefore(this.anchor);\n    }\n\n    this.children.push(view);\n\n    if (this.isAttached) {\n      view.attached();\n      return this.animateView(view, 'enter');\n    }\n  };\n\n  ViewSlot.prototype.insert = function insert(index, view) {\n    var children = this.children;\n    var length = children.length;\n\n    if (index === 0 && length === 0 || index >= length) {\n      return this.add(view);\n    }\n\n    view.insertNodesBefore(children[index].firstChild);\n    children.splice(index, 0, view);\n\n    if (this.isAttached) {\n      view.attached();\n      return this.animateView(view, 'enter');\n    }\n  };\n\n  ViewSlot.prototype.move = function move(sourceIndex, targetIndex) {\n    if (sourceIndex === targetIndex) {\n      return;\n    }\n\n    var children = this.children;\n    var view = children[sourceIndex];\n\n    view.removeNodes();\n    view.insertNodesBefore(children[targetIndex].firstChild);\n    children.splice(sourceIndex, 1);\n    children.splice(targetIndex, 0, view);\n  };\n\n  ViewSlot.prototype.remove = function remove(view, returnToCache, skipAnimation) {\n    return this.removeAt(this.children.indexOf(view), returnToCache, skipAnimation);\n  };\n\n  ViewSlot.prototype.removeMany = function removeMany(viewsToRemove, returnToCache, skipAnimation) {\n    var _this3 = this;\n\n    var children = this.children;\n    var ii = viewsToRemove.length;\n    var i = void 0;\n    var rmPromises = [];\n\n    viewsToRemove.forEach(function (child) {\n      if (skipAnimation) {\n        child.removeNodes();\n        return;\n      }\n\n      var animation = _this3.animateView(child, 'leave');\n      if (animation) {\n        rmPromises.push(animation.then(function () {\n          return child.removeNodes();\n        }));\n      } else {\n        child.removeNodes();\n      }\n    });\n\n    var removeAction = function removeAction() {\n      if (_this3.isAttached) {\n        for (i = 0; i < ii; ++i) {\n          viewsToRemove[i].detached();\n        }\n      }\n\n      if (returnToCache) {\n        for (i = 0; i < ii; ++i) {\n          viewsToRemove[i].returnToCache();\n        }\n      }\n\n      for (i = 0; i < ii; ++i) {\n        var index = children.indexOf(viewsToRemove[i]);\n        if (index >= 0) {\n          children.splice(index, 1);\n        }\n      }\n    };\n\n    if (rmPromises.length > 0) {\n      return Promise.all(rmPromises).then(function () {\n        return removeAction();\n      });\n    }\n\n    return removeAction();\n  };\n\n  ViewSlot.prototype.removeAt = function removeAt(index, returnToCache, skipAnimation) {\n    var _this4 = this;\n\n    var view = this.children[index];\n\n    var removeAction = function removeAction() {\n      index = _this4.children.indexOf(view);\n      view.removeNodes();\n      _this4.children.splice(index, 1);\n\n      if (_this4.isAttached) {\n        view.detached();\n      }\n\n      if (returnToCache) {\n        view.returnToCache();\n      }\n\n      return view;\n    };\n\n    if (!skipAnimation) {\n      var animation = this.animateView(view, 'leave');\n      if (animation) {\n        return animation.then(function () {\n          return removeAction();\n        });\n      }\n    }\n\n    return removeAction();\n  };\n\n  ViewSlot.prototype.removeAll = function removeAll(returnToCache, skipAnimation) {\n    var _this5 = this;\n\n    var children = this.children;\n    var ii = children.length;\n    var i = void 0;\n    var rmPromises = [];\n\n    children.forEach(function (child) {\n      if (skipAnimation) {\n        child.removeNodes();\n        return;\n      }\n\n      var animation = _this5.animateView(child, 'leave');\n      if (animation) {\n        rmPromises.push(animation.then(function () {\n          return child.removeNodes();\n        }));\n      } else {\n        child.removeNodes();\n      }\n    });\n\n    var removeAction = function removeAction() {\n      if (_this5.isAttached) {\n        for (i = 0; i < ii; ++i) {\n          children[i].detached();\n        }\n      }\n\n      if (returnToCache) {\n        for (i = 0; i < ii; ++i) {\n          var _child3 = children[i];\n\n          if (_child3) {\n            _child3.returnToCache();\n          }\n        }\n      }\n\n      _this5.children = [];\n    };\n\n    if (rmPromises.length > 0) {\n      return Promise.all(rmPromises).then(function () {\n        return removeAction();\n      });\n    }\n\n    return removeAction();\n  };\n\n  ViewSlot.prototype.attached = function attached() {\n    var i = void 0;\n    var ii = void 0;\n    var children = void 0;\n    var child = void 0;\n\n    if (this.isAttached) {\n      return;\n    }\n\n    this.isAttached = true;\n\n    children = this.children;\n    for (i = 0, ii = children.length; i < ii; ++i) {\n      child = children[i];\n      child.attached();\n      this.animateView(child, 'enter');\n    }\n  };\n\n  ViewSlot.prototype.detached = function detached() {\n    var i = void 0;\n    var ii = void 0;\n    var children = void 0;\n\n    if (this.isAttached) {\n      this.isAttached = false;\n      children = this.children;\n      for (i = 0, ii = children.length; i < ii; ++i) {\n        children[i].detached();\n      }\n    }\n  };\n\n  ViewSlot.prototype.projectTo = function projectTo(slots) {\n    var _this6 = this;\n\n    this.projectToSlots = slots;\n    this.add = this._projectionAdd;\n    this.insert = this._projectionInsert;\n    this.move = this._projectionMove;\n    this.remove = this._projectionRemove;\n    this.removeAt = this._projectionRemoveAt;\n    this.removeMany = this._projectionRemoveMany;\n    this.removeAll = this._projectionRemoveAll;\n    this.children.forEach(function (view) {\n      return ShadowDOM.distributeView(view, slots, _this6);\n    });\n  };\n\n  ViewSlot.prototype._projectionAdd = function _projectionAdd(view) {\n    ShadowDOM.distributeView(view, this.projectToSlots, this);\n\n    this.children.push(view);\n\n    if (this.isAttached) {\n      view.attached();\n    }\n  };\n\n  ViewSlot.prototype._projectionInsert = function _projectionInsert(index, view) {\n    if (index === 0 && !this.children.length || index >= this.children.length) {\n      this.add(view);\n    } else {\n      ShadowDOM.distributeView(view, this.projectToSlots, this, index);\n\n      this.children.splice(index, 0, view);\n\n      if (this.isAttached) {\n        view.attached();\n      }\n    }\n  };\n\n  ViewSlot.prototype._projectionMove = function _projectionMove(sourceIndex, targetIndex) {\n    if (sourceIndex === targetIndex) {\n      return;\n    }\n\n    var children = this.children;\n    var view = children[sourceIndex];\n\n    ShadowDOM.undistributeView(view, this.projectToSlots, this);\n    ShadowDOM.distributeView(view, this.projectToSlots, this, targetIndex);\n\n    children.splice(sourceIndex, 1);\n    children.splice(targetIndex, 0, view);\n  };\n\n  ViewSlot.prototype._projectionRemove = function _projectionRemove(view, returnToCache) {\n    ShadowDOM.undistributeView(view, this.projectToSlots, this);\n    this.children.splice(this.children.indexOf(view), 1);\n\n    if (this.isAttached) {\n      view.detached();\n    }\n    if (returnToCache) {\n      view.returnToCache();\n    }\n  };\n\n  ViewSlot.prototype._projectionRemoveAt = function _projectionRemoveAt(index, returnToCache) {\n    var view = this.children[index];\n\n    ShadowDOM.undistributeView(view, this.projectToSlots, this);\n    this.children.splice(index, 1);\n\n    if (this.isAttached) {\n      view.detached();\n    }\n    if (returnToCache) {\n      view.returnToCache();\n    }\n  };\n\n  ViewSlot.prototype._projectionRemoveMany = function _projectionRemoveMany(viewsToRemove, returnToCache) {\n    var _this7 = this;\n\n    viewsToRemove.forEach(function (view) {\n      return _this7.remove(view, returnToCache);\n    });\n  };\n\n  ViewSlot.prototype._projectionRemoveAll = function _projectionRemoveAll(returnToCache) {\n    ShadowDOM.undistributeAll(this.projectToSlots, this);\n\n    var children = this.children;\n    var ii = children.length;\n\n    for (var i = 0; i < ii; ++i) {\n      if (returnToCache) {\n        children[i].returnToCache();\n      } else if (this.isAttached) {\n        children[i].detached();\n      }\n    }\n\n    this.children = [];\n  };\n\n  return ViewSlot;\n}();\n\nvar ProviderResolver = resolver(_class12 = function () {\n  function ProviderResolver() {\n    \n  }\n\n  ProviderResolver.prototype.get = function get(container, key) {\n    var id = key.__providerId__;\n    return id in container ? container[id] : container[id] = container.invoke(key);\n  };\n\n  return ProviderResolver;\n}()) || _class12;\n\nvar providerResolverInstance = new ProviderResolver();\n\nfunction elementContainerGet(key) {\n  if (key === DOM.Element) {\n    return this.element;\n  }\n\n  if (key === BoundViewFactory) {\n    if (this.boundViewFactory) {\n      return this.boundViewFactory;\n    }\n\n    var factory = this.instruction.viewFactory;\n    var _partReplacements = this.partReplacements;\n\n    if (_partReplacements) {\n      factory = _partReplacements[factory.part] || factory;\n    }\n\n    this.boundViewFactory = new BoundViewFactory(this, factory, _partReplacements);\n    return this.boundViewFactory;\n  }\n\n  if (key === ViewSlot) {\n    if (this.viewSlot === undefined) {\n      this.viewSlot = new ViewSlot(this.element, this.instruction.anchorIsContainer);\n      this.element.isContentProjectionSource = this.instruction.lifting;\n      this.children.push(this.viewSlot);\n    }\n\n    return this.viewSlot;\n  }\n\n  if (key === ElementEvents) {\n    return this.elementEvents || (this.elementEvents = new ElementEvents(this.element));\n  }\n\n  if (key === CompositionTransaction) {\n    return this.compositionTransaction || (this.compositionTransaction = this.parent.get(key));\n  }\n\n  if (key === ViewResources) {\n    return this.viewResources;\n  }\n\n  if (key === TargetInstruction) {\n    return this.instruction;\n  }\n\n  return this.superGet(key);\n}\n\nfunction createElementContainer(parent, element, instruction, children, partReplacements, resources) {\n  var container = parent.createChild();\n  var providers = void 0;\n  var i = void 0;\n\n  container.element = element;\n  container.instruction = instruction;\n  container.children = children;\n  container.viewResources = resources;\n  container.partReplacements = partReplacements;\n\n  providers = instruction.providers;\n  i = providers.length;\n\n  while (i--) {\n    container._resolvers.set(providers[i], providerResolverInstance);\n  }\n\n  container.superGet = container.get;\n  container.get = elementContainerGet;\n\n  return container;\n}\n\nfunction hasAttribute(name) {\n  return this._element.hasAttribute(name);\n}\n\nfunction getAttribute(name) {\n  return this._element.getAttribute(name);\n}\n\nfunction setAttribute(name, value) {\n  this._element.setAttribute(name, value);\n}\n\nfunction makeElementIntoAnchor(element, elementInstruction) {\n  var anchor = DOM.createComment('anchor');\n\n  if (elementInstruction) {\n    var firstChild = element.firstChild;\n\n    if (firstChild && firstChild.tagName === 'AU-CONTENT') {\n      anchor.contentElement = firstChild;\n    }\n\n    anchor._element = element;\n\n    anchor.hasAttribute = hasAttribute;\n    anchor.getAttribute = getAttribute;\n    anchor.setAttribute = setAttribute;\n  }\n\n  DOM.replaceNode(anchor, element);\n\n  return anchor;\n}\n\nfunction applyInstructions(containers, element, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources) {\n  var behaviorInstructions = instruction.behaviorInstructions;\n  var expressions = instruction.expressions;\n  var elementContainer = void 0;\n  var i = void 0;\n  var ii = void 0;\n  var current = void 0;\n  var instance = void 0;\n\n  if (instruction.contentExpression) {\n    bindings.push(instruction.contentExpression.createBinding(element.nextSibling));\n    element.nextSibling.auInterpolationTarget = true;\n    element.parentNode.removeChild(element);\n    return;\n  }\n\n  if (instruction.shadowSlot) {\n    var commentAnchor = DOM.createComment('slot');\n    var slot = void 0;\n\n    if (instruction.slotDestination) {\n      slot = new PassThroughSlot(commentAnchor, instruction.slotName, instruction.slotDestination, instruction.slotFallbackFactory);\n    } else {\n      slot = new ShadowSlot(commentAnchor, instruction.slotName, instruction.slotFallbackFactory);\n    }\n\n    DOM.replaceNode(commentAnchor, element);\n    shadowSlots[instruction.slotName] = slot;\n    controllers.push(slot);\n    return;\n  }\n\n  if (instruction.letElement) {\n    for (i = 0, ii = expressions.length; i < ii; ++i) {\n      bindings.push(expressions[i].createBinding());\n    }\n    element.parentNode.removeChild(element);\n    return;\n  }\n\n  if (behaviorInstructions.length) {\n    if (!instruction.anchorIsContainer) {\n      element = makeElementIntoAnchor(element, instruction.elementInstruction);\n    }\n\n    containers[instruction.injectorId] = elementContainer = createElementContainer(containers[instruction.parentInjectorId], element, instruction, children, partReplacements, resources);\n\n    for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n      current = behaviorInstructions[i];\n      instance = current.type.create(elementContainer, current, element, bindings);\n      controllers.push(instance);\n    }\n  }\n\n  for (i = 0, ii = expressions.length; i < ii; ++i) {\n    bindings.push(expressions[i].createBinding(element));\n  }\n}\n\nfunction styleStringToObject(style, target) {\n  var attributes = style.split(';');\n  var firstIndexOfColon = void 0;\n  var i = void 0;\n  var current = void 0;\n  var key = void 0;\n  var value = void 0;\n\n  target = target || {};\n\n  for (i = 0; i < attributes.length; i++) {\n    current = attributes[i];\n    firstIndexOfColon = current.indexOf(':');\n    key = current.substring(0, firstIndexOfColon).trim();\n    value = current.substring(firstIndexOfColon + 1).trim();\n    target[key] = value;\n  }\n\n  return target;\n}\n\nfunction styleObjectToString(obj) {\n  var result = '';\n\n  for (var _key4 in obj) {\n    result += _key4 + ':' + obj[_key4] + ';';\n  }\n\n  return result;\n}\n\nfunction applySurrogateInstruction(container, element, instruction, controllers, bindings, children) {\n  var behaviorInstructions = instruction.behaviorInstructions;\n  var expressions = instruction.expressions;\n  var providers = instruction.providers;\n  var values = instruction.values;\n  var i = void 0;\n  var ii = void 0;\n  var current = void 0;\n  var instance = void 0;\n  var currentAttributeValue = void 0;\n\n  i = providers.length;\n  while (i--) {\n    container._resolvers.set(providers[i], providerResolverInstance);\n  }\n\n  for (var _key5 in values) {\n    currentAttributeValue = element.getAttribute(_key5);\n\n    if (currentAttributeValue) {\n      if (_key5 === 'class') {\n        element.setAttribute('class', currentAttributeValue + ' ' + values[_key5]);\n      } else if (_key5 === 'style') {\n        var styleObject = styleStringToObject(values[_key5]);\n        styleStringToObject(currentAttributeValue, styleObject);\n        element.setAttribute('style', styleObjectToString(styleObject));\n      }\n    } else {\n      element.setAttribute(_key5, values[_key5]);\n    }\n  }\n\n  if (behaviorInstructions.length) {\n    for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n      current = behaviorInstructions[i];\n      instance = current.type.create(container, current, element, bindings);\n\n      if (instance.contentView) {\n        children.push(instance.contentView);\n      }\n\n      controllers.push(instance);\n    }\n  }\n\n  for (i = 0, ii = expressions.length; i < ii; ++i) {\n    bindings.push(expressions[i].createBinding(element));\n  }\n}\n\nexport var BoundViewFactory = function () {\n  function BoundViewFactory(parentContainer, viewFactory, partReplacements) {\n    \n\n    this.parentContainer = parentContainer;\n    this.viewFactory = viewFactory;\n    this.factoryCreateInstruction = { partReplacements: partReplacements };\n  }\n\n  BoundViewFactory.prototype.create = function create() {\n    var view = this.viewFactory.create(this.parentContainer.createChild(), this.factoryCreateInstruction);\n    view._isUserControlled = true;\n    return view;\n  };\n\n  BoundViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {\n    this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);\n  };\n\n  BoundViewFactory.prototype.getCachedView = function getCachedView() {\n    return this.viewFactory.getCachedView();\n  };\n\n  BoundViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {\n    this.viewFactory.returnViewToCache(view);\n  };\n\n  _createClass(BoundViewFactory, [{\n    key: 'isCaching',\n    get: function get() {\n      return this.viewFactory.isCaching;\n    }\n  }]);\n\n  return BoundViewFactory;\n}();\n\nexport var ViewFactory = function () {\n  function ViewFactory(template, instructions, resources) {\n    \n\n    this.isCaching = false;\n\n    this.template = template;\n    this.instructions = instructions;\n    this.resources = resources;\n    this.cacheSize = -1;\n    this.cache = null;\n  }\n\n  ViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {\n    if (size) {\n      if (size === '*') {\n        size = Number.MAX_VALUE;\n      } else if (typeof size === 'string') {\n        size = parseInt(size, 10);\n      }\n    }\n\n    if (this.cacheSize === -1 || !doNotOverrideIfAlreadySet) {\n      this.cacheSize = size;\n    }\n\n    if (this.cacheSize > 0) {\n      this.cache = [];\n    } else {\n      this.cache = null;\n    }\n\n    this.isCaching = this.cacheSize > 0;\n  };\n\n  ViewFactory.prototype.getCachedView = function getCachedView() {\n    return this.cache !== null ? this.cache.pop() || null : null;\n  };\n\n  ViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {\n    if (view.isAttached) {\n      view.detached();\n    }\n\n    if (view.isBound) {\n      view.unbind();\n    }\n\n    if (this.cache !== null && this.cache.length < this.cacheSize) {\n      view.fromCache = true;\n      this.cache.push(view);\n    }\n  };\n\n  ViewFactory.prototype.create = function create(container, createInstruction, element) {\n    createInstruction = createInstruction || BehaviorInstruction.normal;\n\n    var cachedView = this.getCachedView();\n    if (cachedView !== null) {\n      return cachedView;\n    }\n\n    var fragment = createInstruction.enhance ? this.template : this.template.cloneNode(true);\n    var instructables = fragment.querySelectorAll('.au-target');\n    var instructions = this.instructions;\n    var resources = this.resources;\n    var controllers = [];\n    var bindings = [];\n    var children = [];\n    var shadowSlots = Object.create(null);\n    var containers = { root: container };\n    var partReplacements = createInstruction.partReplacements;\n    var i = void 0;\n    var ii = void 0;\n    var view = void 0;\n    var instructable = void 0;\n    var instruction = void 0;\n\n    this.resources._invokeHook('beforeCreate', this, container, fragment, createInstruction);\n\n    if (element && this.surrogateInstruction !== null) {\n      applySurrogateInstruction(container, element, this.surrogateInstruction, controllers, bindings, children);\n    }\n\n    if (createInstruction.enhance && fragment.hasAttribute('au-target-id')) {\n      instructable = fragment;\n      instruction = instructions[instructable.getAttribute('au-target-id')];\n      applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);\n    }\n\n    for (i = 0, ii = instructables.length; i < ii; ++i) {\n      instructable = instructables[i];\n      instruction = instructions[instructable.getAttribute('au-target-id')];\n      applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);\n    }\n\n    view = new View(container, this, fragment, controllers, bindings, children, shadowSlots);\n\n    if (!createInstruction.initiatedByBehavior) {\n      view.created();\n    }\n\n    this.resources._invokeHook('afterCreate', view);\n\n    return view;\n  };\n\n  return ViewFactory;\n}();\n\nvar nextInjectorId = 0;\nfunction getNextInjectorId() {\n  return ++nextInjectorId;\n}\n\nvar lastAUTargetID = 0;\nfunction getNextAUTargetID() {\n  return (++lastAUTargetID).toString();\n}\n\nfunction makeIntoInstructionTarget(element) {\n  var value = element.getAttribute('class');\n  var auTargetID = getNextAUTargetID();\n\n  element.setAttribute('class', value ? value + ' au-target' : 'au-target');\n  element.setAttribute('au-target-id', auTargetID);\n\n  return auTargetID;\n}\n\nfunction makeShadowSlot(compiler, resources, node, instructions, parentInjectorId) {\n  var auShadowSlot = DOM.createElement('au-shadow-slot');\n  DOM.replaceNode(auShadowSlot, node);\n\n  var auTargetID = makeIntoInstructionTarget(auShadowSlot);\n  var instruction = TargetInstruction.shadowSlot(parentInjectorId);\n\n  instruction.slotName = node.getAttribute('name') || ShadowDOM.defaultSlotKey;\n  instruction.slotDestination = node.getAttribute('slot');\n\n  if (node.innerHTML.trim()) {\n    var fragment = DOM.createDocumentFragment();\n    var _child4 = void 0;\n\n    while (_child4 = node.firstChild) {\n      fragment.appendChild(_child4);\n    }\n\n    instruction.slotFallbackFactory = compiler.compile(fragment, resources);\n  }\n\n  instructions[auTargetID] = instruction;\n\n  return auShadowSlot;\n}\n\nvar defaultLetHandler = BindingLanguage.prototype.createLetExpressions;\n\nexport var ViewCompiler = (_dec7 = inject(BindingLanguage, ViewResources), _dec7(_class14 = function () {\n  function ViewCompiler(bindingLanguage, resources) {\n    \n\n    this.bindingLanguage = bindingLanguage;\n    this.resources = resources;\n  }\n\n  ViewCompiler.prototype.compile = function compile(source, resources, compileInstruction) {\n    resources = resources || this.resources;\n    compileInstruction = compileInstruction || ViewCompileInstruction.normal;\n    source = typeof source === 'string' ? DOM.createTemplateFromMarkup(source) : source;\n\n    var content = void 0;\n    var part = void 0;\n    var cacheSize = void 0;\n\n    if (source.content) {\n      part = source.getAttribute('part');\n      cacheSize = source.getAttribute('view-cache');\n      content = DOM.adoptNode(source.content);\n    } else {\n      content = source;\n    }\n\n    compileInstruction.targetShadowDOM = compileInstruction.targetShadowDOM && FEATURE.shadowDOM;\n    resources._invokeHook('beforeCompile', content, resources, compileInstruction);\n\n    var instructions = {};\n    this._compileNode(content, resources, instructions, source, 'root', !compileInstruction.targetShadowDOM);\n\n    var firstChild = content.firstChild;\n    if (firstChild && firstChild.nodeType === 1) {\n      var targetId = firstChild.getAttribute('au-target-id');\n      if (targetId) {\n        var ins = instructions[targetId];\n\n        if (ins.shadowSlot || ins.lifting || ins.elementInstruction && !ins.elementInstruction.anchorIsContainer) {\n          content.insertBefore(DOM.createComment('view'), firstChild);\n        }\n      }\n    }\n\n    var factory = new ViewFactory(content, instructions, resources);\n\n    factory.surrogateInstruction = compileInstruction.compileSurrogate ? this._compileSurrogate(source, resources) : null;\n    factory.part = part;\n\n    if (cacheSize) {\n      factory.setCacheSize(cacheSize);\n    }\n\n    resources._invokeHook('afterCompile', factory);\n\n    return factory;\n  };\n\n  ViewCompiler.prototype._compileNode = function _compileNode(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {\n    switch (node.nodeType) {\n      case 1:\n        return this._compileElement(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM);\n      case 3:\n        var expression = resources.getBindingLanguage(this.bindingLanguage).inspectTextContent(resources, node.wholeText);\n        if (expression) {\n          var marker = DOM.createElement('au-marker');\n          var auTargetID = makeIntoInstructionTarget(marker);\n          (node.parentNode || parentNode).insertBefore(marker, node);\n          node.textContent = ' ';\n          instructions[auTargetID] = TargetInstruction.contentExpression(expression);\n\n          while (node.nextSibling && node.nextSibling.nodeType === 3) {\n            (node.parentNode || parentNode).removeChild(node.nextSibling);\n          }\n        } else {\n          while (node.nextSibling && node.nextSibling.nodeType === 3) {\n            node = node.nextSibling;\n          }\n        }\n        return node.nextSibling;\n      case 11:\n        var currentChild = node.firstChild;\n        while (currentChild) {\n          currentChild = this._compileNode(currentChild, resources, instructions, node, parentInjectorId, targetLightDOM);\n        }\n        break;\n      default:\n        break;\n    }\n\n    return node.nextSibling;\n  };\n\n  ViewCompiler.prototype._compileSurrogate = function _compileSurrogate(node, resources) {\n    var tagName = node.tagName.toLowerCase();\n    var attributes = node.attributes;\n    var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);\n    var knownAttribute = void 0;\n    var property = void 0;\n    var instruction = void 0;\n    var i = void 0;\n    var ii = void 0;\n    var attr = void 0;\n    var attrName = void 0;\n    var attrValue = void 0;\n    var info = void 0;\n    var type = void 0;\n    var expressions = [];\n    var expression = void 0;\n    var behaviorInstructions = [];\n    var values = {};\n    var hasValues = false;\n    var providers = [];\n\n    for (i = 0, ii = attributes.length; i < ii; ++i) {\n      attr = attributes[i];\n      attrName = attr.name;\n      attrValue = attr.value;\n\n      info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);\n      type = resources.getAttribute(info.attrName);\n\n      if (type) {\n        knownAttribute = resources.mapAttribute(info.attrName);\n        if (knownAttribute) {\n          property = type.attributes[knownAttribute];\n\n          if (property) {\n            info.defaultBindingMode = property.defaultBindingMode;\n\n            if (!info.command && !info.expression) {\n              info.command = property.hasOptions ? 'options' : null;\n            }\n\n            if (info.command && info.command !== 'options' && type.primaryProperty) {\n              var _primaryProperty = type.primaryProperty;\n              attrName = info.attrName = _primaryProperty.attribute;\n\n              info.defaultBindingMode = _primaryProperty.defaultBindingMode;\n            }\n          }\n        }\n      }\n\n      instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);\n\n      if (instruction) {\n        if (instruction.alteredAttr) {\n          type = resources.getAttribute(instruction.attrName);\n        }\n\n        if (instruction.discrete) {\n          expressions.push(instruction);\n        } else {\n          if (type) {\n            instruction.type = type;\n            this._configureProperties(instruction, resources);\n\n            if (type.liftsContent) {\n              throw new Error('You cannot place a template controller on a surrogate element.');\n            } else {\n              behaviorInstructions.push(instruction);\n            }\n          } else {\n            expressions.push(instruction.attributes[instruction.attrName]);\n          }\n        }\n      } else {\n        if (type) {\n          instruction = BehaviorInstruction.attribute(attrName, type);\n          instruction.attributes[resources.mapAttribute(attrName)] = attrValue;\n\n          if (type.liftsContent) {\n            throw new Error('You cannot place a template controller on a surrogate element.');\n          } else {\n            behaviorInstructions.push(instruction);\n          }\n        } else if (attrName !== 'id' && attrName !== 'part' && attrName !== 'replace-part') {\n          hasValues = true;\n          values[attrName] = attrValue;\n        }\n      }\n    }\n\n    if (expressions.length || behaviorInstructions.length || hasValues) {\n      for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n        instruction = behaviorInstructions[i];\n        instruction.type.compile(this, resources, node, instruction);\n        providers.push(instruction.type.target);\n      }\n\n      for (i = 0, ii = expressions.length; i < ii; ++i) {\n        expression = expressions[i];\n        if (expression.attrToRemove !== undefined) {\n          node.removeAttribute(expression.attrToRemove);\n        }\n      }\n\n      return TargetInstruction.surrogate(providers, behaviorInstructions, expressions, values);\n    }\n\n    return null;\n  };\n\n  ViewCompiler.prototype._compileElement = function _compileElement(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {\n    var tagName = node.tagName.toLowerCase();\n    var attributes = node.attributes;\n    var expressions = [];\n    var expression = void 0;\n    var behaviorInstructions = [];\n    var providers = [];\n    var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);\n    var liftingInstruction = void 0;\n    var viewFactory = void 0;\n    var type = void 0;\n    var elementInstruction = void 0;\n    var elementProperty = void 0;\n    var i = void 0;\n    var ii = void 0;\n    var attr = void 0;\n    var attrName = void 0;\n    var attrValue = void 0;\n    var originalAttrName = void 0;\n    var instruction = void 0;\n    var info = void 0;\n    var property = void 0;\n    var knownAttribute = void 0;\n    var auTargetID = void 0;\n    var injectorId = void 0;\n\n    if (tagName === 'slot') {\n      if (targetLightDOM) {\n        node = makeShadowSlot(this, resources, node, instructions, parentInjectorId);\n      }\n      return node.nextSibling;\n    } else if (tagName === 'template') {\n      if (!('content' in node)) {\n        throw new Error('You cannot place a template element within ' + node.namespaceURI + ' namespace');\n      }\n      viewFactory = this.compile(node, resources);\n      viewFactory.part = node.getAttribute('part');\n    } else {\n      type = resources.getElement(node.getAttribute('as-element') || tagName);\n\n      if (tagName === 'let' && !type && bindingLanguage.createLetExpressions !== defaultLetHandler) {\n        expressions = bindingLanguage.createLetExpressions(resources, node);\n        auTargetID = makeIntoInstructionTarget(node);\n        instructions[auTargetID] = TargetInstruction.letElement(expressions);\n        return node.nextSibling;\n      }\n      if (type) {\n        elementInstruction = BehaviorInstruction.element(node, type);\n        type.processAttributes(this, resources, node, attributes, elementInstruction);\n        behaviorInstructions.push(elementInstruction);\n      }\n    }\n\n    for (i = 0, ii = attributes.length; i < ii; ++i) {\n      attr = attributes[i];\n      originalAttrName = attrName = attr.name;\n      attrValue = attr.value;\n      info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);\n\n      if (targetLightDOM && info.attrName === 'slot') {\n        info.attrName = attrName = 'au-slot';\n      }\n\n      type = resources.getAttribute(info.attrName);\n      elementProperty = null;\n\n      if (type) {\n        knownAttribute = resources.mapAttribute(info.attrName);\n        if (knownAttribute) {\n          property = type.attributes[knownAttribute];\n\n          if (property) {\n            info.defaultBindingMode = property.defaultBindingMode;\n\n            if (!info.command && !info.expression) {\n              info.command = property.hasOptions ? 'options' : null;\n            }\n\n            if (info.command && info.command !== 'options' && type.primaryProperty) {\n              var _primaryProperty2 = type.primaryProperty;\n              attrName = info.attrName = _primaryProperty2.attribute;\n\n              info.defaultBindingMode = _primaryProperty2.defaultBindingMode;\n            }\n          }\n        }\n      } else if (elementInstruction) {\n        elementProperty = elementInstruction.type.attributes[info.attrName];\n        if (elementProperty) {\n          info.defaultBindingMode = elementProperty.defaultBindingMode;\n        }\n      }\n\n      if (elementProperty) {\n        instruction = bindingLanguage.createAttributeInstruction(resources, node, info, elementInstruction);\n      } else {\n        instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);\n      }\n\n      if (instruction) {\n        if (instruction.alteredAttr) {\n          type = resources.getAttribute(instruction.attrName);\n        }\n\n        if (instruction.discrete) {\n          expressions.push(instruction);\n        } else {\n          if (type) {\n            instruction.type = type;\n            this._configureProperties(instruction, resources);\n\n            if (type.liftsContent) {\n              instruction.originalAttrName = originalAttrName;\n              liftingInstruction = instruction;\n              break;\n            } else {\n              behaviorInstructions.push(instruction);\n            }\n          } else if (elementProperty) {\n            elementInstruction.attributes[info.attrName].targetProperty = elementProperty.name;\n          } else {\n            expressions.push(instruction.attributes[instruction.attrName]);\n          }\n        }\n      } else {\n        if (type) {\n          instruction = BehaviorInstruction.attribute(attrName, type);\n          instruction.attributes[resources.mapAttribute(attrName)] = attrValue;\n\n          if (type.liftsContent) {\n            instruction.originalAttrName = originalAttrName;\n            liftingInstruction = instruction;\n            break;\n          } else {\n            behaviorInstructions.push(instruction);\n          }\n        } else if (elementProperty) {\n          elementInstruction.attributes[attrName] = attrValue;\n        }\n      }\n    }\n\n    if (liftingInstruction) {\n      liftingInstruction.viewFactory = viewFactory;\n      node = liftingInstruction.type.compile(this, resources, node, liftingInstruction, parentNode);\n      auTargetID = makeIntoInstructionTarget(node);\n      instructions[auTargetID] = TargetInstruction.lifting(parentInjectorId, liftingInstruction);\n    } else {\n      var skipContentProcessing = false;\n\n      if (expressions.length || behaviorInstructions.length) {\n        injectorId = behaviorInstructions.length ? getNextInjectorId() : false;\n\n        for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {\n          instruction = behaviorInstructions[i];\n          instruction.type.compile(this, resources, node, instruction, parentNode);\n          providers.push(instruction.type.target);\n          skipContentProcessing = skipContentProcessing || instruction.skipContentProcessing;\n        }\n\n        for (i = 0, ii = expressions.length; i < ii; ++i) {\n          expression = expressions[i];\n          if (expression.attrToRemove !== undefined) {\n            node.removeAttribute(expression.attrToRemove);\n          }\n        }\n\n        auTargetID = makeIntoInstructionTarget(node);\n        instructions[auTargetID] = TargetInstruction.normal(injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction);\n      }\n\n      if (skipContentProcessing) {\n        return node.nextSibling;\n      }\n\n      var currentChild = node.firstChild;\n      while (currentChild) {\n        currentChild = this._compileNode(currentChild, resources, instructions, node, injectorId || parentInjectorId, targetLightDOM);\n      }\n    }\n\n    return node.nextSibling;\n  };\n\n  ViewCompiler.prototype._configureProperties = function _configureProperties(instruction, resources) {\n    var type = instruction.type;\n    var attrName = instruction.attrName;\n    var attributes = instruction.attributes;\n    var property = void 0;\n    var key = void 0;\n    var value = void 0;\n\n    var knownAttribute = resources.mapAttribute(attrName);\n    if (knownAttribute && attrName in attributes && knownAttribute !== attrName) {\n      attributes[knownAttribute] = attributes[attrName];\n      delete attributes[attrName];\n    }\n\n    for (key in attributes) {\n      value = attributes[key];\n\n      if (value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {\n        property = type.attributes[key];\n\n        if (property !== undefined) {\n          value.targetProperty = property.name;\n        } else {\n          value.targetProperty = key;\n        }\n      }\n    }\n  };\n\n  return ViewCompiler;\n}()) || _class14);\n\nexport var ResourceModule = function () {\n  function ResourceModule(moduleId) {\n    \n\n    this.id = moduleId;\n    this.moduleInstance = null;\n    this.mainResource = null;\n    this.resources = null;\n    this.viewStrategy = null;\n    this.isInitialized = false;\n    this.onLoaded = null;\n    this.loadContext = null;\n  }\n\n  ResourceModule.prototype.initialize = function initialize(container) {\n    var current = this.mainResource;\n    var resources = this.resources;\n    var vs = this.viewStrategy;\n\n    if (this.isInitialized) {\n      return;\n    }\n\n    this.isInitialized = true;\n\n    if (current !== undefined) {\n      current.metadata.viewStrategy = vs;\n      current.initialize(container);\n    }\n\n    for (var i = 0, ii = resources.length; i < ii; ++i) {\n      current = resources[i];\n      current.metadata.viewStrategy = vs;\n      current.initialize(container);\n    }\n  };\n\n  ResourceModule.prototype.register = function register(registry, name) {\n    var main = this.mainResource;\n    var resources = this.resources;\n\n    if (main !== undefined) {\n      main.register(registry, name);\n      name = null;\n    }\n\n    for (var i = 0, ii = resources.length; i < ii; ++i) {\n      resources[i].register(registry, name);\n      name = null;\n    }\n  };\n\n  ResourceModule.prototype.load = function load(container, loadContext) {\n    if (this.onLoaded !== null) {\n      return this.loadContext === loadContext ? Promise.resolve() : this.onLoaded;\n    }\n\n    var main = this.mainResource;\n    var resources = this.resources;\n    var loads = void 0;\n\n    if (main !== undefined) {\n      loads = new Array(resources.length + 1);\n      loads[0] = main.load(container, loadContext);\n      for (var i = 0, ii = resources.length; i < ii; ++i) {\n        loads[i + 1] = resources[i].load(container, loadContext);\n      }\n    } else {\n      loads = new Array(resources.length);\n      for (var _i2 = 0, _ii = resources.length; _i2 < _ii; ++_i2) {\n        loads[_i2] = resources[_i2].load(container, loadContext);\n      }\n    }\n\n    this.loadContext = loadContext;\n    this.onLoaded = Promise.all(loads);\n    return this.onLoaded;\n  };\n\n  return ResourceModule;\n}();\n\nexport var ResourceDescription = function () {\n  function ResourceDescription(key, exportedValue, resourceTypeMeta) {\n    \n\n    if (!resourceTypeMeta) {\n      resourceTypeMeta = metadata.get(metadata.resource, exportedValue);\n\n      if (!resourceTypeMeta) {\n        resourceTypeMeta = new HtmlBehaviorResource();\n        resourceTypeMeta.elementName = _hyphenate(key);\n        metadata.define(metadata.resource, resourceTypeMeta, exportedValue);\n      }\n    }\n\n    if (resourceTypeMeta instanceof HtmlBehaviorResource) {\n      if (resourceTypeMeta.elementName === undefined) {\n        resourceTypeMeta.elementName = _hyphenate(key);\n      } else if (resourceTypeMeta.attributeName === undefined) {\n        resourceTypeMeta.attributeName = _hyphenate(key);\n      } else if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n        HtmlBehaviorResource.convention(key, resourceTypeMeta);\n      }\n    } else if (!resourceTypeMeta.name) {\n      resourceTypeMeta.name = _hyphenate(key);\n    }\n\n    this.metadata = resourceTypeMeta;\n    this.value = exportedValue;\n  }\n\n  ResourceDescription.prototype.initialize = function initialize(container) {\n    this.metadata.initialize(container, this.value);\n  };\n\n  ResourceDescription.prototype.register = function register(registry, name) {\n    this.metadata.register(registry, name);\n  };\n\n  ResourceDescription.prototype.load = function load(container, loadContext) {\n    return this.metadata.load(container, this.value, loadContext);\n  };\n\n  return ResourceDescription;\n}();\n\nexport var ModuleAnalyzer = function () {\n  function ModuleAnalyzer() {\n    \n\n    this.cache = Object.create(null);\n  }\n\n  ModuleAnalyzer.prototype.getAnalysis = function getAnalysis(moduleId) {\n    return this.cache[moduleId];\n  };\n\n  ModuleAnalyzer.prototype.analyze = function analyze(moduleId, moduleInstance, mainResourceKey) {\n    var mainResource = void 0;\n    var fallbackValue = void 0;\n    var fallbackKey = void 0;\n    var resourceTypeMeta = void 0;\n    var key = void 0;\n    var exportedValue = void 0;\n    var resources = [];\n    var conventional = void 0;\n    var vs = void 0;\n    var resourceModule = void 0;\n\n    resourceModule = this.cache[moduleId];\n    if (resourceModule) {\n      return resourceModule;\n    }\n\n    resourceModule = new ResourceModule(moduleId);\n    this.cache[moduleId] = resourceModule;\n\n    if (typeof moduleInstance === 'function') {\n      moduleInstance = { 'default': moduleInstance };\n    }\n\n    if (mainResourceKey) {\n      mainResource = new ResourceDescription(mainResourceKey, moduleInstance[mainResourceKey]);\n    }\n\n    for (key in moduleInstance) {\n      exportedValue = moduleInstance[key];\n\n      if (key === mainResourceKey || typeof exportedValue !== 'function') {\n        continue;\n      }\n\n      resourceTypeMeta = metadata.get(metadata.resource, exportedValue);\n\n      if (resourceTypeMeta) {\n        if (resourceTypeMeta instanceof HtmlBehaviorResource) {\n          ViewResources.convention(exportedValue, resourceTypeMeta);\n\n          if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n            HtmlBehaviorResource.convention(key, resourceTypeMeta);\n          }\n\n          if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {\n            resourceTypeMeta.elementName = _hyphenate(key);\n          }\n        }\n\n        if (!mainResource && resourceTypeMeta instanceof HtmlBehaviorResource && resourceTypeMeta.elementName !== null) {\n          mainResource = new ResourceDescription(key, exportedValue, resourceTypeMeta);\n        } else {\n          resources.push(new ResourceDescription(key, exportedValue, resourceTypeMeta));\n        }\n      } else if (viewStrategy.decorates(exportedValue)) {\n        vs = exportedValue;\n      } else if (exportedValue instanceof TemplateRegistryEntry) {\n        vs = new TemplateRegistryViewStrategy(moduleId, exportedValue);\n      } else {\n        if (conventional = ViewResources.convention(exportedValue)) {\n          if (conventional.elementName !== null && !mainResource) {\n            mainResource = new ResourceDescription(key, exportedValue, conventional);\n          } else {\n            resources.push(new ResourceDescription(key, exportedValue, conventional));\n          }\n          metadata.define(metadata.resource, conventional, exportedValue);\n        } else if (conventional = HtmlBehaviorResource.convention(key)) {\n          if (conventional.elementName !== null && !mainResource) {\n            mainResource = new ResourceDescription(key, exportedValue, conventional);\n          } else {\n            resources.push(new ResourceDescription(key, exportedValue, conventional));\n          }\n\n          metadata.define(metadata.resource, conventional, exportedValue);\n        } else if (conventional = ValueConverterResource.convention(key) || BindingBehaviorResource.convention(key) || ViewEngineHooksResource.convention(key)) {\n          resources.push(new ResourceDescription(key, exportedValue, conventional));\n          metadata.define(metadata.resource, conventional, exportedValue);\n        } else if (!fallbackValue) {\n          fallbackValue = exportedValue;\n          fallbackKey = key;\n        }\n      }\n    }\n\n    if (!mainResource && fallbackValue) {\n      mainResource = new ResourceDescription(fallbackKey, fallbackValue);\n    }\n\n    resourceModule.moduleInstance = moduleInstance;\n    resourceModule.mainResource = mainResource;\n    resourceModule.resources = resources;\n    resourceModule.viewStrategy = vs;\n\n    return resourceModule;\n  };\n\n  return ModuleAnalyzer;\n}();\n\nvar logger = LogManager.getLogger('templating');\n\nfunction ensureRegistryEntry(loader, urlOrRegistryEntry) {\n  if (urlOrRegistryEntry instanceof TemplateRegistryEntry) {\n    return Promise.resolve(urlOrRegistryEntry);\n  }\n\n  return loader.loadTemplate(urlOrRegistryEntry);\n}\n\nvar ProxyViewFactory = function () {\n  function ProxyViewFactory(promise) {\n    var _this8 = this;\n\n    \n\n    promise.then(function (x) {\n      return _this8.viewFactory = x;\n    });\n  }\n\n  ProxyViewFactory.prototype.create = function create(container, bindingContext, createInstruction, element) {\n    return this.viewFactory.create(container, bindingContext, createInstruction, element);\n  };\n\n  ProxyViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {\n    this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);\n  };\n\n  ProxyViewFactory.prototype.getCachedView = function getCachedView() {\n    return this.viewFactory.getCachedView();\n  };\n\n  ProxyViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {\n    this.viewFactory.returnViewToCache(view);\n  };\n\n  _createClass(ProxyViewFactory, [{\n    key: 'isCaching',\n    get: function get() {\n      return this.viewFactory.isCaching;\n    }\n  }]);\n\n  return ProxyViewFactory;\n}();\n\nvar auSlotBehavior = null;\n\nexport var ViewEngine = (_dec8 = inject(Loader, Container, ViewCompiler, ModuleAnalyzer, ViewResources), _dec8(_class15 = (_temp5 = _class16 = function () {\n  function ViewEngine(loader, container, viewCompiler, moduleAnalyzer, appResources) {\n    \n\n    this.loader = loader;\n    this.container = container;\n    this.viewCompiler = viewCompiler;\n    this.moduleAnalyzer = moduleAnalyzer;\n    this.appResources = appResources;\n    this._pluginMap = {};\n\n    if (auSlotBehavior === null) {\n      auSlotBehavior = new HtmlBehaviorResource();\n      auSlotBehavior.attributeName = 'au-slot';\n      metadata.define(metadata.resource, auSlotBehavior, SlotCustomAttribute);\n    }\n\n    auSlotBehavior.initialize(container, SlotCustomAttribute);\n    auSlotBehavior.register(appResources);\n  }\n\n  ViewEngine.prototype.addResourcePlugin = function addResourcePlugin(extension, implementation) {\n    var name = extension.replace('.', '') + '-resource-plugin';\n    this._pluginMap[extension] = name;\n    this.loader.addPlugin(name, implementation);\n  };\n\n  ViewEngine.prototype.loadViewFactory = function loadViewFactory(urlOrRegistryEntry, compileInstruction, loadContext, target) {\n    var _this9 = this;\n\n    loadContext = loadContext || new ResourceLoadContext();\n\n    return ensureRegistryEntry(this.loader, urlOrRegistryEntry).then(function (registryEntry) {\n      var url = registryEntry.address;\n\n      if (registryEntry.onReady) {\n        if (!loadContext.hasDependency(url)) {\n          loadContext.addDependency(url);\n          return registryEntry.onReady;\n        }\n\n        if (registryEntry.template === null) {\n          return registryEntry.onReady;\n        }\n\n        return Promise.resolve(new ProxyViewFactory(registryEntry.onReady));\n      }\n\n      loadContext.addDependency(url);\n\n      registryEntry.onReady = _this9.loadTemplateResources(registryEntry, compileInstruction, loadContext, target).then(function (resources) {\n        registryEntry.resources = resources;\n\n        if (registryEntry.template === null) {\n          return registryEntry.factory = null;\n        }\n\n        var viewFactory = _this9.viewCompiler.compile(registryEntry.template, resources, compileInstruction);\n        return registryEntry.factory = viewFactory;\n      });\n\n      return registryEntry.onReady;\n    });\n  };\n\n  ViewEngine.prototype.loadTemplateResources = function loadTemplateResources(registryEntry, compileInstruction, loadContext, target) {\n    var resources = new ViewResources(this.appResources, registryEntry.address);\n    var dependencies = registryEntry.dependencies;\n    var importIds = void 0;\n    var names = void 0;\n\n    compileInstruction = compileInstruction || ViewCompileInstruction.normal;\n\n    if (dependencies.length === 0 && !compileInstruction.associatedModuleId) {\n      return Promise.resolve(resources);\n    }\n\n    importIds = dependencies.map(function (x) {\n      return x.src;\n    });\n    names = dependencies.map(function (x) {\n      return x.name;\n    });\n    logger.debug('importing resources for ' + registryEntry.address, importIds);\n\n    if (target) {\n      var viewModelRequires = metadata.get(ViewEngine.viewModelRequireMetadataKey, target);\n      if (viewModelRequires) {\n        var templateImportCount = importIds.length;\n        for (var i = 0, ii = viewModelRequires.length; i < ii; ++i) {\n          var req = viewModelRequires[i];\n          var importId = typeof req === 'function' ? Origin.get(req).moduleId : relativeToFile(req.src || req, registryEntry.address);\n\n          if (importIds.indexOf(importId) === -1) {\n            importIds.push(importId);\n            names.push(req.as);\n          }\n        }\n        logger.debug('importing ViewModel resources for ' + compileInstruction.associatedModuleId, importIds.slice(templateImportCount));\n      }\n    }\n\n    return this.importViewResources(importIds, names, resources, compileInstruction, loadContext);\n  };\n\n  ViewEngine.prototype.importViewModelResource = function importViewModelResource(moduleImport, moduleMember) {\n    var _this10 = this;\n\n    return this.loader.loadModule(moduleImport).then(function (viewModelModule) {\n      var normalizedId = Origin.get(viewModelModule).moduleId;\n      var resourceModule = _this10.moduleAnalyzer.analyze(normalizedId, viewModelModule, moduleMember);\n\n      if (!resourceModule.mainResource) {\n        throw new Error('No view model found in module \"' + moduleImport + '\".');\n      }\n\n      resourceModule.initialize(_this10.container);\n\n      return resourceModule.mainResource;\n    });\n  };\n\n  ViewEngine.prototype.importViewResources = function importViewResources(moduleIds, names, resources, compileInstruction, loadContext) {\n    var _this11 = this;\n\n    loadContext = loadContext || new ResourceLoadContext();\n    compileInstruction = compileInstruction || ViewCompileInstruction.normal;\n\n    moduleIds = moduleIds.map(function (x) {\n      return _this11._applyLoaderPlugin(x);\n    });\n\n    return this.loader.loadAllModules(moduleIds).then(function (imports) {\n      var i = void 0;\n      var ii = void 0;\n      var analysis = void 0;\n      var normalizedId = void 0;\n      var current = void 0;\n      var associatedModule = void 0;\n      var container = _this11.container;\n      var moduleAnalyzer = _this11.moduleAnalyzer;\n      var allAnalysis = new Array(imports.length);\n\n      for (i = 0, ii = imports.length; i < ii; ++i) {\n        current = imports[i];\n        normalizedId = Origin.get(current).moduleId;\n\n        analysis = moduleAnalyzer.analyze(normalizedId, current);\n        analysis.initialize(container);\n        analysis.register(resources, names[i]);\n\n        allAnalysis[i] = analysis;\n      }\n\n      if (compileInstruction.associatedModuleId) {\n        associatedModule = moduleAnalyzer.getAnalysis(compileInstruction.associatedModuleId);\n\n        if (associatedModule) {\n          associatedModule.register(resources);\n        }\n      }\n\n      for (i = 0, ii = allAnalysis.length; i < ii; ++i) {\n        allAnalysis[i] = allAnalysis[i].load(container, loadContext);\n      }\n\n      return Promise.all(allAnalysis).then(function () {\n        return resources;\n      });\n    });\n  };\n\n  ViewEngine.prototype._applyLoaderPlugin = function _applyLoaderPlugin(id) {\n    var index = id.lastIndexOf('.');\n    if (index !== -1) {\n      var ext = id.substring(index);\n      var pluginName = this._pluginMap[ext];\n\n      if (pluginName === undefined) {\n        return id;\n      }\n\n      return this.loader.applyPluginToUrl(id, pluginName);\n    }\n\n    return id;\n  };\n\n  return ViewEngine;\n}(), _class16.viewModelRequireMetadataKey = 'aurelia:view-model-require', _temp5)) || _class15);\n\nexport var Controller = function () {\n  function Controller(behavior, instruction, viewModel, container) {\n    \n\n    this.behavior = behavior;\n    this.instruction = instruction;\n    this.viewModel = viewModel;\n    this.isAttached = false;\n    this.view = null;\n    this.isBound = false;\n    this.scope = null;\n    this.container = container;\n    this.elementEvents = container.elementEvents || null;\n\n    var observerLookup = behavior.observerLocator.getOrCreateObserversLookup(viewModel);\n    var handlesBind = behavior.handlesBind;\n    var attributes = instruction.attributes;\n    var boundProperties = this.boundProperties = [];\n    var properties = behavior.properties;\n    var i = void 0;\n    var ii = void 0;\n\n    behavior._ensurePropertiesDefined(viewModel, observerLookup);\n\n    for (i = 0, ii = properties.length; i < ii; ++i) {\n      properties[i]._initialize(viewModel, observerLookup, attributes, handlesBind, boundProperties);\n    }\n  }\n\n  Controller.prototype.created = function created(owningView) {\n    if (this.behavior.handlesCreated) {\n      this.viewModel.created(owningView, this.view);\n    }\n  };\n\n  Controller.prototype.automate = function automate(overrideContext, owningView) {\n    this.view.bindingContext = this.viewModel;\n    this.view.overrideContext = overrideContext || createOverrideContext(this.viewModel);\n    this.view._isUserControlled = true;\n\n    if (this.behavior.handlesCreated) {\n      this.viewModel.created(owningView || null, this.view);\n    }\n\n    this.bind(this.view);\n  };\n\n  Controller.prototype.bind = function bind(scope) {\n    var skipSelfSubscriber = this.behavior.handlesBind;\n    var boundProperties = this.boundProperties;\n    var i = void 0;\n    var ii = void 0;\n    var x = void 0;\n    var observer = void 0;\n    var selfSubscriber = void 0;\n\n    if (this.isBound) {\n      if (this.scope === scope) {\n        return;\n      }\n\n      this.unbind();\n    }\n\n    this.isBound = true;\n    this.scope = scope;\n\n    for (i = 0, ii = boundProperties.length; i < ii; ++i) {\n      x = boundProperties[i];\n      observer = x.observer;\n      selfSubscriber = observer.selfSubscriber;\n      observer.publishing = false;\n\n      if (skipSelfSubscriber) {\n        observer.selfSubscriber = null;\n      }\n\n      x.binding.bind(scope);\n      observer.call();\n\n      observer.publishing = true;\n      observer.selfSubscriber = selfSubscriber;\n    }\n\n    var overrideContext = void 0;\n    if (this.view !== null) {\n      if (skipSelfSubscriber) {\n        this.view.viewModelScope = scope;\n      }\n\n      if (this.viewModel === scope.overrideContext.bindingContext) {\n        overrideContext = scope.overrideContext;\n      } else if (this.instruction.inheritBindingContext) {\n        overrideContext = createOverrideContext(this.viewModel, scope.overrideContext);\n      } else {\n        overrideContext = createOverrideContext(this.viewModel);\n        overrideContext.__parentOverrideContext = scope.overrideContext;\n      }\n\n      this.view.bind(this.viewModel, overrideContext);\n    } else if (skipSelfSubscriber) {\n      overrideContext = scope.overrideContext;\n\n      if (scope.overrideContext.__parentOverrideContext !== undefined && this.viewModel.viewFactory && this.viewModel.viewFactory.factoryCreateInstruction.partReplacements) {\n        overrideContext = Object.assign({}, scope.overrideContext);\n        overrideContext.parentOverrideContext = scope.overrideContext.__parentOverrideContext;\n      }\n      this.viewModel.bind(scope.bindingContext, overrideContext);\n    }\n  };\n\n  Controller.prototype.unbind = function unbind() {\n    if (this.isBound) {\n      var _boundProperties = this.boundProperties;\n      var _i3 = void 0;\n      var _ii2 = void 0;\n\n      this.isBound = false;\n      this.scope = null;\n\n      if (this.view !== null) {\n        this.view.unbind();\n      }\n\n      if (this.behavior.handlesUnbind) {\n        this.viewModel.unbind();\n      }\n\n      if (this.elementEvents !== null) {\n        this.elementEvents.disposeAll();\n      }\n\n      for (_i3 = 0, _ii2 = _boundProperties.length; _i3 < _ii2; ++_i3) {\n        _boundProperties[_i3].binding.unbind();\n      }\n    }\n  };\n\n  Controller.prototype.attached = function attached() {\n    if (this.isAttached) {\n      return;\n    }\n\n    this.isAttached = true;\n\n    if (this.behavior.handlesAttached) {\n      this.viewModel.attached();\n    }\n\n    if (this.view !== null) {\n      this.view.attached();\n    }\n  };\n\n  Controller.prototype.detached = function detached() {\n    if (this.isAttached) {\n      this.isAttached = false;\n\n      if (this.view !== null) {\n        this.view.detached();\n      }\n\n      if (this.behavior.handlesDetached) {\n        this.viewModel.detached();\n      }\n    }\n  };\n\n  return Controller;\n}();\n\nexport var BehaviorPropertyObserver = (_dec9 = subscriberCollection(), _dec9(_class17 = function () {\n  function BehaviorPropertyObserver(taskQueue, obj, propertyName, selfSubscriber, initialValue) {\n    \n\n    this.taskQueue = taskQueue;\n    this.obj = obj;\n    this.propertyName = propertyName;\n    this.notqueued = true;\n    this.publishing = false;\n    this.selfSubscriber = selfSubscriber;\n    this.currentValue = this.oldValue = initialValue;\n  }\n\n  BehaviorPropertyObserver.prototype.getValue = function getValue() {\n    return this.currentValue;\n  };\n\n  BehaviorPropertyObserver.prototype.setValue = function setValue(newValue) {\n    var oldValue = this.currentValue;\n\n    if (!Object.is(newValue, oldValue)) {\n      this.oldValue = oldValue;\n      this.currentValue = newValue;\n\n      if (this.publishing && this.notqueued) {\n        if (this.taskQueue.flushing) {\n          this.call();\n        } else {\n          this.notqueued = false;\n          this.taskQueue.queueMicroTask(this);\n        }\n      }\n    }\n  };\n\n  BehaviorPropertyObserver.prototype.call = function call() {\n    var oldValue = this.oldValue;\n    var newValue = this.currentValue;\n\n    this.notqueued = true;\n\n    if (Object.is(newValue, oldValue)) {\n      return;\n    }\n\n    if (this.selfSubscriber) {\n      this.selfSubscriber(newValue, oldValue);\n    }\n\n    this.callSubscribers(newValue, oldValue);\n    this.oldValue = newValue;\n  };\n\n  BehaviorPropertyObserver.prototype.subscribe = function subscribe(context, callable) {\n    this.addSubscriber(context, callable);\n  };\n\n  BehaviorPropertyObserver.prototype.unsubscribe = function unsubscribe(context, callable) {\n    this.removeSubscriber(context, callable);\n  };\n\n  return BehaviorPropertyObserver;\n}()) || _class17);\n\nfunction getObserver(instance, name) {\n  var lookup = instance.__observers__;\n\n  if (lookup === undefined) {\n    var ctor = Object.getPrototypeOf(instance).constructor;\n    var _behavior = metadata.get(metadata.resource, ctor);\n    if (!_behavior.isInitialized) {\n      _behavior.initialize(Container.instance || new Container(), instance.constructor);\n    }\n\n    lookup = _behavior.observerLocator.getOrCreateObserversLookup(instance);\n    _behavior._ensurePropertiesDefined(instance, lookup);\n  }\n\n  return lookup[name];\n}\n\nexport var BindableProperty = function () {\n  function BindableProperty(nameOrConfig) {\n    \n\n    if (typeof nameOrConfig === 'string') {\n      this.name = nameOrConfig;\n    } else {\n      Object.assign(this, nameOrConfig);\n    }\n\n    this.attribute = this.attribute || _hyphenate(this.name);\n    var defaultBindingMode = this.defaultBindingMode;\n    if (defaultBindingMode === null || defaultBindingMode === undefined) {\n      this.defaultBindingMode = bindingMode.oneWay;\n    } else if (typeof defaultBindingMode === 'string') {\n      this.defaultBindingMode = bindingMode[defaultBindingMode] || bindingMode.oneWay;\n    }\n    this.changeHandler = this.changeHandler || null;\n    this.owner = null;\n    this.descriptor = null;\n  }\n\n  BindableProperty.prototype.registerWith = function registerWith(target, behavior, descriptor) {\n    behavior.properties.push(this);\n    behavior.attributes[this.attribute] = this;\n    this.owner = behavior;\n\n    if (descriptor) {\n      this.descriptor = descriptor;\n      return this._configureDescriptor(descriptor);\n    }\n\n    return undefined;\n  };\n\n  BindableProperty.prototype._configureDescriptor = function _configureDescriptor(descriptor) {\n    var name = this.name;\n\n    descriptor.configurable = true;\n    descriptor.enumerable = true;\n\n    if ('initializer' in descriptor) {\n      this.defaultValue = descriptor.initializer;\n      delete descriptor.initializer;\n      delete descriptor.writable;\n    }\n\n    if ('value' in descriptor) {\n      this.defaultValue = descriptor.value;\n      delete descriptor.value;\n      delete descriptor.writable;\n    }\n\n    descriptor.get = function () {\n      return getObserver(this, name).getValue();\n    };\n\n    descriptor.set = function (value) {\n      getObserver(this, name).setValue(value);\n    };\n\n    descriptor.get.getObserver = function (obj) {\n      return getObserver(obj, name);\n    };\n\n    return descriptor;\n  };\n\n  BindableProperty.prototype.defineOn = function defineOn(target, behavior) {\n    var name = this.name;\n    var handlerName = void 0;\n\n    if (this.changeHandler === null) {\n      handlerName = name + 'Changed';\n      if (handlerName in target.prototype) {\n        this.changeHandler = handlerName;\n      }\n    }\n\n    if (this.descriptor === null) {\n      Object.defineProperty(target.prototype, name, this._configureDescriptor(behavior, {}));\n    }\n  };\n\n  BindableProperty.prototype.createObserver = function createObserver(viewModel) {\n    var selfSubscriber = null;\n    var defaultValue = this.defaultValue;\n    var changeHandlerName = this.changeHandler;\n    var name = this.name;\n    var initialValue = void 0;\n\n    if (this.hasOptions) {\n      return undefined;\n    }\n\n    if (changeHandlerName in viewModel) {\n      if ('propertyChanged' in viewModel) {\n        selfSubscriber = function selfSubscriber(newValue, oldValue) {\n          viewModel[changeHandlerName](newValue, oldValue);\n          viewModel.propertyChanged(name, newValue, oldValue);\n        };\n      } else {\n        selfSubscriber = function selfSubscriber(newValue, oldValue) {\n          return viewModel[changeHandlerName](newValue, oldValue);\n        };\n      }\n    } else if ('propertyChanged' in viewModel) {\n      selfSubscriber = function selfSubscriber(newValue, oldValue) {\n        return viewModel.propertyChanged(name, newValue, oldValue);\n      };\n    } else if (changeHandlerName !== null) {\n      throw new Error('Change handler ' + changeHandlerName + ' was specified but not declared on the class.');\n    }\n\n    if (defaultValue !== undefined) {\n      initialValue = typeof defaultValue === 'function' ? defaultValue.call(viewModel) : defaultValue;\n    }\n\n    return new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, this.name, selfSubscriber, initialValue);\n  };\n\n  BindableProperty.prototype._initialize = function _initialize(viewModel, observerLookup, attributes, behaviorHandlesBind, boundProperties) {\n    var selfSubscriber = void 0;\n    var observer = void 0;\n    var attribute = void 0;\n    var defaultValue = this.defaultValue;\n\n    if (this.isDynamic) {\n      for (var _key6 in attributes) {\n        this._createDynamicProperty(viewModel, observerLookup, behaviorHandlesBind, _key6, attributes[_key6], boundProperties);\n      }\n    } else if (!this.hasOptions) {\n      observer = observerLookup[this.name];\n\n      if (attributes !== null) {\n        selfSubscriber = observer.selfSubscriber;\n        attribute = attributes[this.attribute];\n\n        if (behaviorHandlesBind) {\n          observer.selfSubscriber = null;\n        }\n\n        if (typeof attribute === 'string') {\n          viewModel[this.name] = attribute;\n          observer.call();\n        } else if (attribute) {\n          boundProperties.push({ observer: observer, binding: attribute.createBinding(viewModel) });\n        } else if (defaultValue !== undefined) {\n          observer.call();\n        }\n\n        observer.selfSubscriber = selfSubscriber;\n      }\n\n      observer.publishing = true;\n    }\n  };\n\n  BindableProperty.prototype._createDynamicProperty = function _createDynamicProperty(viewModel, observerLookup, behaviorHandlesBind, name, attribute, boundProperties) {\n    var changeHandlerName = name + 'Changed';\n    var selfSubscriber = null;\n    var observer = void 0;\n    var info = void 0;\n\n    if (changeHandlerName in viewModel) {\n      if ('propertyChanged' in viewModel) {\n        selfSubscriber = function selfSubscriber(newValue, oldValue) {\n          viewModel[changeHandlerName](newValue, oldValue);\n          viewModel.propertyChanged(name, newValue, oldValue);\n        };\n      } else {\n        selfSubscriber = function selfSubscriber(newValue, oldValue) {\n          return viewModel[changeHandlerName](newValue, oldValue);\n        };\n      }\n    } else if ('propertyChanged' in viewModel) {\n      selfSubscriber = function selfSubscriber(newValue, oldValue) {\n        return viewModel.propertyChanged(name, newValue, oldValue);\n      };\n    }\n\n    observer = observerLookup[name] = new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, name, selfSubscriber);\n\n    Object.defineProperty(viewModel, name, {\n      configurable: true,\n      enumerable: true,\n      get: observer.getValue.bind(observer),\n      set: observer.setValue.bind(observer)\n    });\n\n    if (behaviorHandlesBind) {\n      observer.selfSubscriber = null;\n    }\n\n    if (typeof attribute === 'string') {\n      viewModel[name] = attribute;\n      observer.call();\n    } else if (attribute) {\n      info = { observer: observer, binding: attribute.createBinding(viewModel) };\n      boundProperties.push(info);\n    }\n\n    observer.publishing = true;\n    observer.selfSubscriber = selfSubscriber;\n  };\n\n  return BindableProperty;\n}();\n\nvar lastProviderId = 0;\n\nfunction nextProviderId() {\n  return ++lastProviderId;\n}\n\nfunction doProcessContent() {\n  return true;\n}\nfunction doProcessAttributes() {}\n\nexport var HtmlBehaviorResource = function () {\n  function HtmlBehaviorResource() {\n    \n\n    this.elementName = null;\n    this.attributeName = null;\n    this.attributeDefaultBindingMode = undefined;\n    this.liftsContent = false;\n    this.targetShadowDOM = false;\n    this.shadowDOMOptions = null;\n    this.processAttributes = doProcessAttributes;\n    this.processContent = doProcessContent;\n    this.usesShadowDOM = false;\n    this.childBindings = null;\n    this.hasDynamicOptions = false;\n    this.containerless = false;\n    this.properties = [];\n    this.attributes = {};\n    this.isInitialized = false;\n    this.primaryProperty = null;\n  }\n\n  HtmlBehaviorResource.convention = function convention(name, existing) {\n    var behavior = void 0;\n\n    if (name.endsWith('CustomAttribute')) {\n      behavior = existing || new HtmlBehaviorResource();\n      behavior.attributeName = _hyphenate(name.substring(0, name.length - 15));\n    }\n\n    if (name.endsWith('CustomElement')) {\n      behavior = existing || new HtmlBehaviorResource();\n      behavior.elementName = _hyphenate(name.substring(0, name.length - 13));\n    }\n\n    return behavior;\n  };\n\n  HtmlBehaviorResource.prototype.addChildBinding = function addChildBinding(behavior) {\n    if (this.childBindings === null) {\n      this.childBindings = [];\n    }\n\n    this.childBindings.push(behavior);\n  };\n\n  HtmlBehaviorResource.prototype.initialize = function initialize(container, target) {\n    var proto = target.prototype;\n    var properties = this.properties;\n    var attributeName = this.attributeName;\n    var attributeDefaultBindingMode = this.attributeDefaultBindingMode;\n    var i = void 0;\n    var ii = void 0;\n    var current = void 0;\n\n    if (this.isInitialized) {\n      return;\n    }\n\n    this.isInitialized = true;\n    target.__providerId__ = nextProviderId();\n\n    this.observerLocator = container.get(ObserverLocator);\n    this.taskQueue = container.get(TaskQueue);\n\n    this.target = target;\n    this.usesShadowDOM = this.targetShadowDOM && FEATURE.shadowDOM;\n    this.handlesCreated = 'created' in proto;\n    this.handlesBind = 'bind' in proto;\n    this.handlesUnbind = 'unbind' in proto;\n    this.handlesAttached = 'attached' in proto;\n    this.handlesDetached = 'detached' in proto;\n    this.htmlName = this.elementName || this.attributeName;\n\n    if (attributeName !== null) {\n      if (properties.length === 0) {\n        new BindableProperty({\n          name: 'value',\n          changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,\n          attribute: attributeName,\n          defaultBindingMode: attributeDefaultBindingMode\n        }).registerWith(target, this);\n      }\n\n      current = properties[0];\n\n      if (properties.length === 1 && current.name === 'value') {\n        current.isDynamic = current.hasOptions = this.hasDynamicOptions;\n        current.defineOn(target, this);\n      } else {\n        for (i = 0, ii = properties.length; i < ii; ++i) {\n          properties[i].defineOn(target, this);\n          if (properties[i].primaryProperty) {\n            if (this.primaryProperty) {\n              throw new Error('Only one bindable property on a custom element can be defined as the default');\n            }\n            this.primaryProperty = properties[i];\n          }\n        }\n\n        current = new BindableProperty({\n          name: 'value',\n          changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,\n          attribute: attributeName,\n          defaultBindingMode: attributeDefaultBindingMode\n        });\n\n        current.hasOptions = true;\n        current.registerWith(target, this);\n      }\n    } else {\n      for (i = 0, ii = properties.length; i < ii; ++i) {\n        properties[i].defineOn(target, this);\n      }\n\n      this._copyInheritedProperties(container, target);\n    }\n  };\n\n  HtmlBehaviorResource.prototype.register = function register(registry, name) {\n    var _this12 = this;\n\n    if (this.attributeName !== null) {\n      registry.registerAttribute(name || this.attributeName, this, this.attributeName);\n\n      if (Array.isArray(this.aliases)) {\n        this.aliases.forEach(function (alias) {\n          registry.registerAttribute(alias, _this12, _this12.attributeName);\n        });\n      }\n    }\n\n    if (this.elementName !== null) {\n      registry.registerElement(name || this.elementName, this);\n    }\n  };\n\n  HtmlBehaviorResource.prototype.load = function load(container, target, loadContext, viewStrategy, transientView) {\n    var _this13 = this;\n\n    var options = void 0;\n\n    if (this.elementName !== null) {\n      viewStrategy = container.get(ViewLocator).getViewStrategy(viewStrategy || this.viewStrategy || target);\n      options = new ViewCompileInstruction(this.targetShadowDOM, true);\n\n      if (!viewStrategy.moduleId) {\n        viewStrategy.moduleId = Origin.get(target).moduleId;\n      }\n\n      return viewStrategy.loadViewFactory(container.get(ViewEngine), options, loadContext, target).then(function (viewFactory) {\n        if (!transientView || !_this13.viewFactory) {\n          _this13.viewFactory = viewFactory;\n        }\n\n        return viewFactory;\n      });\n    }\n\n    return Promise.resolve(this);\n  };\n\n  HtmlBehaviorResource.prototype.compile = function compile(compiler, resources, node, instruction, parentNode) {\n    if (this.liftsContent) {\n      if (!instruction.viewFactory) {\n        var _template = DOM.createElement('template');\n        var fragment = DOM.createDocumentFragment();\n        var cacheSize = node.getAttribute('view-cache');\n        var part = node.getAttribute('part');\n\n        node.removeAttribute(instruction.originalAttrName);\n        DOM.replaceNode(_template, node, parentNode);\n        fragment.appendChild(node);\n        instruction.viewFactory = compiler.compile(fragment, resources);\n\n        if (part) {\n          instruction.viewFactory.part = part;\n          node.removeAttribute('part');\n        }\n\n        if (cacheSize) {\n          instruction.viewFactory.setCacheSize(cacheSize);\n          node.removeAttribute('view-cache');\n        }\n\n        node = _template;\n      }\n    } else if (this.elementName !== null) {\n      var _partReplacements2 = {};\n\n      if (this.processContent(compiler, resources, node, instruction) && node.hasChildNodes()) {\n        var currentChild = node.firstChild;\n        var contentElement = this.usesShadowDOM ? null : DOM.createElement('au-content');\n        var nextSibling = void 0;\n        var toReplace = void 0;\n\n        while (currentChild) {\n          nextSibling = currentChild.nextSibling;\n\n          if (currentChild.tagName === 'TEMPLATE' && (toReplace = currentChild.getAttribute('replace-part'))) {\n            _partReplacements2[toReplace] = compiler.compile(currentChild, resources);\n            DOM.removeNode(currentChild, parentNode);\n            instruction.partReplacements = _partReplacements2;\n          } else if (contentElement !== null) {\n            if (currentChild.nodeType === 3 && _isAllWhitespace(currentChild)) {\n              DOM.removeNode(currentChild, parentNode);\n            } else {\n              contentElement.appendChild(currentChild);\n            }\n          }\n\n          currentChild = nextSibling;\n        }\n\n        if (contentElement !== null && contentElement.hasChildNodes()) {\n          node.appendChild(contentElement);\n        }\n\n        instruction.skipContentProcessing = false;\n      } else {\n        instruction.skipContentProcessing = true;\n      }\n    } else if (!this.processContent(compiler, resources, node, instruction)) {\n      instruction.skipContentProcessing = true;\n    }\n\n    return node;\n  };\n\n  HtmlBehaviorResource.prototype.create = function create(container, instruction, element, bindings) {\n    var viewHost = void 0;\n    var au = null;\n\n    instruction = instruction || BehaviorInstruction.normal;\n    element = element || null;\n    bindings = bindings || null;\n\n    if (this.elementName !== null && element) {\n      if (this.usesShadowDOM) {\n        viewHost = element.attachShadow(this.shadowDOMOptions);\n        container.registerInstance(DOM.boundary, viewHost);\n      } else {\n        viewHost = element;\n        if (this.targetShadowDOM) {\n          container.registerInstance(DOM.boundary, viewHost);\n        }\n      }\n    }\n\n    if (element !== null) {\n      element.au = au = element.au || {};\n    }\n\n    var viewModel = instruction.viewModel || container.get(this.target);\n    var controller = new Controller(this, instruction, viewModel, container);\n    var childBindings = this.childBindings;\n    var viewFactory = void 0;\n\n    if (this.liftsContent) {\n      au.controller = controller;\n    } else if (this.elementName !== null) {\n      viewFactory = instruction.viewFactory || this.viewFactory;\n      container.viewModel = viewModel;\n\n      if (viewFactory) {\n        controller.view = viewFactory.create(container, instruction, element);\n      }\n\n      if (element !== null) {\n        au.controller = controller;\n\n        if (controller.view) {\n          if (!this.usesShadowDOM && (element.childNodes.length === 1 || element.contentElement)) {\n            var contentElement = element.childNodes[0] || element.contentElement;\n            controller.view.contentView = { fragment: contentElement };\n            contentElement.parentNode && DOM.removeNode(contentElement);\n          }\n\n          if (instruction.anchorIsContainer) {\n            if (childBindings !== null) {\n              for (var _i4 = 0, _ii3 = childBindings.length; _i4 < _ii3; ++_i4) {\n                controller.view.addBinding(childBindings[_i4].create(element, viewModel, controller));\n              }\n            }\n\n            controller.view.appendNodesTo(viewHost);\n          } else {\n            controller.view.insertNodesBefore(viewHost);\n          }\n        } else if (childBindings !== null) {\n          for (var _i5 = 0, _ii4 = childBindings.length; _i5 < _ii4; ++_i5) {\n            bindings.push(childBindings[_i5].create(element, viewModel, controller));\n          }\n        }\n      } else if (controller.view) {\n        controller.view.controller = controller;\n\n        if (childBindings !== null) {\n          for (var _i6 = 0, _ii5 = childBindings.length; _i6 < _ii5; ++_i6) {\n            controller.view.addBinding(childBindings[_i6].create(instruction.host, viewModel, controller));\n          }\n        }\n      } else if (childBindings !== null) {\n        for (var _i7 = 0, _ii6 = childBindings.length; _i7 < _ii6; ++_i7) {\n          bindings.push(childBindings[_i7].create(instruction.host, viewModel, controller));\n        }\n      }\n    } else if (childBindings !== null) {\n      for (var _i8 = 0, _ii7 = childBindings.length; _i8 < _ii7; ++_i8) {\n        bindings.push(childBindings[_i8].create(element, viewModel, controller));\n      }\n    }\n\n    if (au !== null) {\n      au[this.htmlName] = controller;\n    }\n\n    if (instruction.initiatedByBehavior && viewFactory) {\n      controller.view.created();\n    }\n\n    return controller;\n  };\n\n  HtmlBehaviorResource.prototype._ensurePropertiesDefined = function _ensurePropertiesDefined(instance, lookup) {\n    var properties = void 0;\n    var i = void 0;\n    var ii = void 0;\n    var observer = void 0;\n\n    if ('__propertiesDefined__' in lookup) {\n      return;\n    }\n\n    lookup.__propertiesDefined__ = true;\n    properties = this.properties;\n\n    for (i = 0, ii = properties.length; i < ii; ++i) {\n      observer = properties[i].createObserver(instance);\n\n      if (observer !== undefined) {\n        lookup[observer.propertyName] = observer;\n      }\n    }\n  };\n\n  HtmlBehaviorResource.prototype._copyInheritedProperties = function _copyInheritedProperties(container, target) {\n    var _this14 = this;\n\n    var behavior = void 0;\n    var derived = target;\n\n    while (true) {\n      var proto = Object.getPrototypeOf(target.prototype);\n      target = proto && proto.constructor;\n      if (!target) {\n        return;\n      }\n      behavior = metadata.getOwn(metadata.resource, target);\n      if (behavior) {\n        break;\n      }\n    }\n    behavior.initialize(container, target);\n\n    var _loop = function _loop(_i9, _ii8) {\n      var prop = behavior.properties[_i9];\n\n      if (_this14.properties.some(function (p) {\n        return p.name === prop.name;\n      })) {\n        return 'continue';\n      }\n\n      new BindableProperty(prop).registerWith(derived, _this14);\n    };\n\n    for (var _i9 = 0, _ii8 = behavior.properties.length; _i9 < _ii8; ++_i9) {\n      var _ret = _loop(_i9, _ii8);\n\n      if (_ret === 'continue') continue;\n    }\n  };\n\n  return HtmlBehaviorResource;\n}();\n\nfunction createChildObserverDecorator(selectorOrConfig, all) {\n  return function (target, key, descriptor) {\n    var actualTarget = typeof key === 'string' ? target.constructor : target;\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, actualTarget);\n\n    if (typeof selectorOrConfig === 'string') {\n      selectorOrConfig = {\n        selector: selectorOrConfig,\n        name: key\n      };\n    }\n\n    if (descriptor) {\n      descriptor.writable = true;\n      descriptor.configurable = true;\n    }\n\n    selectorOrConfig.all = all;\n    r.addChildBinding(new ChildObserver(selectorOrConfig));\n  };\n}\n\nexport function children(selectorOrConfig) {\n  return createChildObserverDecorator(selectorOrConfig, true);\n}\n\nexport function child(selectorOrConfig) {\n  return createChildObserverDecorator(selectorOrConfig, false);\n}\n\nvar ChildObserver = function () {\n  function ChildObserver(config) {\n    \n\n    this.name = config.name;\n    this.changeHandler = config.changeHandler || this.name + 'Changed';\n    this.selector = config.selector;\n    this.all = config.all;\n  }\n\n  ChildObserver.prototype.create = function create(viewHost, viewModel, controller) {\n    return new ChildObserverBinder(this.selector, viewHost, this.name, viewModel, controller, this.changeHandler, this.all);\n  };\n\n  return ChildObserver;\n}();\n\nvar noMutations = [];\n\nfunction trackMutation(groupedMutations, binder, record) {\n  var mutations = groupedMutations.get(binder);\n\n  if (!mutations) {\n    mutations = [];\n    groupedMutations.set(binder, mutations);\n  }\n\n  mutations.push(record);\n}\n\nfunction onChildChange(mutations, observer) {\n  var binders = observer.binders;\n  var bindersLength = binders.length;\n  var groupedMutations = new Map();\n\n  for (var _i10 = 0, _ii9 = mutations.length; _i10 < _ii9; ++_i10) {\n    var record = mutations[_i10];\n    var added = record.addedNodes;\n    var removed = record.removedNodes;\n\n    for (var j = 0, jj = removed.length; j < jj; ++j) {\n      var _node = removed[j];\n      if (_node.nodeType === 1) {\n        for (var k = 0; k < bindersLength; ++k) {\n          var binder = binders[k];\n          if (binder.onRemove(_node)) {\n            trackMutation(groupedMutations, binder, record);\n          }\n        }\n      }\n    }\n\n    for (var _j = 0, _jj = added.length; _j < _jj; ++_j) {\n      var _node2 = added[_j];\n      if (_node2.nodeType === 1) {\n        for (var _k = 0; _k < bindersLength; ++_k) {\n          var _binder = binders[_k];\n          if (_binder.onAdd(_node2)) {\n            trackMutation(groupedMutations, _binder, record);\n          }\n        }\n      }\n    }\n  }\n\n  groupedMutations.forEach(function (value, key) {\n    if (key.changeHandler !== null) {\n      key.viewModel[key.changeHandler](value);\n    }\n  });\n}\n\nvar ChildObserverBinder = function () {\n  function ChildObserverBinder(selector, viewHost, property, viewModel, controller, changeHandler, all) {\n    \n\n    this.selector = selector;\n    this.viewHost = viewHost;\n    this.property = property;\n    this.viewModel = viewModel;\n    this.controller = controller;\n    this.changeHandler = changeHandler in viewModel ? changeHandler : null;\n    this.usesShadowDOM = controller.behavior.usesShadowDOM;\n    this.all = all;\n\n    if (!this.usesShadowDOM && controller.view && controller.view.contentView) {\n      this.contentView = controller.view.contentView;\n    } else {\n      this.contentView = null;\n    }\n  }\n\n  ChildObserverBinder.prototype.matches = function matches(element) {\n    if (element.matches(this.selector)) {\n      if (this.contentView === null) {\n        return true;\n      }\n\n      var contentView = this.contentView;\n      var assignedSlot = element.auAssignedSlot;\n\n      if (assignedSlot && assignedSlot.projectFromAnchors) {\n        var anchors = assignedSlot.projectFromAnchors;\n\n        for (var _i11 = 0, _ii10 = anchors.length; _i11 < _ii10; ++_i11) {\n          if (anchors[_i11].auOwnerView === contentView) {\n            return true;\n          }\n        }\n\n        return false;\n      }\n\n      return element.auOwnerView === contentView;\n    }\n\n    return false;\n  };\n\n  ChildObserverBinder.prototype.bind = function bind(source) {\n    var viewHost = this.viewHost;\n    var viewModel = this.viewModel;\n    var observer = viewHost.__childObserver__;\n\n    if (!observer) {\n      observer = viewHost.__childObserver__ = DOM.createMutationObserver(onChildChange);\n\n      var options = {\n        childList: true,\n        subtree: !this.usesShadowDOM\n      };\n\n      observer.observe(viewHost, options);\n      observer.binders = [];\n    }\n\n    observer.binders.push(this);\n\n    if (this.usesShadowDOM) {\n      var current = viewHost.firstElementChild;\n\n      if (this.all) {\n        var items = viewModel[this.property];\n        if (!items) {\n          items = viewModel[this.property] = [];\n        } else {\n          items.splice(0);\n        }\n\n        while (current) {\n          if (this.matches(current)) {\n            items.push(current.au && current.au.controller ? current.au.controller.viewModel : current);\n          }\n\n          current = current.nextElementSibling;\n        }\n\n        if (this.changeHandler !== null) {\n          this.viewModel[this.changeHandler](noMutations);\n        }\n      } else {\n        while (current) {\n          if (this.matches(current)) {\n            var _value = current.au && current.au.controller ? current.au.controller.viewModel : current;\n            this.viewModel[this.property] = _value;\n\n            if (this.changeHandler !== null) {\n              this.viewModel[this.changeHandler](_value);\n            }\n\n            break;\n          }\n\n          current = current.nextElementSibling;\n        }\n      }\n    }\n  };\n\n  ChildObserverBinder.prototype.onRemove = function onRemove(element) {\n    if (this.matches(element)) {\n      var _value2 = element.au && element.au.controller ? element.au.controller.viewModel : element;\n\n      if (this.all) {\n        var items = this.viewModel[this.property] || (this.viewModel[this.property] = []);\n        var index = items.indexOf(_value2);\n\n        if (index !== -1) {\n          items.splice(index, 1);\n        }\n\n        return true;\n      }\n\n      return false;\n    }\n\n    return false;\n  };\n\n  ChildObserverBinder.prototype.onAdd = function onAdd(element) {\n    if (this.matches(element)) {\n      var _value3 = element.au && element.au.controller ? element.au.controller.viewModel : element;\n\n      if (this.all) {\n        var items = this.viewModel[this.property] || (this.viewModel[this.property] = []);\n\n        if (this.selector === '*') {\n          items.push(_value3);\n          return true;\n        }\n\n        var index = 0;\n        var prev = element.previousElementSibling;\n\n        while (prev) {\n          if (this.matches(prev)) {\n            index++;\n          }\n\n          prev = prev.previousElementSibling;\n        }\n\n        items.splice(index, 0, _value3);\n        return true;\n      }\n\n      this.viewModel[this.property] = _value3;\n\n      if (this.changeHandler !== null) {\n        this.viewModel[this.changeHandler](_value3);\n      }\n    }\n\n    return false;\n  };\n\n  ChildObserverBinder.prototype.unbind = function unbind() {\n    if (this.viewHost.__childObserver__) {\n      this.viewHost.__childObserver__.disconnect();\n      this.viewHost.__childObserver__ = null;\n      this.viewModel[this.property] = null;\n    }\n  };\n\n  return ChildObserverBinder;\n}();\n\nfunction remove(viewSlot, previous) {\n  return Array.isArray(previous) ? viewSlot.removeMany(previous, true) : viewSlot.remove(previous, true);\n}\n\nexport var SwapStrategies = {\n  before: function before(viewSlot, previous, callback) {\n    return previous === undefined ? callback() : callback().then(function () {\n      return remove(viewSlot, previous);\n    });\n  },\n  with: function _with(viewSlot, previous, callback) {\n    return previous === undefined ? callback() : Promise.all([remove(viewSlot, previous), callback()]);\n  },\n  after: function after(viewSlot, previous, callback) {\n    return Promise.resolve(viewSlot.removeAll(true)).then(callback);\n  }\n};\n\nfunction tryActivateViewModel(context) {\n  if (context.skipActivation || typeof context.viewModel.activate !== 'function') {\n    return Promise.resolve();\n  }\n\n  return context.viewModel.activate(context.model) || Promise.resolve();\n}\n\nexport var CompositionEngine = (_dec10 = inject(ViewEngine, ViewLocator), _dec10(_class18 = function () {\n  function CompositionEngine(viewEngine, viewLocator) {\n    \n\n    this.viewEngine = viewEngine;\n    this.viewLocator = viewLocator;\n  }\n\n  CompositionEngine.prototype._swap = function _swap(context, view) {\n    var swapStrategy = SwapStrategies[context.swapOrder] || SwapStrategies.after;\n    var previousViews = context.viewSlot.children.slice();\n\n    return swapStrategy(context.viewSlot, previousViews, function () {\n      return Promise.resolve(context.viewSlot.add(view)).then(function () {\n        if (context.currentController) {\n          context.currentController.unbind();\n        }\n      });\n    }).then(function () {\n      if (context.compositionTransactionNotifier) {\n        context.compositionTransactionNotifier.done();\n      }\n    });\n  };\n\n  CompositionEngine.prototype._createControllerAndSwap = function _createControllerAndSwap(context) {\n    var _this15 = this;\n\n    return this.createController(context).then(function (controller) {\n      if (context.compositionTransactionOwnershipToken) {\n        return context.compositionTransactionOwnershipToken.waitForCompositionComplete().then(function () {\n          controller.automate(context.overrideContext, context.owningView);\n\n          return _this15._swap(context, controller.view);\n        }).then(function () {\n          return controller;\n        });\n      }\n\n      controller.automate(context.overrideContext, context.owningView);\n\n      return _this15._swap(context, controller.view).then(function () {\n        return controller;\n      });\n    });\n  };\n\n  CompositionEngine.prototype.createController = function createController(context) {\n    var _this16 = this;\n\n    var childContainer = void 0;\n    var viewModel = void 0;\n    var viewModelResource = void 0;\n\n    var m = void 0;\n\n    return this.ensureViewModel(context).then(tryActivateViewModel).then(function () {\n      childContainer = context.childContainer;\n      viewModel = context.viewModel;\n      viewModelResource = context.viewModelResource;\n      m = viewModelResource.metadata;\n\n      var viewStrategy = _this16.viewLocator.getViewStrategy(context.view || viewModel);\n\n      if (context.viewResources) {\n        viewStrategy.makeRelativeTo(context.viewResources.viewUrl);\n      }\n\n      return m.load(childContainer, viewModelResource.value, null, viewStrategy, true);\n    }).then(function (viewFactory) {\n      return m.create(childContainer, BehaviorInstruction.dynamic(context.host, viewModel, viewFactory));\n    });\n  };\n\n  CompositionEngine.prototype.ensureViewModel = function ensureViewModel(context) {\n    var childContainer = context.childContainer = context.childContainer || context.container.createChild();\n\n    if (typeof context.viewModel === 'string') {\n      context.viewModel = context.viewResources ? context.viewResources.relativeToView(context.viewModel) : context.viewModel;\n\n      return this.viewEngine.importViewModelResource(context.viewModel).then(function (viewModelResource) {\n        childContainer.autoRegister(viewModelResource.value);\n\n        if (context.host) {\n          childContainer.registerInstance(DOM.Element, context.host);\n        }\n\n        context.viewModel = childContainer.viewModel = childContainer.get(viewModelResource.value);\n        context.viewModelResource = viewModelResource;\n        return context;\n      });\n    }\n\n    var ctor = context.viewModel.constructor;\n    var isClass = typeof context.viewModel === 'function';\n    if (isClass) {\n      ctor = context.viewModel;\n      childContainer.autoRegister(ctor);\n    }\n    var m = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, ctor);\n\n    m.elementName = m.elementName || 'dynamic-element';\n\n    m.initialize(isClass ? childContainer : context.container || childContainer, ctor);\n\n    context.viewModelResource = { metadata: m, value: ctor };\n\n    if (context.host) {\n      childContainer.registerInstance(DOM.Element, context.host);\n    }\n    childContainer.viewModel = context.viewModel = isClass ? childContainer.get(ctor) : context.viewModel;\n    return Promise.resolve(context);\n  };\n\n  CompositionEngine.prototype.compose = function compose(context) {\n    var _this17 = this;\n\n    context.childContainer = context.childContainer || context.container.createChild();\n    context.view = this.viewLocator.getViewStrategy(context.view);\n\n    var transaction = context.childContainer.get(CompositionTransaction);\n    var compositionTransactionOwnershipToken = transaction.tryCapture();\n\n    if (compositionTransactionOwnershipToken) {\n      context.compositionTransactionOwnershipToken = compositionTransactionOwnershipToken;\n    } else {\n      context.compositionTransactionNotifier = transaction.enlist();\n    }\n\n    if (context.viewModel) {\n      return this._createControllerAndSwap(context);\n    } else if (context.view) {\n      if (context.viewResources) {\n        context.view.makeRelativeTo(context.viewResources.viewUrl);\n      }\n\n      return context.view.loadViewFactory(this.viewEngine, new ViewCompileInstruction()).then(function (viewFactory) {\n        var result = viewFactory.create(context.childContainer);\n        result.bind(context.bindingContext, context.overrideContext);\n\n        if (context.compositionTransactionOwnershipToken) {\n          return context.compositionTransactionOwnershipToken.waitForCompositionComplete().then(function () {\n            return _this17._swap(context, result);\n          }).then(function () {\n            return result;\n          });\n        }\n\n        return _this17._swap(context, result).then(function () {\n          return result;\n        });\n      });\n    } else if (context.viewSlot) {\n      context.viewSlot.removeAll();\n\n      if (context.compositionTransactionNotifier) {\n        context.compositionTransactionNotifier.done();\n      }\n\n      return Promise.resolve(null);\n    }\n\n    return Promise.resolve(null);\n  };\n\n  return CompositionEngine;\n}()) || _class18);\n\nexport var ElementConfigResource = function () {\n  function ElementConfigResource() {\n    \n  }\n\n  ElementConfigResource.prototype.initialize = function initialize(container, target) {};\n\n  ElementConfigResource.prototype.register = function register(registry, name) {};\n\n  ElementConfigResource.prototype.load = function load(container, target) {\n    var config = new target();\n    var eventManager = container.get(EventManager);\n    eventManager.registerElementConfig(config);\n  };\n\n  return ElementConfigResource;\n}();\n\nexport function resource(instanceOrConfig) {\n  return function (target) {\n    var isConfig = typeof instanceOrConfig === 'string' || Object.getPrototypeOf(instanceOrConfig) === Object.prototype;\n    if (isConfig) {\n      target.$resource = instanceOrConfig;\n    } else {\n      metadata.define(metadata.resource, instanceOrConfig, target);\n    }\n  };\n}\n\nexport function behavior(override) {\n  return function (target) {\n    if (override instanceof HtmlBehaviorResource) {\n      metadata.define(metadata.resource, override, target);\n    } else {\n      var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, target);\n      Object.assign(r, override);\n    }\n  };\n}\n\nexport function customElement(name) {\n  return function (target) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, target);\n    r.elementName = validateBehaviorName(name, 'custom element');\n  };\n}\n\nexport function customAttribute(name, defaultBindingMode, aliases) {\n  return function (target) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, target);\n    r.attributeName = validateBehaviorName(name, 'custom attribute');\n    r.attributeDefaultBindingMode = defaultBindingMode;\n    r.aliases = aliases;\n  };\n}\n\nexport function templateController(target) {\n  var deco = function deco(t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.liftsContent = true;\n  };\n\n  return target ? deco(target) : deco;\n}\n\nexport function bindable(nameOrConfigOrTarget, key, descriptor) {\n  var deco = function deco(target, key2, descriptor2) {\n    var actualTarget = key2 ? target.constructor : target;\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, actualTarget);\n    var prop = void 0;\n\n    if (key2) {\n      nameOrConfigOrTarget = nameOrConfigOrTarget || {};\n      nameOrConfigOrTarget.name = key2;\n    }\n\n    prop = new BindableProperty(nameOrConfigOrTarget);\n    return prop.registerWith(actualTarget, r, descriptor2);\n  };\n\n  if (!nameOrConfigOrTarget) {\n    return deco;\n  }\n\n  if (key) {\n    var _target = nameOrConfigOrTarget;\n    nameOrConfigOrTarget = null;\n    return deco(_target, key, descriptor);\n  }\n\n  return deco;\n}\n\nexport function dynamicOptions(target) {\n  var deco = function deco(t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.hasDynamicOptions = true;\n  };\n\n  return target ? deco(target) : deco;\n}\n\nvar defaultShadowDOMOptions = { mode: 'open' };\n\nexport function useShadowDOM(targetOrOptions) {\n  var options = typeof targetOrOptions === 'function' || !targetOrOptions ? defaultShadowDOMOptions : targetOrOptions;\n\n  var deco = function deco(t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.targetShadowDOM = true;\n    r.shadowDOMOptions = options;\n  };\n\n  return typeof targetOrOptions === 'function' ? deco(targetOrOptions) : deco;\n}\n\nexport function processAttributes(processor) {\n  return function (t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.processAttributes = function (compiler, resources, node, attributes, elementInstruction) {\n      try {\n        processor(compiler, resources, node, attributes, elementInstruction);\n      } catch (error) {\n        LogManager.getLogger('templating').error(error);\n      }\n    };\n  };\n}\n\nfunction doNotProcessContent() {\n  return false;\n}\n\nexport function processContent(processor) {\n  return function (t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.processContent = processor ? function (compiler, resources, node, instruction) {\n      try {\n        return processor(compiler, resources, node, instruction);\n      } catch (error) {\n        LogManager.getLogger('templating').error(error);\n        return false;\n      }\n    } : doNotProcessContent;\n  };\n}\n\nexport function containerless(target) {\n  var deco = function deco(t) {\n    var r = metadata.getOrCreateOwn(metadata.resource, HtmlBehaviorResource, t);\n    r.containerless = true;\n  };\n\n  return target ? deco(target) : deco;\n}\n\nexport function useViewStrategy(strategy) {\n  return function (target) {\n    metadata.define(ViewLocator.viewStrategyMetadataKey, strategy, target);\n  };\n}\n\nexport function useView(path) {\n  return useViewStrategy(new RelativeViewStrategy(path));\n}\n\nexport function inlineView(markup, dependencies, dependencyBaseUrl) {\n  return useViewStrategy(new InlineViewStrategy(markup, dependencies, dependencyBaseUrl));\n}\n\nexport function noView(targetOrDependencies, dependencyBaseUrl) {\n  var target = void 0;\n  var dependencies = void 0;\n  if (typeof targetOrDependencies === 'function') {\n    target = targetOrDependencies;\n  } else {\n    dependencies = targetOrDependencies;\n    target = undefined;\n  }\n\n  var deco = function deco(t) {\n    metadata.define(ViewLocator.viewStrategyMetadataKey, new NoViewStrategy(dependencies, dependencyBaseUrl), t);\n  };\n\n  return target ? deco(target) : deco;\n}\n\nexport function view(templateOrConfig) {\n  return function (target) {\n    target.$view = templateOrConfig;\n  };\n}\n\nexport function elementConfig(target) {\n  var deco = function deco(t) {\n    metadata.define(metadata.resource, new ElementConfigResource(), t);\n  };\n\n  return target ? deco(target) : deco;\n}\n\nexport function viewResources() {\n  for (var _len = arguments.length, resources = Array(_len), _key7 = 0; _key7 < _len; _key7++) {\n    resources[_key7] = arguments[_key7];\n  }\n\n  return function (target) {\n    metadata.define(ViewEngine.viewModelRequireMetadataKey, resources, target);\n  };\n}\n\nexport var TemplatingEngine = (_dec11 = inject(Container, ModuleAnalyzer, ViewCompiler, CompositionEngine), _dec11(_class19 = function () {\n  function TemplatingEngine(container, moduleAnalyzer, viewCompiler, compositionEngine) {\n    \n\n    this._container = container;\n    this._moduleAnalyzer = moduleAnalyzer;\n    this._viewCompiler = viewCompiler;\n    this._compositionEngine = compositionEngine;\n    container.registerInstance(Animator, Animator.instance = new Animator());\n  }\n\n  TemplatingEngine.prototype.configureAnimator = function configureAnimator(animator) {\n    this._container.unregister(Animator);\n    this._container.registerInstance(Animator, Animator.instance = animator);\n  };\n\n  TemplatingEngine.prototype.compose = function compose(context) {\n    return this._compositionEngine.compose(context);\n  };\n\n  TemplatingEngine.prototype.enhance = function enhance(instruction) {\n    if (instruction instanceof DOM.Element) {\n      instruction = { element: instruction };\n    }\n\n    var compilerInstructions = { letExpressions: [] };\n    var resources = instruction.resources || this._container.get(ViewResources);\n\n    this._viewCompiler._compileNode(instruction.element, resources, compilerInstructions, instruction.element.parentNode, 'root', true);\n\n    var factory = new ViewFactory(instruction.element, compilerInstructions, resources);\n    var container = instruction.container || this._container.createChild();\n    var view = factory.create(container, BehaviorInstruction.enhance());\n\n    view.bind(instruction.bindingContext || {}, instruction.overrideContext);\n\n    view.firstChild = view.lastChild = view.fragment;\n    view.fragment = DOM.createDocumentFragment();\n    view.attached();\n\n    return view;\n  };\n\n  return TemplatingEngine;\n}()) || _class19);","var scope = (typeof global !== \"undefined\" && global) ||\n            (typeof self !== \"undefined\" && self) ||\n            window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n                       (typeof global !== \"undefined\" && global.setImmediate) ||\n                       (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n                         (typeof global !== \"undefined\" && global.clearImmediate) ||\n                         (this && this.clearImmediate);\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n            t[p[i]] = s[p[i]];\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n    if (m) return m.call(o);\r\n    return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n  return toString.call(it).slice(8, -1);\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n  return Object(requireObjectCoercible(argument));\n};\n","var toInteger = require('../internals/to-integer');\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n  return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n  return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('../internals/is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n  if (!isObject(it)) return it;\n  var fn, val;\n  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = false;\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = nativeGetOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n  var descriptor = nativeGetOwnPropertyDescriptor(this, V);\n  return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","var global = require('../internals/global');\nvar hide = require('../internals/hide');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar nativeFunctionToString = require('../internals/function-to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(nativeFunctionToString).split('toString');\n\nrequire('../internals/shared')('inspectSource', function (it) {\n  return nativeFunctionToString.call(it);\n});\n\n(module.exports = function (O, key, value, options) {\n  var unsafe = options ? !!options.unsafe : false;\n  var simple = options ? !!options.enumerable : false;\n  var noTargetGet = options ? !!options.noTargetGet : false;\n  if (typeof value == 'function') {\n    if (typeof key == 'string' && !has(value, 'name')) hide(value, 'name', key);\n    enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n  }\n  if (O === global) {\n    if (simple) O[key] = value;\n    else setGlobal(key, value);\n    return;\n  } else if (!unsafe) {\n    delete O[key];\n  } else if (!noTargetGet && O[key]) {\n    simple = true;\n  }\n  if (simple) O[key] = value;\n  else hide(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n  return typeof this == 'function' && getInternalState(this).source || nativeFunctionToString.call(this);\n});\n","import { autoinject, inject } from 'aurelia-framework';\nimport { Container } from 'aurelia-dependency-injection';\nimport { HttpClient, HttpClientConfiguration } from 'aurelia-fetch-client';\n\nimport { Authentication } from 'services/authentication';\nimport { Curriculum, Category, Element, User, Log, Functions, Confirm, ConfirmHistoryItem } from 'definitions';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport * as Firebase from 'firebase/app';\nimport 'firebase/database';\n\n//NOTE: gli oggetti in Javascript sono passati per riferimento,\n//in ogni funzione che accetta un oggetto ne creo una copia locale e lavoro su quella\n\n//DOC: prefisso di tutte le risorse nel database Firebase\nexport const DatabasePrefix: string = \"/alpha/\";\n\n//DOC: percorsi delle risorse base del database\nexport enum Path {\n  users = \"users/\",\n  curricula = \"curricula/\",\n  categories = \"categories/\",\n  elements = \"elements/\",\n  logs = \"logs/\",\n  confirms = \"confirms/\",\n  curriculumStyle = \"style/\" //sub property of curriculum\n}\n\n//DOC: eventi dei listener di Firebase (è un doppione di Firebase.databse.EventType ma almeno non ho stringhe in giro)\nexport enum Action {\n  onValue = \"value\",\n  onAdded = \"child_added\",\n  onRemoved = \"child_removed\",\n  onChanged = \"child_changed\"\n}\n\n//DOC: indici di ricerca usati nelle query\nexport enum ChildPath {\n  idUser = \"uid\",\n  idCurriculum = \"idCurriculum\",\n  idCategory = \"idCategory\",\n  idConfirm = \"idConfirm\",\n  idReviewer = \"idReviewer\",\n  historyConfirm = \"history\"\n  //.....etc\n}\n\n//DOC: introdotto nuovo tipo per semplificare la notazione\nexport type Query = Firebase.database.Query;\n\n//DOC: classe wrapper di firebase per la manipolazione del database (Firebase)\n@autoinject\nexport class Database {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = (new Logger()).setStyle(Logger.colors.indigo, Logger.colors.white).setDefaultPrefix(\"DB\");\n\n  //DOC: oggetto che rappresenta il database Firebase remoto\n  private db: Firebase.database.Database;\n\n  //DOC: riferimento all'Authentication di Firebase\n  private _auth: Authentication = null;\n  //DOC: inizializza o restituisce il riferimento all'Authentication instanziato\n  private get auth(): Authentication {\n    if (!this._auth) this._auth = this.container.get(Authentication);\n    return this._auth;\n  };\n\n  constructor(private container: Container) {\n    //DOC: inizializzazione del Database\n    this.db = Firebase.database();\n    this.logger.success(\"Firebase Database\", \"inizializzato correttamente\");\n  }\n\n  //DOC: setta il path della Reference e la restituisce per costruire la Query (è il primo step della query)\n  public query(path: Path | string) {\n    return this.db.ref(DatabasePrefix + path);\n  }\n\n  //------------------------------------------------------------------------------------------------------\n  //NOTE: elenco funzioni inserimento/cancellazione/modifica elementi remoti del db\n  //NOTE: funzioni oggetto Review\n\n  //DOC: aggiunge un log al database\n  public appendConfirm(_rev: Confirm): Promise<any> {\n    var newRevKey = this.db.ref().child(DatabasePrefix + Path.confirms).push().key;\n    var updates = {};\n    //NOTE: appendo la nuova review\n    updates[DatabasePrefix + Path.confirms + \"/\" + newRevKey] = _rev;\n    return new Promise<any>((ok, ko) =>\n      this.db.ref().update(updates)\n        .then(() => ok(newRevKey))\n        .catch(e => { this.errorManager.error(e); ko(); }));\n  }\n\n  //DOC: aggiunge un log al database\n  public appendHistoryConfirm(idRev: string, itemIndex: number, item: ConfirmHistoryItem): Promise<any> {\n    var updates = {};\n    //NOTE: appendo la nuova item della history della review\n    updates[DatabasePrefix + Path.confirms + idRev + \"/\" + ChildPath.historyConfirm + \"/\" + itemIndex + \"/\"] = item;\n    return new Promise<any>((ok, ko) =>\n      this.db.ref().update(updates)\n        .then(() => ok(item))\n        .catch(e => { this.errorManager.error(e); ko(); }));\n  }\n\n  //------------------------------------------------------------------------------------------------------\n  //NOTE: funzioni oggetto Log\n\n  //DOC: aggiunge un log al database\n  public appendLog(_log: Log) {\n    var newLogKey = this.db.ref().child(DatabasePrefix + Path.logs).push().key;\n    var updates = {};\n    //NOTE: appendo il nuovo log\n    updates[DatabasePrefix + Path.logs + \"/\" + newLogKey] = _log;\n    this.db.ref().update(updates)\n      .then()\n      .catch(\n        e => this.errorManager.error(e)\n      );\n  }\n\n  //------------------------------------------------------------------------------------------------------\n  //NOTE: funzioni oggetto User\n\n  //DOC: aggiunge nel database l'utente passato\n  public appendUser(_user: User) {\n    //NOTE: l'utente ha come chiave il suo UID che è lo stesso di AUTH\n    var uid = this.auth.getCurrentUser().uid;\n    return this.db.ref(DatabasePrefix + Path.users + uid).once('value').then(\n      (user) => {\n        if (user.exists()) {\n          this.logger.error(\"L'utente è già nel database!\");\n          this.errorManager.error(\"user already exists!\");\n        }\n        else {\n          this.db.ref(DatabasePrefix + Path.users + uid)\n            .set(Functions.toDatabase(_user))\n            .catch(e => this.errorManager.error(e));\n        }\n      }\n    );\n  }\n\n  //DOC: aggiorna nel database l'utente passato\n  public updateUser(uid: string, values: any) {\n    this.db.ref().child(DatabasePrefix + Path.users + uid)\n      .update(values)\n      .then()\n      .catch(\n        e => this.errorManager.error(e)\n      );\n  };\n\n  //TODO: rimuove dal database l'utente avente l'id passato\n  public deleteUser(uid: string) {\n    this.logger.isTodo().log(\"Il metodo per eliminare l'utente `${idUser}`non è stato implementato\");\n  }\n\n  //------------------------------------------------------------------------------------------------------\n  //NOTE: funzioni oggetto CV\n\n  //DOC: aggiunge nel database il curriculum passato\n  public appendCurriculum(_curriculum: Curriculum) {\n    var curriculum: Curriculum = _curriculum;\n    var newCurriculumKey = this.db.ref().child(DatabasePrefix + Path.curricula).push().key;\n    var updates = {};\n    //NOTE: appendo il curriculum nuovo ed aggiungo il suo id alla lista degli id dell'utente a cui appartiene\n    updates[DatabasePrefix + Path.curricula + newCurriculumKey] = Functions.toDatabase(curriculum)\n    updates[DatabasePrefix + Path.users + curriculum.uid + \"/idCurricula/\" + newCurriculumKey] = true;\n    //console.log(updates);\n    this.db.ref().update(updates)\n      .then(_ =>\n        this.appendLog({\n          dateTime: (new Date()).getTime(),\n          uid: this.auth.getCurrentUser().uid,\n          subject: \"DB.createCurriculum\",\n          operation: `Created new curriculum (${_curriculum.title})`,\n          security: false\n        } as Log))\n      .catch(\n        e => this.errorManager.error(e)\n      );\n  };\n\n  //DOC: aggiorna nel database il curriculum passato\n  public updateCurriculum(id: string, values: any) {\n    this.db.ref().child(DatabasePrefix + Path.curricula + id)\n      .update(values)\n      .then()\n      .catch(\n        e => this.errorManager.error(e)\n      );\n  };\n  \n  //DOC: aggiorna nel database il curriculum passato\n  public updateCurriculumStyle(id: string, values: any) {\n    this.db.ref().child(DatabasePrefix + Path.curricula + id + \"/\" + Path.curriculumStyle)\n      .update(values)\n      .then()\n      .catch(\n        e => this.errorManager.error(e)\n      );\n  };\n\n  //DOC: elimina dal database un curriculum\n  public deleteCurriculum(title: string, idCurriculum: string, uid: string) {\n    var updates = {};\n    //NOTE: rimuovo a) il curriculum dalla lista dei curricula b) l'idCurriculum dall'utente idUser che contiene il curriculum\n    //NOTE: c) tutte le categorie che il curriculum contiene d) tutti gli elementi che sono contenuti dalle categorie del curriculum \n    updates[DatabasePrefix + Path.curricula + idCurriculum] = null; //NOTE: a)\n    updates[DatabasePrefix + Path.users + uid + \"/idCurricula/\" + idCurriculum] = null; //NOTE: b)\n    this.db.ref().child(DatabasePrefix + Path.categories).orderByChild(\"idCurriculum\").equalTo(idCurriculum) //NOTE: c)\n      .once('value').then(\n        cats => {\n          cats.forEach(\n            cat => this.deleteCategory({ id: cat.key, idCurriculum: idCurriculum }));\n        })\n      .then(() =>\n        this.db.ref().update(updates)\n          .then(_ => this.appendLog({\n            dateTime: (new Date()).getTime(),\n            uid: this.auth.getCurrentUser().uid,\n            subject: \"DB.deleteCurriculum\",\n            operation: `Deleted curriculum (${title})`,\n            security: false\n          } as Log))\n          .catch(\n            e => this.errorManager.error(e)\n          ))\n  };\n\n  //------------------------------------------------------------------------------------------------------\n  //NOTE: funzioni oggetto Category\n\n  //DOC: aggiunge al database la categoria passata\n  public appendCategory(_category: Category) {\n    var category = _category as Category;\n    var newCategoryKey = this.db.ref().child(DatabasePrefix + Path.categories).push().key;\n    var updates = {};\n    //NOTE: appendo la categoria nuova ed aggiungo il suo id alla lista degli id del curriculum a cui appartiene\n    updates[DatabasePrefix + Path.categories + newCategoryKey] = Functions.toDatabase(category);\n    updates[DatabasePrefix + Path.curricula + category.idCurriculum + \"/idCategories/\" + newCategoryKey] = true;\n    //console.log(updates);\n    this.db.ref().update(updates)\n      .then()\n      .catch(\n        e => this.errorManager.error(e)\n      );\n  };\n  //DOC: aggiorna nel database tutte le categorie passate\n  public updateCategory(cats: Category[]) {\n    if (cats.length == 0) return;\n    var aggiornamenti = {};\n    //per ogni categoria, scorro le proprietà e creo l'array di aggiornamento\n    cats.forEach(c => Object.keys(Functions.toDatabase(c)).forEach(p =>\n      aggiornamenti[DatabasePrefix + Path.categories + c.id + '/' + p] = c[p]\n    ));\n    return this.db.ref().update(aggiornamenti)\n      .then()\n      .catch(\n        e => this.errorManager.error(e)\n      );\n  };\n  //DOC: elimina dal database la categoria passata\n  public deleteCategory(category: { id: string, idCurriculum: string }) {\n    var updates = {};\n    //NOTE: rimuovo a) la categoria dalla lista delle categorie b) l'id dal curriculum idCurriculum che lo contiene\n    //NOTE: c) tutti gli elementi che la categoria contiene\n    updates[DatabasePrefix + Path.categories + category.id] = null; //NOTE: a)\n    updates[DatabasePrefix + Path.curricula + category.idCurriculum + \"/idCategories/\" + category.id] = null; //NOTE: b)\n    this.db.ref().child(DatabasePrefix + Path.elements).orderByChild(\"idCategory\").equalTo(category.id) //NOTE: c)\n      .once('value')\n      .then(snapshot => {\n        snapshot.forEach(child => updates[DatabasePrefix + Path.elements + child.key] = null);\n        //this.logger.log(updates);\n      })\n      .then(() =>\n        this.db.ref().update(updates)\n          .then()\n          .catch(\n            e => this.errorManager.error(e)\n          ));\n  };\n\n  //------------------------------------------------------------------------------------------------------\n  //NOTE: funzioni oggetto Element\n\n  //DOC: aggiunge al database l'elemento passato\n  public appendElement(_element: Element) {\n    //console.log(_element);\n    var element = _element as Element;\n    var newElementKey = this.db.ref().child(DatabasePrefix + Path.elements).push().key;\n    var updates = {};\n    //NOTE: appendo l'elemento nuovo ed aggiungo il suo id alla lista degli id della categoria a cui appartiene\n    updates[DatabasePrefix + Path.elements + newElementKey] = Functions.toDatabase(element);\n    updates[DatabasePrefix + Path.categories + element.idCategory + \"/idElements/\" + newElementKey] = true;\n    //console.log(updates);\n    this.db.ref().update(updates)\n      .then()\n      .catch(\n        e => this.errorManager.error(e)\n      );\n  }\n  //DOC: aggiorna nel database l'elemento passato\n  public updateElement(eles: Element[]) {\n    if (eles.length == 0) return;\n    var aggiornamenti = {};\n    eles.forEach(e => Object.keys(Functions.toDatabase(e)).forEach(p =>\n      aggiornamenti[DatabasePrefix + Path.elements + e.id + '/' + p] = e[p]\n    ));\n    return this.db.ref().update(aggiornamenti)\n      .then()\n      .catch(\n        e => this.errorManager.error(e)\n      );\n  };\n  //DOC: elimina dal database l'elemento passato\n  public deleteElement(element: { id: string, idCategory: string }) {\n    //this.logger.log(element);\n    var updates = {};\n    //NOTE: rimuovo a) l'elemento dalla lista degli elementi e b) l'id dalla categoria idCategory che lo contiene\n    updates[DatabasePrefix + Path.elements + element.id] = null; //NOTE: a)\n    updates[DatabasePrefix + Path.categories + element.idCategory + \"/idElements/\" + element.id] = null; //NOTE: b)\n    this.db.ref().update(updates)\n      .then()\n      .catch(\n        e => this.errorManager.error(e)\n      );\n  };\n}\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar isObject = require('../internals/is-object');\nvar hide = require('../internals/hide');\nvar objectHas = require('../internals/has');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar WeakMap = require('../internals/global').WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n  return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n  return function (it) {\n    var state;\n    if (!isObject(it) || (state = get(it)).type !== TYPE) {\n      throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n    } return state;\n  };\n};\n\nif (NATIVE_WEAK_MAP) {\n  var store = new WeakMap();\n  var wmget = store.get;\n  var wmhas = store.has;\n  var wmset = store.set;\n  set = function (it, metadata) {\n    wmset.call(store, it, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return wmget.call(store, it) || {};\n  };\n  has = function (it) {\n    return wmhas.call(store, it);\n  };\n} else {\n  var STATE = sharedKey('state');\n  hiddenKeys[STATE] = true;\n  set = function (it, metadata) {\n    hide(it, STATE, metadata);\n    return metadata;\n  };\n  get = function (it) {\n    return objectHas(it, STATE) ? it[STATE] : {};\n  };\n  has = function (it) {\n    return objectHas(it, STATE);\n  };\n}\n\nmodule.exports = {\n  set: set,\n  get: get,\n  has: has,\n  enforce: enforce,\n  getterFor: getterFor\n};\n","var shared = require('../internals/shared')('keys');\nvar uid = require('../internals/uid');\n\nmodule.exports = function (key) {\n  return shared[key] || (shared[key] = uid(key));\n};\n","module.exports = {};\n","exports.f = Object.getOwnPropertySymbols;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n  return internalObjectKeys(O, enumBugKeys);\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/bind-context');\nvar call = Function.call;\n\nmodule.exports = function (CONSTRUCTOR, METHOD, length) {\n  return bind(call, global[CONSTRUCTOR].prototype[METHOD], length);\n};\n","module.exports = global[\"Promise\"] = require(\"-!./bluebird.js\");","import { autoinject, inject } from 'aurelia-framework';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport * as Firebase from 'firebase/app';\nimport 'firebase/functions';\n\n@autoinject\nexport class Functions {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = (new Logger()).setStyle(Logger.colors.teal, Logger.colors.white).setDefaultPrefix(\"FT\");\n\n  //DOC: oggetto Functions di Firebase\n  private functions: Firebase.functions.Functions;\n\n  constructor() {\n    this.functions = Firebase.functions();\n    this.logger.success(\"Firebase Functions\", \"inizializzato correttamente\");\n  }\n\n  //DOC: metodo wrapper per chiamare una function ed ottenere il risultato\n  public httpsCallable(fun: string): firebase.functions.HttpsCallable {\n    return this.functions.httpsCallable(fun);\n  }\n}\n","/* @preserve\n * The MIT License (MIT)\n * \n * Copyright (c) 2013-2018 Petka Antonov\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n * \n */\n/**\n * bluebird build version 3.5.5\n * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each\n*/\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{var f;\"undefined\"!=typeof window?f=window:\"undefined\"!=typeof global?f=global:\"undefined\"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_==\"function\"&&_dereq_;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof _dereq_==\"function\"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar SomePromiseArray = Promise._SomePromiseArray;\nfunction any(promises) {\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(1);\n    ret.setUnwrap();\n    ret.init();\n    return promise;\n}\n\nPromise.any = function (promises) {\n    return any(promises);\n};\n\nPromise.prototype.any = function () {\n    return any(this);\n};\n\n};\n\n},{}],2:[function(_dereq_,module,exports){\n\"use strict\";\nvar firstLineError;\ntry {throw new Error(); } catch (e) {firstLineError = e;}\nvar schedule = _dereq_(\"./schedule\");\nvar Queue = _dereq_(\"./queue\");\nvar util = _dereq_(\"./util\");\n\nfunction Async() {\n    this._customScheduler = false;\n    this._isTickUsed = false;\n    this._lateQueue = new Queue(16);\n    this._normalQueue = new Queue(16);\n    this._haveDrainedQueues = false;\n    this._trampolineEnabled = true;\n    var self = this;\n    this.drainQueues = function () {\n        self._drainQueues();\n    };\n    this._schedule = schedule;\n}\n\nAsync.prototype.setScheduler = function(fn) {\n    var prev = this._schedule;\n    this._schedule = fn;\n    this._customScheduler = true;\n    return prev;\n};\n\nAsync.prototype.hasCustomScheduler = function() {\n    return this._customScheduler;\n};\n\nAsync.prototype.enableTrampoline = function() {\n    this._trampolineEnabled = true;\n};\n\nAsync.prototype.disableTrampolineIfNecessary = function() {\n    if (util.hasDevTools) {\n        this._trampolineEnabled = false;\n    }\n};\n\nAsync.prototype.haveItemsQueued = function () {\n    return this._isTickUsed || this._haveDrainedQueues;\n};\n\n\nAsync.prototype.fatalError = function(e, isNode) {\n    if (isNode) {\n        process.stderr.write(\"Fatal \" + (e instanceof Error ? e.stack : e) +\n            \"\\n\");\n        process.exit(2);\n    } else {\n        this.throwLater(e);\n    }\n};\n\nAsync.prototype.throwLater = function(fn, arg) {\n    if (arguments.length === 1) {\n        arg = fn;\n        fn = function () { throw arg; };\n    }\n    if (typeof setTimeout !== \"undefined\") {\n        setTimeout(function() {\n            fn(arg);\n        }, 0);\n    } else try {\n        this._schedule(function() {\n            fn(arg);\n        });\n    } catch (e) {\n        throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n};\n\nfunction AsyncInvokeLater(fn, receiver, arg) {\n    this._lateQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncInvoke(fn, receiver, arg) {\n    this._normalQueue.push(fn, receiver, arg);\n    this._queueTick();\n}\n\nfunction AsyncSettlePromises(promise) {\n    this._normalQueue._pushOne(promise);\n    this._queueTick();\n}\n\nif (!util.hasDevTools) {\n    Async.prototype.invokeLater = AsyncInvokeLater;\n    Async.prototype.invoke = AsyncInvoke;\n    Async.prototype.settlePromises = AsyncSettlePromises;\n} else {\n    Async.prototype.invokeLater = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvokeLater.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                setTimeout(function() {\n                    fn.call(receiver, arg);\n                }, 100);\n            });\n        }\n    };\n\n    Async.prototype.invoke = function (fn, receiver, arg) {\n        if (this._trampolineEnabled) {\n            AsyncInvoke.call(this, fn, receiver, arg);\n        } else {\n            this._schedule(function() {\n                fn.call(receiver, arg);\n            });\n        }\n    };\n\n    Async.prototype.settlePromises = function(promise) {\n        if (this._trampolineEnabled) {\n            AsyncSettlePromises.call(this, promise);\n        } else {\n            this._schedule(function() {\n                promise._settlePromises();\n            });\n        }\n    };\n}\n\nfunction _drainQueue(queue) {\n    while (queue.length() > 0) {\n        _drainQueueStep(queue);\n    }\n}\n\nfunction _drainQueueStep(queue) {\n    var fn = queue.shift();\n    if (typeof fn !== \"function\") {\n        fn._settlePromises();\n    } else {\n        var receiver = queue.shift();\n        var arg = queue.shift();\n        fn.call(receiver, arg);\n    }\n}\n\nAsync.prototype._drainQueues = function () {\n    _drainQueue(this._normalQueue);\n    this._reset();\n    this._haveDrainedQueues = true;\n    _drainQueue(this._lateQueue);\n};\n\nAsync.prototype._queueTick = function () {\n    if (!this._isTickUsed) {\n        this._isTickUsed = true;\n        this._schedule(this.drainQueues);\n    }\n};\n\nAsync.prototype._reset = function () {\n    this._isTickUsed = false;\n};\n\nmodule.exports = Async;\nmodule.exports.firstLineError = firstLineError;\n\n},{\"./queue\":26,\"./schedule\":29,\"./util\":36}],3:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {\nvar calledBind = false;\nvar rejectThis = function(_, e) {\n    this._reject(e);\n};\n\nvar targetRejected = function(e, context) {\n    context.promiseRejectionQueued = true;\n    context.bindingPromise._then(rejectThis, rejectThis, null, this, e);\n};\n\nvar bindingResolved = function(thisArg, context) {\n    if (((this._bitField & 50397184) === 0)) {\n        this._resolveCallback(context.target);\n    }\n};\n\nvar bindingRejected = function(e, context) {\n    if (!context.promiseRejectionQueued) this._reject(e);\n};\n\nPromise.prototype.bind = function (thisArg) {\n    if (!calledBind) {\n        calledBind = true;\n        Promise.prototype._propagateFrom = debug.propagateFromFunction();\n        Promise.prototype._boundValue = debug.boundValueFunction();\n    }\n    var maybePromise = tryConvertToPromise(thisArg);\n    var ret = new Promise(INTERNAL);\n    ret._propagateFrom(this, 1);\n    var target = this._target();\n    ret._setBoundTo(maybePromise);\n    if (maybePromise instanceof Promise) {\n        var context = {\n            promiseRejectionQueued: false,\n            promise: ret,\n            target: target,\n            bindingPromise: maybePromise\n        };\n        target._then(INTERNAL, targetRejected, undefined, ret, context);\n        maybePromise._then(\n            bindingResolved, bindingRejected, undefined, ret, context);\n        ret._setOnCancel(maybePromise);\n    } else {\n        ret._resolveCallback(target);\n    }\n    return ret;\n};\n\nPromise.prototype._setBoundTo = function (obj) {\n    if (obj !== undefined) {\n        this._bitField = this._bitField | 2097152;\n        this._boundTo = obj;\n    } else {\n        this._bitField = this._bitField & (~2097152);\n    }\n};\n\nPromise.prototype._isBound = function () {\n    return (this._bitField & 2097152) === 2097152;\n};\n\nPromise.bind = function (thisArg, value) {\n    return Promise.resolve(value).bind(thisArg);\n};\n};\n\n},{}],4:[function(_dereq_,module,exports){\n\"use strict\";\nvar old;\nif (typeof Promise !== \"undefined\") old = Promise;\nfunction noConflict() {\n    try { if (Promise === bluebird) Promise = old; }\n    catch (e) {}\n    return bluebird;\n}\nvar bluebird = _dereq_(\"./promise\")();\nbluebird.noConflict = noConflict;\nmodule.exports = bluebird;\n\n},{\"./promise\":22}],5:[function(_dereq_,module,exports){\n\"use strict\";\nvar cr = Object.create;\nif (cr) {\n    var callerCache = cr(null);\n    var getterCache = cr(null);\n    callerCache[\" size\"] = getterCache[\" size\"] = 0;\n}\n\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar isIdentifier = util.isIdentifier;\n\nvar getMethodCaller;\nvar getGetter;\nif (!true) {\nvar makeMethodCaller = function (methodName) {\n    return new Function(\"ensureMethod\", \"                                    \\n\\\n        return function(obj) {                                               \\n\\\n            'use strict'                                                     \\n\\\n            var len = this.length;                                           \\n\\\n            ensureMethod(obj, 'methodName');                                 \\n\\\n            switch(len) {                                                    \\n\\\n                case 1: return obj.methodName(this[0]);                      \\n\\\n                case 2: return obj.methodName(this[0], this[1]);             \\n\\\n                case 3: return obj.methodName(this[0], this[1], this[2]);    \\n\\\n                case 0: return obj.methodName();                             \\n\\\n                default:                                                     \\n\\\n                    return obj.methodName.apply(obj, this);                  \\n\\\n            }                                                                \\n\\\n        };                                                                   \\n\\\n        \".replace(/methodName/g, methodName))(ensureMethod);\n};\n\nvar makeGetter = function (propertyName) {\n    return new Function(\"obj\", \"                                             \\n\\\n        'use strict';                                                        \\n\\\n        return obj.propertyName;                                             \\n\\\n        \".replace(\"propertyName\", propertyName));\n};\n\nvar getCompiled = function(name, compiler, cache) {\n    var ret = cache[name];\n    if (typeof ret !== \"function\") {\n        if (!isIdentifier(name)) {\n            return null;\n        }\n        ret = compiler(name);\n        cache[name] = ret;\n        cache[\" size\"]++;\n        if (cache[\" size\"] > 512) {\n            var keys = Object.keys(cache);\n            for (var i = 0; i < 256; ++i) delete cache[keys[i]];\n            cache[\" size\"] = keys.length - 256;\n        }\n    }\n    return ret;\n};\n\ngetMethodCaller = function(name) {\n    return getCompiled(name, makeMethodCaller, callerCache);\n};\n\ngetGetter = function(name) {\n    return getCompiled(name, makeGetter, getterCache);\n};\n}\n\nfunction ensureMethod(obj, methodName) {\n    var fn;\n    if (obj != null) fn = obj[methodName];\n    if (typeof fn !== \"function\") {\n        var message = \"Object \" + util.classString(obj) + \" has no method '\" +\n            util.toString(methodName) + \"'\";\n        throw new Promise.TypeError(message);\n    }\n    return fn;\n}\n\nfunction caller(obj) {\n    var methodName = this.pop();\n    var fn = ensureMethod(obj, methodName);\n    return fn.apply(obj, this);\n}\nPromise.prototype.call = function (methodName) {\n    var args = [].slice.call(arguments, 1);;\n    if (!true) {\n        if (canEvaluate) {\n            var maybeCaller = getMethodCaller(methodName);\n            if (maybeCaller !== null) {\n                return this._then(\n                    maybeCaller, undefined, undefined, args, undefined);\n            }\n        }\n    }\n    args.push(methodName);\n    return this._then(caller, undefined, undefined, args, undefined);\n};\n\nfunction namedGetter(obj) {\n    return obj[this];\n}\nfunction indexedGetter(obj) {\n    var index = +this;\n    if (index < 0) index = Math.max(0, index + obj.length);\n    return obj[index];\n}\nPromise.prototype.get = function (propertyName) {\n    var isIndex = (typeof propertyName === \"number\");\n    var getter;\n    if (!isIndex) {\n        if (canEvaluate) {\n            var maybeGetter = getGetter(propertyName);\n            getter = maybeGetter !== null ? maybeGetter : namedGetter;\n        } else {\n            getter = namedGetter;\n        }\n    } else {\n        getter = indexedGetter;\n    }\n    return this._then(getter, undefined, undefined, propertyName, undefined);\n};\n};\n\n},{\"./util\":36}],6:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, PromiseArray, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nPromise.prototype[\"break\"] = Promise.prototype.cancel = function() {\n    if (!debug.cancellation()) return this._warn(\"cancellation is disabled\");\n\n    var promise = this;\n    var child = promise;\n    while (promise._isCancellable()) {\n        if (!promise._cancelBy(child)) {\n            if (child._isFollowing()) {\n                child._followee().cancel();\n            } else {\n                child._cancelBranched();\n            }\n            break;\n        }\n\n        var parent = promise._cancellationParent;\n        if (parent == null || !parent._isCancellable()) {\n            if (promise._isFollowing()) {\n                promise._followee().cancel();\n            } else {\n                promise._cancelBranched();\n            }\n            break;\n        } else {\n            if (promise._isFollowing()) promise._followee().cancel();\n            promise._setWillBeCancelled();\n            child = promise;\n            promise = parent;\n        }\n    }\n};\n\nPromise.prototype._branchHasCancelled = function() {\n    this._branchesRemainingToCancel--;\n};\n\nPromise.prototype._enoughBranchesHaveCancelled = function() {\n    return this._branchesRemainingToCancel === undefined ||\n           this._branchesRemainingToCancel <= 0;\n};\n\nPromise.prototype._cancelBy = function(canceller) {\n    if (canceller === this) {\n        this._branchesRemainingToCancel = 0;\n        this._invokeOnCancel();\n        return true;\n    } else {\n        this._branchHasCancelled();\n        if (this._enoughBranchesHaveCancelled()) {\n            this._invokeOnCancel();\n            return true;\n        }\n    }\n    return false;\n};\n\nPromise.prototype._cancelBranched = function() {\n    if (this._enoughBranchesHaveCancelled()) {\n        this._cancel();\n    }\n};\n\nPromise.prototype._cancel = function() {\n    if (!this._isCancellable()) return;\n    this._setCancelled();\n    async.invoke(this._cancelPromises, this, undefined);\n};\n\nPromise.prototype._cancelPromises = function() {\n    if (this._length() > 0) this._settlePromises();\n};\n\nPromise.prototype._unsetOnCancel = function() {\n    this._onCancelField = undefined;\n};\n\nPromise.prototype._isCancellable = function() {\n    return this.isPending() && !this._isCancelled();\n};\n\nPromise.prototype.isCancellable = function() {\n    return this.isPending() && !this.isCancelled();\n};\n\nPromise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {\n    if (util.isArray(onCancelCallback)) {\n        for (var i = 0; i < onCancelCallback.length; ++i) {\n            this._doInvokeOnCancel(onCancelCallback[i], internalOnly);\n        }\n    } else if (onCancelCallback !== undefined) {\n        if (typeof onCancelCallback === \"function\") {\n            if (!internalOnly) {\n                var e = tryCatch(onCancelCallback).call(this._boundValue());\n                if (e === errorObj) {\n                    this._attachExtraTrace(e.e);\n                    async.throwLater(e.e);\n                }\n            }\n        } else {\n            onCancelCallback._resultCancelled(this);\n        }\n    }\n};\n\nPromise.prototype._invokeOnCancel = function() {\n    var onCancelCallback = this._onCancel();\n    this._unsetOnCancel();\n    async.invoke(this._doInvokeOnCancel, this, onCancelCallback);\n};\n\nPromise.prototype._invokeInternalOnCancel = function() {\n    if (this._isCancellable()) {\n        this._doInvokeOnCancel(this._onCancel(), true);\n        this._unsetOnCancel();\n    }\n};\n\nPromise.prototype._resultCancelled = function() {\n    this.cancel();\n};\n\n};\n\n},{\"./util\":36}],7:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar getKeys = _dereq_(\"./es5\").keys;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction catchFilter(instances, cb, promise) {\n    return function(e) {\n        var boundTo = promise._boundValue();\n        predicateLoop: for (var i = 0; i < instances.length; ++i) {\n            var item = instances[i];\n\n            if (item === Error ||\n                (item != null && item.prototype instanceof Error)) {\n                if (e instanceof item) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (typeof item === \"function\") {\n                var matchesPredicate = tryCatch(item).call(boundTo, e);\n                if (matchesPredicate === errorObj) {\n                    return matchesPredicate;\n                } else if (matchesPredicate) {\n                    return tryCatch(cb).call(boundTo, e);\n                }\n            } else if (util.isObject(e)) {\n                var keys = getKeys(item);\n                for (var j = 0; j < keys.length; ++j) {\n                    var key = keys[j];\n                    if (item[key] != e[key]) {\n                        continue predicateLoop;\n                    }\n                }\n                return tryCatch(cb).call(boundTo, e);\n            }\n        }\n        return NEXT_FILTER;\n    };\n}\n\nreturn catchFilter;\n};\n\n},{\"./es5\":13,\"./util\":36}],8:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar longStackTraces = false;\nvar contextStack = [];\n\nPromise.prototype._promiseCreated = function() {};\nPromise.prototype._pushContext = function() {};\nPromise.prototype._popContext = function() {return null;};\nPromise._peekContext = Promise.prototype._peekContext = function() {};\n\nfunction Context() {\n    this._trace = new Context.CapturedTrace(peekContext());\n}\nContext.prototype._pushContext = function () {\n    if (this._trace !== undefined) {\n        this._trace._promiseCreated = null;\n        contextStack.push(this._trace);\n    }\n};\n\nContext.prototype._popContext = function () {\n    if (this._trace !== undefined) {\n        var trace = contextStack.pop();\n        var ret = trace._promiseCreated;\n        trace._promiseCreated = null;\n        return ret;\n    }\n    return null;\n};\n\nfunction createContext() {\n    if (longStackTraces) return new Context();\n}\n\nfunction peekContext() {\n    var lastIndex = contextStack.length - 1;\n    if (lastIndex >= 0) {\n        return contextStack[lastIndex];\n    }\n    return undefined;\n}\nContext.CapturedTrace = null;\nContext.create = createContext;\nContext.deactivateLongStackTraces = function() {};\nContext.activateLongStackTraces = function() {\n    var Promise_pushContext = Promise.prototype._pushContext;\n    var Promise_popContext = Promise.prototype._popContext;\n    var Promise_PeekContext = Promise._peekContext;\n    var Promise_peekContext = Promise.prototype._peekContext;\n    var Promise_promiseCreated = Promise.prototype._promiseCreated;\n    Context.deactivateLongStackTraces = function() {\n        Promise.prototype._pushContext = Promise_pushContext;\n        Promise.prototype._popContext = Promise_popContext;\n        Promise._peekContext = Promise_PeekContext;\n        Promise.prototype._peekContext = Promise_peekContext;\n        Promise.prototype._promiseCreated = Promise_promiseCreated;\n        longStackTraces = false;\n    };\n    longStackTraces = true;\n    Promise.prototype._pushContext = Context.prototype._pushContext;\n    Promise.prototype._popContext = Context.prototype._popContext;\n    Promise._peekContext = Promise.prototype._peekContext = peekContext;\n    Promise.prototype._promiseCreated = function() {\n        var ctx = this._peekContext();\n        if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;\n    };\n};\nreturn Context;\n};\n\n},{}],9:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, Context) {\nvar getDomain = Promise._getDomain;\nvar async = Promise._async;\nvar Warning = _dereq_(\"./errors\").Warning;\nvar util = _dereq_(\"./util\");\nvar es5 = _dereq_(\"./es5\");\nvar canAttachTrace = util.canAttachTrace;\nvar unhandledRejectionHandled;\nvar possiblyUnhandledRejection;\nvar bluebirdFramePattern =\n    /[\\\\\\/]bluebird[\\\\\\/]js[\\\\\\/](release|debug|instrumented)/;\nvar nodeFramePattern = /\\((?:timers\\.js):\\d+:\\d+\\)/;\nvar parseLinePattern = /[\\/<\\(](.+?):(\\d+):(\\d+)\\)?\\s*$/;\nvar stackFramePattern = null;\nvar formatStack = null;\nvar indentStackFrames = false;\nvar printWarning;\nvar debugging = !!(util.env(\"BLUEBIRD_DEBUG\") != 0 &&\n                        (true ||\n                         util.env(\"BLUEBIRD_DEBUG\") ||\n                         util.env(\"NODE_ENV\") === \"development\"));\n\nvar warnings = !!(util.env(\"BLUEBIRD_WARNINGS\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_WARNINGS\")));\n\nvar longStackTraces = !!(util.env(\"BLUEBIRD_LONG_STACK_TRACES\") != 0 &&\n    (debugging || util.env(\"BLUEBIRD_LONG_STACK_TRACES\")));\n\nvar wForgottenReturn = util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\") != 0 &&\n    (warnings || !!util.env(\"BLUEBIRD_W_FORGOTTEN_RETURN\"));\n\nPromise.prototype.suppressUnhandledRejections = function() {\n    var target = this._target();\n    target._bitField = ((target._bitField & (~1048576)) |\n                      524288);\n};\n\nPromise.prototype._ensurePossibleRejectionHandled = function () {\n    if ((this._bitField & 524288) !== 0) return;\n    this._setRejectionIsUnhandled();\n    var self = this;\n    setTimeout(function() {\n        self._notifyUnhandledRejection();\n    }, 1);\n};\n\nPromise.prototype._notifyUnhandledRejectionIsHandled = function () {\n    fireRejectionEvent(\"rejectionHandled\",\n                                  unhandledRejectionHandled, undefined, this);\n};\n\nPromise.prototype._setReturnedNonUndefined = function() {\n    this._bitField = this._bitField | 268435456;\n};\n\nPromise.prototype._returnedNonUndefined = function() {\n    return (this._bitField & 268435456) !== 0;\n};\n\nPromise.prototype._notifyUnhandledRejection = function () {\n    if (this._isRejectionUnhandled()) {\n        var reason = this._settledValue();\n        this._setUnhandledRejectionIsNotified();\n        fireRejectionEvent(\"unhandledRejection\",\n                                      possiblyUnhandledRejection, reason, this);\n    }\n};\n\nPromise.prototype._setUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField | 262144;\n};\n\nPromise.prototype._unsetUnhandledRejectionIsNotified = function () {\n    this._bitField = this._bitField & (~262144);\n};\n\nPromise.prototype._isUnhandledRejectionNotified = function () {\n    return (this._bitField & 262144) > 0;\n};\n\nPromise.prototype._setRejectionIsUnhandled = function () {\n    this._bitField = this._bitField | 1048576;\n};\n\nPromise.prototype._unsetRejectionIsUnhandled = function () {\n    this._bitField = this._bitField & (~1048576);\n    if (this._isUnhandledRejectionNotified()) {\n        this._unsetUnhandledRejectionIsNotified();\n        this._notifyUnhandledRejectionIsHandled();\n    }\n};\n\nPromise.prototype._isRejectionUnhandled = function () {\n    return (this._bitField & 1048576) > 0;\n};\n\nPromise.prototype._warn = function(message, shouldUseOwnTrace, promise) {\n    return warn(message, shouldUseOwnTrace, promise || this);\n};\n\nPromise.onPossiblyUnhandledRejection = function (fn) {\n    var domain = getDomain();\n    possiblyUnhandledRejection =\n        typeof fn === \"function\" ? (domain === null ?\n                                            fn : util.domainBind(domain, fn))\n                                 : undefined;\n};\n\nPromise.onUnhandledRejectionHandled = function (fn) {\n    var domain = getDomain();\n    unhandledRejectionHandled =\n        typeof fn === \"function\" ? (domain === null ?\n                                            fn : util.domainBind(domain, fn))\n                                 : undefined;\n};\n\nvar disableLongStackTraces = function() {};\nPromise.longStackTraces = function () {\n    if (async.haveItemsQueued() && !config.longStackTraces) {\n        throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (!config.longStackTraces && longStackTracesIsSupported()) {\n        var Promise_captureStackTrace = Promise.prototype._captureStackTrace;\n        var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;\n        var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;\n        config.longStackTraces = true;\n        disableLongStackTraces = function() {\n            if (async.haveItemsQueued() && !config.longStackTraces) {\n                throw new Error(\"cannot enable long stack traces after promises have been created\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n            }\n            Promise.prototype._captureStackTrace = Promise_captureStackTrace;\n            Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;\n            Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;\n            Context.deactivateLongStackTraces();\n            async.enableTrampoline();\n            config.longStackTraces = false;\n        };\n        Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;\n        Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;\n        Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;\n        Context.activateLongStackTraces();\n        async.disableTrampolineIfNecessary();\n    }\n};\n\nPromise.hasLongStackTraces = function () {\n    return config.longStackTraces && longStackTracesIsSupported();\n};\n\nvar fireDomEvent = (function() {\n    try {\n        if (typeof CustomEvent === \"function\") {\n            var event = new CustomEvent(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var eventData = {\n                    detail: event,\n                    cancelable: true\n                };\n                es5.defineProperty(\n                    eventData, \"promise\", {value: event.promise});\n                es5.defineProperty(eventData, \"reason\", {value: event.reason});\n                var domEvent = new CustomEvent(name.toLowerCase(), eventData);\n                return !util.global.dispatchEvent(domEvent);\n            };\n        } else if (typeof Event === \"function\") {\n            var event = new Event(\"CustomEvent\");\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var domEvent = new Event(name.toLowerCase(), {\n                    cancelable: true\n                });\n                domEvent.detail = event;\n                es5.defineProperty(domEvent, \"promise\", {value: event.promise});\n                es5.defineProperty(domEvent, \"reason\", {value: event.reason});\n                return !util.global.dispatchEvent(domEvent);\n            };\n        } else {\n            var event = document.createEvent(\"CustomEvent\");\n            event.initCustomEvent(\"testingtheevent\", false, true, {});\n            util.global.dispatchEvent(event);\n            return function(name, event) {\n                var domEvent = document.createEvent(\"CustomEvent\");\n                domEvent.initCustomEvent(name.toLowerCase(), false, true,\n                    event);\n                return !util.global.dispatchEvent(domEvent);\n            };\n        }\n    } catch (e) {}\n    return function() {\n        return false;\n    };\n})();\n\nvar fireGlobalEvent = (function() {\n    if (util.isNode) {\n        return function() {\n            return process.emit.apply(process, arguments);\n        };\n    } else {\n        if (!util.global) {\n            return function() {\n                return false;\n            };\n        }\n        return function(name) {\n            var methodName = \"on\" + name.toLowerCase();\n            var method = util.global[methodName];\n            if (!method) return false;\n            method.apply(util.global, [].slice.call(arguments, 1));\n            return true;\n        };\n    }\n})();\n\nfunction generatePromiseLifecycleEventObject(name, promise) {\n    return {promise: promise};\n}\n\nvar eventToObjectGenerator = {\n    promiseCreated: generatePromiseLifecycleEventObject,\n    promiseFulfilled: generatePromiseLifecycleEventObject,\n    promiseRejected: generatePromiseLifecycleEventObject,\n    promiseResolved: generatePromiseLifecycleEventObject,\n    promiseCancelled: generatePromiseLifecycleEventObject,\n    promiseChained: function(name, promise, child) {\n        return {promise: promise, child: child};\n    },\n    warning: function(name, warning) {\n        return {warning: warning};\n    },\n    unhandledRejection: function (name, reason, promise) {\n        return {reason: reason, promise: promise};\n    },\n    rejectionHandled: generatePromiseLifecycleEventObject\n};\n\nvar activeFireEvent = function (name) {\n    var globalEventFired = false;\n    try {\n        globalEventFired = fireGlobalEvent.apply(null, arguments);\n    } catch (e) {\n        async.throwLater(e);\n        globalEventFired = true;\n    }\n\n    var domEventFired = false;\n    try {\n        domEventFired = fireDomEvent(name,\n                    eventToObjectGenerator[name].apply(null, arguments));\n    } catch (e) {\n        async.throwLater(e);\n        domEventFired = true;\n    }\n\n    return domEventFired || globalEventFired;\n};\n\nPromise.config = function(opts) {\n    opts = Object(opts);\n    if (\"longStackTraces\" in opts) {\n        if (opts.longStackTraces) {\n            Promise.longStackTraces();\n        } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {\n            disableLongStackTraces();\n        }\n    }\n    if (\"warnings\" in opts) {\n        var warningsOption = opts.warnings;\n        config.warnings = !!warningsOption;\n        wForgottenReturn = config.warnings;\n\n        if (util.isObject(warningsOption)) {\n            if (\"wForgottenReturn\" in warningsOption) {\n                wForgottenReturn = !!warningsOption.wForgottenReturn;\n            }\n        }\n    }\n    if (\"cancellation\" in opts && opts.cancellation && !config.cancellation) {\n        if (async.haveItemsQueued()) {\n            throw new Error(\n                \"cannot enable cancellation after promises are in use\");\n        }\n        Promise.prototype._clearCancellationData =\n            cancellationClearCancellationData;\n        Promise.prototype._propagateFrom = cancellationPropagateFrom;\n        Promise.prototype._onCancel = cancellationOnCancel;\n        Promise.prototype._setOnCancel = cancellationSetOnCancel;\n        Promise.prototype._attachCancellationCallback =\n            cancellationAttachCancellationCallback;\n        Promise.prototype._execute = cancellationExecute;\n        propagateFromFunction = cancellationPropagateFrom;\n        config.cancellation = true;\n    }\n    if (\"monitoring\" in opts) {\n        if (opts.monitoring && !config.monitoring) {\n            config.monitoring = true;\n            Promise.prototype._fireEvent = activeFireEvent;\n        } else if (!opts.monitoring && config.monitoring) {\n            config.monitoring = false;\n            Promise.prototype._fireEvent = defaultFireEvent;\n        }\n    }\n    return Promise;\n};\n\nfunction defaultFireEvent() { return false; }\n\nPromise.prototype._fireEvent = defaultFireEvent;\nPromise.prototype._execute = function(executor, resolve, reject) {\n    try {\n        executor(resolve, reject);\n    } catch (e) {\n        return e;\n    }\n};\nPromise.prototype._onCancel = function () {};\nPromise.prototype._setOnCancel = function (handler) { ; };\nPromise.prototype._attachCancellationCallback = function(onCancel) {\n    ;\n};\nPromise.prototype._captureStackTrace = function () {};\nPromise.prototype._attachExtraTrace = function () {};\nPromise.prototype._dereferenceTrace = function () {};\nPromise.prototype._clearCancellationData = function() {};\nPromise.prototype._propagateFrom = function (parent, flags) {\n    ;\n    ;\n};\n\nfunction cancellationExecute(executor, resolve, reject) {\n    var promise = this;\n    try {\n        executor(resolve, reject, function(onCancel) {\n            if (typeof onCancel !== \"function\") {\n                throw new TypeError(\"onCancel must be a function, got: \" +\n                                    util.toString(onCancel));\n            }\n            promise._attachCancellationCallback(onCancel);\n        });\n    } catch (e) {\n        return e;\n    }\n}\n\nfunction cancellationAttachCancellationCallback(onCancel) {\n    if (!this._isCancellable()) return this;\n\n    var previousOnCancel = this._onCancel();\n    if (previousOnCancel !== undefined) {\n        if (util.isArray(previousOnCancel)) {\n            previousOnCancel.push(onCancel);\n        } else {\n            this._setOnCancel([previousOnCancel, onCancel]);\n        }\n    } else {\n        this._setOnCancel(onCancel);\n    }\n}\n\nfunction cancellationOnCancel() {\n    return this._onCancelField;\n}\n\nfunction cancellationSetOnCancel(onCancel) {\n    this._onCancelField = onCancel;\n}\n\nfunction cancellationClearCancellationData() {\n    this._cancellationParent = undefined;\n    this._onCancelField = undefined;\n}\n\nfunction cancellationPropagateFrom(parent, flags) {\n    if ((flags & 1) !== 0) {\n        this._cancellationParent = parent;\n        var branchesRemainingToCancel = parent._branchesRemainingToCancel;\n        if (branchesRemainingToCancel === undefined) {\n            branchesRemainingToCancel = 0;\n        }\n        parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;\n    }\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\n\nfunction bindingPropagateFrom(parent, flags) {\n    if ((flags & 2) !== 0 && parent._isBound()) {\n        this._setBoundTo(parent._boundTo);\n    }\n}\nvar propagateFromFunction = bindingPropagateFrom;\n\nfunction boundValueFunction() {\n    var ret = this._boundTo;\n    if (ret !== undefined) {\n        if (ret instanceof Promise) {\n            if (ret.isFulfilled()) {\n                return ret.value();\n            } else {\n                return undefined;\n            }\n        }\n    }\n    return ret;\n}\n\nfunction longStackTracesCaptureStackTrace() {\n    this._trace = new CapturedTrace(this._peekContext());\n}\n\nfunction longStackTracesAttachExtraTrace(error, ignoreSelf) {\n    if (canAttachTrace(error)) {\n        var trace = this._trace;\n        if (trace !== undefined) {\n            if (ignoreSelf) trace = trace._parent;\n        }\n        if (trace !== undefined) {\n            trace.attachExtraTrace(error);\n        } else if (!error.__stackCleaned__) {\n            var parsed = parseStackAndMessage(error);\n            util.notEnumerableProp(error, \"stack\",\n                parsed.message + \"\\n\" + parsed.stack.join(\"\\n\"));\n            util.notEnumerableProp(error, \"__stackCleaned__\", true);\n        }\n    }\n}\n\nfunction longStackTracesDereferenceTrace() {\n    this._trace = undefined;\n}\n\nfunction checkForgottenReturns(returnValue, promiseCreated, name, promise,\n                               parent) {\n    if (returnValue === undefined && promiseCreated !== null &&\n        wForgottenReturn) {\n        if (parent !== undefined && parent._returnedNonUndefined()) return;\n        if ((promise._bitField & 65535) === 0) return;\n\n        if (name) name = name + \" \";\n        var handlerLine = \"\";\n        var creatorLine = \"\";\n        if (promiseCreated._trace) {\n            var traceLines = promiseCreated._trace.stack.split(\"\\n\");\n            var stack = cleanStack(traceLines);\n            for (var i = stack.length - 1; i >= 0; --i) {\n                var line = stack[i];\n                if (!nodeFramePattern.test(line)) {\n                    var lineMatches = line.match(parseLinePattern);\n                    if (lineMatches) {\n                        handlerLine  = \"at \" + lineMatches[1] +\n                            \":\" + lineMatches[2] + \":\" + lineMatches[3] + \" \";\n                    }\n                    break;\n                }\n            }\n\n            if (stack.length > 0) {\n                var firstUserLine = stack[0];\n                for (var i = 0; i < traceLines.length; ++i) {\n\n                    if (traceLines[i] === firstUserLine) {\n                        if (i > 0) {\n                            creatorLine = \"\\n\" + traceLines[i - 1];\n                        }\n                        break;\n                    }\n                }\n\n            }\n        }\n        var msg = \"a promise was created in a \" + name +\n            \"handler \" + handlerLine + \"but was not returned from it, \" +\n            \"see http://goo.gl/rRqMUw\" +\n            creatorLine;\n        promise._warn(msg, true, promiseCreated);\n    }\n}\n\nfunction deprecated(name, replacement) {\n    var message = name +\n        \" is deprecated and will be removed in a future version.\";\n    if (replacement) message += \" Use \" + replacement + \" instead.\";\n    return warn(message);\n}\n\nfunction warn(message, shouldUseOwnTrace, promise) {\n    if (!config.warnings) return;\n    var warning = new Warning(message);\n    var ctx;\n    if (shouldUseOwnTrace) {\n        promise._attachExtraTrace(warning);\n    } else if (config.longStackTraces && (ctx = Promise._peekContext())) {\n        ctx.attachExtraTrace(warning);\n    } else {\n        var parsed = parseStackAndMessage(warning);\n        warning.stack = parsed.message + \"\\n\" + parsed.stack.join(\"\\n\");\n    }\n\n    if (!activeFireEvent(\"warning\", warning)) {\n        formatAndLogError(warning, \"\", true);\n    }\n}\n\nfunction reconstructStack(message, stacks) {\n    for (var i = 0; i < stacks.length - 1; ++i) {\n        stacks[i].push(\"From previous event:\");\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    if (i < stacks.length) {\n        stacks[i] = stacks[i].join(\"\\n\");\n    }\n    return message + \"\\n\" + stacks.join(\"\\n\");\n}\n\nfunction removeDuplicateOrEmptyJumps(stacks) {\n    for (var i = 0; i < stacks.length; ++i) {\n        if (stacks[i].length === 0 ||\n            ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {\n            stacks.splice(i, 1);\n            i--;\n        }\n    }\n}\n\nfunction removeCommonRoots(stacks) {\n    var current = stacks[0];\n    for (var i = 1; i < stacks.length; ++i) {\n        var prev = stacks[i];\n        var currentLastIndex = current.length - 1;\n        var currentLastLine = current[currentLastIndex];\n        var commonRootMeetPoint = -1;\n\n        for (var j = prev.length - 1; j >= 0; --j) {\n            if (prev[j] === currentLastLine) {\n                commonRootMeetPoint = j;\n                break;\n            }\n        }\n\n        for (var j = commonRootMeetPoint; j >= 0; --j) {\n            var line = prev[j];\n            if (current[currentLastIndex] === line) {\n                current.pop();\n                currentLastIndex--;\n            } else {\n                break;\n            }\n        }\n        current = prev;\n    }\n}\n\nfunction cleanStack(stack) {\n    var ret = [];\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        var isTraceLine = \"    (No stack trace)\" === line ||\n            stackFramePattern.test(line);\n        var isInternalFrame = isTraceLine && shouldIgnore(line);\n        if (isTraceLine && !isInternalFrame) {\n            if (indentStackFrames && line.charAt(0) !== \" \") {\n                line = \"    \" + line;\n            }\n            ret.push(line);\n        }\n    }\n    return ret;\n}\n\nfunction stackFramesAsArray(error) {\n    var stack = error.stack.replace(/\\s+$/g, \"\").split(\"\\n\");\n    for (var i = 0; i < stack.length; ++i) {\n        var line = stack[i];\n        if (\"    (No stack trace)\" === line || stackFramePattern.test(line)) {\n            break;\n        }\n    }\n    if (i > 0 && error.name != \"SyntaxError\") {\n        stack = stack.slice(i);\n    }\n    return stack;\n}\n\nfunction parseStackAndMessage(error) {\n    var stack = error.stack;\n    var message = error.toString();\n    stack = typeof stack === \"string\" && stack.length > 0\n                ? stackFramesAsArray(error) : [\"    (No stack trace)\"];\n    return {\n        message: message,\n        stack: error.name == \"SyntaxError\" ? stack : cleanStack(stack)\n    };\n}\n\nfunction formatAndLogError(error, title, isSoft) {\n    if (typeof console !== \"undefined\") {\n        var message;\n        if (util.isObject(error)) {\n            var stack = error.stack;\n            message = title + formatStack(stack, error);\n        } else {\n            message = title + String(error);\n        }\n        if (typeof printWarning === \"function\") {\n            printWarning(message, isSoft);\n        } else if (typeof console.log === \"function\" ||\n            typeof console.log === \"object\") {\n            console.log(message);\n        }\n    }\n}\n\nfunction fireRejectionEvent(name, localHandler, reason, promise) {\n    var localEventFired = false;\n    try {\n        if (typeof localHandler === \"function\") {\n            localEventFired = true;\n            if (name === \"rejectionHandled\") {\n                localHandler(promise);\n            } else {\n                localHandler(reason, promise);\n            }\n        }\n    } catch (e) {\n        async.throwLater(e);\n    }\n\n    if (name === \"unhandledRejection\") {\n        if (!activeFireEvent(name, reason, promise) && !localEventFired) {\n            formatAndLogError(reason, \"Unhandled rejection \");\n        }\n    } else {\n        activeFireEvent(name, promise);\n    }\n}\n\nfunction formatNonError(obj) {\n    var str;\n    if (typeof obj === \"function\") {\n        str = \"[function \" +\n            (obj.name || \"anonymous\") +\n            \"]\";\n    } else {\n        str = obj && typeof obj.toString === \"function\"\n            ? obj.toString() : util.toString(obj);\n        var ruselessToString = /\\[object [a-zA-Z0-9$_]+\\]/;\n        if (ruselessToString.test(str)) {\n            try {\n                var newStr = JSON.stringify(obj);\n                str = newStr;\n            }\n            catch(e) {\n\n            }\n        }\n        if (str.length === 0) {\n            str = \"(empty array)\";\n        }\n    }\n    return (\"(<\" + snip(str) + \">, no stack trace)\");\n}\n\nfunction snip(str) {\n    var maxChars = 41;\n    if (str.length < maxChars) {\n        return str;\n    }\n    return str.substr(0, maxChars - 3) + \"...\";\n}\n\nfunction longStackTracesIsSupported() {\n    return typeof captureStackTrace === \"function\";\n}\n\nvar shouldIgnore = function() { return false; };\nvar parseLineInfoRegex = /[\\/<\\(]([^:\\/]+):(\\d+):(?:\\d+)\\)?\\s*$/;\nfunction parseLineInfo(line) {\n    var matches = line.match(parseLineInfoRegex);\n    if (matches) {\n        return {\n            fileName: matches[1],\n            line: parseInt(matches[2], 10)\n        };\n    }\n}\n\nfunction setBounds(firstLineError, lastLineError) {\n    if (!longStackTracesIsSupported()) return;\n    var firstStackLines = (firstLineError.stack || \"\").split(\"\\n\");\n    var lastStackLines = (lastLineError.stack || \"\").split(\"\\n\");\n    var firstIndex = -1;\n    var lastIndex = -1;\n    var firstFileName;\n    var lastFileName;\n    for (var i = 0; i < firstStackLines.length; ++i) {\n        var result = parseLineInfo(firstStackLines[i]);\n        if (result) {\n            firstFileName = result.fileName;\n            firstIndex = result.line;\n            break;\n        }\n    }\n    for (var i = 0; i < lastStackLines.length; ++i) {\n        var result = parseLineInfo(lastStackLines[i]);\n        if (result) {\n            lastFileName = result.fileName;\n            lastIndex = result.line;\n            break;\n        }\n    }\n    if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||\n        firstFileName !== lastFileName || firstIndex >= lastIndex) {\n        return;\n    }\n\n    shouldIgnore = function(line) {\n        if (bluebirdFramePattern.test(line)) return true;\n        var info = parseLineInfo(line);\n        if (info) {\n            if (info.fileName === firstFileName &&\n                (firstIndex <= info.line && info.line <= lastIndex)) {\n                return true;\n            }\n        }\n        return false;\n    };\n}\n\nfunction CapturedTrace(parent) {\n    this._parent = parent;\n    this._promisesCreated = 0;\n    var length = this._length = 1 + (parent === undefined ? 0 : parent._length);\n    captureStackTrace(this, CapturedTrace);\n    if (length > 32) this.uncycle();\n}\nutil.inherits(CapturedTrace, Error);\nContext.CapturedTrace = CapturedTrace;\n\nCapturedTrace.prototype.uncycle = function() {\n    var length = this._length;\n    if (length < 2) return;\n    var nodes = [];\n    var stackToIndex = {};\n\n    for (var i = 0, node = this; node !== undefined; ++i) {\n        nodes.push(node);\n        node = node._parent;\n    }\n    length = this._length = i;\n    for (var i = length - 1; i >= 0; --i) {\n        var stack = nodes[i].stack;\n        if (stackToIndex[stack] === undefined) {\n            stackToIndex[stack] = i;\n        }\n    }\n    for (var i = 0; i < length; ++i) {\n        var currentStack = nodes[i].stack;\n        var index = stackToIndex[currentStack];\n        if (index !== undefined && index !== i) {\n            if (index > 0) {\n                nodes[index - 1]._parent = undefined;\n                nodes[index - 1]._length = 1;\n            }\n            nodes[i]._parent = undefined;\n            nodes[i]._length = 1;\n            var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;\n\n            if (index < length - 1) {\n                cycleEdgeNode._parent = nodes[index + 1];\n                cycleEdgeNode._parent.uncycle();\n                cycleEdgeNode._length =\n                    cycleEdgeNode._parent._length + 1;\n            } else {\n                cycleEdgeNode._parent = undefined;\n                cycleEdgeNode._length = 1;\n            }\n            var currentChildLength = cycleEdgeNode._length + 1;\n            for (var j = i - 2; j >= 0; --j) {\n                nodes[j]._length = currentChildLength;\n                currentChildLength++;\n            }\n            return;\n        }\n    }\n};\n\nCapturedTrace.prototype.attachExtraTrace = function(error) {\n    if (error.__stackCleaned__) return;\n    this.uncycle();\n    var parsed = parseStackAndMessage(error);\n    var message = parsed.message;\n    var stacks = [parsed.stack];\n\n    var trace = this;\n    while (trace !== undefined) {\n        stacks.push(cleanStack(trace.stack.split(\"\\n\")));\n        trace = trace._parent;\n    }\n    removeCommonRoots(stacks);\n    removeDuplicateOrEmptyJumps(stacks);\n    util.notEnumerableProp(error, \"stack\", reconstructStack(message, stacks));\n    util.notEnumerableProp(error, \"__stackCleaned__\", true);\n};\n\nvar captureStackTrace = (function stackDetection() {\n    var v8stackFramePattern = /^\\s*at\\s*/;\n    var v8stackFormatter = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if (error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    if (typeof Error.stackTraceLimit === \"number\" &&\n        typeof Error.captureStackTrace === \"function\") {\n        Error.stackTraceLimit += 6;\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        var captureStackTrace = Error.captureStackTrace;\n\n        shouldIgnore = function(line) {\n            return bluebirdFramePattern.test(line);\n        };\n        return function(receiver, ignoreUntil) {\n            Error.stackTraceLimit += 6;\n            captureStackTrace(receiver, ignoreUntil);\n            Error.stackTraceLimit -= 6;\n        };\n    }\n    var err = new Error();\n\n    if (typeof err.stack === \"string\" &&\n        err.stack.split(\"\\n\")[0].indexOf(\"stackDetection@\") >= 0) {\n        stackFramePattern = /@/;\n        formatStack = v8stackFormatter;\n        indentStackFrames = true;\n        return function captureStackTrace(o) {\n            o.stack = new Error().stack;\n        };\n    }\n\n    var hasStackAfterThrow;\n    try { throw new Error(); }\n    catch(e) {\n        hasStackAfterThrow = (\"stack\" in e);\n    }\n    if (!(\"stack\" in err) && hasStackAfterThrow &&\n        typeof Error.stackTraceLimit === \"number\") {\n        stackFramePattern = v8stackFramePattern;\n        formatStack = v8stackFormatter;\n        return function captureStackTrace(o) {\n            Error.stackTraceLimit += 6;\n            try { throw new Error(); }\n            catch(e) { o.stack = e.stack; }\n            Error.stackTraceLimit -= 6;\n        };\n    }\n\n    formatStack = function(stack, error) {\n        if (typeof stack === \"string\") return stack;\n\n        if ((typeof error === \"object\" ||\n            typeof error === \"function\") &&\n            error.name !== undefined &&\n            error.message !== undefined) {\n            return error.toString();\n        }\n        return formatNonError(error);\n    };\n\n    return null;\n\n})([]);\n\nif (typeof console !== \"undefined\" && typeof console.warn !== \"undefined\") {\n    printWarning = function (message) {\n        console.warn(message);\n    };\n    if (util.isNode && process.stderr.isTTY) {\n        printWarning = function(message, isSoft) {\n            var color = isSoft ? \"\\u001b[33m\" : \"\\u001b[31m\";\n            console.warn(color + message + \"\\u001b[0m\\n\");\n        };\n    } else if (!util.isNode && typeof (new Error().stack) === \"string\") {\n        printWarning = function(message, isSoft) {\n            console.warn(\"%c\" + message,\n                        isSoft ? \"color: darkorange\" : \"color: red\");\n        };\n    }\n}\n\nvar config = {\n    warnings: warnings,\n    longStackTraces: false,\n    cancellation: false,\n    monitoring: false\n};\n\nif (longStackTraces) Promise.longStackTraces();\n\nreturn {\n    longStackTraces: function() {\n        return config.longStackTraces;\n    },\n    warnings: function() {\n        return config.warnings;\n    },\n    cancellation: function() {\n        return config.cancellation;\n    },\n    monitoring: function() {\n        return config.monitoring;\n    },\n    propagateFromFunction: function() {\n        return propagateFromFunction;\n    },\n    boundValueFunction: function() {\n        return boundValueFunction;\n    },\n    checkForgottenReturns: checkForgottenReturns,\n    setBounds: setBounds,\n    warn: warn,\n    deprecated: deprecated,\n    CapturedTrace: CapturedTrace,\n    fireDomEvent: fireDomEvent,\n    fireGlobalEvent: fireGlobalEvent\n};\n};\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],10:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction returner() {\n    return this.value;\n}\nfunction thrower() {\n    throw this.reason;\n}\n\nPromise.prototype[\"return\"] =\nPromise.prototype.thenReturn = function (value) {\n    if (value instanceof Promise) value.suppressUnhandledRejections();\n    return this._then(\n        returner, undefined, undefined, {value: value}, undefined);\n};\n\nPromise.prototype[\"throw\"] =\nPromise.prototype.thenThrow = function (reason) {\n    return this._then(\n        thrower, undefined, undefined, {reason: reason}, undefined);\n};\n\nPromise.prototype.catchThrow = function (reason) {\n    if (arguments.length <= 1) {\n        return this._then(\n            undefined, thrower, undefined, {reason: reason}, undefined);\n    } else {\n        var _reason = arguments[1];\n        var handler = function() {throw _reason;};\n        return this.caught(reason, handler);\n    }\n};\n\nPromise.prototype.catchReturn = function (value) {\n    if (arguments.length <= 1) {\n        if (value instanceof Promise) value.suppressUnhandledRejections();\n        return this._then(\n            undefined, returner, undefined, {value: value}, undefined);\n    } else {\n        var _value = arguments[1];\n        if (_value instanceof Promise) _value.suppressUnhandledRejections();\n        var handler = function() {return _value;};\n        return this.caught(value, handler);\n    }\n};\n};\n\n},{}],11:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseReduce = Promise.reduce;\nvar PromiseAll = Promise.all;\n\nfunction promiseAllThis() {\n    return PromiseAll(this);\n}\n\nfunction PromiseMapSeries(promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, INTERNAL);\n}\n\nPromise.prototype.each = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, this, undefined);\n};\n\nPromise.prototype.mapSeries = function (fn) {\n    return PromiseReduce(this, fn, INTERNAL, INTERNAL);\n};\n\nPromise.each = function (promises, fn) {\n    return PromiseReduce(promises, fn, INTERNAL, 0)\n              ._then(promiseAllThis, undefined, undefined, promises, undefined);\n};\n\nPromise.mapSeries = PromiseMapSeries;\n};\n\n\n},{}],12:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar Objectfreeze = es5.freeze;\nvar util = _dereq_(\"./util\");\nvar inherits = util.inherits;\nvar notEnumerableProp = util.notEnumerableProp;\n\nfunction subError(nameProperty, defaultMessage) {\n    function SubError(message) {\n        if (!(this instanceof SubError)) return new SubError(message);\n        notEnumerableProp(this, \"message\",\n            typeof message === \"string\" ? message : defaultMessage);\n        notEnumerableProp(this, \"name\", nameProperty);\n        if (Error.captureStackTrace) {\n            Error.captureStackTrace(this, this.constructor);\n        } else {\n            Error.call(this);\n        }\n    }\n    inherits(SubError, Error);\n    return SubError;\n}\n\nvar _TypeError, _RangeError;\nvar Warning = subError(\"Warning\", \"warning\");\nvar CancellationError = subError(\"CancellationError\", \"cancellation error\");\nvar TimeoutError = subError(\"TimeoutError\", \"timeout error\");\nvar AggregateError = subError(\"AggregateError\", \"aggregate error\");\ntry {\n    _TypeError = TypeError;\n    _RangeError = RangeError;\n} catch(e) {\n    _TypeError = subError(\"TypeError\", \"type error\");\n    _RangeError = subError(\"RangeError\", \"range error\");\n}\n\nvar methods = (\"join pop push shift unshift slice filter forEach some \" +\n    \"every map indexOf lastIndexOf reduce reduceRight sort reverse\").split(\" \");\n\nfor (var i = 0; i < methods.length; ++i) {\n    if (typeof Array.prototype[methods[i]] === \"function\") {\n        AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];\n    }\n}\n\nes5.defineProperty(AggregateError.prototype, \"length\", {\n    value: 0,\n    configurable: false,\n    writable: true,\n    enumerable: true\n});\nAggregateError.prototype[\"isOperational\"] = true;\nvar level = 0;\nAggregateError.prototype.toString = function() {\n    var indent = Array(level * 4 + 1).join(\" \");\n    var ret = \"\\n\" + indent + \"AggregateError of:\" + \"\\n\";\n    level++;\n    indent = Array(level * 4 + 1).join(\" \");\n    for (var i = 0; i < this.length; ++i) {\n        var str = this[i] === this ? \"[Circular AggregateError]\" : this[i] + \"\";\n        var lines = str.split(\"\\n\");\n        for (var j = 0; j < lines.length; ++j) {\n            lines[j] = indent + lines[j];\n        }\n        str = lines.join(\"\\n\");\n        ret += str + \"\\n\";\n    }\n    level--;\n    return ret;\n};\n\nfunction OperationalError(message) {\n    if (!(this instanceof OperationalError))\n        return new OperationalError(message);\n    notEnumerableProp(this, \"name\", \"OperationalError\");\n    notEnumerableProp(this, \"message\", message);\n    this.cause = message;\n    this[\"isOperational\"] = true;\n\n    if (message instanceof Error) {\n        notEnumerableProp(this, \"message\", message.message);\n        notEnumerableProp(this, \"stack\", message.stack);\n    } else if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, this.constructor);\n    }\n\n}\ninherits(OperationalError, Error);\n\nvar errorTypes = Error[\"__BluebirdErrorTypes__\"];\nif (!errorTypes) {\n    errorTypes = Objectfreeze({\n        CancellationError: CancellationError,\n        TimeoutError: TimeoutError,\n        OperationalError: OperationalError,\n        RejectionError: OperationalError,\n        AggregateError: AggregateError\n    });\n    es5.defineProperty(Error, \"__BluebirdErrorTypes__\", {\n        value: errorTypes,\n        writable: false,\n        enumerable: false,\n        configurable: false\n    });\n}\n\nmodule.exports = {\n    Error: Error,\n    TypeError: _TypeError,\n    RangeError: _RangeError,\n    CancellationError: errorTypes.CancellationError,\n    OperationalError: errorTypes.OperationalError,\n    TimeoutError: errorTypes.TimeoutError,\n    AggregateError: errorTypes.AggregateError,\n    Warning: Warning\n};\n\n},{\"./es5\":13,\"./util\":36}],13:[function(_dereq_,module,exports){\nvar isES5 = (function(){\n    \"use strict\";\n    return this === undefined;\n})();\n\nif (isES5) {\n    module.exports = {\n        freeze: Object.freeze,\n        defineProperty: Object.defineProperty,\n        getDescriptor: Object.getOwnPropertyDescriptor,\n        keys: Object.keys,\n        names: Object.getOwnPropertyNames,\n        getPrototypeOf: Object.getPrototypeOf,\n        isArray: Array.isArray,\n        isES5: isES5,\n        propertyIsWritable: function(obj, prop) {\n            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);\n            return !!(!descriptor || descriptor.writable || descriptor.set);\n        }\n    };\n} else {\n    var has = {}.hasOwnProperty;\n    var str = {}.toString;\n    var proto = {}.constructor.prototype;\n\n    var ObjectKeys = function (o) {\n        var ret = [];\n        for (var key in o) {\n            if (has.call(o, key)) {\n                ret.push(key);\n            }\n        }\n        return ret;\n    };\n\n    var ObjectGetDescriptor = function(o, key) {\n        return {value: o[key]};\n    };\n\n    var ObjectDefineProperty = function (o, key, desc) {\n        o[key] = desc.value;\n        return o;\n    };\n\n    var ObjectFreeze = function (obj) {\n        return obj;\n    };\n\n    var ObjectGetPrototypeOf = function (obj) {\n        try {\n            return Object(obj).constructor.prototype;\n        }\n        catch (e) {\n            return proto;\n        }\n    };\n\n    var ArrayIsArray = function (obj) {\n        try {\n            return str.call(obj) === \"[object Array]\";\n        }\n        catch(e) {\n            return false;\n        }\n    };\n\n    module.exports = {\n        isArray: ArrayIsArray,\n        keys: ObjectKeys,\n        names: ObjectKeys,\n        defineProperty: ObjectDefineProperty,\n        getDescriptor: ObjectGetDescriptor,\n        freeze: ObjectFreeze,\n        getPrototypeOf: ObjectGetPrototypeOf,\n        isES5: isES5,\n        propertyIsWritable: function() {\n            return true;\n        }\n    };\n}\n\n},{}],14:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar PromiseMap = Promise.map;\n\nPromise.prototype.filter = function (fn, options) {\n    return PromiseMap(this, fn, options, INTERNAL);\n};\n\nPromise.filter = function (promises, fn, options) {\n    return PromiseMap(promises, fn, options, INTERNAL);\n};\n};\n\n},{}],15:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {\nvar util = _dereq_(\"./util\");\nvar CancellationError = Promise.CancellationError;\nvar errorObj = util.errorObj;\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\n\nfunction PassThroughHandlerContext(promise, type, handler) {\n    this.promise = promise;\n    this.type = type;\n    this.handler = handler;\n    this.called = false;\n    this.cancelPromise = null;\n}\n\nPassThroughHandlerContext.prototype.isFinallyHandler = function() {\n    return this.type === 0;\n};\n\nfunction FinallyHandlerCancelReaction(finallyHandler) {\n    this.finallyHandler = finallyHandler;\n}\n\nFinallyHandlerCancelReaction.prototype._resultCancelled = function() {\n    checkCancel(this.finallyHandler);\n};\n\nfunction checkCancel(ctx, reason) {\n    if (ctx.cancelPromise != null) {\n        if (arguments.length > 1) {\n            ctx.cancelPromise._reject(reason);\n        } else {\n            ctx.cancelPromise._cancel();\n        }\n        ctx.cancelPromise = null;\n        return true;\n    }\n    return false;\n}\n\nfunction succeed() {\n    return finallyHandler.call(this, this.promise._target()._settledValue());\n}\nfunction fail(reason) {\n    if (checkCancel(this, reason)) return;\n    errorObj.e = reason;\n    return errorObj;\n}\nfunction finallyHandler(reasonOrValue) {\n    var promise = this.promise;\n    var handler = this.handler;\n\n    if (!this.called) {\n        this.called = true;\n        var ret = this.isFinallyHandler()\n            ? handler.call(promise._boundValue())\n            : handler.call(promise._boundValue(), reasonOrValue);\n        if (ret === NEXT_FILTER) {\n            return ret;\n        } else if (ret !== undefined) {\n            promise._setReturnedNonUndefined();\n            var maybePromise = tryConvertToPromise(ret, promise);\n            if (maybePromise instanceof Promise) {\n                if (this.cancelPromise != null) {\n                    if (maybePromise._isCancelled()) {\n                        var reason =\n                            new CancellationError(\"late cancellation observer\");\n                        promise._attachExtraTrace(reason);\n                        errorObj.e = reason;\n                        return errorObj;\n                    } else if (maybePromise.isPending()) {\n                        maybePromise._attachCancellationCallback(\n                            new FinallyHandlerCancelReaction(this));\n                    }\n                }\n                return maybePromise._then(\n                    succeed, fail, undefined, this, undefined);\n            }\n        }\n    }\n\n    if (promise.isRejected()) {\n        checkCancel(this);\n        errorObj.e = reasonOrValue;\n        return errorObj;\n    } else {\n        checkCancel(this);\n        return reasonOrValue;\n    }\n}\n\nPromise.prototype._passThrough = function(handler, type, success, fail) {\n    if (typeof handler !== \"function\") return this.then();\n    return this._then(success,\n                      fail,\n                      undefined,\n                      new PassThroughHandlerContext(this, type, handler),\n                      undefined);\n};\n\nPromise.prototype.lastly =\nPromise.prototype[\"finally\"] = function (handler) {\n    return this._passThrough(handler,\n                             0,\n                             finallyHandler,\n                             finallyHandler);\n};\n\n\nPromise.prototype.tap = function (handler) {\n    return this._passThrough(handler, 1, finallyHandler);\n};\n\nPromise.prototype.tapCatch = function (handlerOrPredicate) {\n    var len = arguments.length;\n    if(len === 1) {\n        return this._passThrough(handlerOrPredicate,\n                                 1,\n                                 undefined,\n                                 finallyHandler);\n    } else {\n         var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return Promise.reject(new TypeError(\n                    \"tapCatch statement predicate: \"\n                    + \"expecting an object but got \" + util.classString(item)\n                ));\n            }\n        }\n        catchInstances.length = j;\n        var handler = arguments[i];\n        return this._passThrough(catchFilter(catchInstances, handler, this),\n                                 1,\n                                 undefined,\n                                 finallyHandler);\n    }\n\n};\n\nreturn PassThroughHandlerContext;\n};\n\n},{\"./catch_filter\":7,\"./util\":36}],16:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          apiRejection,\n                          INTERNAL,\n                          tryConvertToPromise,\n                          Proxyable,\n                          debug) {\nvar errors = _dereq_(\"./errors\");\nvar TypeError = errors.TypeError;\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nvar yieldHandlers = [];\n\nfunction promiseFromYieldHandler(value, yieldHandlers, traceParent) {\n    for (var i = 0; i < yieldHandlers.length; ++i) {\n        traceParent._pushContext();\n        var result = tryCatch(yieldHandlers[i])(value);\n        traceParent._popContext();\n        if (result === errorObj) {\n            traceParent._pushContext();\n            var ret = Promise.reject(errorObj.e);\n            traceParent._popContext();\n            return ret;\n        }\n        var maybePromise = tryConvertToPromise(result, traceParent);\n        if (maybePromise instanceof Promise) return maybePromise;\n    }\n    return null;\n}\n\nfunction PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {\n    if (debug.cancellation()) {\n        var internal = new Promise(INTERNAL);\n        var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);\n        this._promise = internal.lastly(function() {\n            return _finallyPromise;\n        });\n        internal._captureStackTrace();\n        internal._setOnCancel(this);\n    } else {\n        var promise = this._promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n    }\n    this._stack = stack;\n    this._generatorFunction = generatorFunction;\n    this._receiver = receiver;\n    this._generator = undefined;\n    this._yieldHandlers = typeof yieldHandler === \"function\"\n        ? [yieldHandler].concat(yieldHandlers)\n        : yieldHandlers;\n    this._yieldedPromise = null;\n    this._cancellationPhase = false;\n}\nutil.inherits(PromiseSpawn, Proxyable);\n\nPromiseSpawn.prototype._isResolved = function() {\n    return this._promise === null;\n};\n\nPromiseSpawn.prototype._cleanup = function() {\n    this._promise = this._generator = null;\n    if (debug.cancellation() && this._finallyPromise !== null) {\n        this._finallyPromise._fulfill();\n        this._finallyPromise = null;\n    }\n};\n\nPromiseSpawn.prototype._promiseCancelled = function() {\n    if (this._isResolved()) return;\n    var implementsReturn = typeof this._generator[\"return\"] !== \"undefined\";\n\n    var result;\n    if (!implementsReturn) {\n        var reason = new Promise.CancellationError(\n            \"generator .return() sentinel\");\n        Promise.coroutine.returnSentinel = reason;\n        this._promise._attachExtraTrace(reason);\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"throw\"]).call(this._generator,\n                                                         reason);\n        this._promise._popContext();\n    } else {\n        this._promise._pushContext();\n        result = tryCatch(this._generator[\"return\"]).call(this._generator,\n                                                          undefined);\n        this._promise._popContext();\n    }\n    this._cancellationPhase = true;\n    this._yieldedPromise = null;\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseFulfilled = function(value) {\n    this._yieldedPromise = null;\n    this._promise._pushContext();\n    var result = tryCatch(this._generator.next).call(this._generator, value);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._promiseRejected = function(reason) {\n    this._yieldedPromise = null;\n    this._promise._attachExtraTrace(reason);\n    this._promise._pushContext();\n    var result = tryCatch(this._generator[\"throw\"])\n        .call(this._generator, reason);\n    this._promise._popContext();\n    this._continue(result);\n};\n\nPromiseSpawn.prototype._resultCancelled = function() {\n    if (this._yieldedPromise instanceof Promise) {\n        var promise = this._yieldedPromise;\n        this._yieldedPromise = null;\n        promise.cancel();\n    }\n};\n\nPromiseSpawn.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseSpawn.prototype._run = function () {\n    this._generator = this._generatorFunction.call(this._receiver);\n    this._receiver =\n        this._generatorFunction = undefined;\n    this._promiseFulfilled(undefined);\n};\n\nPromiseSpawn.prototype._continue = function (result) {\n    var promise = this._promise;\n    if (result === errorObj) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._rejectCallback(result.e, false);\n        }\n    }\n\n    var value = result.value;\n    if (result.done === true) {\n        this._cleanup();\n        if (this._cancellationPhase) {\n            return promise.cancel();\n        } else {\n            return promise._resolveCallback(value);\n        }\n    } else {\n        var maybePromise = tryConvertToPromise(value, this._promise);\n        if (!(maybePromise instanceof Promise)) {\n            maybePromise =\n                promiseFromYieldHandler(maybePromise,\n                                        this._yieldHandlers,\n                                        this._promise);\n            if (maybePromise === null) {\n                this._promiseRejected(\n                    new TypeError(\n                        \"A value %s was yielded that could not be treated as a promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\\u000a\".replace(\"%s\", String(value)) +\n                        \"From coroutine:\\u000a\" +\n                        this._stack.split(\"\\n\").slice(1, -7).join(\"\\n\")\n                    )\n                );\n                return;\n            }\n        }\n        maybePromise = maybePromise._target();\n        var bitField = maybePromise._bitField;\n        ;\n        if (((bitField & 50397184) === 0)) {\n            this._yieldedPromise = maybePromise;\n            maybePromise._proxy(this, null);\n        } else if (((bitField & 33554432) !== 0)) {\n            Promise._async.invoke(\n                this._promiseFulfilled, this, maybePromise._value()\n            );\n        } else if (((bitField & 16777216) !== 0)) {\n            Promise._async.invoke(\n                this._promiseRejected, this, maybePromise._reason()\n            );\n        } else {\n            this._promiseCancelled();\n        }\n    }\n};\n\nPromise.coroutine = function (generatorFunction, options) {\n    if (typeof generatorFunction !== \"function\") {\n        throw new TypeError(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var yieldHandler = Object(options).yieldHandler;\n    var PromiseSpawn$ = PromiseSpawn;\n    var stack = new Error().stack;\n    return function () {\n        var generator = generatorFunction.apply(this, arguments);\n        var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,\n                                      stack);\n        var ret = spawn.promise();\n        spawn._generator = generator;\n        spawn._promiseFulfilled(undefined);\n        return ret;\n    };\n};\n\nPromise.coroutine.addYieldHandler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    yieldHandlers.push(fn);\n};\n\nPromise.spawn = function (generatorFunction) {\n    debug.deprecated(\"Promise.spawn()\", \"Promise.coroutine()\");\n    if (typeof generatorFunction !== \"function\") {\n        return apiRejection(\"generatorFunction must be a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var spawn = new PromiseSpawn(generatorFunction, this);\n    var ret = spawn.promise();\n    spawn._run(Promise.spawn);\n    return ret;\n};\n};\n\n},{\"./errors\":12,\"./util\":36}],17:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async,\n         getDomain) {\nvar util = _dereq_(\"./util\");\nvar canEvaluate = util.canEvaluate;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar reject;\n\nif (!true) {\nif (canEvaluate) {\n    var thenCallback = function(i) {\n        return new Function(\"value\", \"holder\", \"                             \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = value;                                           \\n\\\n            holder.checkFulfillment(this);                                   \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var promiseSetter = function(i) {\n        return new Function(\"promise\", \"holder\", \"                           \\n\\\n            'use strict';                                                    \\n\\\n            holder.pIndex = promise;                                         \\n\\\n            \".replace(/Index/g, i));\n    };\n\n    var generateHolderClass = function(total) {\n        var props = new Array(total);\n        for (var i = 0; i < props.length; ++i) {\n            props[i] = \"this.p\" + (i+1);\n        }\n        var assignment = props.join(\" = \") + \" = null;\";\n        var cancellationCode= \"var promise;\\n\" + props.map(function(prop) {\n            return \"                                                         \\n\\\n                promise = \" + prop + \";                                      \\n\\\n                if (promise instanceof Promise) {                            \\n\\\n                    promise.cancel();                                        \\n\\\n                }                                                            \\n\\\n            \";\n        }).join(\"\\n\");\n        var passedArguments = props.join(\", \");\n        var name = \"Holder$\" + total;\n\n\n        var code = \"return function(tryCatch, errorObj, Promise, async) {    \\n\\\n            'use strict';                                                    \\n\\\n            function [TheName](fn) {                                         \\n\\\n                [TheProperties]                                              \\n\\\n                this.fn = fn;                                                \\n\\\n                this.asyncNeeded = true;                                     \\n\\\n                this.now = 0;                                                \\n\\\n            }                                                                \\n\\\n                                                                             \\n\\\n            [TheName].prototype._callFunction = function(promise) {          \\n\\\n                promise._pushContext();                                      \\n\\\n                var ret = tryCatch(this.fn)([ThePassedArguments]);           \\n\\\n                promise._popContext();                                       \\n\\\n                if (ret === errorObj) {                                      \\n\\\n                    promise._rejectCallback(ret.e, false);                   \\n\\\n                } else {                                                     \\n\\\n                    promise._resolveCallback(ret);                           \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype.checkFulfillment = function(promise) {       \\n\\\n                var now = ++this.now;                                        \\n\\\n                if (now === [TheTotal]) {                                    \\n\\\n                    if (this.asyncNeeded) {                                  \\n\\\n                        async.invoke(this._callFunction, this, promise);     \\n\\\n                    } else {                                                 \\n\\\n                        this._callFunction(promise);                         \\n\\\n                    }                                                        \\n\\\n                                                                             \\n\\\n                }                                                            \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            [TheName].prototype._resultCancelled = function() {              \\n\\\n                [CancellationCode]                                           \\n\\\n            };                                                               \\n\\\n                                                                             \\n\\\n            return [TheName];                                                \\n\\\n        }(tryCatch, errorObj, Promise, async);                               \\n\\\n        \";\n\n        code = code.replace(/\\[TheName\\]/g, name)\n            .replace(/\\[TheTotal\\]/g, total)\n            .replace(/\\[ThePassedArguments\\]/g, passedArguments)\n            .replace(/\\[TheProperties\\]/g, assignment)\n            .replace(/\\[CancellationCode\\]/g, cancellationCode);\n\n        return new Function(\"tryCatch\", \"errorObj\", \"Promise\", \"async\", code)\n                           (tryCatch, errorObj, Promise, async);\n    };\n\n    var holderClasses = [];\n    var thenCallbacks = [];\n    var promiseSetters = [];\n\n    for (var i = 0; i < 8; ++i) {\n        holderClasses.push(generateHolderClass(i + 1));\n        thenCallbacks.push(thenCallback(i + 1));\n        promiseSetters.push(promiseSetter(i + 1));\n    }\n\n    reject = function (reason) {\n        this._reject(reason);\n    };\n}}\n\nPromise.join = function () {\n    var last = arguments.length - 1;\n    var fn;\n    if (last > 0 && typeof arguments[last] === \"function\") {\n        fn = arguments[last];\n        if (!true) {\n            if (last <= 8 && canEvaluate) {\n                var ret = new Promise(INTERNAL);\n                ret._captureStackTrace();\n                var HolderClass = holderClasses[last - 1];\n                var holder = new HolderClass(fn);\n                var callbacks = thenCallbacks;\n\n                for (var i = 0; i < last; ++i) {\n                    var maybePromise = tryConvertToPromise(arguments[i], ret);\n                    if (maybePromise instanceof Promise) {\n                        maybePromise = maybePromise._target();\n                        var bitField = maybePromise._bitField;\n                        ;\n                        if (((bitField & 50397184) === 0)) {\n                            maybePromise._then(callbacks[i], reject,\n                                               undefined, ret, holder);\n                            promiseSetters[i](maybePromise, holder);\n                            holder.asyncNeeded = false;\n                        } else if (((bitField & 33554432) !== 0)) {\n                            callbacks[i].call(ret,\n                                              maybePromise._value(), holder);\n                        } else if (((bitField & 16777216) !== 0)) {\n                            ret._reject(maybePromise._reason());\n                        } else {\n                            ret._cancel();\n                        }\n                    } else {\n                        callbacks[i].call(ret, maybePromise, holder);\n                    }\n                }\n\n                if (!ret._isFateSealed()) {\n                    if (holder.asyncNeeded) {\n                        var domain = getDomain();\n                        if (domain !== null) {\n                            holder.fn = util.domainBind(domain, holder.fn);\n                        }\n                    }\n                    ret._setAsyncGuaranteed();\n                    ret._setOnCancel(holder);\n                }\n                return ret;\n            }\n        }\n    }\n    var args = [].slice.call(arguments);;\n    if (fn) args.pop();\n    var ret = new PromiseArray(args).promise();\n    return fn !== undefined ? ret.spread(fn) : ret;\n};\n\n};\n\n},{\"./util\":36}],18:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar getDomain = Promise._getDomain;\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\nvar async = Promise._async;\n\nfunction MappingPromiseArray(promises, fn, limit, _filter) {\n    this.constructor$(promises);\n    this._promise._captureStackTrace();\n    var domain = getDomain();\n    this._callback = domain === null ? fn : util.domainBind(domain, fn);\n    this._preservedValues = _filter === INTERNAL\n        ? new Array(this.length())\n        : null;\n    this._limit = limit;\n    this._inFlight = 0;\n    this._queue = [];\n    async.invoke(this._asyncInit, this, undefined);\n}\nutil.inherits(MappingPromiseArray, PromiseArray);\n\nMappingPromiseArray.prototype._asyncInit = function() {\n    this._init$(undefined, -2);\n};\n\nMappingPromiseArray.prototype._init = function () {};\n\nMappingPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var values = this._values;\n    var length = this.length();\n    var preservedValues = this._preservedValues;\n    var limit = this._limit;\n\n    if (index < 0) {\n        index = (index * -1) - 1;\n        values[index] = value;\n        if (limit >= 1) {\n            this._inFlight--;\n            this._drainQueue();\n            if (this._isResolved()) return true;\n        }\n    } else {\n        if (limit >= 1 && this._inFlight >= limit) {\n            values[index] = value;\n            this._queue.push(index);\n            return false;\n        }\n        if (preservedValues !== null) preservedValues[index] = value;\n\n        var promise = this._promise;\n        var callback = this._callback;\n        var receiver = promise._boundValue();\n        promise._pushContext();\n        var ret = tryCatch(callback).call(receiver, value, index, length);\n        var promiseCreated = promise._popContext();\n        debug.checkForgottenReturns(\n            ret,\n            promiseCreated,\n            preservedValues !== null ? \"Promise.filter\" : \"Promise.map\",\n            promise\n        );\n        if (ret === errorObj) {\n            this._reject(ret.e);\n            return true;\n        }\n\n        var maybePromise = tryConvertToPromise(ret, this._promise);\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            var bitField = maybePromise._bitField;\n            ;\n            if (((bitField & 50397184) === 0)) {\n                if (limit >= 1) this._inFlight++;\n                values[index] = maybePromise;\n                maybePromise._proxy(this, (index + 1) * -1);\n                return false;\n            } else if (((bitField & 33554432) !== 0)) {\n                ret = maybePromise._value();\n            } else if (((bitField & 16777216) !== 0)) {\n                this._reject(maybePromise._reason());\n                return true;\n            } else {\n                this._cancel();\n                return true;\n            }\n        }\n        values[index] = ret;\n    }\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= length) {\n        if (preservedValues !== null) {\n            this._filter(values, preservedValues);\n        } else {\n            this._resolve(values);\n        }\n        return true;\n    }\n    return false;\n};\n\nMappingPromiseArray.prototype._drainQueue = function () {\n    var queue = this._queue;\n    var limit = this._limit;\n    var values = this._values;\n    while (queue.length > 0 && this._inFlight < limit) {\n        if (this._isResolved()) return;\n        var index = queue.pop();\n        this._promiseFulfilled(values[index], index);\n    }\n};\n\nMappingPromiseArray.prototype._filter = function (booleans, values) {\n    var len = values.length;\n    var ret = new Array(len);\n    var j = 0;\n    for (var i = 0; i < len; ++i) {\n        if (booleans[i]) ret[j++] = values[i];\n    }\n    ret.length = j;\n    this._resolve(ret);\n};\n\nMappingPromiseArray.prototype.preservedValues = function () {\n    return this._preservedValues;\n};\n\nfunction map(promises, fn, options, _filter) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n\n    var limit = 0;\n    if (options !== undefined) {\n        if (typeof options === \"object\" && options !== null) {\n            if (typeof options.concurrency !== \"number\") {\n                return Promise.reject(\n                    new TypeError(\"'concurrency' must be a number but it is \" +\n                                    util.classString(options.concurrency)));\n            }\n            limit = options.concurrency;\n        } else {\n            return Promise.reject(new TypeError(\n                            \"options argument must be an object but it is \" +\n                             util.classString(options)));\n        }\n    }\n    limit = typeof limit === \"number\" &&\n        isFinite(limit) && limit >= 1 ? limit : 0;\n    return new MappingPromiseArray(promises, fn, limit, _filter).promise();\n}\n\nPromise.prototype.map = function (fn, options) {\n    return map(this, fn, options, null);\n};\n\nPromise.map = function (promises, fn, options, _filter) {\n    return map(promises, fn, options, _filter);\n};\n\n\n};\n\n},{\"./util\":36}],19:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nPromise.method = function (fn) {\n    if (typeof fn !== \"function\") {\n        throw new Promise.TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return function () {\n        var ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._pushContext();\n        var value = tryCatch(fn).apply(this, arguments);\n        var promiseCreated = ret._popContext();\n        debug.checkForgottenReturns(\n            value, promiseCreated, \"Promise.method\", ret);\n        ret._resolveFromSyncValue(value);\n        return ret;\n    };\n};\n\nPromise.attempt = Promise[\"try\"] = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._pushContext();\n    var value;\n    if (arguments.length > 1) {\n        debug.deprecated(\"calling Promise.try with more than 1 argument\");\n        var arg = arguments[1];\n        var ctx = arguments[2];\n        value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)\n                                  : tryCatch(fn).call(ctx, arg);\n    } else {\n        value = tryCatch(fn)();\n    }\n    var promiseCreated = ret._popContext();\n    debug.checkForgottenReturns(\n        value, promiseCreated, \"Promise.try\", ret);\n    ret._resolveFromSyncValue(value);\n    return ret;\n};\n\nPromise.prototype._resolveFromSyncValue = function (value) {\n    if (value === util.errorObj) {\n        this._rejectCallback(value.e, false);\n    } else {\n        this._resolveCallback(value, true);\n    }\n};\n};\n\n},{\"./util\":36}],20:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar errors = _dereq_(\"./errors\");\nvar OperationalError = errors.OperationalError;\nvar es5 = _dereq_(\"./es5\");\n\nfunction isUntypedError(obj) {\n    return obj instanceof Error &&\n        es5.getPrototypeOf(obj) === Error.prototype;\n}\n\nvar rErrorKey = /^(?:name|message|stack|cause)$/;\nfunction wrapAsOperationalError(obj) {\n    var ret;\n    if (isUntypedError(obj)) {\n        ret = new OperationalError(obj);\n        ret.name = obj.name;\n        ret.message = obj.message;\n        ret.stack = obj.stack;\n        var keys = es5.keys(obj);\n        for (var i = 0; i < keys.length; ++i) {\n            var key = keys[i];\n            if (!rErrorKey.test(key)) {\n                ret[key] = obj[key];\n            }\n        }\n        return ret;\n    }\n    util.markAsOriginatingFromRejection(obj);\n    return obj;\n}\n\nfunction nodebackForPromise(promise, multiArgs) {\n    return function(err, value) {\n        if (promise === null) return;\n        if (err) {\n            var wrapped = wrapAsOperationalError(maybeWrapAsError(err));\n            promise._attachExtraTrace(wrapped);\n            promise._reject(wrapped);\n        } else if (!multiArgs) {\n            promise._fulfill(value);\n        } else {\n            var args = [].slice.call(arguments, 1);;\n            promise._fulfill(args);\n        }\n        promise = null;\n    };\n}\n\nmodule.exports = nodebackForPromise;\n\n},{\"./errors\":12,\"./es5\":13,\"./util\":36}],21:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nvar util = _dereq_(\"./util\");\nvar async = Promise._async;\nvar tryCatch = util.tryCatch;\nvar errorObj = util.errorObj;\n\nfunction spreadAdapter(val, nodeback) {\n    var promise = this;\n    if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);\n    var ret =\n        tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nfunction successAdapter(val, nodeback) {\n    var promise = this;\n    var receiver = promise._boundValue();\n    var ret = val === undefined\n        ? tryCatch(nodeback).call(receiver, null)\n        : tryCatch(nodeback).call(receiver, null, val);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\nfunction errorAdapter(reason, nodeback) {\n    var promise = this;\n    if (!reason) {\n        var newReason = new Error(reason + \"\");\n        newReason.cause = reason;\n        reason = newReason;\n    }\n    var ret = tryCatch(nodeback).call(promise._boundValue(), reason);\n    if (ret === errorObj) {\n        async.throwLater(ret.e);\n    }\n}\n\nPromise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,\n                                                                     options) {\n    if (typeof nodeback == \"function\") {\n        var adapter = successAdapter;\n        if (options !== undefined && Object(options).spread) {\n            adapter = spreadAdapter;\n        }\n        this._then(\n            adapter,\n            errorAdapter,\n            undefined,\n            this,\n            nodeback\n        );\n    }\n    return this;\n};\n};\n\n},{\"./util\":36}],22:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function() {\nvar makeSelfResolutionError = function () {\n    return new TypeError(\"circular promise resolution chain\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar reflectHandler = function() {\n    return new Promise.PromiseInspection(this._target());\n};\nvar apiRejection = function(msg) {\n    return Promise.reject(new TypeError(msg));\n};\nfunction Proxyable() {}\nvar UNDEFINED_BINDING = {};\nvar util = _dereq_(\"./util\");\n\nvar getDomain;\nif (util.isNode) {\n    getDomain = function() {\n        var ret = process.domain;\n        if (ret === undefined) ret = null;\n        return ret;\n    };\n} else {\n    getDomain = function() {\n        return null;\n    };\n}\nutil.notEnumerableProp(Promise, \"_getDomain\", getDomain);\n\nvar es5 = _dereq_(\"./es5\");\nvar Async = _dereq_(\"./async\");\nvar async = new Async();\nes5.defineProperty(Promise, \"_async\", {value: async});\nvar errors = _dereq_(\"./errors\");\nvar TypeError = Promise.TypeError = errors.TypeError;\nPromise.RangeError = errors.RangeError;\nvar CancellationError = Promise.CancellationError = errors.CancellationError;\nPromise.TimeoutError = errors.TimeoutError;\nPromise.OperationalError = errors.OperationalError;\nPromise.RejectionError = errors.OperationalError;\nPromise.AggregateError = errors.AggregateError;\nvar INTERNAL = function(){};\nvar APPLY = {};\nvar NEXT_FILTER = {};\nvar tryConvertToPromise = _dereq_(\"./thenables\")(Promise, INTERNAL);\nvar PromiseArray =\n    _dereq_(\"./promise_array\")(Promise, INTERNAL,\n                               tryConvertToPromise, apiRejection, Proxyable);\nvar Context = _dereq_(\"./context\")(Promise);\n /*jshint unused:false*/\nvar createContext = Context.create;\nvar debug = _dereq_(\"./debuggability\")(Promise, Context);\nvar CapturedTrace = debug.CapturedTrace;\nvar PassThroughHandlerContext =\n    _dereq_(\"./finally\")(Promise, tryConvertToPromise, NEXT_FILTER);\nvar catchFilter = _dereq_(\"./catch_filter\")(NEXT_FILTER);\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar errorObj = util.errorObj;\nvar tryCatch = util.tryCatch;\nfunction check(self, executor) {\n    if (self == null || self.constructor !== Promise) {\n        throw new TypeError(\"the promise constructor cannot be invoked directly\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    if (typeof executor !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(executor));\n    }\n\n}\n\nfunction Promise(executor) {\n    if (executor !== INTERNAL) {\n        check(this, executor);\n    }\n    this._bitField = 0;\n    this._fulfillmentHandler0 = undefined;\n    this._rejectionHandler0 = undefined;\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._resolveFromExecutor(executor);\n    this._promiseCreated();\n    this._fireEvent(\"promiseCreated\", this);\n}\n\nPromise.prototype.toString = function () {\n    return \"[object Promise]\";\n};\n\nPromise.prototype.caught = Promise.prototype[\"catch\"] = function (fn) {\n    var len = arguments.length;\n    if (len > 1) {\n        var catchInstances = new Array(len - 1),\n            j = 0, i;\n        for (i = 0; i < len - 1; ++i) {\n            var item = arguments[i];\n            if (util.isObject(item)) {\n                catchInstances[j++] = item;\n            } else {\n                return apiRejection(\"Catch statement predicate: \" +\n                    \"expecting an object but got \" + util.classString(item));\n            }\n        }\n        catchInstances.length = j;\n        fn = arguments[i];\n\n        if (typeof fn !== \"function\") {\n            throw new TypeError(\"The last argument to .catch() \" +\n                \"must be a function, got \" + util.toString(fn));\n        }\n        return this.then(undefined, catchFilter(catchInstances, fn, this));\n    }\n    return this.then(undefined, fn);\n};\n\nPromise.prototype.reflect = function () {\n    return this._then(reflectHandler,\n        reflectHandler, undefined, this, undefined);\n};\n\nPromise.prototype.then = function (didFulfill, didReject) {\n    if (debug.warnings() && arguments.length > 0 &&\n        typeof didFulfill !== \"function\" &&\n        typeof didReject !== \"function\") {\n        var msg = \".then() only accepts functions but was passed: \" +\n                util.classString(didFulfill);\n        if (arguments.length > 1) {\n            msg += \", \" + util.classString(didReject);\n        }\n        this._warn(msg);\n    }\n    return this._then(didFulfill, didReject, undefined, undefined, undefined);\n};\n\nPromise.prototype.done = function (didFulfill, didReject) {\n    var promise =\n        this._then(didFulfill, didReject, undefined, undefined, undefined);\n    promise._setIsFinal();\n};\n\nPromise.prototype.spread = function (fn) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    return this.all()._then(fn, undefined, undefined, APPLY, undefined);\n};\n\nPromise.prototype.toJSON = function () {\n    var ret = {\n        isFulfilled: false,\n        isRejected: false,\n        fulfillmentValue: undefined,\n        rejectionReason: undefined\n    };\n    if (this.isFulfilled()) {\n        ret.fulfillmentValue = this.value();\n        ret.isFulfilled = true;\n    } else if (this.isRejected()) {\n        ret.rejectionReason = this.reason();\n        ret.isRejected = true;\n    }\n    return ret;\n};\n\nPromise.prototype.all = function () {\n    if (arguments.length > 0) {\n        this._warn(\".all() was passed arguments but it does not take any\");\n    }\n    return new PromiseArray(this).promise();\n};\n\nPromise.prototype.error = function (fn) {\n    return this.caught(util.originatesFromRejection, fn);\n};\n\nPromise.getNewLibraryCopy = module.exports;\n\nPromise.is = function (val) {\n    return val instanceof Promise;\n};\n\nPromise.fromNode = Promise.fromCallback = function(fn) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs\n                                         : false;\n    var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));\n    if (result === errorObj) {\n        ret._rejectCallback(result.e, true);\n    }\n    if (!ret._isFateSealed()) ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.all = function (promises) {\n    return new PromiseArray(promises).promise();\n};\n\nPromise.cast = function (obj) {\n    var ret = tryConvertToPromise(obj);\n    if (!(ret instanceof Promise)) {\n        ret = new Promise(INTERNAL);\n        ret._captureStackTrace();\n        ret._setFulfilled();\n        ret._rejectionHandler0 = obj;\n    }\n    return ret;\n};\n\nPromise.resolve = Promise.fulfilled = Promise.cast;\n\nPromise.reject = Promise.rejected = function (reason) {\n    var ret = new Promise(INTERNAL);\n    ret._captureStackTrace();\n    ret._rejectCallback(reason, true);\n    return ret;\n};\n\nPromise.setScheduler = function(fn) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    return async.setScheduler(fn);\n};\n\nPromise.prototype._then = function (\n    didFulfill,\n    didReject,\n    _,    receiver,\n    internalData\n) {\n    var haveInternalData = internalData !== undefined;\n    var promise = haveInternalData ? internalData : new Promise(INTERNAL);\n    var target = this._target();\n    var bitField = target._bitField;\n\n    if (!haveInternalData) {\n        promise._propagateFrom(this, 3);\n        promise._captureStackTrace();\n        if (receiver === undefined &&\n            ((this._bitField & 2097152) !== 0)) {\n            if (!((bitField & 50397184) === 0)) {\n                receiver = this._boundValue();\n            } else {\n                receiver = target === this ? undefined : this._boundTo;\n            }\n        }\n        this._fireEvent(\"promiseChained\", this, promise);\n    }\n\n    var domain = getDomain();\n    if (!((bitField & 50397184) === 0)) {\n        var handler, value, settler = target._settlePromiseCtx;\n        if (((bitField & 33554432) !== 0)) {\n            value = target._rejectionHandler0;\n            handler = didFulfill;\n        } else if (((bitField & 16777216) !== 0)) {\n            value = target._fulfillmentHandler0;\n            handler = didReject;\n            target._unsetRejectionIsUnhandled();\n        } else {\n            settler = target._settlePromiseLateCancellationObserver;\n            value = new CancellationError(\"late cancellation observer\");\n            target._attachExtraTrace(value);\n            handler = didReject;\n        }\n\n        async.invoke(settler, target, {\n            handler: domain === null ? handler\n                : (typeof handler === \"function\" &&\n                    util.domainBind(domain, handler)),\n            promise: promise,\n            receiver: receiver,\n            value: value\n        });\n    } else {\n        target._addCallbacks(didFulfill, didReject, promise, receiver, domain);\n    }\n\n    return promise;\n};\n\nPromise.prototype._length = function () {\n    return this._bitField & 65535;\n};\n\nPromise.prototype._isFateSealed = function () {\n    return (this._bitField & 117506048) !== 0;\n};\n\nPromise.prototype._isFollowing = function () {\n    return (this._bitField & 67108864) === 67108864;\n};\n\nPromise.prototype._setLength = function (len) {\n    this._bitField = (this._bitField & -65536) |\n        (len & 65535);\n};\n\nPromise.prototype._setFulfilled = function () {\n    this._bitField = this._bitField | 33554432;\n    this._fireEvent(\"promiseFulfilled\", this);\n};\n\nPromise.prototype._setRejected = function () {\n    this._bitField = this._bitField | 16777216;\n    this._fireEvent(\"promiseRejected\", this);\n};\n\nPromise.prototype._setFollowing = function () {\n    this._bitField = this._bitField | 67108864;\n    this._fireEvent(\"promiseResolved\", this);\n};\n\nPromise.prototype._setIsFinal = function () {\n    this._bitField = this._bitField | 4194304;\n};\n\nPromise.prototype._isFinal = function () {\n    return (this._bitField & 4194304) > 0;\n};\n\nPromise.prototype._unsetCancelled = function() {\n    this._bitField = this._bitField & (~65536);\n};\n\nPromise.prototype._setCancelled = function() {\n    this._bitField = this._bitField | 65536;\n    this._fireEvent(\"promiseCancelled\", this);\n};\n\nPromise.prototype._setWillBeCancelled = function() {\n    this._bitField = this._bitField | 8388608;\n};\n\nPromise.prototype._setAsyncGuaranteed = function() {\n    if (async.hasCustomScheduler()) return;\n    this._bitField = this._bitField | 134217728;\n};\n\nPromise.prototype._receiverAt = function (index) {\n    var ret = index === 0 ? this._receiver0 : this[\n            index * 4 - 4 + 3];\n    if (ret === UNDEFINED_BINDING) {\n        return undefined;\n    } else if (ret === undefined && this._isBound()) {\n        return this._boundValue();\n    }\n    return ret;\n};\n\nPromise.prototype._promiseAt = function (index) {\n    return this[\n            index * 4 - 4 + 2];\n};\n\nPromise.prototype._fulfillmentHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 0];\n};\n\nPromise.prototype._rejectionHandlerAt = function (index) {\n    return this[\n            index * 4 - 4 + 1];\n};\n\nPromise.prototype._boundValue = function() {};\n\nPromise.prototype._migrateCallback0 = function (follower) {\n    var bitField = follower._bitField;\n    var fulfill = follower._fulfillmentHandler0;\n    var reject = follower._rejectionHandler0;\n    var promise = follower._promise0;\n    var receiver = follower._receiverAt(0);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._migrateCallbackAt = function (follower, index) {\n    var fulfill = follower._fulfillmentHandlerAt(index);\n    var reject = follower._rejectionHandlerAt(index);\n    var promise = follower._promiseAt(index);\n    var receiver = follower._receiverAt(index);\n    if (receiver === undefined) receiver = UNDEFINED_BINDING;\n    this._addCallbacks(fulfill, reject, promise, receiver, null);\n};\n\nPromise.prototype._addCallbacks = function (\n    fulfill,\n    reject,\n    promise,\n    receiver,\n    domain\n) {\n    var index = this._length();\n\n    if (index >= 65535 - 4) {\n        index = 0;\n        this._setLength(0);\n    }\n\n    if (index === 0) {\n        this._promise0 = promise;\n        this._receiver0 = receiver;\n        if (typeof fulfill === \"function\") {\n            this._fulfillmentHandler0 =\n                domain === null ? fulfill : util.domainBind(domain, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this._rejectionHandler0 =\n                domain === null ? reject : util.domainBind(domain, reject);\n        }\n    } else {\n        var base = index * 4 - 4;\n        this[base + 2] = promise;\n        this[base + 3] = receiver;\n        if (typeof fulfill === \"function\") {\n            this[base + 0] =\n                domain === null ? fulfill : util.domainBind(domain, fulfill);\n        }\n        if (typeof reject === \"function\") {\n            this[base + 1] =\n                domain === null ? reject : util.domainBind(domain, reject);\n        }\n    }\n    this._setLength(index + 1);\n    return index;\n};\n\nPromise.prototype._proxy = function (proxyable, arg) {\n    this._addCallbacks(undefined, undefined, arg, proxyable, null);\n};\n\nPromise.prototype._resolveCallback = function(value, shouldBind) {\n    if (((this._bitField & 117506048) !== 0)) return;\n    if (value === this)\n        return this._rejectCallback(makeSelfResolutionError(), false);\n    var maybePromise = tryConvertToPromise(value, this);\n    if (!(maybePromise instanceof Promise)) return this._fulfill(value);\n\n    if (shouldBind) this._propagateFrom(maybePromise, 2);\n\n    var promise = maybePromise._target();\n\n    if (promise === this) {\n        this._reject(makeSelfResolutionError());\n        return;\n    }\n\n    var bitField = promise._bitField;\n    if (((bitField & 50397184) === 0)) {\n        var len = this._length();\n        if (len > 0) promise._migrateCallback0(this);\n        for (var i = 1; i < len; ++i) {\n            promise._migrateCallbackAt(this, i);\n        }\n        this._setFollowing();\n        this._setLength(0);\n        this._setFollowee(promise);\n    } else if (((bitField & 33554432) !== 0)) {\n        this._fulfill(promise._value());\n    } else if (((bitField & 16777216) !== 0)) {\n        this._reject(promise._reason());\n    } else {\n        var reason = new CancellationError(\"late cancellation observer\");\n        promise._attachExtraTrace(reason);\n        this._reject(reason);\n    }\n};\n\nPromise.prototype._rejectCallback =\nfunction(reason, synchronous, ignoreNonErrorWarnings) {\n    var trace = util.ensureErrorObject(reason);\n    var hasStack = trace === reason;\n    if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {\n        var message = \"a promise was rejected with a non-error: \" +\n            util.classString(reason);\n        this._warn(message, true);\n    }\n    this._attachExtraTrace(trace, synchronous ? hasStack : false);\n    this._reject(reason);\n};\n\nPromise.prototype._resolveFromExecutor = function (executor) {\n    if (executor === INTERNAL) return;\n    var promise = this;\n    this._captureStackTrace();\n    this._pushContext();\n    var synchronous = true;\n    var r = this._execute(executor, function(value) {\n        promise._resolveCallback(value);\n    }, function (reason) {\n        promise._rejectCallback(reason, synchronous);\n    });\n    synchronous = false;\n    this._popContext();\n\n    if (r !== undefined) {\n        promise._rejectCallback(r, true);\n    }\n};\n\nPromise.prototype._settlePromiseFromHandler = function (\n    handler, receiver, value, promise\n) {\n    var bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n    promise._pushContext();\n    var x;\n    if (receiver === APPLY) {\n        if (!value || typeof value.length !== \"number\") {\n            x = errorObj;\n            x.e = new TypeError(\"cannot .spread() a non-array: \" +\n                                    util.classString(value));\n        } else {\n            x = tryCatch(handler).apply(this._boundValue(), value);\n        }\n    } else {\n        x = tryCatch(handler).call(receiver, value);\n    }\n    var promiseCreated = promise._popContext();\n    bitField = promise._bitField;\n    if (((bitField & 65536) !== 0)) return;\n\n    if (x === NEXT_FILTER) {\n        promise._reject(value);\n    } else if (x === errorObj) {\n        promise._rejectCallback(x.e, false);\n    } else {\n        debug.checkForgottenReturns(x, promiseCreated, \"\",  promise, this);\n        promise._resolveCallback(x);\n    }\n};\n\nPromise.prototype._target = function() {\n    var ret = this;\n    while (ret._isFollowing()) ret = ret._followee();\n    return ret;\n};\n\nPromise.prototype._followee = function() {\n    return this._rejectionHandler0;\n};\n\nPromise.prototype._setFollowee = function(promise) {\n    this._rejectionHandler0 = promise;\n};\n\nPromise.prototype._settlePromise = function(promise, handler, receiver, value) {\n    var isPromise = promise instanceof Promise;\n    var bitField = this._bitField;\n    var asyncGuaranteed = ((bitField & 134217728) !== 0);\n    if (((bitField & 65536) !== 0)) {\n        if (isPromise) promise._invokeInternalOnCancel();\n\n        if (receiver instanceof PassThroughHandlerContext &&\n            receiver.isFinallyHandler()) {\n            receiver.cancelPromise = promise;\n            if (tryCatch(handler).call(receiver, value) === errorObj) {\n                promise._reject(errorObj.e);\n            }\n        } else if (handler === reflectHandler) {\n            promise._fulfill(reflectHandler.call(receiver));\n        } else if (receiver instanceof Proxyable) {\n            receiver._promiseCancelled(promise);\n        } else if (isPromise || promise instanceof PromiseArray) {\n            promise._cancel();\n        } else {\n            receiver.cancel();\n        }\n    } else if (typeof handler === \"function\") {\n        if (!isPromise) {\n            handler.call(receiver, value, promise);\n        } else {\n            if (asyncGuaranteed) promise._setAsyncGuaranteed();\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (receiver instanceof Proxyable) {\n        if (!receiver._isResolved()) {\n            if (((bitField & 33554432) !== 0)) {\n                receiver._promiseFulfilled(value, promise);\n            } else {\n                receiver._promiseRejected(value, promise);\n            }\n        }\n    } else if (isPromise) {\n        if (asyncGuaranteed) promise._setAsyncGuaranteed();\n        if (((bitField & 33554432) !== 0)) {\n            promise._fulfill(value);\n        } else {\n            promise._reject(value);\n        }\n    }\n};\n\nPromise.prototype._settlePromiseLateCancellationObserver = function(ctx) {\n    var handler = ctx.handler;\n    var promise = ctx.promise;\n    var receiver = ctx.receiver;\n    var value = ctx.value;\n    if (typeof handler === \"function\") {\n        if (!(promise instanceof Promise)) {\n            handler.call(receiver, value, promise);\n        } else {\n            this._settlePromiseFromHandler(handler, receiver, value, promise);\n        }\n    } else if (promise instanceof Promise) {\n        promise._reject(value);\n    }\n};\n\nPromise.prototype._settlePromiseCtx = function(ctx) {\n    this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);\n};\n\nPromise.prototype._settlePromise0 = function(handler, value, bitField) {\n    var promise = this._promise0;\n    var receiver = this._receiverAt(0);\n    this._promise0 = undefined;\n    this._receiver0 = undefined;\n    this._settlePromise(promise, handler, receiver, value);\n};\n\nPromise.prototype._clearCallbackDataAtIndex = function(index) {\n    var base = index * 4 - 4;\n    this[base + 2] =\n    this[base + 3] =\n    this[base + 0] =\n    this[base + 1] = undefined;\n};\n\nPromise.prototype._fulfill = function (value) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    if (value === this) {\n        var err = makeSelfResolutionError();\n        this._attachExtraTrace(err);\n        return this._reject(err);\n    }\n    this._setFulfilled();\n    this._rejectionHandler0 = value;\n\n    if ((bitField & 65535) > 0) {\n        if (((bitField & 134217728) !== 0)) {\n            this._settlePromises();\n        } else {\n            async.settlePromises(this);\n        }\n        this._dereferenceTrace();\n    }\n};\n\nPromise.prototype._reject = function (reason) {\n    var bitField = this._bitField;\n    if (((bitField & 117506048) >>> 16)) return;\n    this._setRejected();\n    this._fulfillmentHandler0 = reason;\n\n    if (this._isFinal()) {\n        return async.fatalError(reason, util.isNode);\n    }\n\n    if ((bitField & 65535) > 0) {\n        async.settlePromises(this);\n    } else {\n        this._ensurePossibleRejectionHandled();\n    }\n};\n\nPromise.prototype._fulfillPromises = function (len, value) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._fulfillmentHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, value);\n    }\n};\n\nPromise.prototype._rejectPromises = function (len, reason) {\n    for (var i = 1; i < len; i++) {\n        var handler = this._rejectionHandlerAt(i);\n        var promise = this._promiseAt(i);\n        var receiver = this._receiverAt(i);\n        this._clearCallbackDataAtIndex(i);\n        this._settlePromise(promise, handler, receiver, reason);\n    }\n};\n\nPromise.prototype._settlePromises = function () {\n    var bitField = this._bitField;\n    var len = (bitField & 65535);\n\n    if (len > 0) {\n        if (((bitField & 16842752) !== 0)) {\n            var reason = this._fulfillmentHandler0;\n            this._settlePromise0(this._rejectionHandler0, reason, bitField);\n            this._rejectPromises(len, reason);\n        } else {\n            var value = this._rejectionHandler0;\n            this._settlePromise0(this._fulfillmentHandler0, value, bitField);\n            this._fulfillPromises(len, value);\n        }\n        this._setLength(0);\n    }\n    this._clearCancellationData();\n};\n\nPromise.prototype._settledValue = function() {\n    var bitField = this._bitField;\n    if (((bitField & 33554432) !== 0)) {\n        return this._rejectionHandler0;\n    } else if (((bitField & 16777216) !== 0)) {\n        return this._fulfillmentHandler0;\n    }\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.toStringTag) {\n    es5.defineProperty(Promise.prototype, Symbol.toStringTag, {\n        get: function () {\n            return \"Object\";\n        }\n    });\n}\n\nfunction deferResolve(v) {this.promise._resolveCallback(v);}\nfunction deferReject(v) {this.promise._rejectCallback(v, false);}\n\nPromise.defer = Promise.pending = function() {\n    debug.deprecated(\"Promise.defer\", \"new Promise\");\n    var promise = new Promise(INTERNAL);\n    return {\n        promise: promise,\n        resolve: deferResolve,\n        reject: deferReject\n    };\n};\n\nutil.notEnumerableProp(Promise,\n                       \"_makeSelfResolutionError\",\n                       makeSelfResolutionError);\n\n_dereq_(\"./method\")(Promise, INTERNAL, tryConvertToPromise, apiRejection,\n    debug);\n_dereq_(\"./bind\")(Promise, INTERNAL, tryConvertToPromise, debug);\n_dereq_(\"./cancel\")(Promise, PromiseArray, apiRejection, debug);\n_dereq_(\"./direct_resolve\")(Promise);\n_dereq_(\"./synchronous_inspection\")(Promise);\n_dereq_(\"./join\")(\n    Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain);\nPromise.Promise = Promise;\nPromise.version = \"3.5.5\";\n_dereq_('./call_get.js')(Promise);\n_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);\n_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./nodeify.js')(Promise);\n_dereq_('./promisify.js')(Promise, INTERNAL);\n_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);\n_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);\n_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);\n_dereq_('./settle.js')(Promise, PromiseArray, debug);\n_dereq_('./some.js')(Promise, PromiseArray, apiRejection);\n_dereq_('./timers.js')(Promise, INTERNAL, debug);\n_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);\n_dereq_('./any.js')(Promise);\n_dereq_('./each.js')(Promise, INTERNAL);\n_dereq_('./filter.js')(Promise, INTERNAL);\n                                                         \n    util.toFastProperties(Promise);                                          \n    util.toFastProperties(Promise.prototype);                                \n    function fillTypes(value) {                                              \n        var p = new Promise(INTERNAL);                                       \n        p._fulfillmentHandler0 = value;                                      \n        p._rejectionHandler0 = value;                                        \n        p._promise0 = value;                                                 \n        p._receiver0 = value;                                                \n    }                                                                        \n    // Complete slack tracking, opt out of field-type tracking and           \n    // stabilize map                                                         \n    fillTypes({a: 1});                                                       \n    fillTypes({b: 2});                                                       \n    fillTypes({c: 3});                                                       \n    fillTypes(1);                                                            \n    fillTypes(function(){});                                                 \n    fillTypes(undefined);                                                    \n    fillTypes(false);                                                        \n    fillTypes(new Promise(INTERNAL));                                        \n    debug.setBounds(Async.firstLineError, util.lastLineError);               \n    return Promise;                                                          \n\n};\n\n},{\"./any.js\":1,\"./async\":2,\"./bind\":3,\"./call_get.js\":5,\"./cancel\":6,\"./catch_filter\":7,\"./context\":8,\"./debuggability\":9,\"./direct_resolve\":10,\"./each.js\":11,\"./errors\":12,\"./es5\":13,\"./filter.js\":14,\"./finally\":15,\"./generators.js\":16,\"./join\":17,\"./map.js\":18,\"./method\":19,\"./nodeback\":20,\"./nodeify.js\":21,\"./promise_array\":23,\"./promisify.js\":24,\"./props.js\":25,\"./race.js\":27,\"./reduce.js\":28,\"./settle.js\":30,\"./some.js\":31,\"./synchronous_inspection\":32,\"./thenables\":33,\"./timers.js\":34,\"./using.js\":35,\"./util\":36}],23:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, tryConvertToPromise,\n    apiRejection, Proxyable) {\nvar util = _dereq_(\"./util\");\nvar isArray = util.isArray;\n\nfunction toResolutionValue(val) {\n    switch(val) {\n    case -2: return [];\n    case -3: return {};\n    case -6: return new Map();\n    }\n}\n\nfunction PromiseArray(values) {\n    var promise = this._promise = new Promise(INTERNAL);\n    if (values instanceof Promise) {\n        promise._propagateFrom(values, 3);\n    }\n    promise._setOnCancel(this);\n    this._values = values;\n    this._length = 0;\n    this._totalResolved = 0;\n    this._init(undefined, -2);\n}\nutil.inherits(PromiseArray, Proxyable);\n\nPromiseArray.prototype.length = function () {\n    return this._length;\n};\n\nPromiseArray.prototype.promise = function () {\n    return this._promise;\n};\n\nPromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {\n    var values = tryConvertToPromise(this._values, this._promise);\n    if (values instanceof Promise) {\n        values = values._target();\n        var bitField = values._bitField;\n        ;\n        this._values = values;\n\n        if (((bitField & 50397184) === 0)) {\n            this._promise._setAsyncGuaranteed();\n            return values._then(\n                init,\n                this._reject,\n                undefined,\n                this,\n                resolveValueIfEmpty\n           );\n        } else if (((bitField & 33554432) !== 0)) {\n            values = values._value();\n        } else if (((bitField & 16777216) !== 0)) {\n            return this._reject(values._reason());\n        } else {\n            return this._cancel();\n        }\n    }\n    values = util.asArray(values);\n    if (values === null) {\n        var err = apiRejection(\n            \"expecting an array or an iterable object but got \" + util.classString(values)).reason();\n        this._promise._rejectCallback(err, false);\n        return;\n    }\n\n    if (values.length === 0) {\n        if (resolveValueIfEmpty === -5) {\n            this._resolveEmptyArray();\n        }\n        else {\n            this._resolve(toResolutionValue(resolveValueIfEmpty));\n        }\n        return;\n    }\n    this._iterate(values);\n};\n\nPromiseArray.prototype._iterate = function(values) {\n    var len = this.getActualLength(values.length);\n    this._length = len;\n    this._values = this.shouldCopyValues() ? new Array(len) : this._values;\n    var result = this._promise;\n    var isResolved = false;\n    var bitField = null;\n    for (var i = 0; i < len; ++i) {\n        var maybePromise = tryConvertToPromise(values[i], result);\n\n        if (maybePromise instanceof Promise) {\n            maybePromise = maybePromise._target();\n            bitField = maybePromise._bitField;\n        } else {\n            bitField = null;\n        }\n\n        if (isResolved) {\n            if (bitField !== null) {\n                maybePromise.suppressUnhandledRejections();\n            }\n        } else if (bitField !== null) {\n            if (((bitField & 50397184) === 0)) {\n                maybePromise._proxy(this, i);\n                this._values[i] = maybePromise;\n            } else if (((bitField & 33554432) !== 0)) {\n                isResolved = this._promiseFulfilled(maybePromise._value(), i);\n            } else if (((bitField & 16777216) !== 0)) {\n                isResolved = this._promiseRejected(maybePromise._reason(), i);\n            } else {\n                isResolved = this._promiseCancelled(i);\n            }\n        } else {\n            isResolved = this._promiseFulfilled(maybePromise, i);\n        }\n    }\n    if (!isResolved) result._setAsyncGuaranteed();\n};\n\nPromiseArray.prototype._isResolved = function () {\n    return this._values === null;\n};\n\nPromiseArray.prototype._resolve = function (value) {\n    this._values = null;\n    this._promise._fulfill(value);\n};\n\nPromiseArray.prototype._cancel = function() {\n    if (this._isResolved() || !this._promise._isCancellable()) return;\n    this._values = null;\n    this._promise._cancel();\n};\n\nPromiseArray.prototype._reject = function (reason) {\n    this._values = null;\n    this._promise._rejectCallback(reason, false);\n};\n\nPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nPromiseArray.prototype._promiseCancelled = function() {\n    this._cancel();\n    return true;\n};\n\nPromiseArray.prototype._promiseRejected = function (reason) {\n    this._totalResolved++;\n    this._reject(reason);\n    return true;\n};\n\nPromiseArray.prototype._resultCancelled = function() {\n    if (this._isResolved()) return;\n    var values = this._values;\n    this._cancel();\n    if (values instanceof Promise) {\n        values.cancel();\n    } else {\n        for (var i = 0; i < values.length; ++i) {\n            if (values[i] instanceof Promise) {\n                values[i].cancel();\n            }\n        }\n    }\n};\n\nPromiseArray.prototype.shouldCopyValues = function () {\n    return true;\n};\n\nPromiseArray.prototype.getActualLength = function (len) {\n    return len;\n};\n\nreturn PromiseArray;\n};\n\n},{\"./util\":36}],24:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar THIS = {};\nvar util = _dereq_(\"./util\");\nvar nodebackForPromise = _dereq_(\"./nodeback\");\nvar withAppended = util.withAppended;\nvar maybeWrapAsError = util.maybeWrapAsError;\nvar canEvaluate = util.canEvaluate;\nvar TypeError = _dereq_(\"./errors\").TypeError;\nvar defaultSuffix = \"Async\";\nvar defaultPromisified = {__isPromisified__: true};\nvar noCopyProps = [\n    \"arity\",    \"length\",\n    \"name\",\n    \"arguments\",\n    \"caller\",\n    \"callee\",\n    \"prototype\",\n    \"__isPromisified__\"\n];\nvar noCopyPropsPattern = new RegExp(\"^(?:\" + noCopyProps.join(\"|\") + \")$\");\n\nvar defaultFilter = function(name) {\n    return util.isIdentifier(name) &&\n        name.charAt(0) !== \"_\" &&\n        name !== \"constructor\";\n};\n\nfunction propsFilter(key) {\n    return !noCopyPropsPattern.test(key);\n}\n\nfunction isPromisified(fn) {\n    try {\n        return fn.__isPromisified__ === true;\n    }\n    catch (e) {\n        return false;\n    }\n}\n\nfunction hasPromisified(obj, key, suffix) {\n    var val = util.getDataPropertyOrDefault(obj, key + suffix,\n                                            defaultPromisified);\n    return val ? isPromisified(val) : false;\n}\nfunction checkValid(ret, suffix, suffixRegexp) {\n    for (var i = 0; i < ret.length; i += 2) {\n        var key = ret[i];\n        if (suffixRegexp.test(key)) {\n            var keyWithoutAsyncSuffix = key.replace(suffixRegexp, \"\");\n            for (var j = 0; j < ret.length; j += 2) {\n                if (ret[j] === keyWithoutAsyncSuffix) {\n                    throw new TypeError(\"Cannot promisify an API that has normal methods with '%s'-suffix\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\"\n                        .replace(\"%s\", suffix));\n                }\n            }\n        }\n    }\n}\n\nfunction promisifiableMethods(obj, suffix, suffixRegexp, filter) {\n    var keys = util.inheritedDataKeys(obj);\n    var ret = [];\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var value = obj[key];\n        var passesDefaultFilter = filter === defaultFilter\n            ? true : defaultFilter(key, value, obj);\n        if (typeof value === \"function\" &&\n            !isPromisified(value) &&\n            !hasPromisified(obj, key, suffix) &&\n            filter(key, value, obj, passesDefaultFilter)) {\n            ret.push(key, value);\n        }\n    }\n    checkValid(ret, suffix, suffixRegexp);\n    return ret;\n}\n\nvar escapeIdentRegex = function(str) {\n    return str.replace(/([$])/, \"\\\\$\");\n};\n\nvar makeNodePromisifiedEval;\nif (!true) {\nvar switchCaseArgumentOrder = function(likelyArgumentCount) {\n    var ret = [likelyArgumentCount];\n    var min = Math.max(0, likelyArgumentCount - 1 - 3);\n    for(var i = likelyArgumentCount - 1; i >= min; --i) {\n        ret.push(i);\n    }\n    for(var i = likelyArgumentCount + 1; i <= 3; ++i) {\n        ret.push(i);\n    }\n    return ret;\n};\n\nvar argumentSequence = function(argumentCount) {\n    return util.filledRange(argumentCount, \"_arg\", \"\");\n};\n\nvar parameterDeclaration = function(parameterCount) {\n    return util.filledRange(\n        Math.max(parameterCount, 3), \"_arg\", \"\");\n};\n\nvar parameterCount = function(fn) {\n    if (typeof fn.length === \"number\") {\n        return Math.max(Math.min(fn.length, 1023 + 1), 0);\n    }\n    return 0;\n};\n\nmakeNodePromisifiedEval =\nfunction(callback, receiver, originalName, fn, _, multiArgs) {\n    var newParameterCount = Math.max(0, parameterCount(fn) - 1);\n    var argumentOrder = switchCaseArgumentOrder(newParameterCount);\n    var shouldProxyThis = typeof callback === \"string\" || receiver === THIS;\n\n    function generateCallForArgumentCount(count) {\n        var args = argumentSequence(count).join(\", \");\n        var comma = count > 0 ? \", \" : \"\";\n        var ret;\n        if (shouldProxyThis) {\n            ret = \"ret = callback.call(this, {{args}}, nodeback); break;\\n\";\n        } else {\n            ret = receiver === undefined\n                ? \"ret = callback({{args}}, nodeback); break;\\n\"\n                : \"ret = callback.call(receiver, {{args}}, nodeback); break;\\n\";\n        }\n        return ret.replace(\"{{args}}\", args).replace(\", \", comma);\n    }\n\n    function generateArgumentSwitchCase() {\n        var ret = \"\";\n        for (var i = 0; i < argumentOrder.length; ++i) {\n            ret += \"case \" + argumentOrder[i] +\":\" +\n                generateCallForArgumentCount(argumentOrder[i]);\n        }\n\n        ret += \"                                                             \\n\\\n        default:                                                             \\n\\\n            var args = new Array(len + 1);                                   \\n\\\n            var i = 0;                                                       \\n\\\n            for (var i = 0; i < len; ++i) {                                  \\n\\\n               args[i] = arguments[i];                                       \\n\\\n            }                                                                \\n\\\n            args[i] = nodeback;                                              \\n\\\n            [CodeForCall]                                                    \\n\\\n            break;                                                           \\n\\\n        \".replace(\"[CodeForCall]\", (shouldProxyThis\n                                ? \"ret = callback.apply(this, args);\\n\"\n                                : \"ret = callback.apply(receiver, args);\\n\"));\n        return ret;\n    }\n\n    var getFunctionCode = typeof callback === \"string\"\n                                ? (\"this != null ? this['\"+callback+\"'] : fn\")\n                                : \"fn\";\n    var body = \"'use strict';                                                \\n\\\n        var ret = function (Parameters) {                                    \\n\\\n            'use strict';                                                    \\n\\\n            var len = arguments.length;                                      \\n\\\n            var promise = new Promise(INTERNAL);                             \\n\\\n            promise._captureStackTrace();                                    \\n\\\n            var nodeback = nodebackForPromise(promise, \" + multiArgs + \");   \\n\\\n            var ret;                                                         \\n\\\n            var callback = tryCatch([GetFunctionCode]);                      \\n\\\n            switch(len) {                                                    \\n\\\n                [CodeForSwitchCase]                                          \\n\\\n            }                                                                \\n\\\n            if (ret === errorObj) {                                          \\n\\\n                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\\n\\\n            }                                                                \\n\\\n            if (!promise._isFateSealed()) promise._setAsyncGuaranteed();     \\n\\\n            return promise;                                                  \\n\\\n        };                                                                   \\n\\\n        notEnumerableProp(ret, '__isPromisified__', true);                   \\n\\\n        return ret;                                                          \\n\\\n    \".replace(\"[CodeForSwitchCase]\", generateArgumentSwitchCase())\n        .replace(\"[GetFunctionCode]\", getFunctionCode);\n    body = body.replace(\"Parameters\", parameterDeclaration(newParameterCount));\n    return new Function(\"Promise\",\n                        \"fn\",\n                        \"receiver\",\n                        \"withAppended\",\n                        \"maybeWrapAsError\",\n                        \"nodebackForPromise\",\n                        \"tryCatch\",\n                        \"errorObj\",\n                        \"notEnumerableProp\",\n                        \"INTERNAL\",\n                        body)(\n                    Promise,\n                    fn,\n                    receiver,\n                    withAppended,\n                    maybeWrapAsError,\n                    nodebackForPromise,\n                    util.tryCatch,\n                    util.errorObj,\n                    util.notEnumerableProp,\n                    INTERNAL);\n};\n}\n\nfunction makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {\n    var defaultThis = (function() {return this;})();\n    var method = callback;\n    if (typeof method === \"string\") {\n        callback = fn;\n    }\n    function promisified() {\n        var _receiver = receiver;\n        if (receiver === THIS) _receiver = this;\n        var promise = new Promise(INTERNAL);\n        promise._captureStackTrace();\n        var cb = typeof method === \"string\" && this !== defaultThis\n            ? this[method] : callback;\n        var fn = nodebackForPromise(promise, multiArgs);\n        try {\n            cb.apply(_receiver, withAppended(arguments, fn));\n        } catch(e) {\n            promise._rejectCallback(maybeWrapAsError(e), true, true);\n        }\n        if (!promise._isFateSealed()) promise._setAsyncGuaranteed();\n        return promise;\n    }\n    util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n    return promisified;\n}\n\nvar makeNodePromisified = canEvaluate\n    ? makeNodePromisifiedEval\n    : makeNodePromisifiedClosure;\n\nfunction promisifyAll(obj, suffix, filter, promisifier, multiArgs) {\n    var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + \"$\");\n    var methods =\n        promisifiableMethods(obj, suffix, suffixRegexp, filter);\n\n    for (var i = 0, len = methods.length; i < len; i+= 2) {\n        var key = methods[i];\n        var fn = methods[i+1];\n        var promisifiedKey = key + suffix;\n        if (promisifier === makeNodePromisified) {\n            obj[promisifiedKey] =\n                makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);\n        } else {\n            var promisified = promisifier(fn, function() {\n                return makeNodePromisified(key, THIS, key,\n                                           fn, suffix, multiArgs);\n            });\n            util.notEnumerableProp(promisified, \"__isPromisified__\", true);\n            obj[promisifiedKey] = promisified;\n        }\n    }\n    util.toFastProperties(obj);\n    return obj;\n}\n\nfunction promisify(callback, receiver, multiArgs) {\n    return makeNodePromisified(callback, receiver, undefined,\n                                callback, null, multiArgs);\n}\n\nPromise.promisify = function (fn, options) {\n    if (typeof fn !== \"function\") {\n        throw new TypeError(\"expecting a function but got \" + util.classString(fn));\n    }\n    if (isPromisified(fn)) {\n        return fn;\n    }\n    options = Object(options);\n    var receiver = options.context === undefined ? THIS : options.context;\n    var multiArgs = !!options.multiArgs;\n    var ret = promisify(fn, receiver, multiArgs);\n    util.copyDescriptors(fn, ret, propsFilter);\n    return ret;\n};\n\nPromise.promisifyAll = function (target, options) {\n    if (typeof target !== \"function\" && typeof target !== \"object\") {\n        throw new TypeError(\"the target of promisifyAll must be an object or a function\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    options = Object(options);\n    var multiArgs = !!options.multiArgs;\n    var suffix = options.suffix;\n    if (typeof suffix !== \"string\") suffix = defaultSuffix;\n    var filter = options.filter;\n    if (typeof filter !== \"function\") filter = defaultFilter;\n    var promisifier = options.promisifier;\n    if (typeof promisifier !== \"function\") promisifier = makeNodePromisified;\n\n    if (!util.isIdentifier(suffix)) {\n        throw new RangeError(\"suffix must be a valid identifier\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n\n    var keys = util.inheritedDataKeys(target);\n    for (var i = 0; i < keys.length; ++i) {\n        var value = target[keys[i]];\n        if (keys[i] !== \"constructor\" &&\n            util.isClass(value)) {\n            promisifyAll(value.prototype, suffix, filter, promisifier,\n                multiArgs);\n            promisifyAll(value, suffix, filter, promisifier, multiArgs);\n        }\n    }\n\n    return promisifyAll(target, suffix, filter, promisifier, multiArgs);\n};\n};\n\n\n},{\"./errors\":12,\"./nodeback\":20,\"./util\":36}],25:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n    Promise, PromiseArray, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar isObject = util.isObject;\nvar es5 = _dereq_(\"./es5\");\nvar Es6Map;\nif (typeof Map === \"function\") Es6Map = Map;\n\nvar mapToEntries = (function() {\n    var index = 0;\n    var size = 0;\n\n    function extractEntry(value, key) {\n        this[index] = value;\n        this[index + size] = key;\n        index++;\n    }\n\n    return function mapToEntries(map) {\n        size = map.size;\n        index = 0;\n        var ret = new Array(map.size * 2);\n        map.forEach(extractEntry, ret);\n        return ret;\n    };\n})();\n\nvar entriesToMap = function(entries) {\n    var ret = new Es6Map();\n    var length = entries.length / 2 | 0;\n    for (var i = 0; i < length; ++i) {\n        var key = entries[length + i];\n        var value = entries[i];\n        ret.set(key, value);\n    }\n    return ret;\n};\n\nfunction PropertiesPromiseArray(obj) {\n    var isMap = false;\n    var entries;\n    if (Es6Map !== undefined && obj instanceof Es6Map) {\n        entries = mapToEntries(obj);\n        isMap = true;\n    } else {\n        var keys = es5.keys(obj);\n        var len = keys.length;\n        entries = new Array(len * 2);\n        for (var i = 0; i < len; ++i) {\n            var key = keys[i];\n            entries[i] = obj[key];\n            entries[i + len] = key;\n        }\n    }\n    this.constructor$(entries);\n    this._isMap = isMap;\n    this._init$(undefined, isMap ? -6 : -3);\n}\nutil.inherits(PropertiesPromiseArray, PromiseArray);\n\nPropertiesPromiseArray.prototype._init = function () {};\n\nPropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    this._values[index] = value;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        var val;\n        if (this._isMap) {\n            val = entriesToMap(this._values);\n        } else {\n            val = {};\n            var keyOffset = this.length();\n            for (var i = 0, len = this.length(); i < len; ++i) {\n                val[this._values[i + keyOffset]] = this._values[i];\n            }\n        }\n        this._resolve(val);\n        return true;\n    }\n    return false;\n};\n\nPropertiesPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nPropertiesPromiseArray.prototype.getActualLength = function (len) {\n    return len >> 1;\n};\n\nfunction props(promises) {\n    var ret;\n    var castValue = tryConvertToPromise(promises);\n\n    if (!isObject(castValue)) {\n        return apiRejection(\"cannot await properties of a non-object\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    } else if (castValue instanceof Promise) {\n        ret = castValue._then(\n            Promise.props, undefined, undefined, undefined, undefined);\n    } else {\n        ret = new PropertiesPromiseArray(castValue).promise();\n    }\n\n    if (castValue instanceof Promise) {\n        ret._propagateFrom(castValue, 2);\n    }\n    return ret;\n}\n\nPromise.prototype.props = function () {\n    return props(this);\n};\n\nPromise.props = function (promises) {\n    return props(promises);\n};\n};\n\n},{\"./es5\":13,\"./util\":36}],26:[function(_dereq_,module,exports){\n\"use strict\";\nfunction arrayMove(src, srcIndex, dst, dstIndex, len) {\n    for (var j = 0; j < len; ++j) {\n        dst[j + dstIndex] = src[j + srcIndex];\n        src[j + srcIndex] = void 0;\n    }\n}\n\nfunction Queue(capacity) {\n    this._capacity = capacity;\n    this._length = 0;\n    this._front = 0;\n}\n\nQueue.prototype._willBeOverCapacity = function (size) {\n    return this._capacity < size;\n};\n\nQueue.prototype._pushOne = function (arg) {\n    var length = this.length();\n    this._checkCapacity(length + 1);\n    var i = (this._front + length) & (this._capacity - 1);\n    this[i] = arg;\n    this._length = length + 1;\n};\n\nQueue.prototype.push = function (fn, receiver, arg) {\n    var length = this.length() + 3;\n    if (this._willBeOverCapacity(length)) {\n        this._pushOne(fn);\n        this._pushOne(receiver);\n        this._pushOne(arg);\n        return;\n    }\n    var j = this._front + length - 3;\n    this._checkCapacity(length);\n    var wrapMask = this._capacity - 1;\n    this[(j + 0) & wrapMask] = fn;\n    this[(j + 1) & wrapMask] = receiver;\n    this[(j + 2) & wrapMask] = arg;\n    this._length = length;\n};\n\nQueue.prototype.shift = function () {\n    var front = this._front,\n        ret = this[front];\n\n    this[front] = undefined;\n    this._front = (front + 1) & (this._capacity - 1);\n    this._length--;\n    return ret;\n};\n\nQueue.prototype.length = function () {\n    return this._length;\n};\n\nQueue.prototype._checkCapacity = function (size) {\n    if (this._capacity < size) {\n        this._resizeTo(this._capacity << 1);\n    }\n};\n\nQueue.prototype._resizeTo = function (capacity) {\n    var oldCapacity = this._capacity;\n    this._capacity = capacity;\n    var front = this._front;\n    var length = this._length;\n    var moveItemsCount = (front + length) & (oldCapacity - 1);\n    arrayMove(this, 0, this, oldCapacity, moveItemsCount);\n};\n\nmodule.exports = Queue;\n\n},{}],27:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(\n    Promise, INTERNAL, tryConvertToPromise, apiRejection) {\nvar util = _dereq_(\"./util\");\n\nvar raceLater = function (promise) {\n    return promise.then(function(array) {\n        return race(array, promise);\n    });\n};\n\nfunction race(promises, parent) {\n    var maybePromise = tryConvertToPromise(promises);\n\n    if (maybePromise instanceof Promise) {\n        return raceLater(maybePromise);\n    } else {\n        promises = util.asArray(promises);\n        if (promises === null)\n            return apiRejection(\"expecting an array or an iterable object but got \" + util.classString(promises));\n    }\n\n    var ret = new Promise(INTERNAL);\n    if (parent !== undefined) {\n        ret._propagateFrom(parent, 3);\n    }\n    var fulfill = ret._fulfill;\n    var reject = ret._reject;\n    for (var i = 0, len = promises.length; i < len; ++i) {\n        var val = promises[i];\n\n        if (val === undefined && !(i in promises)) {\n            continue;\n        }\n\n        Promise.cast(val)._then(fulfill, reject, undefined, ret, null);\n    }\n    return ret;\n}\n\nPromise.race = function (promises) {\n    return race(promises, undefined);\n};\n\nPromise.prototype.race = function () {\n    return race(this, undefined);\n};\n\n};\n\n},{\"./util\":36}],28:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise,\n                          PromiseArray,\n                          apiRejection,\n                          tryConvertToPromise,\n                          INTERNAL,\n                          debug) {\nvar getDomain = Promise._getDomain;\nvar util = _dereq_(\"./util\");\nvar tryCatch = util.tryCatch;\n\nfunction ReductionPromiseArray(promises, fn, initialValue, _each) {\n    this.constructor$(promises);\n    var domain = getDomain();\n    this._fn = domain === null ? fn : util.domainBind(domain, fn);\n    if (initialValue !== undefined) {\n        initialValue = Promise.resolve(initialValue);\n        initialValue._attachCancellationCallback(this);\n    }\n    this._initialValue = initialValue;\n    this._currentCancellable = null;\n    if(_each === INTERNAL) {\n        this._eachValues = Array(this._length);\n    } else if (_each === 0) {\n        this._eachValues = null;\n    } else {\n        this._eachValues = undefined;\n    }\n    this._promise._captureStackTrace();\n    this._init$(undefined, -5);\n}\nutil.inherits(ReductionPromiseArray, PromiseArray);\n\nReductionPromiseArray.prototype._gotAccum = function(accum) {\n    if (this._eachValues !== undefined && \n        this._eachValues !== null && \n        accum !== INTERNAL) {\n        this._eachValues.push(accum);\n    }\n};\n\nReductionPromiseArray.prototype._eachComplete = function(value) {\n    if (this._eachValues !== null) {\n        this._eachValues.push(value);\n    }\n    return this._eachValues;\n};\n\nReductionPromiseArray.prototype._init = function() {};\n\nReductionPromiseArray.prototype._resolveEmptyArray = function() {\n    this._resolve(this._eachValues !== undefined ? this._eachValues\n                                                 : this._initialValue);\n};\n\nReductionPromiseArray.prototype.shouldCopyValues = function () {\n    return false;\n};\n\nReductionPromiseArray.prototype._resolve = function(value) {\n    this._promise._resolveCallback(value);\n    this._values = null;\n};\n\nReductionPromiseArray.prototype._resultCancelled = function(sender) {\n    if (sender === this._initialValue) return this._cancel();\n    if (this._isResolved()) return;\n    this._resultCancelled$();\n    if (this._currentCancellable instanceof Promise) {\n        this._currentCancellable.cancel();\n    }\n    if (this._initialValue instanceof Promise) {\n        this._initialValue.cancel();\n    }\n};\n\nReductionPromiseArray.prototype._iterate = function (values) {\n    this._values = values;\n    var value;\n    var i;\n    var length = values.length;\n    if (this._initialValue !== undefined) {\n        value = this._initialValue;\n        i = 0;\n    } else {\n        value = Promise.resolve(values[0]);\n        i = 1;\n    }\n\n    this._currentCancellable = value;\n\n    if (!value.isRejected()) {\n        for (; i < length; ++i) {\n            var ctx = {\n                accum: null,\n                value: values[i],\n                index: i,\n                length: length,\n                array: this\n            };\n            value = value._then(gotAccum, undefined, undefined, ctx, undefined);\n        }\n    }\n\n    if (this._eachValues !== undefined) {\n        value = value\n            ._then(this._eachComplete, undefined, undefined, this, undefined);\n    }\n    value._then(completed, completed, undefined, value, this);\n};\n\nPromise.prototype.reduce = function (fn, initialValue) {\n    return reduce(this, fn, initialValue, null);\n};\n\nPromise.reduce = function (promises, fn, initialValue, _each) {\n    return reduce(promises, fn, initialValue, _each);\n};\n\nfunction completed(valueOrReason, array) {\n    if (this.isFulfilled()) {\n        array._resolve(valueOrReason);\n    } else {\n        array._reject(valueOrReason);\n    }\n}\n\nfunction reduce(promises, fn, initialValue, _each) {\n    if (typeof fn !== \"function\") {\n        return apiRejection(\"expecting a function but got \" + util.classString(fn));\n    }\n    var array = new ReductionPromiseArray(promises, fn, initialValue, _each);\n    return array.promise();\n}\n\nfunction gotAccum(accum) {\n    this.accum = accum;\n    this.array._gotAccum(accum);\n    var value = tryConvertToPromise(this.value, this.array._promise);\n    if (value instanceof Promise) {\n        this.array._currentCancellable = value;\n        return value._then(gotValue, undefined, undefined, this, undefined);\n    } else {\n        return gotValue.call(this, value);\n    }\n}\n\nfunction gotValue(value) {\n    var array = this.array;\n    var promise = array._promise;\n    var fn = tryCatch(array._fn);\n    promise._pushContext();\n    var ret;\n    if (array._eachValues !== undefined) {\n        ret = fn.call(promise._boundValue(), value, this.index, this.length);\n    } else {\n        ret = fn.call(promise._boundValue(),\n                              this.accum, value, this.index, this.length);\n    }\n    if (ret instanceof Promise) {\n        array._currentCancellable = ret;\n    }\n    var promiseCreated = promise._popContext();\n    debug.checkForgottenReturns(\n        ret,\n        promiseCreated,\n        array._eachValues !== undefined ? \"Promise.each\" : \"Promise.reduce\",\n        promise\n    );\n    return ret;\n}\n};\n\n},{\"./util\":36}],29:[function(_dereq_,module,exports){\n\"use strict\";\nvar util = _dereq_(\"./util\");\nvar schedule;\nvar noAsyncScheduler = function() {\n    throw new Error(\"No async scheduler available\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n};\nvar NativePromise = util.getNativePromise();\nif (util.isNode && typeof MutationObserver === \"undefined\") {\n    var GlobalSetImmediate = global.setImmediate;\n    var ProcessNextTick = process.nextTick;\n    schedule = util.isRecentNode\n                ? function(fn) { GlobalSetImmediate.call(global, fn); }\n                : function(fn) { ProcessNextTick.call(process, fn); };\n} else if (typeof NativePromise === \"function\" &&\n           typeof NativePromise.resolve === \"function\") {\n    var nativePromise = NativePromise.resolve();\n    schedule = function(fn) {\n        nativePromise.then(fn);\n    };\n} else if ((typeof MutationObserver !== \"undefined\") &&\n          !(typeof window !== \"undefined\" &&\n            window.navigator &&\n            (window.navigator.standalone || window.cordova)) &&\n          (\"classList\" in document.documentElement)) {\n    schedule = (function() {\n        var div = document.createElement(\"div\");\n        var opts = {attributes: true};\n        var toggleScheduled = false;\n        var div2 = document.createElement(\"div\");\n        var o2 = new MutationObserver(function() {\n            div.classList.toggle(\"foo\");\n            toggleScheduled = false;\n        });\n        o2.observe(div2, opts);\n\n        var scheduleToggle = function() {\n            if (toggleScheduled) return;\n            toggleScheduled = true;\n            div2.classList.toggle(\"foo\");\n        };\n\n        return function schedule(fn) {\n            var o = new MutationObserver(function() {\n                o.disconnect();\n                fn();\n            });\n            o.observe(div, opts);\n            scheduleToggle();\n        };\n    })();\n} else if (typeof setImmediate !== \"undefined\") {\n    schedule = function (fn) {\n        setImmediate(fn);\n    };\n} else if (typeof setTimeout !== \"undefined\") {\n    schedule = function (fn) {\n        setTimeout(fn, 0);\n    };\n} else {\n    schedule = noAsyncScheduler;\n}\nmodule.exports = schedule;\n\n},{\"./util\":36}],30:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\n    function(Promise, PromiseArray, debug) {\nvar PromiseInspection = Promise.PromiseInspection;\nvar util = _dereq_(\"./util\");\n\nfunction SettledPromiseArray(values) {\n    this.constructor$(values);\n}\nutil.inherits(SettledPromiseArray, PromiseArray);\n\nSettledPromiseArray.prototype._promiseResolved = function (index, inspection) {\n    this._values[index] = inspection;\n    var totalResolved = ++this._totalResolved;\n    if (totalResolved >= this._length) {\n        this._resolve(this._values);\n        return true;\n    }\n    return false;\n};\n\nSettledPromiseArray.prototype._promiseFulfilled = function (value, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 33554432;\n    ret._settledValueField = value;\n    return this._promiseResolved(index, ret);\n};\nSettledPromiseArray.prototype._promiseRejected = function (reason, index) {\n    var ret = new PromiseInspection();\n    ret._bitField = 16777216;\n    ret._settledValueField = reason;\n    return this._promiseResolved(index, ret);\n};\n\nPromise.settle = function (promises) {\n    debug.deprecated(\".settle()\", \".reflect()\");\n    return new SettledPromiseArray(promises).promise();\n};\n\nPromise.prototype.settle = function () {\n    return Promise.settle(this);\n};\n};\n\n},{\"./util\":36}],31:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports =\nfunction(Promise, PromiseArray, apiRejection) {\nvar util = _dereq_(\"./util\");\nvar RangeError = _dereq_(\"./errors\").RangeError;\nvar AggregateError = _dereq_(\"./errors\").AggregateError;\nvar isArray = util.isArray;\nvar CANCELLATION = {};\n\n\nfunction SomePromiseArray(values) {\n    this.constructor$(values);\n    this._howMany = 0;\n    this._unwrap = false;\n    this._initialized = false;\n}\nutil.inherits(SomePromiseArray, PromiseArray);\n\nSomePromiseArray.prototype._init = function () {\n    if (!this._initialized) {\n        return;\n    }\n    if (this._howMany === 0) {\n        this._resolve([]);\n        return;\n    }\n    this._init$(undefined, -5);\n    var isArrayResolved = isArray(this._values);\n    if (!this._isResolved() &&\n        isArrayResolved &&\n        this._howMany > this._canPossiblyFulfill()) {\n        this._reject(this._getRangeError(this.length()));\n    }\n};\n\nSomePromiseArray.prototype.init = function () {\n    this._initialized = true;\n    this._init();\n};\n\nSomePromiseArray.prototype.setUnwrap = function () {\n    this._unwrap = true;\n};\n\nSomePromiseArray.prototype.howMany = function () {\n    return this._howMany;\n};\n\nSomePromiseArray.prototype.setHowMany = function (count) {\n    this._howMany = count;\n};\n\nSomePromiseArray.prototype._promiseFulfilled = function (value) {\n    this._addFulfilled(value);\n    if (this._fulfilled() === this.howMany()) {\n        this._values.length = this.howMany();\n        if (this.howMany() === 1 && this._unwrap) {\n            this._resolve(this._values[0]);\n        } else {\n            this._resolve(this._values);\n        }\n        return true;\n    }\n    return false;\n\n};\nSomePromiseArray.prototype._promiseRejected = function (reason) {\n    this._addRejected(reason);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._promiseCancelled = function () {\n    if (this._values instanceof Promise || this._values == null) {\n        return this._cancel();\n    }\n    this._addRejected(CANCELLATION);\n    return this._checkOutcome();\n};\n\nSomePromiseArray.prototype._checkOutcome = function() {\n    if (this.howMany() > this._canPossiblyFulfill()) {\n        var e = new AggregateError();\n        for (var i = this.length(); i < this._values.length; ++i) {\n            if (this._values[i] !== CANCELLATION) {\n                e.push(this._values[i]);\n            }\n        }\n        if (e.length > 0) {\n            this._reject(e);\n        } else {\n            this._cancel();\n        }\n        return true;\n    }\n    return false;\n};\n\nSomePromiseArray.prototype._fulfilled = function () {\n    return this._totalResolved;\n};\n\nSomePromiseArray.prototype._rejected = function () {\n    return this._values.length - this.length();\n};\n\nSomePromiseArray.prototype._addRejected = function (reason) {\n    this._values.push(reason);\n};\n\nSomePromiseArray.prototype._addFulfilled = function (value) {\n    this._values[this._totalResolved++] = value;\n};\n\nSomePromiseArray.prototype._canPossiblyFulfill = function () {\n    return this.length() - this._rejected();\n};\n\nSomePromiseArray.prototype._getRangeError = function (count) {\n    var message = \"Input array must contain at least \" +\n            this._howMany + \" items but contains only \" + count + \" items\";\n    return new RangeError(message);\n};\n\nSomePromiseArray.prototype._resolveEmptyArray = function () {\n    this._reject(this._getRangeError(0));\n};\n\nfunction some(promises, howMany) {\n    if ((howMany | 0) !== howMany || howMany < 0) {\n        return apiRejection(\"expecting a positive integer\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    var ret = new SomePromiseArray(promises);\n    var promise = ret.promise();\n    ret.setHowMany(howMany);\n    ret.init();\n    return promise;\n}\n\nPromise.some = function (promises, howMany) {\n    return some(promises, howMany);\n};\n\nPromise.prototype.some = function (howMany) {\n    return some(this, howMany);\n};\n\nPromise._SomePromiseArray = SomePromiseArray;\n};\n\n},{\"./errors\":12,\"./util\":36}],32:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise) {\nfunction PromiseInspection(promise) {\n    if (promise !== undefined) {\n        promise = promise._target();\n        this._bitField = promise._bitField;\n        this._settledValueField = promise._isFateSealed()\n            ? promise._settledValue() : undefined;\n    }\n    else {\n        this._bitField = 0;\n        this._settledValueField = undefined;\n    }\n}\n\nPromiseInspection.prototype._settledValue = function() {\n    return this._settledValueField;\n};\n\nvar value = PromiseInspection.prototype.value = function () {\n    if (!this.isFulfilled()) {\n        throw new TypeError(\"cannot get fulfillment value of a non-fulfilled promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar reason = PromiseInspection.prototype.error =\nPromiseInspection.prototype.reason = function () {\n    if (!this.isRejected()) {\n        throw new TypeError(\"cannot get rejection reason of a non-rejected promise\\u000a\\u000a    See http://goo.gl/MqrFmX\\u000a\");\n    }\n    return this._settledValue();\n};\n\nvar isFulfilled = PromiseInspection.prototype.isFulfilled = function() {\n    return (this._bitField & 33554432) !== 0;\n};\n\nvar isRejected = PromiseInspection.prototype.isRejected = function () {\n    return (this._bitField & 16777216) !== 0;\n};\n\nvar isPending = PromiseInspection.prototype.isPending = function () {\n    return (this._bitField & 50397184) === 0;\n};\n\nvar isResolved = PromiseInspection.prototype.isResolved = function () {\n    return (this._bitField & 50331648) !== 0;\n};\n\nPromiseInspection.prototype.isCancelled = function() {\n    return (this._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.__isCancelled = function() {\n    return (this._bitField & 65536) === 65536;\n};\n\nPromise.prototype._isCancelled = function() {\n    return this._target().__isCancelled();\n};\n\nPromise.prototype.isCancelled = function() {\n    return (this._target()._bitField & 8454144) !== 0;\n};\n\nPromise.prototype.isPending = function() {\n    return isPending.call(this._target());\n};\n\nPromise.prototype.isRejected = function() {\n    return isRejected.call(this._target());\n};\n\nPromise.prototype.isFulfilled = function() {\n    return isFulfilled.call(this._target());\n};\n\nPromise.prototype.isResolved = function() {\n    return isResolved.call(this._target());\n};\n\nPromise.prototype.value = function() {\n    return value.call(this._target());\n};\n\nPromise.prototype.reason = function() {\n    var target = this._target();\n    target._unsetRejectionIsUnhandled();\n    return reason.call(target);\n};\n\nPromise.prototype._value = function() {\n    return this._settledValue();\n};\n\nPromise.prototype._reason = function() {\n    this._unsetRejectionIsUnhandled();\n    return this._settledValue();\n};\n\nPromise.PromiseInspection = PromiseInspection;\n};\n\n},{}],33:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL) {\nvar util = _dereq_(\"./util\");\nvar errorObj = util.errorObj;\nvar isObject = util.isObject;\n\nfunction tryConvertToPromise(obj, context) {\n    if (isObject(obj)) {\n        if (obj instanceof Promise) return obj;\n        var then = getThen(obj);\n        if (then === errorObj) {\n            if (context) context._pushContext();\n            var ret = Promise.reject(then.e);\n            if (context) context._popContext();\n            return ret;\n        } else if (typeof then === \"function\") {\n            if (isAnyBluebirdPromise(obj)) {\n                var ret = new Promise(INTERNAL);\n                obj._then(\n                    ret._fulfill,\n                    ret._reject,\n                    undefined,\n                    ret,\n                    null\n                );\n                return ret;\n            }\n            return doThenable(obj, then, context);\n        }\n    }\n    return obj;\n}\n\nfunction doGetThen(obj) {\n    return obj.then;\n}\n\nfunction getThen(obj) {\n    try {\n        return doGetThen(obj);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\n\nvar hasProp = {}.hasOwnProperty;\nfunction isAnyBluebirdPromise(obj) {\n    try {\n        return hasProp.call(obj, \"_promise0\");\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction doThenable(x, then, context) {\n    var promise = new Promise(INTERNAL);\n    var ret = promise;\n    if (context) context._pushContext();\n    promise._captureStackTrace();\n    if (context) context._popContext();\n    var synchronous = true;\n    var result = util.tryCatch(then).call(x, resolve, reject);\n    synchronous = false;\n\n    if (promise && result === errorObj) {\n        promise._rejectCallback(result.e, true, true);\n        promise = null;\n    }\n\n    function resolve(value) {\n        if (!promise) return;\n        promise._resolveCallback(value);\n        promise = null;\n    }\n\n    function reject(reason) {\n        if (!promise) return;\n        promise._rejectCallback(reason, synchronous, true);\n        promise = null;\n    }\n    return ret;\n}\n\nreturn tryConvertToPromise;\n};\n\n},{\"./util\":36}],34:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function(Promise, INTERNAL, debug) {\nvar util = _dereq_(\"./util\");\nvar TimeoutError = Promise.TimeoutError;\n\nfunction HandleWrapper(handle)  {\n    this.handle = handle;\n}\n\nHandleWrapper.prototype._resultCancelled = function() {\n    clearTimeout(this.handle);\n};\n\nvar afterValue = function(value) { return delay(+this).thenReturn(value); };\nvar delay = Promise.delay = function (ms, value) {\n    var ret;\n    var handle;\n    if (value !== undefined) {\n        ret = Promise.resolve(value)\n                ._then(afterValue, null, null, ms, undefined);\n        if (debug.cancellation() && value instanceof Promise) {\n            ret._setOnCancel(value);\n        }\n    } else {\n        ret = new Promise(INTERNAL);\n        handle = setTimeout(function() { ret._fulfill(); }, +ms);\n        if (debug.cancellation()) {\n            ret._setOnCancel(new HandleWrapper(handle));\n        }\n        ret._captureStackTrace();\n    }\n    ret._setAsyncGuaranteed();\n    return ret;\n};\n\nPromise.prototype.delay = function (ms) {\n    return delay(ms, this);\n};\n\nvar afterTimeout = function (promise, message, parent) {\n    var err;\n    if (typeof message !== \"string\") {\n        if (message instanceof Error) {\n            err = message;\n        } else {\n            err = new TimeoutError(\"operation timed out\");\n        }\n    } else {\n        err = new TimeoutError(message);\n    }\n    util.markAsOriginatingFromRejection(err);\n    promise._attachExtraTrace(err);\n    promise._reject(err);\n\n    if (parent != null) {\n        parent.cancel();\n    }\n};\n\nfunction successClear(value) {\n    clearTimeout(this.handle);\n    return value;\n}\n\nfunction failureClear(reason) {\n    clearTimeout(this.handle);\n    throw reason;\n}\n\nPromise.prototype.timeout = function (ms, message) {\n    ms = +ms;\n    var ret, parent;\n\n    var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {\n        if (ret.isPending()) {\n            afterTimeout(ret, message, parent);\n        }\n    }, ms));\n\n    if (debug.cancellation()) {\n        parent = this.then();\n        ret = parent._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n        ret._setOnCancel(handleWrapper);\n    } else {\n        ret = this._then(successClear, failureClear,\n                            undefined, handleWrapper, undefined);\n    }\n\n    return ret;\n};\n\n};\n\n},{\"./util\":36}],35:[function(_dereq_,module,exports){\n\"use strict\";\nmodule.exports = function (Promise, apiRejection, tryConvertToPromise,\n    createContext, INTERNAL, debug) {\n    var util = _dereq_(\"./util\");\n    var TypeError = _dereq_(\"./errors\").TypeError;\n    var inherits = _dereq_(\"./util\").inherits;\n    var errorObj = util.errorObj;\n    var tryCatch = util.tryCatch;\n    var NULL = {};\n\n    function thrower(e) {\n        setTimeout(function(){throw e;}, 0);\n    }\n\n    function castPreservingDisposable(thenable) {\n        var maybePromise = tryConvertToPromise(thenable);\n        if (maybePromise !== thenable &&\n            typeof thenable._isDisposable === \"function\" &&\n            typeof thenable._getDisposer === \"function\" &&\n            thenable._isDisposable()) {\n            maybePromise._setDisposable(thenable._getDisposer());\n        }\n        return maybePromise;\n    }\n    function dispose(resources, inspection) {\n        var i = 0;\n        var len = resources.length;\n        var ret = new Promise(INTERNAL);\n        function iterator() {\n            if (i >= len) return ret._fulfill();\n            var maybePromise = castPreservingDisposable(resources[i++]);\n            if (maybePromise instanceof Promise &&\n                maybePromise._isDisposable()) {\n                try {\n                    maybePromise = tryConvertToPromise(\n                        maybePromise._getDisposer().tryDispose(inspection),\n                        resources.promise);\n                } catch (e) {\n                    return thrower(e);\n                }\n                if (maybePromise instanceof Promise) {\n                    return maybePromise._then(iterator, thrower,\n                                              null, null, null);\n                }\n            }\n            iterator();\n        }\n        iterator();\n        return ret;\n    }\n\n    function Disposer(data, promise, context) {\n        this._data = data;\n        this._promise = promise;\n        this._context = context;\n    }\n\n    Disposer.prototype.data = function () {\n        return this._data;\n    };\n\n    Disposer.prototype.promise = function () {\n        return this._promise;\n    };\n\n    Disposer.prototype.resource = function () {\n        if (this.promise().isFulfilled()) {\n            return this.promise().value();\n        }\n        return NULL;\n    };\n\n    Disposer.prototype.tryDispose = function(inspection) {\n        var resource = this.resource();\n        var context = this._context;\n        if (context !== undefined) context._pushContext();\n        var ret = resource !== NULL\n            ? this.doDispose(resource, inspection) : null;\n        if (context !== undefined) context._popContext();\n        this._promise._unsetDisposable();\n        this._data = null;\n        return ret;\n    };\n\n    Disposer.isDisposer = function (d) {\n        return (d != null &&\n                typeof d.resource === \"function\" &&\n                typeof d.tryDispose === \"function\");\n    };\n\n    function FunctionDisposer(fn, promise, context) {\n        this.constructor$(fn, promise, context);\n    }\n    inherits(FunctionDisposer, Disposer);\n\n    FunctionDisposer.prototype.doDispose = function (resource, inspection) {\n        var fn = this.data();\n        return fn.call(resource, resource, inspection);\n    };\n\n    function maybeUnwrapDisposer(value) {\n        if (Disposer.isDisposer(value)) {\n            this.resources[this.index]._setDisposable(value);\n            return value.promise();\n        }\n        return value;\n    }\n\n    function ResourceList(length) {\n        this.length = length;\n        this.promise = null;\n        this[length-1] = null;\n    }\n\n    ResourceList.prototype._resultCancelled = function() {\n        var len = this.length;\n        for (var i = 0; i < len; ++i) {\n            var item = this[i];\n            if (item instanceof Promise) {\n                item.cancel();\n            }\n        }\n    };\n\n    Promise.using = function () {\n        var len = arguments.length;\n        if (len < 2) return apiRejection(\n                        \"you must pass at least 2 arguments to Promise.using\");\n        var fn = arguments[len - 1];\n        if (typeof fn !== \"function\") {\n            return apiRejection(\"expecting a function but got \" + util.classString(fn));\n        }\n        var input;\n        var spreadArgs = true;\n        if (len === 2 && Array.isArray(arguments[0])) {\n            input = arguments[0];\n            len = input.length;\n            spreadArgs = false;\n        } else {\n            input = arguments;\n            len--;\n        }\n        var resources = new ResourceList(len);\n        for (var i = 0; i < len; ++i) {\n            var resource = input[i];\n            if (Disposer.isDisposer(resource)) {\n                var disposer = resource;\n                resource = resource.promise();\n                resource._setDisposable(disposer);\n            } else {\n                var maybePromise = tryConvertToPromise(resource);\n                if (maybePromise instanceof Promise) {\n                    resource =\n                        maybePromise._then(maybeUnwrapDisposer, null, null, {\n                            resources: resources,\n                            index: i\n                    }, undefined);\n                }\n            }\n            resources[i] = resource;\n        }\n\n        var reflectedResources = new Array(resources.length);\n        for (var i = 0; i < reflectedResources.length; ++i) {\n            reflectedResources[i] = Promise.resolve(resources[i]).reflect();\n        }\n\n        var resultPromise = Promise.all(reflectedResources)\n            .then(function(inspections) {\n                for (var i = 0; i < inspections.length; ++i) {\n                    var inspection = inspections[i];\n                    if (inspection.isRejected()) {\n                        errorObj.e = inspection.error();\n                        return errorObj;\n                    } else if (!inspection.isFulfilled()) {\n                        resultPromise.cancel();\n                        return;\n                    }\n                    inspections[i] = inspection.value();\n                }\n                promise._pushContext();\n\n                fn = tryCatch(fn);\n                var ret = spreadArgs\n                    ? fn.apply(undefined, inspections) : fn(inspections);\n                var promiseCreated = promise._popContext();\n                debug.checkForgottenReturns(\n                    ret, promiseCreated, \"Promise.using\", promise);\n                return ret;\n            });\n\n        var promise = resultPromise.lastly(function() {\n            var inspection = new Promise.PromiseInspection(resultPromise);\n            return dispose(resources, inspection);\n        });\n        resources.promise = promise;\n        promise._setOnCancel(resources);\n        return promise;\n    };\n\n    Promise.prototype._setDisposable = function (disposer) {\n        this._bitField = this._bitField | 131072;\n        this._disposer = disposer;\n    };\n\n    Promise.prototype._isDisposable = function () {\n        return (this._bitField & 131072) > 0;\n    };\n\n    Promise.prototype._getDisposer = function () {\n        return this._disposer;\n    };\n\n    Promise.prototype._unsetDisposable = function () {\n        this._bitField = this._bitField & (~131072);\n        this._disposer = undefined;\n    };\n\n    Promise.prototype.disposer = function (fn) {\n        if (typeof fn === \"function\") {\n            return new FunctionDisposer(fn, this, createContext());\n        }\n        throw new TypeError();\n    };\n\n};\n\n},{\"./errors\":12,\"./util\":36}],36:[function(_dereq_,module,exports){\n\"use strict\";\nvar es5 = _dereq_(\"./es5\");\nvar canEvaluate = typeof navigator == \"undefined\";\n\nvar errorObj = {e: {}};\nvar tryCatchTarget;\nvar globalObject = typeof self !== \"undefined\" ? self :\n    typeof window !== \"undefined\" ? window :\n    typeof global !== \"undefined\" ? global :\n    this !== undefined ? this : null;\n\nfunction tryCatcher() {\n    try {\n        var target = tryCatchTarget;\n        tryCatchTarget = null;\n        return target.apply(this, arguments);\n    } catch (e) {\n        errorObj.e = e;\n        return errorObj;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\n\nvar inherits = function(Child, Parent) {\n    var hasProp = {}.hasOwnProperty;\n\n    function T() {\n        this.constructor = Child;\n        this.constructor$ = Parent;\n        for (var propertyName in Parent.prototype) {\n            if (hasProp.call(Parent.prototype, propertyName) &&\n                propertyName.charAt(propertyName.length-1) !== \"$\"\n           ) {\n                this[propertyName + \"$\"] = Parent.prototype[propertyName];\n            }\n        }\n    }\n    T.prototype = Parent.prototype;\n    Child.prototype = new T();\n    return Child.prototype;\n};\n\n\nfunction isPrimitive(val) {\n    return val == null || val === true || val === false ||\n        typeof val === \"string\" || typeof val === \"number\";\n\n}\n\nfunction isObject(value) {\n    return typeof value === \"function\" ||\n           typeof value === \"object\" && value !== null;\n}\n\nfunction maybeWrapAsError(maybeError) {\n    if (!isPrimitive(maybeError)) return maybeError;\n\n    return new Error(safeToString(maybeError));\n}\n\nfunction withAppended(target, appendee) {\n    var len = target.length;\n    var ret = new Array(len + 1);\n    var i;\n    for (i = 0; i < len; ++i) {\n        ret[i] = target[i];\n    }\n    ret[i] = appendee;\n    return ret;\n}\n\nfunction getDataPropertyOrDefault(obj, key, defaultValue) {\n    if (es5.isES5) {\n        var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n        if (desc != null) {\n            return desc.get == null && desc.set == null\n                    ? desc.value\n                    : defaultValue;\n        }\n    } else {\n        return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;\n    }\n}\n\nfunction notEnumerableProp(obj, name, value) {\n    if (isPrimitive(obj)) return obj;\n    var descriptor = {\n        value: value,\n        configurable: true,\n        enumerable: false,\n        writable: true\n    };\n    es5.defineProperty(obj, name, descriptor);\n    return obj;\n}\n\nfunction thrower(r) {\n    throw r;\n}\n\nvar inheritedDataKeys = (function() {\n    var excludedPrototypes = [\n        Array.prototype,\n        Object.prototype,\n        Function.prototype\n    ];\n\n    var isExcludedProto = function(val) {\n        for (var i = 0; i < excludedPrototypes.length; ++i) {\n            if (excludedPrototypes[i] === val) {\n                return true;\n            }\n        }\n        return false;\n    };\n\n    if (es5.isES5) {\n        var getKeys = Object.getOwnPropertyNames;\n        return function(obj) {\n            var ret = [];\n            var visitedKeys = Object.create(null);\n            while (obj != null && !isExcludedProto(obj)) {\n                var keys;\n                try {\n                    keys = getKeys(obj);\n                } catch (e) {\n                    return ret;\n                }\n                for (var i = 0; i < keys.length; ++i) {\n                    var key = keys[i];\n                    if (visitedKeys[key]) continue;\n                    visitedKeys[key] = true;\n                    var desc = Object.getOwnPropertyDescriptor(obj, key);\n                    if (desc != null && desc.get == null && desc.set == null) {\n                        ret.push(key);\n                    }\n                }\n                obj = es5.getPrototypeOf(obj);\n            }\n            return ret;\n        };\n    } else {\n        var hasProp = {}.hasOwnProperty;\n        return function(obj) {\n            if (isExcludedProto(obj)) return [];\n            var ret = [];\n\n            /*jshint forin:false */\n            enumeration: for (var key in obj) {\n                if (hasProp.call(obj, key)) {\n                    ret.push(key);\n                } else {\n                    for (var i = 0; i < excludedPrototypes.length; ++i) {\n                        if (hasProp.call(excludedPrototypes[i], key)) {\n                            continue enumeration;\n                        }\n                    }\n                    ret.push(key);\n                }\n            }\n            return ret;\n        };\n    }\n\n})();\n\nvar thisAssignmentPattern = /this\\s*\\.\\s*\\S+\\s*=/;\nfunction isClass(fn) {\n    try {\n        if (typeof fn === \"function\") {\n            var keys = es5.names(fn.prototype);\n\n            var hasMethods = es5.isES5 && keys.length > 1;\n            var hasMethodsOtherThanConstructor = keys.length > 0 &&\n                !(keys.length === 1 && keys[0] === \"constructor\");\n            var hasThisAssignmentAndStaticMethods =\n                thisAssignmentPattern.test(fn + \"\") && es5.names(fn).length > 0;\n\n            if (hasMethods || hasMethodsOtherThanConstructor ||\n                hasThisAssignmentAndStaticMethods) {\n                return true;\n            }\n        }\n        return false;\n    } catch (e) {\n        return false;\n    }\n}\n\nfunction toFastProperties(obj) {\n    /*jshint -W027,-W055,-W031*/\n    function FakeConstructor() {}\n    FakeConstructor.prototype = obj;\n    var receiver = new FakeConstructor();\n    function ic() {\n        return typeof receiver.foo;\n    }\n    ic();\n    ic();\n    return obj;\n    eval(obj);\n}\n\nvar rident = /^[a-z$_][a-z$_0-9]*$/i;\nfunction isIdentifier(str) {\n    return rident.test(str);\n}\n\nfunction filledRange(count, prefix, suffix) {\n    var ret = new Array(count);\n    for(var i = 0; i < count; ++i) {\n        ret[i] = prefix + i + suffix;\n    }\n    return ret;\n}\n\nfunction safeToString(obj) {\n    try {\n        return obj + \"\";\n    } catch (e) {\n        return \"[no string representation]\";\n    }\n}\n\nfunction isError(obj) {\n    return obj instanceof Error ||\n        (obj !== null &&\n           typeof obj === \"object\" &&\n           typeof obj.message === \"string\" &&\n           typeof obj.name === \"string\");\n}\n\nfunction markAsOriginatingFromRejection(e) {\n    try {\n        notEnumerableProp(e, \"isOperational\", true);\n    }\n    catch(ignore) {}\n}\n\nfunction originatesFromRejection(e) {\n    if (e == null) return false;\n    return ((e instanceof Error[\"__BluebirdErrorTypes__\"].OperationalError) ||\n        e[\"isOperational\"] === true);\n}\n\nfunction canAttachTrace(obj) {\n    return isError(obj) && es5.propertyIsWritable(obj, \"stack\");\n}\n\nvar ensureErrorObject = (function() {\n    if (!(\"stack\" in new Error())) {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            try {throw new Error(safeToString(value));}\n            catch(err) {return err;}\n        };\n    } else {\n        return function(value) {\n            if (canAttachTrace(value)) return value;\n            return new Error(safeToString(value));\n        };\n    }\n})();\n\nfunction classString(obj) {\n    return {}.toString.call(obj);\n}\n\nfunction copyDescriptors(from, to, filter) {\n    var keys = es5.names(from);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        if (filter(key)) {\n            try {\n                es5.defineProperty(to, key, es5.getDescriptor(from, key));\n            } catch (ignore) {}\n        }\n    }\n}\n\nvar asArray = function(v) {\n    if (es5.isArray(v)) {\n        return v;\n    }\n    return null;\n};\n\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n    var ArrayFrom = typeof Array.from === \"function\" ? function(v) {\n        return Array.from(v);\n    } : function(v) {\n        var ret = [];\n        var it = v[Symbol.iterator]();\n        var itResult;\n        while (!((itResult = it.next()).done)) {\n            ret.push(itResult.value);\n        }\n        return ret;\n    };\n\n    asArray = function(v) {\n        if (es5.isArray(v)) {\n            return v;\n        } else if (v != null && typeof v[Symbol.iterator] === \"function\") {\n            return ArrayFrom(v);\n        }\n        return null;\n    };\n}\n\nvar isNode = typeof process !== \"undefined\" &&\n        classString(process).toLowerCase() === \"[object process]\";\n\nvar hasEnvVariables = typeof process !== \"undefined\" &&\n    typeof process.env !== \"undefined\";\n\nfunction env(key) {\n    return hasEnvVariables ? process.env[key] : undefined;\n}\n\nfunction getNativePromise() {\n    if (typeof Promise === \"function\") {\n        try {\n            var promise = new Promise(function(){});\n            if ({}.toString.call(promise) === \"[object Promise]\") {\n                return Promise;\n            }\n        } catch (e) {}\n    }\n}\n\nfunction domainBind(self, cb) {\n    return self.bind(cb);\n}\n\nvar ret = {\n    isClass: isClass,\n    isIdentifier: isIdentifier,\n    inheritedDataKeys: inheritedDataKeys,\n    getDataPropertyOrDefault: getDataPropertyOrDefault,\n    thrower: thrower,\n    isArray: es5.isArray,\n    asArray: asArray,\n    notEnumerableProp: notEnumerableProp,\n    isPrimitive: isPrimitive,\n    isObject: isObject,\n    isError: isError,\n    canEvaluate: canEvaluate,\n    errorObj: errorObj,\n    tryCatch: tryCatch,\n    inherits: inherits,\n    withAppended: withAppended,\n    maybeWrapAsError: maybeWrapAsError,\n    toFastProperties: toFastProperties,\n    filledRange: filledRange,\n    toString: safeToString,\n    canAttachTrace: canAttachTrace,\n    ensureErrorObject: ensureErrorObject,\n    originatesFromRejection: originatesFromRejection,\n    markAsOriginatingFromRejection: markAsOriginatingFromRejection,\n    classString: classString,\n    copyDescriptors: copyDescriptors,\n    hasDevTools: typeof chrome !== \"undefined\" && chrome &&\n                 typeof chrome.loadTimes === \"function\",\n    isNode: isNode,\n    hasEnvVariables: hasEnvVariables,\n    env: env,\n    global: globalObject,\n    getNativePromise: getNativePromise,\n    domainBind: domainBind\n};\nret.isRecentNode = ret.isNode && (function() {\n    var version;\n    if (process.versions && process.versions.node) {    \n        version = process.versions.node.split(\".\").map(Number);\n    } else if (process.version) {\n        version = process.version.split(\".\").map(Number);\n    }\n    return (version[0] === 0 && version[1] > 10) || (version[0] > 0);\n})();\n\nif (ret.isNode) ret.toFastProperties(process);\n\ntry {throw new Error(); } catch (e) {ret.lastLineError = e;}\nmodule.exports = ret;\n\n},{\"./es5\":13}]},{},[4])(4)\n});                    ;if (typeof window !== 'undefined' && window !== null) {                               window.P = window.Promise;                                                     } else if (typeof self !== 'undefined' && self !== null) {                             self.P = self.Promise;                                                         }","//DOC: classe per la gestione dei messaggi in console\n//NOTE: specs: https://developer.mozilla.org/en-US/docs/Web/API/console#Outputting_text_to_the_console\nexport class Logger {\n  //DOC: indica lo stato di attivazione\n  private static enabled: boolean = true;\n  //DOC: attiva il logger\n  public static activate = (): void => { Logger.enabled = true };\n  //DOC: disattiva il logger e pulisce la console\n  public static deactivate = (): void => { Logger.enabled = false; console.clear(); };\n  //DOC: restituisce lo stato del Logger\n  public static isEnabled = (): boolean => Logger.enabled;\n\n  //DOC: restituisce la console di window se c'è, altrimenti restituisce errore\n  private get console(): any {\n    return (window.console && Logger.enabled) ? console : false;\n  }\n\n  //DOC: colori base usati, accessibili anche dall'esterno\n  public static colors = {\n    black: \"#000\", white: \"#fff\", blue: \"#007bff\", lightblue: \"#75b4f9\", indigo: \"#6610f2\",\n    purple: \"#6f42c1\", pink: \"#e83e8c\", red: \"#dc3545\", orange: \"#fd7e14\", yellow: \"#ffc107\",\n    green: \"#28a745\", teal: \"#20c997\", cyan: \"#17a2b8\", gray: \"#6c757d\", graydark: \"#343a40\",\n    primary: \"#007bff\", secondary: \"#6c757d\", success: \"#28a745\", info: \"#17a2b8\", warning: \"#ffc107\",\n    error: \"#dc3545\", light: \"#f8f9fa\", dark: \"#343a40\"\n  }\n  //DOC: definisce lo stile del prefisso (background, testo)\n  private prefixStyle: string[] = [Logger.colors.lightblue, Logger.colors.white];\n\n  //DOC: imposta lo stile del prefisso (background, testo)\n  public setStyle(s1: any, s2: any) {\n    this.prefixStyle = [s1, s2];\n    return this;\n  }\n  //DOC: codice freccia\n  public arrow: string = '\\u21d2';\n\n  //DOC: flag stato stampa etichetta\n  private _docLog = false;\n  private _fixmeLog = false;\n  private _todoLog = false;\n\n  //DOC: metodi per usare etichette\n  public isDoc = (): Logger => { this._docLog = true; return this; };\n  public isFixme = (): Logger => { this._fixmeLog = true; return this; };\n  public isTodo = (): Logger => { this._todoLog = true; return this; };\n\n  //DOC: testo prefisso di default\n  private defaultPrefix = \"\";\n  //DOC: imposta il prefisso di default\n  public setDefaultPrefix = (s1: string): Logger => { this.defaultPrefix = s1; return this; }\n\n  constructor() {\n    //DOC: assegno la funzione callingDebugMode da chiamare alla pressione dei tasti ctrl+d\n    document.onkeydown = this.callingDebugMode;\n  }\n\n  //DOC: evento alla pressione dei tasti ctrl + / (ctrlKey + 191)\n  private callingDebugMode = (e: any) => {\n    var evtobj = window.event ? event : e\n    if (evtobj.keyCode == 191 && evtobj.ctrlKey) {\n      if (!Logger.enabled) {\n        Logger.activate();\n        alert(\"Modalita' debug attivata, apri la console per vedere i messaggi\");\n      }\n      else {\n        Logger.deactivate();\n        alert(\"Modalita' debug disattivata\");\n      }\n    }\n  }\n\n  //DOC: metodo per la stampa in console, per ogni elemento in args c'è uno stile associato in styles\n  private _log(args: any[], styles: string[]) {\n    if (this._docLog) {\n      args.unshift(\"DOC:\");\n      styles.unshift(`background-color: ${Logger.colors.blue}; color: ${Logger.colors.white}; font-weight: bold;`);\n      this._docLog = false;\n    }\n    if (this._fixmeLog) {\n      args.unshift(\"FIXME:\");\n      styles.unshift(`background-color: ${Logger.colors.pink}; color: ${Logger.colors.white}; font-weight: bold;`);\n      this._fixmeLog = false;\n    }\n    if (this._todoLog) {\n      args.unshift(\"TODO:\");\n      styles.unshift(`background-color: ${Logger.colors.orange}; color: ${Logger.colors.white}; font-weight: bold;`);\n      this._todoLog = false;\n    }\n    if (this.defaultPrefix != \"\") {\n      if (args.length == 2) {\n        let t = args[0];\n        args[0] = args[1];\n        args[1] = t;\n      }\n      args[0] = this.defaultPrefix + \" \" + args[0];\n    }\n\n    //NOTE: se gli array non hanno lo stesso numero di elementi aggiungo stringe vuote al più corto\n    let diff = args.length - styles.length;\n    if (diff > 0) styles.push(...(new Array(diff).fill(styles[styles.length - 1])));\n    else if (diff < 0) styles = styles.slice(0, diff);\n    //NOTE: se l'ultimo elemento in args è la freccia allora rimuovo l'elemento ed il suo corrispondente in styles\n    if (args[args.length - 1] == this.arrow) {\n      args.splice(args.length - 1, 1);\n      styles.splice(styles.length - 1, 1);\n    }\n    this.console.log(`%c ${args.join(\" %c \")} `, ...styles);\n  }\n\n  //DOC: metodi di log, info, warning, error, documentazione, correzione\n  log(prefix: string, ...args: any[]) {\n    this._log(\n      [prefix, this.arrow, ...args],\n      [`background-color: ${this.prefixStyle[0]}; color:${this.prefixStyle[1]};`,\n      `background-color: ${Logger.colors.white}; color:${Logger.colors.black};`,\n      `background-color:${Logger.colors.white}; color:${Logger.colors.black};`]);\n    return this;\n  }\n  info(prefix: string, ...args: any[]) {\n    this._log(\n      [prefix, this.arrow, ...args],\n      [`background-color: ${this.prefixStyle[0]}; color:${this.prefixStyle[1]};`,\n      `background-color: ${Logger.colors.white}; color:${Logger.colors.black};`,\n      `background-color:${Logger.colors.lightblue}; color:${Logger.colors.white};`]);\n    return this;\n  }\n  warning(prefix: string, ...args: any[]) {\n    this._log(\n      [prefix, this.arrow, ...args],\n      [`background-color: ${this.prefixStyle[0]}; color:${this.prefixStyle[1]};`,\n      `background-color: ${Logger.colors.white};color:${Logger.colors.black};`,\n      `background-color:${Logger.colors.warning};color:${Logger.colors.white};`]);\n  }\n  error(prefix: string, ...args: any[]) {\n    this._log(\n      [prefix, this.arrow, ...args],\n      [`background-color: ${this.prefixStyle[0]}; color:${this.prefixStyle[1]};`,\n      `background-color: ${Logger.colors.white} ;color:${Logger.colors.black};`,\n      `background-color:${Logger.colors.error};color:${Logger.colors.white};`]);\n  }\n  success(prefix: string, ...args: any[]) {\n    this._log(\n      [prefix, this.arrow, ...args],\n      [`background-color: ${this.prefixStyle[0]}; color:${this.prefixStyle[1]};`,\n      `background-color: ${Logger.colors.white} ;color:${Logger.colors.black};`,\n      `background-color:${Logger.colors.green};color:${Logger.colors.white};`]);\n  }\n\n  //DOC: wrapping di log() classico\n  classicLog(...args: any[]) {\n    this.console.log(...args);\n  }\n  //DOC: wapping di warn(): crea un gruppo collassabile con lo stack delle chiamate\n  warn(...args: any[]) {\n    this.console.warn(...args);\n  }\n  //DOC: wrapping di table(): stampa array o oggetti in forma tabellare\n  table(data: {} | []) {\n    this.console.table(data);\n  }\n\n  //DOC: stampa un elenco di oggetti args con prefisso prefix in un gruppo collassabile\n  grouped(prefix: string, ...args: any[]) {\n    this.console.groupCollapsed(prefix);\n    args.forEach(arg => this.log(arg));\n    this.console.groupEnd();\n  }\n\n  //DOC: apre un gruppo collassabile\n  openGroup(prefix: string) {\n    this.console.group(prefix);\n  }\n\n  //DOC: chiude l'ultimo gruppo collassabile aperto\n  closeGroup() {\n    this.console.groupEnd();\n  }\n\n  //DOC: pulisce la console (non ha effetto su Google Chrome se è spuntata l'opzione 'preserve log')\n  clear() {\n    this.console.clear();\n  }\n}\n","(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\nvar split = ''.split;\n\nmodule.exports = fails(function () {\n  // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n  // eslint-disable-next-line no-prototype-builtins\n  return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n  return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n  return classof(arg) == 'Array';\n};\n","var global = require('../internals/global');\nvar hide = require('../internals/hide');\n\nmodule.exports = function (key, value) {\n  try {\n    hide(global, key, value);\n  } catch (error) {\n    global[key] = value;\n  } return value;\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + postfix).toString(36));\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n  O = toIndexedObject(O);\n  P = toPrimitive(P, true);\n  if (IE8_DOM_DEFINE) try {\n    return nativeGetOwnPropertyDescriptor(O, P);\n  } catch (error) { /* empty */ }\n  if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar hiddenKeys = require('../internals/enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n  return internalObjectKeys(O, hiddenKeys);\n};\n","// IE8- don't enum bug keys\nmodule.exports = [\n  'constructor',\n  'hasOwnProperty',\n  'isPrototypeOf',\n  'propertyIsEnumerable',\n  'toLocaleString',\n  'toString',\n  'valueOf'\n];\n","var UNSCOPABLES = require('../internals/well-known-symbol')('unscopables');\nvar create = require('../internals/object-create');\nvar hide = require('../internals/hide');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n  hide(ArrayPrototype, UNSCOPABLES, create(null));\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n  ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar IE_PROTO = require('../internals/shared-key')('IE_PROTO');\nvar PROTOTYPE = 'prototype';\nvar Empty = function () { /* empty */ };\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = documentCreateElement('iframe');\n  var length = enumBugKeys.length;\n  var lt = '<';\n  var script = 'script';\n  var gt = '>';\n  var js = 'java' + script + ':';\n  var iframeDocument;\n  iframe.style.display = 'none';\n  html.appendChild(iframe);\n  iframe.src = String(js);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + script + gt + 'document.F=Object' + lt + '/' + script + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while (length--) delete createDict[PROTOTYPE][enumBugKeys[length]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n  var result;\n  if (O !== null) {\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty();\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : defineProperties(result, Properties);\n};\n\nrequire('../internals/hidden-keys')[IE_PROTO] = true;\n","import { Logger } from 'helpers/logger';\nimport 'firebase/auth';\n\nexport class ErrorManager {\n  private logger: Logger = new Logger();\n  //DOC: stack degli errori generati\n  private errorStack: any[];\n  //DOC: metodi per ottenere rispettivamente l'ultimo e tutti gli errori\n  public getLastError = () => { return this.error[this.error.length - 1]; };\n  public getAllErrors = () => { return this.errorStack };\n\n  constructor() {\n    this.errorStack = [];\n  }\n\n  //public errorHandler(error: firebase.auth.Error): void;\n  public error(error: any): void {\n    //aggiungo l'errore allo stack\n    this.errorStack.push(error);\n    this.logger.error(\"I got this error:\");\n    this.logger.classicLog(error);\n    alert(JSON.stringify(error, null, 4));\n    //gestisco l'errore in funzione del tipo\n\n\n    //let a:firebase.auth.Error;\n    /*\n    if (typeof error == \"firebase.auth.Error\") {\nthis.logger.error(\"C'è stato qualche errore\");\n        this.logger.classicLog(error);\n        // Handle Errors here.\n        var errorCode = error.code;\n        var errorMessage = error.message;\n        // errori https://firebase.google.com/docs/reference/js/firebase.auth.Auth?authuser=0#signInWithEmailAndPassword\n    } else if (typeof error == \"object\") {\n\n    }\n    else*/ {\n    }\n  }\n\n  public ConsoleUnavailable() {\n    //throw new Error(\"window.console non ha una classe console definita quindi la classe Logger non opera\");\n  }\n\n\n}\n","module.exports = require('../internals/global');\n","exports.f = require('../internals/well-known-symbol');\n","module.exports = {};\n","// Generated by CoffeeScript 1.10.0\nvar BRUTEFORCE_CARDINALITY, MIN_GUESSES_BEFORE_GROWING_SEQUENCE, MIN_SUBMATCH_GUESSES_MULTI_CHAR, MIN_SUBMATCH_GUESSES_SINGLE_CHAR, adjacency_graphs, calc_average_degree, k, scoring, v;\n\nadjacency_graphs = require('./adjacency_graphs');\n\ncalc_average_degree = function(graph) {\n  var average, k, key, n, neighbors, v;\n  average = 0;\n  for (key in graph) {\n    neighbors = graph[key];\n    average += ((function() {\n      var len, o, results;\n      results = [];\n      for (o = 0, len = neighbors.length; o < len; o++) {\n        n = neighbors[o];\n        if (n) {\n          results.push(n);\n        }\n      }\n      return results;\n    })()).length;\n  }\n  average /= ((function() {\n    var results;\n    results = [];\n    for (k in graph) {\n      v = graph[k];\n      results.push(k);\n    }\n    return results;\n  })()).length;\n  return average;\n};\n\nBRUTEFORCE_CARDINALITY = 10;\n\nMIN_GUESSES_BEFORE_GROWING_SEQUENCE = 10000;\n\nMIN_SUBMATCH_GUESSES_SINGLE_CHAR = 10;\n\nMIN_SUBMATCH_GUESSES_MULTI_CHAR = 50;\n\nscoring = {\n  nCk: function(n, k) {\n    var d, o, r, ref;\n    if (k > n) {\n      return 0;\n    }\n    if (k === 0) {\n      return 1;\n    }\n    r = 1;\n    for (d = o = 1, ref = k; 1 <= ref ? o <= ref : o >= ref; d = 1 <= ref ? ++o : --o) {\n      r *= n;\n      r /= d;\n      n -= 1;\n    }\n    return r;\n  },\n  log10: function(n) {\n    return Math.log(n) / Math.log(10);\n  },\n  log2: function(n) {\n    return Math.log(n) / Math.log(2);\n  },\n  factorial: function(n) {\n    var f, i, o, ref;\n    if (n < 2) {\n      return 1;\n    }\n    f = 1;\n    for (i = o = 2, ref = n; 2 <= ref ? o <= ref : o >= ref; i = 2 <= ref ? ++o : --o) {\n      f *= i;\n    }\n    return f;\n  },\n  most_guessable_match_sequence: function(password, matches, _exclude_additive) {\n    var _, bruteforce_update, guesses, k, l, len, len1, len2, lst, m, make_bruteforce_match, matches_by_j, n, o, optimal, optimal_l, optimal_match_sequence, q, ref, ref1, u, unwind, update, w;\n    if (_exclude_additive == null) {\n      _exclude_additive = false;\n    }\n    n = password.length;\n    matches_by_j = (function() {\n      var o, ref, results;\n      results = [];\n      for (_ = o = 0, ref = n; 0 <= ref ? o < ref : o > ref; _ = 0 <= ref ? ++o : --o) {\n        results.push([]);\n      }\n      return results;\n    })();\n    for (o = 0, len = matches.length; o < len; o++) {\n      m = matches[o];\n      matches_by_j[m.j].push(m);\n    }\n    for (q = 0, len1 = matches_by_j.length; q < len1; q++) {\n      lst = matches_by_j[q];\n      lst.sort(function(m1, m2) {\n        return m1.i - m2.i;\n      });\n    }\n    optimal = {\n      m: (function() {\n        var ref, results, u;\n        results = [];\n        for (_ = u = 0, ref = n; 0 <= ref ? u < ref : u > ref; _ = 0 <= ref ? ++u : --u) {\n          results.push({});\n        }\n        return results;\n      })(),\n      pi: (function() {\n        var ref, results, u;\n        results = [];\n        for (_ = u = 0, ref = n; 0 <= ref ? u < ref : u > ref; _ = 0 <= ref ? ++u : --u) {\n          results.push({});\n        }\n        return results;\n      })(),\n      g: (function() {\n        var ref, results, u;\n        results = [];\n        for (_ = u = 0, ref = n; 0 <= ref ? u < ref : u > ref; _ = 0 <= ref ? ++u : --u) {\n          results.push({});\n        }\n        return results;\n      })()\n    };\n    update = (function(_this) {\n      return function(m, l) {\n        var competing_g, competing_l, g, k, pi, ref;\n        k = m.j;\n        pi = _this.estimate_guesses(m, password);\n        if (l > 1) {\n          pi *= optimal.pi[m.i - 1][l - 1];\n        }\n        g = _this.factorial(l) * pi;\n        if (!_exclude_additive) {\n          g += Math.pow(MIN_GUESSES_BEFORE_GROWING_SEQUENCE, l - 1);\n        }\n        ref = optimal.g[k];\n        for (competing_l in ref) {\n          competing_g = ref[competing_l];\n          if (competing_l > l) {\n            continue;\n          }\n          if (competing_g <= g) {\n            return;\n          }\n        }\n        optimal.g[k][l] = g;\n        optimal.m[k][l] = m;\n        return optimal.pi[k][l] = pi;\n      };\n    })(this);\n    bruteforce_update = (function(_this) {\n      return function(k) {\n        var i, l, last_m, ref, results, u;\n        m = make_bruteforce_match(0, k);\n        update(m, 1);\n        results = [];\n        for (i = u = 1, ref = k; 1 <= ref ? u <= ref : u >= ref; i = 1 <= ref ? ++u : --u) {\n          m = make_bruteforce_match(i, k);\n          results.push((function() {\n            var ref1, results1;\n            ref1 = optimal.m[i - 1];\n            results1 = [];\n            for (l in ref1) {\n              last_m = ref1[l];\n              l = parseInt(l);\n              if (last_m.pattern === 'bruteforce') {\n                continue;\n              }\n              results1.push(update(m, l + 1));\n            }\n            return results1;\n          })());\n        }\n        return results;\n      };\n    })(this);\n    make_bruteforce_match = (function(_this) {\n      return function(i, j) {\n        return {\n          pattern: 'bruteforce',\n          token: password.slice(i, +j + 1 || 9e9),\n          i: i,\n          j: j\n        };\n      };\n    })(this);\n    unwind = (function(_this) {\n      return function(n) {\n        var candidate_g, candidate_l, g, k, l, optimal_match_sequence, ref;\n        optimal_match_sequence = [];\n        k = n - 1;\n        l = void 0;\n        g = Infinity;\n        ref = optimal.g[k];\n        for (candidate_l in ref) {\n          candidate_g = ref[candidate_l];\n          if (candidate_g < g) {\n            l = candidate_l;\n            g = candidate_g;\n          }\n        }\n        while (k >= 0) {\n          m = optimal.m[k][l];\n          optimal_match_sequence.unshift(m);\n          k = m.i - 1;\n          l--;\n        }\n        return optimal_match_sequence;\n      };\n    })(this);\n    for (k = u = 0, ref = n; 0 <= ref ? u < ref : u > ref; k = 0 <= ref ? ++u : --u) {\n      ref1 = matches_by_j[k];\n      for (w = 0, len2 = ref1.length; w < len2; w++) {\n        m = ref1[w];\n        if (m.i > 0) {\n          for (l in optimal.m[m.i - 1]) {\n            l = parseInt(l);\n            update(m, l + 1);\n          }\n        } else {\n          update(m, 1);\n        }\n      }\n      bruteforce_update(k);\n    }\n    optimal_match_sequence = unwind(n);\n    optimal_l = optimal_match_sequence.length;\n    if (password.length === 0) {\n      guesses = 1;\n    } else {\n      guesses = optimal.g[n - 1][optimal_l];\n    }\n    return {\n      password: password,\n      guesses: guesses,\n      guesses_log10: this.log10(guesses),\n      sequence: optimal_match_sequence\n    };\n  },\n  estimate_guesses: function(match, password) {\n    var estimation_functions, guesses, min_guesses;\n    if (match.guesses != null) {\n      return match.guesses;\n    }\n    min_guesses = 1;\n    if (match.token.length < password.length) {\n      min_guesses = match.token.length === 1 ? MIN_SUBMATCH_GUESSES_SINGLE_CHAR : MIN_SUBMATCH_GUESSES_MULTI_CHAR;\n    }\n    estimation_functions = {\n      bruteforce: this.bruteforce_guesses,\n      dictionary: this.dictionary_guesses,\n      spatial: this.spatial_guesses,\n      repeat: this.repeat_guesses,\n      sequence: this.sequence_guesses,\n      regex: this.regex_guesses,\n      date: this.date_guesses\n    };\n    guesses = estimation_functions[match.pattern].call(this, match);\n    match.guesses = Math.max(guesses, min_guesses);\n    match.guesses_log10 = this.log10(match.guesses);\n    return match.guesses;\n  },\n  bruteforce_guesses: function(match) {\n    var guesses, min_guesses;\n    guesses = Math.pow(BRUTEFORCE_CARDINALITY, match.token.length);\n    if (guesses === Number.POSITIVE_INFINITY) {\n      guesses = Number.MAX_VALUE;\n    }\n    min_guesses = match.token.length === 1 ? MIN_SUBMATCH_GUESSES_SINGLE_CHAR + 1 : MIN_SUBMATCH_GUESSES_MULTI_CHAR + 1;\n    return Math.max(guesses, min_guesses);\n  },\n  repeat_guesses: function(match) {\n    return match.base_guesses * match.repeat_count;\n  },\n  sequence_guesses: function(match) {\n    var base_guesses, first_chr;\n    first_chr = match.token.charAt(0);\n    if (first_chr === 'a' || first_chr === 'A' || first_chr === 'z' || first_chr === 'Z' || first_chr === '0' || first_chr === '1' || first_chr === '9') {\n      base_guesses = 4;\n    } else {\n      if (first_chr.match(/\\d/)) {\n        base_guesses = 10;\n      } else {\n        base_guesses = 26;\n      }\n    }\n    if (!match.ascending) {\n      base_guesses *= 2;\n    }\n    return base_guesses * match.token.length;\n  },\n  MIN_YEAR_SPACE: 20,\n  REFERENCE_YEAR: new Date().getFullYear(),\n  regex_guesses: function(match) {\n    var char_class_bases, year_space;\n    char_class_bases = {\n      alpha_lower: 26,\n      alpha_upper: 26,\n      alpha: 52,\n      alphanumeric: 62,\n      digits: 10,\n      symbols: 33\n    };\n    if (match.regex_name in char_class_bases) {\n      return Math.pow(char_class_bases[match.regex_name], match.token.length);\n    } else {\n      switch (match.regex_name) {\n        case 'recent_year':\n          year_space = Math.abs(parseInt(match.regex_match[0]) - this.REFERENCE_YEAR);\n          year_space = Math.max(year_space, this.MIN_YEAR_SPACE);\n          return year_space;\n      }\n    }\n  },\n  date_guesses: function(match) {\n    var guesses, year_space;\n    year_space = Math.max(Math.abs(match.year - this.REFERENCE_YEAR), this.MIN_YEAR_SPACE);\n    guesses = year_space * 365;\n    if (match.separator) {\n      guesses *= 4;\n    }\n    return guesses;\n  },\n  KEYBOARD_AVERAGE_DEGREE: calc_average_degree(adjacency_graphs.qwerty),\n  KEYPAD_AVERAGE_DEGREE: calc_average_degree(adjacency_graphs.keypad),\n  KEYBOARD_STARTING_POSITIONS: ((function() {\n    var ref, results;\n    ref = adjacency_graphs.qwerty;\n    results = [];\n    for (k in ref) {\n      v = ref[k];\n      results.push(k);\n    }\n    return results;\n  })()).length,\n  KEYPAD_STARTING_POSITIONS: ((function() {\n    var ref, results;\n    ref = adjacency_graphs.keypad;\n    results = [];\n    for (k in ref) {\n      v = ref[k];\n      results.push(k);\n    }\n    return results;\n  })()).length,\n  spatial_guesses: function(match) {\n    var L, S, U, d, guesses, i, j, o, possible_turns, q, ref, ref1, ref2, ref3, s, shifted_variations, t, u;\n    if ((ref = match.graph) === 'qwerty' || ref === 'dvorak') {\n      s = this.KEYBOARD_STARTING_POSITIONS;\n      d = this.KEYBOARD_AVERAGE_DEGREE;\n    } else {\n      s = this.KEYPAD_STARTING_POSITIONS;\n      d = this.KEYPAD_AVERAGE_DEGREE;\n    }\n    guesses = 0;\n    L = match.token.length;\n    t = match.turns;\n    for (i = o = 2, ref1 = L; 2 <= ref1 ? o <= ref1 : o >= ref1; i = 2 <= ref1 ? ++o : --o) {\n      possible_turns = Math.min(t, i - 1);\n      for (j = q = 1, ref2 = possible_turns; 1 <= ref2 ? q <= ref2 : q >= ref2; j = 1 <= ref2 ? ++q : --q) {\n        guesses += this.nCk(i - 1, j - 1) * s * Math.pow(d, j);\n      }\n    }\n    if (match.shifted_count) {\n      S = match.shifted_count;\n      U = match.token.length - match.shifted_count;\n      if (S === 0 || U === 0) {\n        guesses *= 2;\n      } else {\n        shifted_variations = 0;\n        for (i = u = 1, ref3 = Math.min(S, U); 1 <= ref3 ? u <= ref3 : u >= ref3; i = 1 <= ref3 ? ++u : --u) {\n          shifted_variations += this.nCk(S + U, i);\n        }\n        guesses *= shifted_variations;\n      }\n    }\n    return guesses;\n  },\n  dictionary_guesses: function(match) {\n    var reversed_variations;\n    match.base_guesses = match.rank;\n    match.uppercase_variations = this.uppercase_variations(match);\n    match.l33t_variations = this.l33t_variations(match);\n    reversed_variations = match.reversed && 2 || 1;\n    return match.base_guesses * match.uppercase_variations * match.l33t_variations * reversed_variations;\n  },\n  START_UPPER: /^[A-Z][^A-Z]+$/,\n  END_UPPER: /^[^A-Z]+[A-Z]$/,\n  ALL_UPPER: /^[^a-z]+$/,\n  ALL_LOWER: /^[^A-Z]+$/,\n  uppercase_variations: function(match) {\n    var L, U, chr, i, len, o, q, ref, ref1, regex, variations, word;\n    word = match.token;\n    if (word.match(this.ALL_LOWER) || word.toLowerCase() === word) {\n      return 1;\n    }\n    ref = [this.START_UPPER, this.END_UPPER, this.ALL_UPPER];\n    for (o = 0, len = ref.length; o < len; o++) {\n      regex = ref[o];\n      if (word.match(regex)) {\n        return 2;\n      }\n    }\n    U = ((function() {\n      var len1, q, ref1, results;\n      ref1 = word.split('');\n      results = [];\n      for (q = 0, len1 = ref1.length; q < len1; q++) {\n        chr = ref1[q];\n        if (chr.match(/[A-Z]/)) {\n          results.push(chr);\n        }\n      }\n      return results;\n    })()).length;\n    L = ((function() {\n      var len1, q, ref1, results;\n      ref1 = word.split('');\n      results = [];\n      for (q = 0, len1 = ref1.length; q < len1; q++) {\n        chr = ref1[q];\n        if (chr.match(/[a-z]/)) {\n          results.push(chr);\n        }\n      }\n      return results;\n    })()).length;\n    variations = 0;\n    for (i = q = 1, ref1 = Math.min(U, L); 1 <= ref1 ? q <= ref1 : q >= ref1; i = 1 <= ref1 ? ++q : --q) {\n      variations += this.nCk(U + L, i);\n    }\n    return variations;\n  },\n  l33t_variations: function(match) {\n    var S, U, chr, chrs, i, o, p, possibilities, ref, ref1, subbed, unsubbed, variations;\n    if (!match.l33t) {\n      return 1;\n    }\n    variations = 1;\n    ref = match.sub;\n    for (subbed in ref) {\n      unsubbed = ref[subbed];\n      chrs = match.token.toLowerCase().split('');\n      S = ((function() {\n        var len, o, results;\n        results = [];\n        for (o = 0, len = chrs.length; o < len; o++) {\n          chr = chrs[o];\n          if (chr === subbed) {\n            results.push(chr);\n          }\n        }\n        return results;\n      })()).length;\n      U = ((function() {\n        var len, o, results;\n        results = [];\n        for (o = 0, len = chrs.length; o < len; o++) {\n          chr = chrs[o];\n          if (chr === unsubbed) {\n            results.push(chr);\n          }\n        }\n        return results;\n      })()).length;\n      if (S === 0 || U === 0) {\n        variations *= 2;\n      } else {\n        p = Math.min(U, S);\n        possibilities = 0;\n        for (i = o = 1, ref1 = p; 1 <= ref1 ? o <= ref1 : o >= ref1; i = 1 <= ref1 ? ++o : --o) {\n          possibilities += this.nCk(U + S, i);\n        }\n        variations *= possibilities;\n      }\n    }\n    return variations;\n  }\n};\n\nmodule.exports = scoring;\n\n//# sourceMappingURL=scoring.js.map\n","// Generated by CoffeeScript 1.10.0\nvar feedback, matching, scoring, time, time_estimates, zxcvbn;\n\nmatching = require('./matching');\n\nscoring = require('./scoring');\n\ntime_estimates = require('./time_estimates');\n\nfeedback = require('./feedback');\n\ntime = function() {\n  return (new Date()).getTime();\n};\n\nzxcvbn = function(password, user_inputs) {\n  var arg, attack_times, i, len, matches, prop, ref, result, sanitized_inputs, start, val;\n  if (user_inputs == null) {\n    user_inputs = [];\n  }\n  start = time();\n  sanitized_inputs = [];\n  for (i = 0, len = user_inputs.length; i < len; i++) {\n    arg = user_inputs[i];\n    if ((ref = typeof arg) === \"string\" || ref === \"number\" || ref === \"boolean\") {\n      sanitized_inputs.push(arg.toString().toLowerCase());\n    }\n  }\n  matching.set_user_input_dictionary(sanitized_inputs);\n  matches = matching.omnimatch(password);\n  result = scoring.most_guessable_match_sequence(password, matches);\n  result.calc_time = time() - start;\n  attack_times = time_estimates.estimate_attack_times(result.guesses);\n  for (prop in attack_times) {\n    val = attack_times[prop];\n    result[prop] = val;\n  }\n  result.feedback = feedback.get_feedback(result.score, result.sequence);\n  return result;\n};\n\nmodule.exports = zxcvbn;\n\n//# sourceMappingURL=main.js.map\n","// Process block-level custom containers\n//\n'use strict';\n\n\nmodule.exports = function container_plugin(md, name, options) {\n\n  function validateDefault(params) {\n    return params.trim().split(' ', 2)[0] === name;\n  }\n\n  function renderDefault(tokens, idx, _options, env, self) {\n\n    // add a class to the opening tag\n    if (tokens[idx].nesting === 1) {\n      tokens[idx].attrPush([ 'class', name ]);\n    }\n\n    return self.renderToken(tokens, idx, _options, env, self);\n  }\n\n  options = options || {};\n\n  var min_markers = 3,\n      marker_str  = options.marker || ':',\n      marker_char = marker_str.charCodeAt(0),\n      marker_len  = marker_str.length,\n      validate    = options.validate || validateDefault,\n      render      = options.render || renderDefault;\n\n  function container(state, startLine, endLine, silent) {\n    var pos, nextLine, marker_count, markup, params, token,\n        old_parent, old_line_max,\n        auto_closed = false,\n        start = state.bMarks[startLine] + state.tShift[startLine],\n        max = state.eMarks[startLine];\n\n    // Check out the first character quickly,\n    // this should filter out most of non-containers\n    //\n    if (marker_char !== state.src.charCodeAt(start)) { return false; }\n\n    // Check out the rest of the marker string\n    //\n    for (pos = start + 1; pos <= max; pos++) {\n      if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n        break;\n      }\n    }\n\n    marker_count = Math.floor((pos - start) / marker_len);\n    if (marker_count < min_markers) { return false; }\n    pos -= (pos - start) % marker_len;\n\n    markup = state.src.slice(start, pos);\n    params = state.src.slice(pos, max);\n    if (!validate(params)) { return false; }\n\n    // Since start is found, we can report success here in validation mode\n    //\n    if (silent) { return true; }\n\n    // Search for the end of the block\n    //\n    nextLine = startLine;\n\n    for (;;) {\n      nextLine++;\n      if (nextLine >= endLine) {\n        // unclosed block should be autoclosed by end of document.\n        // also block seems to be autoclosed by end of parent\n        break;\n      }\n\n      start = state.bMarks[nextLine] + state.tShift[nextLine];\n      max = state.eMarks[nextLine];\n\n      if (start < max && state.sCount[nextLine] < state.blkIndent) {\n        // non-empty line with negative indent should stop the list:\n        // - ```\n        //  test\n        break;\n      }\n\n      if (marker_char !== state.src.charCodeAt(start)) { continue; }\n\n      if (state.sCount[nextLine] - state.blkIndent >= 4) {\n        // closing fence should be indented less than 4 spaces\n        continue;\n      }\n\n      for (pos = start + 1; pos <= max; pos++) {\n        if (marker_str[(pos - start) % marker_len] !== state.src[pos]) {\n          break;\n        }\n      }\n\n      // closing code fence must be at least as long as the opening one\n      if (Math.floor((pos - start) / marker_len) < marker_count) { continue; }\n\n      // make sure tail has spaces only\n      pos -= (pos - start) % marker_len;\n      pos = state.skipSpaces(pos);\n\n      if (pos < max) { continue; }\n\n      // found!\n      auto_closed = true;\n      break;\n    }\n\n    old_parent = state.parentType;\n    old_line_max = state.lineMax;\n    state.parentType = 'container';\n\n    // this will prevent lazy continuations from ever going past our end marker\n    state.lineMax = nextLine;\n\n    token        = state.push('container_' + name + '_open', 'div', 1);\n    token.markup = markup;\n    token.block  = true;\n    token.info   = params;\n    token.map    = [ startLine, nextLine ];\n\n    state.md.block.tokenize(state, startLine + 1, nextLine);\n\n    token        = state.push('container_' + name + '_close', 'div', -1);\n    token.markup = state.src.slice(start, pos);\n    token.block  = true;\n\n    state.parentType = old_parent;\n    state.lineMax = old_line_max;\n    state.line = nextLine + (auto_closed ? 1 : 0);\n\n    return true;\n  }\n\n  md.block.ruler.before('fence', 'container_' + name, container, {\n    alt: [ 'paragraph', 'reference', 'blockquote', 'list' ]\n  });\n  md.renderer.rules['container_' + name + '_open'] = render;\n  md.renderer.rules['container_' + name + '_close'] = render;\n};\n","/*!\n * a-color-picker (https://github.com/narsenico/a-color-picker)\n * \n * Copyright (c) 2017-2018, Gianfranco Caldi.\n * Released under the MIT License.\n */\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"AColorPicker\",[],t):\"object\"==typeof exports?exports.AColorPicker=t():e.AColorPicker=t()}(\"undefined\"!=typeof self?self:this,function(){return function(e){var t={};function r(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var o in e)r.d(i,o,function(t){return e[t]}.bind(null,o));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=1)}([function(e,t,r){\"use strict\";\n/*!\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */var i=r(3);function o(e){return!0===i(e)&&\"[object Object]\"===Object.prototype.toString.call(e)}e.exports=function(e){var t,r;return!1!==o(e)&&\"function\"==typeof(t=e.constructor)&&!1!==o(r=t.prototype)&&!1!==r.hasOwnProperty(\"isPrototypeOf\")}},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.VERSION=t.PALETTE_MATERIAL_CHROME=t.PALETTE_MATERIAL_500=t.COLOR_NAMES=t.getLuminance=t.intToRgb=t.rgbToInt=t.rgbToHsv=t.rgbToHsl=t.hslToRgb=t.rgbToHex=t.parseColor=t.parseColorToHsla=t.parseColorToHsl=t.parseColorToRgba=t.parseColorToRgb=t.from=t.createPicker=void 0;var i=function(){function e(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,r,i){return r&&e(t.prototype,r),i&&e(t,i),t}}(),o=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var r=[],i=!0,o=!1,n=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);i=!0);}catch(e){o=!0,n=e}finally{try{!i&&s.return&&s.return()}finally{if(o)throw n}}return r}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")},n=r(2),a=l(r(0)),s=l(r(4));function l(e){return e&&e.__esModule?e:{default:e}}function c(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function u(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t<e.length;t++)r[t]=e[t];return r}return Array.from(e)}\n/*!\n                                                                                                                                                                                                     * a-color-picker\n                                                                                                                                                                                                     * https://github.com/narsenico/a-color-picker\n                                                                                                                                                                                                     *\n                                                                                                                                                                                                     * Copyright (c) 2017-2019, Gianfranco Caldi.\n                                                                                                                                                                                                     * Released under the MIT License.\n                                                                                                                                                                                                     */var h=\"undefined\"!=typeof window&&window.navigator.userAgent.indexOf(\"Edge\")>-1,p=\"undefined\"!=typeof window&&window.navigator.userAgent.indexOf(\"rv:\")>-1,d={id:null,attachTo:\"body\",showHSL:!0,showRGB:!0,showHEX:!0,showAlpha:!1,color:\"#ff0000\",palette:null,paletteEditable:!1,useAlphaInPalette:\"auto\",slBarSize:[232,150],hueBarSize:[150,11],alphaBarSize:[150,11]},f=\"COLOR\",g=\"RGBA_USER\",b=\"HSLA_USER\";function v(e,t,r){return e?e instanceof HTMLElement?e:e instanceof NodeList?e[0]:\"string\"==typeof e?document.querySelector(e):e.jquery?e.get(0):r?t:null:t}function m(e){var t=e.getContext(\"2d\"),r=+e.width,i=+e.height,a=t.createLinearGradient(1,1,1,i-1);return a.addColorStop(0,\"white\"),a.addColorStop(1,\"black\"),{setHue:function(e){var o=t.createLinearGradient(1,0,r-1,0);o.addColorStop(0,\"hsla(\"+e+\", 100%, 50%, 0)\"),o.addColorStop(1,\"hsla(\"+e+\", 100%, 50%, 1)\"),t.fillStyle=a,t.fillRect(0,0,r,i),t.fillStyle=o,t.globalCompositeOperation=\"multiply\",t.fillRect(0,0,r,i),t.globalCompositeOperation=\"source-over\"},grabColor:function(e,r){return t.getImageData(e,r,1,1).data},findColor:function(e,t,a){var s=(0,n.rgbToHsv)(e,t,a),l=o(s,3),c=l[1],u=l[2];return[c*r,i-u*i]}}}function A(e,t,r){return null===e?t:/^\\s*$/.test(e)?r:!!/true|yes|1/i.test(e)||!/false|no|0/i.test(e)&&t}function y(e,t,r){if(null===e)return t;if(/^\\s*$/.test(e))return r;var i=e.split(\",\").map(Number);return 2===i.length&&i[0]&&i[1]?i:t}var k=function(){function e(t,r){if(c(this,e),r?(t=v(t),this.options=Object.assign({},d,r)):t&&(0,a.default)(t)?(this.options=Object.assign({},d,t),t=v(this.options.attachTo)):(this.options=Object.assign({},d),t=v((0,n.nvl)(t,this.options.attachTo))),!t)throw new Error(\"Container not found: \"+this.options.attachTo);!function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"acp-\";if(t.hasAttribute(r+\"show-hsl\")&&(e.showHSL=A(t.getAttribute(r+\"show-hsl\"),d.showHSL,!0)),t.hasAttribute(r+\"show-rgb\")&&(e.showRGB=A(t.getAttribute(r+\"show-rgb\"),d.showRGB,!0)),t.hasAttribute(r+\"show-hex\")&&(e.showHEX=A(t.getAttribute(r+\"show-hex\"),d.showHEX,!0)),t.hasAttribute(r+\"show-alpha\")&&(e.showAlpha=A(t.getAttribute(r+\"show-alpha\"),d.showAlpha,!0)),t.hasAttribute(r+\"palette-editable\")&&(e.paletteEditable=A(t.getAttribute(r+\"palette-editable\"),d.paletteEditable,!0)),t.hasAttribute(r+\"sl-bar-size\")&&(e.slBarSize=y(t.getAttribute(r+\"sl-bar-size\"),d.slBarSize,[232,150])),t.hasAttribute(r+\"hue-bar-size\")&&(e.hueBarSize=y(t.getAttribute(r+\"hue-bar-size\"),d.hueBarSize,[150,11]),e.alphaBarSize=e.hueBarSize),t.hasAttribute(r+\"palette\")){var i=t.getAttribute(r+\"palette\");switch(i){case\"PALETTE_MATERIAL_500\":e.palette=n.PALETTE_MATERIAL_500;break;case\"PALETTE_MATERIAL_CHROME\":case\"\":e.palette=n.PALETTE_MATERIAL_CHROME;break;default:e.palette=i.split(/[;|]/)}}t.hasAttribute(r+\"color\")&&(e.color=t.getAttribute(r+\"color\"))}(this.options,t),this.H=0,this.S=0,this.L=0,this.R=0,this.G=0,this.B=0,this.A=1,this.palette={},this.element=document.createElement(\"div\"),this.options.id&&(this.element.id=this.options.id),this.element.className=\"a-color-picker\",this.element.innerHTML=s.default,t.appendChild(this.element);var i=this.element.querySelector(\".a-color-picker-h\");this.setupHueCanvas(i),this.hueBarHelper=m(i),this.huePointer=this.element.querySelector(\".a-color-picker-h+.a-color-picker-dot\");var o=this.element.querySelector(\".a-color-picker-sl\");this.setupSlCanvas(o),this.slBarHelper=m(o),this.slPointer=this.element.querySelector(\".a-color-picker-sl+.a-color-picker-dot\"),this.preview=this.element.querySelector(\".a-color-picker-preview\"),this.setupClipboard(this.preview.querySelector(\".a-color-picker-clipbaord\")),this.options.showHSL?(this.setupInput(this.inputH=this.element.querySelector(\".a-color-picker-hsl>input[nameref=H]\")),this.setupInput(this.inputS=this.element.querySelector(\".a-color-picker-hsl>input[nameref=S]\")),this.setupInput(this.inputL=this.element.querySelector(\".a-color-picker-hsl>input[nameref=L]\"))):this.element.querySelector(\".a-color-picker-hsl\").remove(),this.options.showRGB?(this.setupInput(this.inputR=this.element.querySelector(\".a-color-picker-rgb>input[nameref=R]\")),this.setupInput(this.inputG=this.element.querySelector(\".a-color-picker-rgb>input[nameref=G]\")),this.setupInput(this.inputB=this.element.querySelector(\".a-color-picker-rgb>input[nameref=B]\"))):this.element.querySelector(\".a-color-picker-rgb\").remove(),this.options.showHEX?this.setupInput(this.inputRGBHEX=this.element.querySelector(\"input[nameref=RGBHEX]\")):this.element.querySelector(\".a-color-picker-rgbhex\").remove(),this.options.paletteEditable||this.options.palette&&this.options.palette.length>0?this.setPalette(this.element.querySelector(\".a-color-picker-palette\")):this.element.querySelector(\".a-color-picker-palette\").remove(),this.options.showAlpha?(this.setupAlphaCanvas(this.element.querySelector(\".a-color-picker-a\")),this.alphaPointer=this.element.querySelector(\".a-color-picker-a+.a-color-picker-dot\")):this.element.querySelector(\".a-color-picker-alpha\").remove(),this.element.style.width=this.options.slBarSize[0]+\"px\",this.onValueChanged(f,this.options.color)}return i(e,[{key:\"setupHueCanvas\",value:function(e){var t=this;e.width=this.options.hueBarSize[0],e.height=this.options.hueBarSize[1];for(var r=e.getContext(\"2d\"),i=r.createLinearGradient(0,0,this.options.hueBarSize[0],0),o=0;o<=1;o+=1/360)i.addColorStop(o,\"hsl(\"+360*o+\", 100%, 50%)\");r.fillStyle=i,r.fillRect(0,0,this.options.hueBarSize[0],this.options.hueBarSize[1]);var a=function(r){var i=(0,n.limit)(r.clientX-e.getBoundingClientRect().left,0,t.options.hueBarSize[0]),o=Math.round(360*i/t.options.hueBarSize[0]);t.huePointer.style.left=i-7+\"px\",t.onValueChanged(\"H\",o)},s=function e(){document.removeEventListener(\"mousemove\",a),document.removeEventListener(\"mouseup\",e)};e.addEventListener(\"mousedown\",function(e){a(e),document.addEventListener(\"mousemove\",a),document.addEventListener(\"mouseup\",s)})}},{key:\"setupSlCanvas\",value:function(e){var t=this;e.width=this.options.slBarSize[0],e.height=this.options.slBarSize[1];var r=function(r){var i=(0,n.limit)(r.clientX-e.getBoundingClientRect().left,0,t.options.slBarSize[0]-1),o=(0,n.limit)(r.clientY-e.getBoundingClientRect().top,0,t.options.slBarSize[1]-1),a=t.slBarHelper.grabColor(i,o);t.slPointer.style.left=i-7+\"px\",t.slPointer.style.top=o-7+\"px\",t.onValueChanged(\"RGB\",a)},i=function e(){document.removeEventListener(\"mousemove\",r),document.removeEventListener(\"mouseup\",e)};e.addEventListener(\"mousedown\",function(e){r(e),document.addEventListener(\"mousemove\",r),document.addEventListener(\"mouseup\",i)})}},{key:\"setupAlphaCanvas\",value:function(e){var t=this;e.width=this.options.alphaBarSize[0],e.height=this.options.alphaBarSize[1];var r=e.getContext(\"2d\"),i=r.createLinearGradient(0,0,e.width-1,0);i.addColorStop(0,\"hsla(0, 0%, 50%, 0)\"),i.addColorStop(1,\"hsla(0, 0%, 50%, 1)\"),r.fillStyle=i,r.fillRect(0,0,this.options.alphaBarSize[0],this.options.alphaBarSize[1]);var o=function(r){var i=(0,n.limit)(r.clientX-e.getBoundingClientRect().left,0,t.options.alphaBarSize[0]),o=+(i/t.options.alphaBarSize[0]).toFixed(2);t.alphaPointer.style.left=i-7+\"px\",t.onValueChanged(\"ALPHA\",o)},a=function e(){document.removeEventListener(\"mousemove\",o),document.removeEventListener(\"mouseup\",e)};e.addEventListener(\"mousedown\",function(e){o(e),document.addEventListener(\"mousemove\",o),document.addEventListener(\"mouseup\",a)})}},{key:\"setupInput\",value:function(e){var t=this,r=+e.min,i=+e.max,o=e.getAttribute(\"nameref\");e.hasAttribute(\"select-on-focus\")&&e.addEventListener(\"focus\",function(){e.select()}),\"text\"===e.type?e.addEventListener(\"change\",function(){t.onValueChanged(o,e.value)}):((h||p)&&e.addEventListener(\"keydown\",function(a){\"Up\"===a.key?(e.value=(0,n.limit)(+e.value+1,r,i),t.onValueChanged(o,e.value),a.returnValue=!1):\"Down\"===a.key&&(e.value=(0,n.limit)(+e.value-1,r,i),t.onValueChanged(o,e.value),a.returnValue=!1)}),e.addEventListener(\"change\",function(){var a=+e.value;t.onValueChanged(o,(0,n.limit)(a,r,i))}))}},{key:\"setupClipboard\",value:function(e){var t=this;e.title=\"click to copy\",e.addEventListener(\"click\",function(){e.value=(0,n.parseColor)([t.R,t.G,t.B,t.A],\"hexcss4\"),e.select(),document.execCommand(\"copy\")})}},{key:\"setPalette\",value:function(e){var t=this,r=\"auto\"===this.options.useAlphaInPalette?this.options.showAlpha:this.options.useAlphaInPalette,i=null;switch(this.options.palette){case\"PALETTE_MATERIAL_500\":i=n.PALETTE_MATERIAL_500;break;case\"PALETTE_MATERIAL_CHROME\":i=n.PALETTE_MATERIAL_CHROME;break;default:i=(0,n.ensureArray)(this.options.palette)}if(this.options.paletteEditable||i.length>0){var o=function(r,i,o){var n=e.querySelector('.a-color-picker-palette-color[data-color=\"'+r+'\"]')||document.createElement(\"div\");n.className=\"a-color-picker-palette-color\",n.style.backgroundColor=r,n.setAttribute(\"data-color\",r),n.title=r,e.insertBefore(n,i),t.palette[r]=!0,o&&t.onPaletteColorAdd(r)},a=function(r,i){r?(e.removeChild(r),t.palette[r.getAttribute(\"data-color\")]=!1,i&&t.onPaletteColorRemove(r.getAttribute(\"data-color\"))):(e.querySelectorAll(\".a-color-picker-palette-color[data-color]\").forEach(function(t){e.removeChild(t)}),Object.keys(t.palette).forEach(function(e){t.palette[e]=!1}),i&&t.onPaletteColorRemove())};if(i.map(function(e){return(0,n.parseColor)(e,r?\"rgbcss4\":\"hex\")}).filter(function(e){return!!e}).forEach(function(e){return o(e)}),this.options.paletteEditable){var s=document.createElement(\"div\");s.className=\"a-color-picker-palette-color a-color-picker-palette-add\",s.innerHTML=\"+\",e.appendChild(s),e.addEventListener(\"click\",function(e){/a-color-picker-palette-add/.test(e.target.className)?e.shiftKey?a(null,!0):o(r?(0,n.parseColor)([t.R,t.G,t.B,t.A],\"rgbcss4\"):(0,n.rgbToHex)(t.R,t.G,t.B),e.target,!0):/a-color-picker-palette-color/.test(e.target.className)&&(e.shiftKey?a(e.target,!0):t.onValueChanged(f,e.target.getAttribute(\"data-color\")))})}else e.addEventListener(\"click\",function(e){/a-color-picker-palette-color/.test(e.target.className)&&t.onValueChanged(f,e.target.getAttribute(\"data-color\"))})}else e.style.display=\"none\"}},{key:\"onValueChanged\",value:function(e,t){switch(e){case\"H\":this.H=t;var r=(0,n.hslToRgb)(this.H,this.S,this.L),i=o(r,3);this.R=i[0],this.G=i[1],this.B=i[2],this.slBarHelper.setHue(t),this.updatePointerH(this.H),this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGB(this.R,this.G,this.B),this.updateInputRGBHEX(this.R,this.G,this.B);break;case\"S\":this.S=t;var a=(0,n.hslToRgb)(this.H,this.S,this.L),s=o(a,3);this.R=s[0],this.G=s[1],this.B=s[2],this.updatePointerSL(this.H,this.S,this.L),this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGB(this.R,this.G,this.B),this.updateInputRGBHEX(this.R,this.G,this.B);break;case\"L\":this.L=t;var l=(0,n.hslToRgb)(this.H,this.S,this.L),c=o(l,3);this.R=c[0],this.G=c[1],this.B=c[2],this.updatePointerSL(this.H,this.S,this.L),this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGB(this.R,this.G,this.B),this.updateInputRGBHEX(this.R,this.G,this.B);break;case\"R\":this.R=t;var u=(0,n.rgbToHsl)(this.R,this.G,this.B),h=o(u,3);this.H=h[0],this.S=h[1],this.L=h[2],this.slBarHelper.setHue(this.H),this.updatePointerH(this.H),this.updatePointerSL(this.H,this.S,this.L),this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGBHEX(this.R,this.G,this.B);break;case\"G\":this.G=t;var p=(0,n.rgbToHsl)(this.R,this.G,this.B),d=o(p,3);this.H=d[0],this.S=d[1],this.L=d[2],this.slBarHelper.setHue(this.H),this.updatePointerH(this.H),this.updatePointerSL(this.H,this.S,this.L),this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGBHEX(this.R,this.G,this.B);break;case\"B\":this.B=t;var v=(0,n.rgbToHsl)(this.R,this.G,this.B),m=o(v,3);this.H=m[0],this.S=m[1],this.L=m[2],this.slBarHelper.setHue(this.H),this.updatePointerH(this.H),this.updatePointerSL(this.H,this.S,this.L),this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGBHEX(this.R,this.G,this.B);break;case\"RGB\":var A=o(t,3);this.R=A[0],this.G=A[1],this.B=A[2];var y=(0,n.rgbToHsl)(this.R,this.G,this.B),k=o(y,3);this.H=k[0],this.S=k[1],this.L=k[2],this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGB(this.R,this.G,this.B),this.updateInputRGBHEX(this.R,this.G,this.B);break;case g:var F=o(t,4);this.R=F[0],this.G=F[1],this.B=F[2],this.A=F[3];var E=(0,n.rgbToHsl)(this.R,this.G,this.B),H=o(E,3);this.H=H[0],this.S=H[1],this.L=H[2],this.slBarHelper.setHue(this.H),this.updatePointerH(this.H),this.updatePointerSL(this.H,this.S,this.L),this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGB(this.R,this.G,this.B),this.updateInputRGBHEX(this.R,this.G,this.B),this.updatePointerA(this.A);break;case b:var B=o(t,4);this.H=B[0],this.S=B[1],this.L=B[2],this.A=B[3];var C=(0,n.hslToRgb)(this.H,this.S,this.L),R=o(C,3);this.R=R[0],this.G=R[1],this.B=R[2],this.slBarHelper.setHue(this.H),this.updatePointerH(this.H),this.updatePointerSL(this.H,this.S,this.L),this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGB(this.R,this.G,this.B),this.updateInputRGBHEX(this.R,this.G,this.B),this.updatePointerA(this.A);break;case\"RGBHEX\":var S=(0,n.cssColorToRgb)(t)||[this.R,this.G,this.B],L=o(S,3);this.R=L[0],this.G=L[1],this.B=L[2];var T=(0,n.rgbToHsl)(this.R,this.G,this.B),w=o(T,3);this.H=w[0],this.S=w[1],this.L=w[2],this.slBarHelper.setHue(this.H),this.updatePointerH(this.H),this.updatePointerSL(this.H,this.S,this.L),this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGB(this.R,this.G,this.B);break;case f:var x=(0,n.parseColor)(t,\"rgba\")||[0,0,0,1],G=o(x,4);this.R=G[0],this.G=G[1],this.B=G[2],this.A=G[3];var I=(0,n.rgbToHsl)(this.R,this.G,this.B),P=o(I,3);this.H=P[0],this.S=P[1],this.L=P[2],this.slBarHelper.setHue(this.H),this.updatePointerH(this.H),this.updatePointerSL(this.H,this.S,this.L),this.updateInputHSL(this.H,this.S,this.L),this.updateInputRGB(this.R,this.G,this.B),this.updateInputRGBHEX(this.R,this.G,this.B),this.updatePointerA(this.A);break;case\"ALPHA\":this.A=t}this.onColorChanged(this.R,this.G,this.B,this.A)}},{key:\"onColorChanged\",value:function(e,t,r,i){this.preview.style.backgroundColor=1===i?\"rgb(\"+e+\",\"+t+\",\"+r+\")\":\"rgba(\"+e+\",\"+t+\",\"+r+\",\"+i+\")\",this.onchange&&this.onchange(this.preview.style.backgroundColor)}},{key:\"onPaletteColorAdd\",value:function(e){this.oncoloradd&&this.oncoloradd(e)}},{key:\"onPaletteColorRemove\",value:function(e){this.oncolorremove&&this.oncolorremove(e)}},{key:\"updateInputHSL\",value:function(e,t,r){this.options.showHSL&&(this.inputH.value=e,this.inputS.value=t,this.inputL.value=r)}},{key:\"updateInputRGB\",value:function(e,t,r){this.options.showRGB&&(this.inputR.value=e,this.inputG.value=t,this.inputB.value=r)}},{key:\"updateInputRGBHEX\",value:function(e,t,r){this.options.showHEX&&(this.inputRGBHEX.value=(0,n.rgbToHex)(e,t,r))}},{key:\"updatePointerH\",value:function(e){var t=this.options.hueBarSize[0]*e/360;this.huePointer.style.left=t-7+\"px\"}},{key:\"updatePointerSL\",value:function(e,t,r){var i=(0,n.hslToRgb)(e,t,r),a=o(i,3),s=a[0],l=a[1],c=a[2],u=this.slBarHelper.findColor(s,l,c),h=o(u,2),p=h[0],d=h[1];p>=0&&(this.slPointer.style.left=p-7+\"px\",this.slPointer.style.top=d-7+\"px\")}},{key:\"updatePointerA\",value:function(e){if(this.options.showAlpha){var t=this.options.alphaBarSize[0]*e;this.alphaPointer.style.left=t-7+\"px\"}}}]),e}(),F=function(){function e(t){c(this,e),this.name=t,this.listeners=[]}return i(e,[{key:\"on\",value:function(e){e&&this.listeners.push(e)}},{key:\"off\",value:function(e){this.listeners=e?this.listeners.filter(function(t){return t!==e}):[]}},{key:\"emit\",value:function(e,t){for(var r=this.listeners.slice(0),i=0;i<r.length;i++)r[i].apply(t,e)}}]),e}();function E(e,t){var r=new k(e,t),i={change:new F(\"change\"),coloradd:new F(\"coloradd\"),colorremove:new F(\"colorremove\")},a=!0,s={},l={get element(){return r.element},get rgb(){return[r.R,r.G,r.B]},set rgb(e){var t=o(e,3),i=t[0],a=t[1],s=t[2],l=[(0,n.limit)(i,0,255),(0,n.limit)(a,0,255),(0,n.limit)(s,0,255)];i=l[0],a=l[1],s=l[2],r.onValueChanged(g,[i,a,s,1])},get hsl(){return[r.H,r.S,r.L]},set hsl(e){var t=o(e,3),i=t[0],a=t[1],s=t[2],l=[(0,n.limit)(i,0,360),(0,n.limit)(a,0,100),(0,n.limit)(s,0,100)];i=l[0],a=l[1],s=l[2],r.onValueChanged(b,[i,a,s,1])},get rgbhex(){return this.all.hex},get rgba(){return[r.R,r.G,r.B,r.A]},set rgba(e){var t=o(e,4),i=t[0],a=t[1],s=t[2],l=t[3],c=[(0,n.limit)(i,0,255),(0,n.limit)(a,0,255),(0,n.limit)(s,0,255),(0,n.limit)(l,0,1)];i=c[0],a=c[1],s=c[2],l=c[3],r.onValueChanged(g,[i,a,s,l])},get hsla(){return[r.H,r.S,r.L,r.A]},set hsla(e){var t=o(e,4),i=t[0],a=t[1],s=t[2],l=t[3],c=[(0,n.limit)(i,0,360),(0,n.limit)(a,0,100),(0,n.limit)(s,0,100),(0,n.limit)(l,0,1)];i=c[0],a=c[1],s=c[2],l=c[3],r.onValueChanged(b,[i,a,s,l])},get color(){return this.all.toString()},set color(e){r.onValueChanged(f,e)},get all(){if(a){var e=[r.R,r.G,r.B,r.A],t=r.A<1?\"rgba(\"+r.R+\",\"+r.G+\",\"+r.B+\",\"+r.A+\")\":n.rgbToHex.apply(void 0,e);(s=(0,n.parseColor)(e,s)).toString=function(){return t},a=!1}return Object.assign({},s)},get onchange(){return i.change&&i.change.listeners[0]},set onchange(e){this.off(\"change\").on(\"change\",e)},get oncoloradd(){return i.coloradd&&i.coloradd.listeners[0]},set oncoloradd(e){this.off(\"coloradd\").on(\"coloradd\",e)},get oncolorremove(){return i.colorremove&&i.colorremove.listeners[0]},set oncolorremove(e){this.off(\"colorremove\").on(\"colorremove\",e)},get palette(){return Object.keys(r.palette).filter(function(e){return r.palette[e]})},on:function(e,t){return e&&i[e]&&i[e].on(t),this},off:function(e,t){return e&&i[e]&&i[e].off(t),this},destroy:function(){i.change.off(),i.coloradd.off(),i.colorremove.off(),r.element.remove(),i=null,r=null}};return r.onchange=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];a=!0,i.change.emit([l].concat(t),l)},r.oncoloradd=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];i.coloradd.emit([l].concat(t),l)},r.oncolorremove=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];i.colorremove.emit([l].concat(t),l)},r.element.ctrl=l,l}if(\"undefined\"!=typeof window&&!document.querySelector('head>style[data-source=\"a-color-picker\"]')){var H=r(5).toString(),B=document.createElement(\"style\");B.setAttribute(\"type\",\"text/css\"),B.setAttribute(\"data-source\",\"a-color-picker\"),B.innerHTML=H,document.querySelector(\"head\").appendChild(B)}t.createPicker=E,t.from=function(e,t){var r=function(e){return e?Array.isArray(e)?e:e instanceof HTMLElement?[e]:e instanceof NodeList?[].concat(u(e)):\"string\"==typeof e?[].concat(u(document.querySelectorAll(e))):e.jquery?e.get():[]:[]}(e).map(function(e,r){var i=E(e,t);return i.index=r,i});return r.on=function(e,t){return r.forEach(function(r){return r.on(e,t)}),this},r.off=function(e){return r.forEach(function(t){return t.off(e)}),this},r},t.parseColorToRgb=n.parseColorToRgb,t.parseColorToRgba=n.parseColorToRgba,t.parseColorToHsl=n.parseColorToHsl,t.parseColorToHsla=n.parseColorToHsla,t.parseColor=n.parseColor,t.rgbToHex=n.rgbToHex,t.hslToRgb=n.hslToRgb,t.rgbToHsl=n.rgbToHsl,t.rgbToHsv=n.rgbToHsv,t.rgbToInt=n.rgbToInt,t.intToRgb=n.intToRgb,t.getLuminance=n.getLuminance,t.COLOR_NAMES=n.COLOR_NAMES,t.PALETTE_MATERIAL_500=n.PALETTE_MATERIAL_500,t.PALETTE_MATERIAL_CHROME=n.PALETTE_MATERIAL_CHROME,t.VERSION=\"1.1.9\"},function(e,t,r){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.nvl=t.ensureArray=t.limit=t.getLuminance=t.parseColor=t.parseColorToHsla=t.parseColorToHsl=t.cssHslaToHsla=t.cssHslToHsl=t.parseColorToRgba=t.parseColorToRgb=t.cssRgbaToRgba=t.cssRgbToRgb=t.cssColorToRgba=t.cssColorToRgb=t.intToRgb=t.rgbToInt=t.rgbToHsv=t.rgbToHsl=t.hslToRgb=t.rgbToHex=t.PALETTE_MATERIAL_CHROME=t.PALETTE_MATERIAL_500=t.COLOR_NAMES=void 0;var i=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var r=[],i=!0,o=!1,n=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);i=!0);}catch(e){o=!0,n=e}finally{try{!i&&s.return&&s.return()}finally{if(o)throw n}}return r}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")},o=function(e){return e&&e.__esModule?e:{default:e}}(r(0));function n(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t<e.length;t++)r[t]=e[t];return r}return Array.from(e)}var a={aliceblue:\"#F0F8FF\",antiquewhite:\"#FAEBD7\",aqua:\"#00FFFF\",aquamarine:\"#7FFFD4\",azure:\"#F0FFFF\",beige:\"#F5F5DC\",bisque:\"#FFE4C4\",black:\"#000000\",blanchedalmond:\"#FFEBCD\",blue:\"#0000FF\",blueviolet:\"#8A2BE2\",brown:\"#A52A2A\",burlywood:\"#DEB887\",cadetblue:\"#5F9EA0\",chartreuse:\"#7FFF00\",chocolate:\"#D2691E\",coral:\"#FF7F50\",cornflowerblue:\"#6495ED\",cornsilk:\"#FFF8DC\",crimson:\"#DC143C\",cyan:\"#00FFFF\",darkblue:\"#00008B\",darkcyan:\"#008B8B\",darkgoldenrod:\"#B8860B\",darkgray:\"#A9A9A9\",darkgrey:\"#A9A9A9\",darkgreen:\"#006400\",darkkhaki:\"#BDB76B\",darkmagenta:\"#8B008B\",darkolivegreen:\"#556B2F\",darkorange:\"#FF8C00\",darkorchid:\"#9932CC\",darkred:\"#8B0000\",darksalmon:\"#E9967A\",darkseagreen:\"#8FBC8F\",darkslateblue:\"#483D8B\",darkslategray:\"#2F4F4F\",darkslategrey:\"#2F4F4F\",darkturquoise:\"#00CED1\",darkviolet:\"#9400D3\",deeppink:\"#FF1493\",deepskyblue:\"#00BFFF\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1E90FF\",firebrick:\"#B22222\",floralwhite:\"#FFFAF0\",forestgreen:\"#228B22\",fuchsia:\"#FF00FF\",gainsboro:\"#DCDCDC\",ghostwhite:\"#F8F8FF\",gold:\"#FFD700\",goldenrod:\"#DAA520\",gray:\"#808080\",grey:\"#808080\",green:\"#008000\",greenyellow:\"#ADFF2F\",honeydew:\"#F0FFF0\",hotpink:\"#FF69B4\",\"indianred \":\"#CD5C5C\",\"indigo \":\"#4B0082\",ivory:\"#FFFFF0\",khaki:\"#F0E68C\",lavender:\"#E6E6FA\",lavenderblush:\"#FFF0F5\",lawngreen:\"#7CFC00\",lemonchiffon:\"#FFFACD\",lightblue:\"#ADD8E6\",lightcoral:\"#F08080\",lightcyan:\"#E0FFFF\",lightgoldenrodyellow:\"#FAFAD2\",lightgray:\"#D3D3D3\",lightgrey:\"#D3D3D3\",lightgreen:\"#90EE90\",lightpink:\"#FFB6C1\",lightsalmon:\"#FFA07A\",lightseagreen:\"#20B2AA\",lightskyblue:\"#87CEFA\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#B0C4DE\",lightyellow:\"#FFFFE0\",lime:\"#00FF00\",limegreen:\"#32CD32\",linen:\"#FAF0E6\",magenta:\"#FF00FF\",maroon:\"#800000\",mediumaquamarine:\"#66CDAA\",mediumblue:\"#0000CD\",mediumorchid:\"#BA55D3\",mediumpurple:\"#9370DB\",mediumseagreen:\"#3CB371\",mediumslateblue:\"#7B68EE\",mediumspringgreen:\"#00FA9A\",mediumturquoise:\"#48D1CC\",mediumvioletred:\"#C71585\",midnightblue:\"#191970\",mintcream:\"#F5FFFA\",mistyrose:\"#FFE4E1\",moccasin:\"#FFE4B5\",navajowhite:\"#FFDEAD\",navy:\"#000080\",oldlace:\"#FDF5E6\",olive:\"#808000\",olivedrab:\"#6B8E23\",orange:\"#FFA500\",orangered:\"#FF4500\",orchid:\"#DA70D6\",palegoldenrod:\"#EEE8AA\",palegreen:\"#98FB98\",paleturquoise:\"#AFEEEE\",palevioletred:\"#DB7093\",papayawhip:\"#FFEFD5\",peachpuff:\"#FFDAB9\",peru:\"#CD853F\",pink:\"#FFC0CB\",plum:\"#DDA0DD\",powderblue:\"#B0E0E6\",purple:\"#800080\",rebeccapurple:\"#663399\",red:\"#FF0000\",rosybrown:\"#BC8F8F\",royalblue:\"#4169E1\",saddlebrown:\"#8B4513\",salmon:\"#FA8072\",sandybrown:\"#F4A460\",seagreen:\"#2E8B57\",seashell:\"#FFF5EE\",sienna:\"#A0522D\",silver:\"#C0C0C0\",skyblue:\"#87CEEB\",slateblue:\"#6A5ACD\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#FFFAFA\",springgreen:\"#00FF7F\",steelblue:\"#4682B4\",tan:\"#D2B48C\",teal:\"#008080\",thistle:\"#D8BFD8\",tomato:\"#FF6347\",turquoise:\"#40E0D0\",violet:\"#EE82EE\",wheat:\"#F5DEB3\",white:\"#FFFFFF\",whitesmoke:\"#F5F5F5\",yellow:\"#FFFF00\",yellowgreen:\"#9ACD32\"};function s(e,t,r){return e=+e,isNaN(e)?t:e<t?t:e>r?r:e}function l(e,t){return null==e?t:e}function c(e,t,r){var i=[s(e,0,255),s(t,0,255),s(r,0,255)];return\"#\"+(\"000000\"+((e=i[0])<<16|(t=i[1])<<8|(r=i[2])).toString(16)).slice(-6)}function u(e,t,r){var i=void 0,o=void 0,n=void 0,a=[s(e,0,360)/360,s(t,0,100)/100,s(r,0,100)/100];if(e=a[0],r=a[2],0==(t=a[1]))i=o=n=r;else{var l=function(e,t,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+6*(t-e)*r:r<.5?t:r<2/3?e+(t-e)*(2/3-r)*6:e},c=r<.5?r*(1+t):r+t-r*t,u=2*r-c;i=l(u,c,e+1/3),o=l(u,c,e),n=l(u,c,e-1/3)}return[255*i,255*o,255*n].map(Math.round)}function h(e,t,r){var i=[s(e,0,255)/255,s(t,0,255)/255,s(r,0,255)/255];e=i[0],t=i[1],r=i[2];var o=Math.max(e,t,r),n=Math.min(e,t,r),a=void 0,l=void 0,c=(o+n)/2;if(o==n)a=l=0;else{var u=o-n;switch(l=c>.5?u/(2-o-n):u/(o+n),o){case e:a=(t-r)/u+(t<r?6:0);break;case t:a=(r-e)/u+2;break;case r:a=(e-t)/u+4}a/=6}return[360*a,100*l,100*c].map(Math.round)}function p(e,t,r){return e<<16|t<<8|r}function d(e){if(e){var t=a[e.toString().toLowerCase()],r=/^\\s*#?((([0-9A-F])([0-9A-F])([0-9A-F]))|(([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})))\\s*$/i.exec(t||e)||[],o=i(r,10),n=o[3],s=o[4],l=o[5],c=o[7],u=o[8],h=o[9];if(void 0!==n)return[parseInt(n+n,16),parseInt(s+s,16),parseInt(l+l,16)];if(void 0!==c)return[parseInt(c,16),parseInt(u,16),parseInt(h,16)]}}function f(e){if(e){var t=a[e.toString().toLowerCase()],r=/^\\s*#?((([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])?)|(([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})?))\\s*$/i.exec(t||e)||[],o=i(r,12),n=o[3],s=o[4],l=o[5],c=o[6],u=o[8],h=o[9],p=o[10],d=o[11];if(void 0!==n)return[parseInt(n+n,16),parseInt(s+s,16),parseInt(l+l,16),c?+(parseInt(c+c,16)/255).toFixed(2):1];if(void 0!==u)return[parseInt(u,16),parseInt(h,16),parseInt(p,16),d?+(parseInt(d,16)/255).toFixed(2):1]}}function g(e){if(e){var t=/^rgb\\((\\d+)[\\s,](\\d+)[\\s,](\\d+)\\)/i.exec(e)||[],r=i(t,4),o=r[0],n=r[1],a=r[2],l=r[3];return o?[s(n,0,255),s(a,0,255),s(l,0,255)]:void 0}}function b(e){if(e){var t=/^rgba?\\((\\d+)\\s*[\\s,]\\s*(\\d+)\\s*[\\s,]\\s*(\\d+)(\\s*[\\s,]\\s*(\\d*(.\\d+)?))?\\)/i.exec(e)||[],r=i(t,6),o=r[0],n=r[1],a=r[2],c=r[3],u=r[5];return o?[s(n,0,255),s(a,0,255),s(c,0,255),s(l(u,1),0,1)]:void 0}}function v(e){if(Array.isArray(e))return[s(e[0],0,255),s(e[1],0,255),s(e[2],0,255),s(l(e[3],1),0,1)];var t=f(e)||b(e);return t&&3===t.length&&t.push(1),t}function m(e){if(e){var t=/^hsl\\((\\d+)[\\s,](\\d+)[\\s,](\\d+)\\)/i.exec(e)||[],r=i(t,4),o=r[0],n=r[1],a=r[2],l=r[3];return o?[s(n,0,360),s(a,0,100),s(l,0,100)]:void 0}}function A(e){if(e){var t=/^hsla?\\((\\d+)\\s*[\\s,]\\s*(\\d+)\\s*[\\s,]\\s*(\\d+)(\\s*[\\s,]\\s*(\\d*(.\\d+)?))?\\)/i.exec(e)||[],r=i(t,6),o=r[0],n=r[1],a=r[2],c=r[3],u=r[5];return o?[s(n,0,255),s(a,0,255),s(c,0,255),s(l(u,1),0,1)]:void 0}}function y(e){if(Array.isArray(e))return[s(e[0],0,360),s(e[1],0,100),s(e[2],0,100),s(l(e[3],1),0,1)];var t=A(e);return t&&3===t.length&&t.push(1),t}function k(e,t){switch(t){case\"rgb\":default:return e.slice(0,3);case\"rgbcss\":return\"rgb(\"+e[0]+\", \"+e[1]+\", \"+e[2]+\")\";case\"rgbcss4\":return\"rgb(\"+e[0]+\", \"+e[1]+\", \"+e[2]+\", \"+e[3]+\")\";case\"rgba\":return e;case\"rgbacss\":return\"rgba(\"+e[0]+\", \"+e[1]+\", \"+e[2]+\", \"+e[3]+\")\";case\"hsl\":return h.apply(void 0,n(e));case\"hslcss\":return\"hsl(\"+(e=h.apply(void 0,n(e)))[0]+\", \"+e[1]+\", \"+e[2]+\")\";case\"hslcss4\":var r=h.apply(void 0,n(e));return\"hsl(\"+r[0]+\", \"+r[1]+\", \"+r[2]+\", \"+e[3]+\")\";case\"hsla\":return[].concat(n(h.apply(void 0,n(e))),[e[3]]);case\"hslacss\":var i=h.apply(void 0,n(e));return\"hsla(\"+i[0]+\", \"+i[1]+\", \"+i[2]+\", \"+e[3]+\")\";case\"hex\":return c.apply(void 0,n(e));case\"hexcss4\":return c.apply(void 0,n(e))+(\"00\"+parseInt(255*e[3]).toString(16)).slice(-2);case\"int\":return p.apply(void 0,n(e))}}t.COLOR_NAMES=a,t.PALETTE_MATERIAL_500=[\"#F44336\",\"#E91E63\",\"#E91E63\",\"#9C27B0\",\"#9C27B0\",\"#673AB7\",\"#673AB7\",\"#3F51B5\",\"#3F51B5\",\"#2196F3\",\"#2196F3\",\"#03A9F4\",\"#03A9F4\",\"#00BCD4\",\"#00BCD4\",\"#009688\",\"#009688\",\"#4CAF50\",\"#4CAF50\",\"#8BC34A\",\"#8BC34A\",\"#CDDC39\",\"#CDDC39\",\"#FFEB3B\",\"#FFEB3B\",\"#FFC107\",\"#FFC107\",\"#FF9800\",\"#FF9800\",\"#FF5722\",\"#FF5722\",\"#795548\",\"#795548\",\"#9E9E9E\",\"#9E9E9E\",\"#607D8B\",\"#607D8B\"],t.PALETTE_MATERIAL_CHROME=[\"#f44336\",\"#e91e63\",\"#9c27b0\",\"#673ab7\",\"#3f51b5\",\"#2196f3\",\"#03a9f4\",\"#00bcd4\",\"#009688\",\"#4caf50\",\"#8bc34a\",\"#cddc39\",\"#ffeb3b\",\"#ffc107\",\"#ff9800\",\"#ff5722\",\"#795548\",\"#9e9e9e\",\"#607d8b\"],t.rgbToHex=c,t.hslToRgb=u,t.rgbToHsl=h,t.rgbToHsv=function(e,t,r){var i=[s(e,0,255)/255,s(t,0,255)/255,s(r,0,255)/255];e=i[0],t=i[1],r=i[2];var o,n=Math.max(e,t,r),a=Math.min(e,t,r),l=void 0,c=n,u=n-a;if(o=0===n?0:u/n,n==a)l=0;else{switch(n){case e:l=(t-r)/u+(t<r?6:0);break;case t:l=(r-e)/u+2;break;case r:l=(e-t)/u+4}l/=6}return[l,o,c]},t.rgbToInt=p,t.intToRgb=function(e){return[e>>16&255,e>>8&255,255&e]},t.cssColorToRgb=d,t.cssColorToRgba=f,t.cssRgbToRgb=g,t.cssRgbaToRgba=b,t.parseColorToRgb=function(e){return Array.isArray(e)?e=[s(e[0],0,255),s(e[1],0,255),s(e[2],0,255)]:d(e)||g(e)},t.parseColorToRgba=v,t.cssHslToHsl=m,t.cssHslaToHsla=A,t.parseColorToHsl=function(e){return Array.isArray(e)?e=[s(e[0],0,360),s(e[1],0,100),s(e[2],0,100)]:m(e)},t.parseColorToHsla=y,t.parseColor=function(e,t){if(t=t||\"rgb\",null!=e){var r=void 0;if((r=v(e))||(r=y(e))&&(r=[].concat(n(u.apply(void 0,n(r))),[r[3]])))return(0,o.default)(t)?[\"rgb\",\"rgbcss\",\"rgbcss4\",\"rgba\",\"rgbacss\",\"hsl\",\"hslcss\",\"hslcss4\",\"hsla\",\"hslacss\",\"hex\",\"hexcss4\",\"int\"].reduce(function(e,t){return e[t]=k(r,t),e},t||{}):k(r,t.toString().toLowerCase())}},t.getLuminance=function(e,t,r){return.2126*(e=(e/=255)<.03928?e/12.92:Math.pow((e+.055)/1.055,2.4))+.7152*(t=(t/=255)<.03928?t/12.92:Math.pow((t+.055)/1.055,2.4))+.0722*((r/=255)<.03928?r/12.92:Math.pow((r+.055)/1.055,2.4))},t.limit=s,t.ensureArray=function(e){return e?Array.from(e):[]},t.nvl=l},function(e,t,r){\"use strict\";\n/*!\n * isobject <https://github.com/jonschlinkert/isobject>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */e.exports=function(e){return null!=e&&\"object\"==typeof e&&!1===Array.isArray(e)}},function(e,t){e.exports='<div class=\"a-color-picker-row a-color-picker-stack a-color-picker-row-top\"> <canvas class=\"a-color-picker-sl a-color-picker-transparent\"></canvas> <div class=a-color-picker-dot></div> </div> <div class=a-color-picker-row> <div class=\"a-color-picker-stack a-color-picker-transparent a-color-picker-circle\"> <div class=a-color-picker-preview> <input class=a-color-picker-clipbaord type=text> </div> </div> <div class=a-color-picker-column> <div class=\"a-color-picker-cell a-color-picker-stack\"> <canvas class=a-color-picker-h></canvas> <div class=a-color-picker-dot></div> </div> <div class=\"a-color-picker-cell a-color-picker-alpha a-color-picker-stack\" show-on-alpha> <canvas class=\"a-color-picker-a a-color-picker-transparent\"></canvas> <div class=a-color-picker-dot></div> </div> </div> </div> <div class=\"a-color-picker-row a-color-picker-hsl\" show-on-hsl> <label>H</label> <input nameref=H type=number maxlength=3 min=0 max=360 value=0> <label>S</label> <input nameref=S type=number maxlength=3 min=0 max=100 value=0> <label>L</label> <input nameref=L type=number maxlength=3 min=0 max=100 value=0> </div> <div class=\"a-color-picker-row a-color-picker-rgb\" show-on-rgb> <label>R</label> <input nameref=R type=number maxlength=3 min=0 max=255 value=0> <label>G</label> <input nameref=G type=number maxlength=3 min=0 max=255 value=0> <label>B</label> <input nameref=B type=number maxlength=3 min=0 max=255 value=0> </div> <div class=\"a-color-picker-row a-color-picker-rgbhex a-color-picker-single-input\" show-on-single-input> <label>HEX</label> <input nameref=RGBHEX type=text select-on-focus> </div> <div class=\"a-color-picker-row a-color-picker-palette\"></div>'},function(e,t,r){var i=r(6);e.exports=\"string\"==typeof i?i:i.toString()},function(e,t,r){(e.exports=r(7)(!1)).push([e.i,\"/*!\\n * a-color-picker\\n * https://github.com/narsenico/a-color-picker\\n * \\n * Copyright (c) 2017-2018, Gianfranco Caldi.\\n * Released under the MIT License.\\n */.a-color-picker{background-color:#fff;padding:0;display:inline-flex;flex-direction:column;user-select:none;width:232px;font:400 10px Helvetica,Arial,sans-serif;border-radius:3px;box-shadow:0 0 0 1px rgba(0,0,0,.05),0 2px 4px rgba(0,0,0,.25)}.a-color-picker,.a-color-picker-row,.a-color-picker input{box-sizing:border-box}.a-color-picker-row{padding:15px;display:flex;flex-direction:row;align-items:center;justify-content:space-between;user-select:none}.a-color-picker-row-top{padding:0}.a-color-picker-row:not(:first-child){border-top:1px solid #f5f5f5}.a-color-picker-column{display:flex;flex-direction:column}.a-color-picker-cell{flex:1 1 auto;margin-bottom:4px}.a-color-picker-cell:last-child{margin-bottom:0}.a-color-picker-stack{position:relative}.a-color-picker-dot{position:absolute;width:14px;height:14px;top:0;left:0;background:#fff;pointer-events:none;border-radius:50px;z-index:1000;box-shadow:0 1px 2px rgba(0,0,0,.75)}.a-color-picker-a,.a-color-picker-h,.a-color-picker-sl{cursor:cell}.a-color-picker-a+.a-color-picker-dot,.a-color-picker-h+.a-color-picker-dot{top:-2px}.a-color-picker-a,.a-color-picker-h{border-radius:2px}.a-color-picker-preview{box-sizing:border-box;width:30px;height:30px;user-select:none;border-radius:15px}.a-color-picker-circle{border-radius:50px;border:1px solid #eee}.a-color-picker-hsl,.a-color-picker-rgb,.a-color-picker-single-input{justify-content:space-evenly}.a-color-picker-hsl>label,.a-color-picker-rgb>label,.a-color-picker-single-input>label{padding:0 8px;flex:0 0 auto;color:#969696}.a-color-picker-hsl>input,.a-color-picker-rgb>input,.a-color-picker-single-input>input{text-align:center;padding:2px 0;width:0;flex:1 1 auto;border:1px solid #e0e0e0;line-height:20px}.a-color-picker-hsl>input::-webkit-inner-spin-button,.a-color-picker-rgb>input::-webkit-inner-spin-button,.a-color-picker-single-input>input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.a-color-picker-hsl>input:focus,.a-color-picker-rgb>input:focus,.a-color-picker-single-input>input:focus{border-color:#04a9f4;outline:none}.a-color-picker-transparent{background-image:linear-gradient(-45deg,#cdcdcd 25%,transparent 0),linear-gradient(45deg,#cdcdcd 25%,transparent 0),linear-gradient(-45deg,transparent 75%,#cdcdcd 0),linear-gradient(45deg,transparent 75%,#cdcdcd 0);background-size:11px 11px;background-position:0 0,0 -5.5px,-5.5px 5.5px,5.5px 0}.a-color-picker-sl{border-radius:3px 3px 0 0}.a-color-picker.hide-alpha [show-on-alpha],.a-color-picker.hide-hsl [show-on-hsl],.a-color-picker.hide-rgb [show-on-rgb],.a-color-picker.hide-single-input [show-on-single-input]{display:none}.a-color-picker-clipbaord{width:100%;height:100%;opacity:0;cursor:pointer}.a-color-picker-palette{flex-flow:wrap;flex-direction:row;justify-content:flex-start;padding:10px}.a-color-picker-palette-color{width:15px;height:15px;flex:0 1 15px;margin:3px;box-sizing:border-box;cursor:pointer;border-radius:3px;box-shadow:inset 0 0 0 1px rgba(0,0,0,.1)}.a-color-picker-palette-add{text-align:center;line-height:13px;color:#607d8b}\",\"\"])},function(e,t){e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var r=function(e,t){var r=e[1]||\"\",i=e[3];if(!i)return r;if(t&&\"function\"==typeof btoa){var o=function(e){return\"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,\"+btoa(unescape(encodeURIComponent(JSON.stringify(e))))+\" */\"}(i),n=i.sources.map(function(e){return\"/*# sourceURL=\"+i.sourceRoot+e+\" */\"});return[r].concat(n).concat([o]).join(\"\\n\")}return[r].join(\"\\n\")}(t,e);return t[2]?\"@media \"+t[2]+\"{\"+r+\"}\":r}).join(\"\")},t.i=function(e,r){\"string\"==typeof e&&(e=[[null,e,\"\"]]);for(var i={},o=0;o<this.length;o++){var n=this[o][0];\"number\"==typeof n&&(i[n]=!0)}for(o=0;o<e.length;o++){var a=e[o];\"number\"==typeof a[0]&&i[a[0]]||(r&&!a[2]?a[2]=r:r&&(a[2]=\"(\"+a[2]+\") and (\"+r+\")\"),t.push(a))}},t}}])});","import '@firebase/auth';\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\n//# sourceMappingURL=index.esm.js.map\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar tslib_1 = require('tslib');\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants.  Some of these (@defines) can be overridden at compile-time.\r\n */\r\nvar CONSTANTS = {\r\n    /**\r\n     * @define {boolean} Whether this is the client Node.js SDK.\r\n     */\r\n    NODE_CLIENT: false,\r\n    /**\r\n     * @define {boolean} Whether this is the Admin Node.js SDK.\r\n     */\r\n    NODE_ADMIN: false,\r\n    /**\r\n     * Firebase SDK Version\r\n     */\r\n    SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n * @param {*} assertion The assertion to be tested for falsiness\r\n * @param {!string} message The message to display if the check fails\r\n */\r\nvar assert = function (assertion, message) {\r\n    if (!assertion) {\r\n        throw assertionError(message);\r\n    }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n * @param {string} message\r\n * @return {!Error}\r\n */\r\nvar assertionError = function (message) {\r\n    return new Error('Firebase Database (' +\r\n        CONSTANTS.SDK_VERSION +\r\n        ') INTERNAL ASSERT FAILED: ' +\r\n        message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar stringToByteArray = function (str) {\r\n    // TODO(user): Use native implementations if/when available\r\n    var out = [], p = 0;\r\n    for (var i = 0; i < str.length; i++) {\r\n        var c = str.charCodeAt(i);\r\n        if (c < 128) {\r\n            out[p++] = c;\r\n        }\r\n        else if (c < 2048) {\r\n            out[p++] = (c >> 6) | 192;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else if ((c & 0xfc00) == 0xd800 &&\r\n            i + 1 < str.length &&\r\n            (str.charCodeAt(i + 1) & 0xfc00) == 0xdc00) {\r\n            // Surrogate Pair\r\n            c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n            out[p++] = (c >> 18) | 240;\r\n            out[p++] = ((c >> 12) & 63) | 128;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else {\r\n            out[p++] = (c >> 12) | 224;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n    }\r\n    return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param {Array<number>} bytes Array of numbers representing characters.\r\n * @return {string} Stringification of the array.\r\n */\r\nvar byteArrayToString = function (bytes) {\r\n    // TODO(user): Use native implementations if/when available\r\n    var out = [], pos = 0, c = 0;\r\n    while (pos < bytes.length) {\r\n        var c1 = bytes[pos++];\r\n        if (c1 < 128) {\r\n            out[c++] = String.fromCharCode(c1);\r\n        }\r\n        else if (c1 > 191 && c1 < 224) {\r\n            var c2 = bytes[pos++];\r\n            out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n        }\r\n        else if (c1 > 239 && c1 < 365) {\r\n            // Surrogate Pair\r\n            var c2 = bytes[pos++];\r\n            var c3 = bytes[pos++];\r\n            var c4 = bytes[pos++];\r\n            var u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n                0x10000;\r\n            out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n            out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n        }\r\n        else {\r\n            var c2 = bytes[pos++];\r\n            var c3 = bytes[pos++];\r\n            out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n        }\r\n    }\r\n    return out.join('');\r\n};\r\n// Static lookup maps, lazily populated by init_()\r\nvar base64 = {\r\n    /**\r\n     * Maps bytes to characters.\r\n     * @type {Object}\r\n     * @private\r\n     */\r\n    byteToCharMap_: null,\r\n    /**\r\n     * Maps characters to bytes.\r\n     * @type {Object}\r\n     * @private\r\n     */\r\n    charToByteMap_: null,\r\n    /**\r\n     * Maps bytes to websafe characters.\r\n     * @type {Object}\r\n     * @private\r\n     */\r\n    byteToCharMapWebSafe_: null,\r\n    /**\r\n     * Maps websafe characters to bytes.\r\n     * @type {Object}\r\n     * @private\r\n     */\r\n    charToByteMapWebSafe_: null,\r\n    /**\r\n     * Our default alphabet, shared between\r\n     * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n     * @type {string}\r\n     */\r\n    ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n    /**\r\n     * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n     * @type {string}\r\n     */\r\n    get ENCODED_VALS() {\r\n        return this.ENCODED_VALS_BASE + '+/=';\r\n    },\r\n    /**\r\n     * Our websafe alphabet.\r\n     * @type {string}\r\n     */\r\n    get ENCODED_VALS_WEBSAFE() {\r\n        return this.ENCODED_VALS_BASE + '-_.';\r\n    },\r\n    /**\r\n     * Whether this browser supports the atob and btoa functions. This extension\r\n     * started at Mozilla but is now implemented by many browsers. We use the\r\n     * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n     * but still allowing the standard per-browser compilations.\r\n     *\r\n     * @type {boolean}\r\n     */\r\n    HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n    /**\r\n     * Base64-encode an array of bytes.\r\n     *\r\n     * @param {Array<number>|Uint8Array} input An array of bytes (numbers with\r\n     *     value in [0, 255]) to encode.\r\n     * @param {boolean=} opt_webSafe Boolean indicating we should use the\r\n     *     alternative alphabet.\r\n     * @return {string} The base64 encoded string.\r\n     */\r\n    encodeByteArray: function (input, opt_webSafe) {\r\n        if (!Array.isArray(input)) {\r\n            throw Error('encodeByteArray takes an array as a parameter');\r\n        }\r\n        this.init_();\r\n        var byteToCharMap = opt_webSafe\r\n            ? this.byteToCharMapWebSafe_\r\n            : this.byteToCharMap_;\r\n        var output = [];\r\n        for (var i = 0; i < input.length; i += 3) {\r\n            var byte1 = input[i];\r\n            var haveByte2 = i + 1 < input.length;\r\n            var byte2 = haveByte2 ? input[i + 1] : 0;\r\n            var haveByte3 = i + 2 < input.length;\r\n            var byte3 = haveByte3 ? input[i + 2] : 0;\r\n            var outByte1 = byte1 >> 2;\r\n            var outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n            var outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n            var outByte4 = byte3 & 0x3f;\r\n            if (!haveByte3) {\r\n                outByte4 = 64;\r\n                if (!haveByte2) {\r\n                    outByte3 = 64;\r\n                }\r\n            }\r\n            output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n        }\r\n        return output.join('');\r\n    },\r\n    /**\r\n     * Base64-encode a string.\r\n     *\r\n     * @param {string} input A string to encode.\r\n     * @param {boolean=} opt_webSafe If true, we should use the\r\n     *     alternative alphabet.\r\n     * @return {string} The base64 encoded string.\r\n     */\r\n    encodeString: function (input, opt_webSafe) {\r\n        // Shortcut for Mozilla browsers that implement\r\n        // a native base64 encoder in the form of \"btoa/atob\"\r\n        if (this.HAS_NATIVE_SUPPORT && !opt_webSafe) {\r\n            return btoa(input);\r\n        }\r\n        return this.encodeByteArray(stringToByteArray(input), opt_webSafe);\r\n    },\r\n    /**\r\n     * Base64-decode a string.\r\n     *\r\n     * @param {string} input to decode.\r\n     * @param {boolean=} opt_webSafe True if we should use the\r\n     *     alternative alphabet.\r\n     * @return {string} string representing the decoded value.\r\n     */\r\n    decodeString: function (input, opt_webSafe) {\r\n        // Shortcut for Mozilla browsers that implement\r\n        // a native base64 encoder in the form of \"btoa/atob\"\r\n        if (this.HAS_NATIVE_SUPPORT && !opt_webSafe) {\r\n            return atob(input);\r\n        }\r\n        return byteArrayToString(this.decodeStringToByteArray(input, opt_webSafe));\r\n    },\r\n    /**\r\n     * Base64-decode a string.\r\n     *\r\n     * In base-64 decoding, groups of four characters are converted into three\r\n     * bytes.  If the encoder did not apply padding, the input length may not\r\n     * be a multiple of 4.\r\n     *\r\n     * In this case, the last group will have fewer than 4 characters, and\r\n     * padding will be inferred.  If the group has one or two characters, it decodes\r\n     * to one byte.  If the group has three characters, it decodes to two bytes.\r\n     *\r\n     * @param {string} input Input to decode.\r\n     * @param {boolean=} opt_webSafe True if we should use the web-safe alphabet.\r\n     * @return {!Array<number>} bytes representing the decoded value.\r\n     */\r\n    decodeStringToByteArray: function (input, opt_webSafe) {\r\n        this.init_();\r\n        var charToByteMap = opt_webSafe\r\n            ? this.charToByteMapWebSafe_\r\n            : this.charToByteMap_;\r\n        var output = [];\r\n        for (var i = 0; i < input.length;) {\r\n            var byte1 = charToByteMap[input.charAt(i++)];\r\n            var haveByte2 = i < input.length;\r\n            var byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n            ++i;\r\n            var haveByte3 = i < input.length;\r\n            var byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n            ++i;\r\n            var haveByte4 = i < input.length;\r\n            var byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n            ++i;\r\n            if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n                throw Error();\r\n            }\r\n            var outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n            output.push(outByte1);\r\n            if (byte3 != 64) {\r\n                var outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n                output.push(outByte2);\r\n                if (byte4 != 64) {\r\n                    var outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n                    output.push(outByte3);\r\n                }\r\n            }\r\n        }\r\n        return output;\r\n    },\r\n    /**\r\n     * Lazy static initialization function. Called before\r\n     * accessing any of the static map variables.\r\n     * @private\r\n     */\r\n    init_: function () {\r\n        if (!this.byteToCharMap_) {\r\n            this.byteToCharMap_ = {};\r\n            this.charToByteMap_ = {};\r\n            this.byteToCharMapWebSafe_ = {};\r\n            this.charToByteMapWebSafe_ = {};\r\n            // We want quick mappings back and forth, so we precompute two maps.\r\n            for (var i = 0; i < this.ENCODED_VALS.length; i++) {\r\n                this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n                this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n                this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n                this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n                // Be forgiving when decoding and correctly decode both encodings.\r\n                if (i >= this.ENCODED_VALS_BASE.length) {\r\n                    this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n                    this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\r\n/**\r\n * URL-safe base64 encoding\r\n * @param {!string} str\r\n * @return {!string}\r\n */\r\nvar base64Encode = function (str) {\r\n    var utf8Bytes = stringToByteArray(str);\r\n    return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param {string} str To be decoded\r\n * @return {?string} Decoded result, if possible\r\n */\r\nvar base64Decode = function (str) {\r\n    try {\r\n        return base64.decodeString(str, true);\r\n    }\r\n    catch (e) {\r\n        console.error('base64Decode failed: ', e);\r\n    }\r\n    return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n    return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays).  Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n */\r\nfunction deepExtend(target, source) {\r\n    if (!(source instanceof Object)) {\r\n        return source;\r\n    }\r\n    switch (source.constructor) {\r\n        case Date:\r\n            // Treat Dates like scalars; if the target date object had any child\r\n            // properties - they will be lost!\r\n            var dateValue = source;\r\n            return new Date(dateValue.getTime());\r\n        case Object:\r\n            if (target === undefined) {\r\n                target = {};\r\n            }\r\n            break;\r\n        case Array:\r\n            // Always copy the array source and overwrite the target.\r\n            target = [];\r\n            break;\r\n        default:\r\n            // Not a plain Object - treat it as a scalar.\r\n            return source;\r\n    }\r\n    for (var prop in source) {\r\n        if (!source.hasOwnProperty(prop)) {\r\n            continue;\r\n        }\r\n        target[prop] = deepExtend(target[prop], source[prop]);\r\n    }\r\n    return target;\r\n}\r\n// TODO: Really needed (for JSCompiler type checking)?\r\nfunction patchProperty(obj, prop, value) {\r\n    obj[prop] = value;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar Deferred = /** @class */ (function () {\r\n    function Deferred() {\r\n        var _this = this;\r\n        this.promise = new Promise(function (resolve, reject) {\r\n            _this.resolve = resolve;\r\n            _this.reject = reject;\r\n        });\r\n    }\r\n    /**\r\n     * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n     * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n     * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n     * @param {((?function(?(Error)): (?|undefined))| (?function(?(Error),?=): (?|undefined)))=} callback\r\n     * @return {!function(?(Error), ?=)}\r\n     */\r\n    Deferred.prototype.wrapCallback = function (callback) {\r\n        var _this = this;\r\n        return function (error, value) {\r\n            if (error) {\r\n                _this.reject(error);\r\n            }\r\n            else {\r\n                _this.resolve(value);\r\n            }\r\n            if (typeof callback === 'function') {\r\n                // Attaching noop handler just in case developer wasn't expecting\r\n                // promises\r\n                _this.promise.catch(function () { });\r\n                // Some of our callbacks don't expect a value and our own tests\r\n                // assert that the parameter length is 1\r\n                if (callback.length === 1) {\r\n                    callback(error);\r\n                }\r\n                else {\r\n                    callback(error, value);\r\n                }\r\n            }\r\n        };\r\n    };\r\n    return Deferred;\r\n}());\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return {string} user agent string\r\n */\r\nvar getUA = function () {\r\n    if (typeof navigator !== 'undefined' &&\r\n        typeof navigator['userAgent'] === 'string') {\r\n        return navigator['userAgent'];\r\n    }\r\n    else {\r\n        return '';\r\n    }\r\n};\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap in the Ripple emulator) nor\r\n * Cordova `onDeviceReady`, which would normally wait for a callback.\r\n *\r\n * @return {boolean} isMobileCordova\r\n */\r\nvar isMobileCordova = function () {\r\n    return (typeof window !== 'undefined' &&\r\n        !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n        /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n};\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return {boolean} True if ReactNative environment is detected.\r\n */\r\nvar isReactNative = function () {\r\n    return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n};\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return {boolean} True if Node.js environment is detected.\r\n */\r\nvar isNodeSdk = function () {\r\n    return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar ERROR_NAME = 'FirebaseError';\r\n// Based on code from:\r\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Custom_Error_Types\r\nvar FirebaseError = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FirebaseError, _super);\r\n    function FirebaseError(code, message) {\r\n        var _this = _super.call(this, message) || this;\r\n        _this.code = code;\r\n        _this.name = ERROR_NAME;\r\n        // Fix For ES5\r\n        // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\n        Object.setPrototypeOf(_this, FirebaseError.prototype);\r\n        // Maintains proper stack trace for where our error was thrown.\r\n        // Only available on V8.\r\n        if (Error.captureStackTrace) {\r\n            Error.captureStackTrace(_this, ErrorFactory.prototype.create);\r\n        }\r\n        return _this;\r\n    }\r\n    return FirebaseError;\r\n}(Error));\r\nvar ErrorFactory = /** @class */ (function () {\r\n    function ErrorFactory(service, serviceName, errors) {\r\n        this.service = service;\r\n        this.serviceName = serviceName;\r\n        this.errors = errors;\r\n    }\r\n    ErrorFactory.prototype.create = function (code, data) {\r\n        if (data === void 0) { data = {}; }\r\n        var fullCode = this.service + \"/\" + code;\r\n        var template = this.errors[code];\r\n        var message = template ? replaceTemplate(template, data) : 'Error';\r\n        // Service Name: Error message (service/code).\r\n        var fullMessage = this.serviceName + \": \" + message + \" (\" + fullCode + \").\";\r\n        var error = new FirebaseError(fullCode, fullMessage);\r\n        // Keys with an underscore at the end of their name are not included in\r\n        // error.data for some reason.\r\n        // TODO: Replace with Object.entries when lib is updated to es2017.\r\n        for (var _i = 0, _a = Object.keys(data); _i < _a.length; _i++) {\r\n            var key = _a[_i];\r\n            if (key.slice(-1) !== '_') {\r\n                if (key in error) {\r\n                    console.warn(\"Overwriting FirebaseError base field \\\"\" + key + \"\\\" can cause unexpected behavior.\");\r\n                }\r\n                error[key] = data[key];\r\n            }\r\n        }\r\n        return error;\r\n    };\r\n    return ErrorFactory;\r\n}());\r\nfunction replaceTemplate(template, data) {\r\n    return template.replace(PATTERN, function (_, key) {\r\n        var value = data[key];\r\n        return value != null ? value.toString() : \"<\" + key + \"?>\";\r\n    });\r\n}\r\nvar PATTERN = /\\{\\$([^}]+)}/g;\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n    return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n    return JSON.stringify(data);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {{header: *, claims: *, data: *, signature: string}}\r\n */\r\nvar decode = function (token) {\r\n    var header = {}, claims = {}, data = {}, signature = '';\r\n    try {\r\n        var parts = token.split('.');\r\n        header = jsonEval(base64Decode(parts[0]) || '');\r\n        claims = jsonEval(base64Decode(parts[1]) || '');\r\n        signature = parts[2];\r\n        data = claims['d'] || {};\r\n        delete claims['d'];\r\n    }\r\n    catch (e) { }\r\n    return {\r\n        header: header,\r\n        claims: claims,\r\n        data: data,\r\n        signature: signature\r\n    };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {boolean}\r\n */\r\nvar isValidTimestamp = function (token) {\r\n    var claims = decode(token).claims, now = Math.floor(new Date().getTime() / 1000), validSince, validUntil;\r\n    if (typeof claims === 'object') {\r\n        if (claims.hasOwnProperty('nbf')) {\r\n            validSince = claims['nbf'];\r\n        }\r\n        else if (claims.hasOwnProperty('iat')) {\r\n            validSince = claims['iat'];\r\n        }\r\n        if (claims.hasOwnProperty('exp')) {\r\n            validUntil = claims['exp'];\r\n        }\r\n        else {\r\n            // token will expire after 24h by default\r\n            validUntil = validSince + 86400;\r\n        }\r\n    }\r\n    return (now && validSince && validUntil && now >= validSince && now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {?number}\r\n */\r\nvar issuedAtTime = function (token) {\r\n    var claims = decode(token).claims;\r\n    if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n        return claims['iat'];\r\n    }\r\n    return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {boolean}\r\n */\r\nvar isValidFormat = function (token) {\r\n    var decoded = decode(token), claims = decoded.claims;\r\n    return !!claims && typeof claims === 'object' && claims.hasOwnProperty('iat');\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {boolean}\r\n */\r\nvar isAdmin = function (token) {\r\n    var claims = decode(token).claims;\r\n    return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// See http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/\r\nvar contains = function (obj, key) {\r\n    return Object.prototype.hasOwnProperty.call(obj, key);\r\n};\r\nvar safeGet = function (obj, key) {\r\n    if (Object.prototype.hasOwnProperty.call(obj, key))\r\n        return obj[key];\r\n    // else return undefined.\r\n};\r\n/**\r\n * Enumerates the keys/values in an object, excluding keys defined on the prototype.\r\n *\r\n * @param {?Object.<K,V>} obj Object to enumerate.\r\n * @param {!function(K, V)} fn Function to call for each key and value.\r\n * @template K,V\r\n */\r\nvar forEach = function (obj, fn) {\r\n    for (var key in obj) {\r\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n            fn(key, obj[key]);\r\n        }\r\n    }\r\n};\r\n/**\r\n * Copies all the (own) properties from one object to another.\r\n * @param {!Object} objTo\r\n * @param {!Object} objFrom\r\n * @return {!Object} objTo\r\n */\r\nvar extend = function (objTo, objFrom) {\r\n    forEach(objFrom, function (key, value) {\r\n        objTo[key] = value;\r\n    });\r\n    return objTo;\r\n};\r\n/**\r\n * Returns a clone of the specified object.\r\n * @param {!Object} obj\r\n * @return {!Object} cloned obj.\r\n */\r\nvar clone = function (obj) {\r\n    return extend({}, obj);\r\n};\r\n/**\r\n * Returns true if obj has typeof \"object\" and is not null.  Unlike goog.isObject(), does not return true\r\n * for functions.\r\n *\r\n * @param obj {*} A potential object.\r\n * @returns {boolean} True if it's an object.\r\n */\r\nvar isNonNullObject = function (obj) {\r\n    return typeof obj === 'object' && obj !== null;\r\n};\r\nvar isEmpty = function (obj) {\r\n    for (var key in obj) {\r\n        return false;\r\n    }\r\n    return true;\r\n};\r\nvar getCount = function (obj) {\r\n    var rv = 0;\r\n    for (var key in obj) {\r\n        rv++;\r\n    }\r\n    return rv;\r\n};\r\nvar map = function (obj, f, opt_obj) {\r\n    var res = {};\r\n    for (var key in obj) {\r\n        res[key] = f.call(opt_obj, obj[key], key, obj);\r\n    }\r\n    return res;\r\n};\r\nvar findKey = function (obj, fn, opt_this) {\r\n    for (var key in obj) {\r\n        if (fn.call(opt_this, obj[key], key, obj)) {\r\n            return key;\r\n        }\r\n    }\r\n    return undefined;\r\n};\r\nvar findValue = function (obj, fn, opt_this) {\r\n    var key = findKey(obj, fn, opt_this);\r\n    return key && obj[key];\r\n};\r\nvar getAnyKey = function (obj) {\r\n    for (var key in obj) {\r\n        return key;\r\n    }\r\n};\r\nvar getValues = function (obj) {\r\n    var res = [];\r\n    var i = 0;\r\n    for (var key in obj) {\r\n        res[i++] = obj[key];\r\n    }\r\n    return res;\r\n};\r\n/**\r\n * Tests whether every key/value pair in an object pass the test implemented\r\n * by the provided function\r\n *\r\n * @param {?Object.<K,V>} obj Object to test.\r\n * @param {!function(K, V)} fn Function to call for each key and value.\r\n * @template K,V\r\n */\r\nvar every = function (obj, fn) {\r\n    for (var key in obj) {\r\n        if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n            if (!fn(key, obj[key])) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a params\r\n * object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n *\r\n * @param {!Object} querystringParams\r\n * @return {string}\r\n */\r\nvar querystring = function (querystringParams) {\r\n    var params = [];\r\n    forEach(querystringParams, function (key, value) {\r\n        if (Array.isArray(value)) {\r\n            value.forEach(function (arrayVal) {\r\n                params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n            });\r\n        }\r\n        else {\r\n            params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n        }\r\n    });\r\n    return params.length ? '&' + params.join('&') : '';\r\n};\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object (e.g. {arg: 'val', arg2: 'val2'})\r\n *\r\n * @param {string} querystring\r\n * @return {!Object}\r\n */\r\nvar querystringDecode = function (querystring) {\r\n    var obj = {};\r\n    var tokens = querystring.replace(/^\\?/, '').split('&');\r\n    tokens.forEach(function (token) {\r\n        if (token) {\r\n            var key = token.split('=');\r\n            obj[key[0]] = key[1];\r\n        }\r\n    });\r\n    return obj;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n *   var sha1 = new sha1();\r\n *   sha1.update(bytes);\r\n *   var hash = sha1.digest();\r\n *\r\n * Performance:\r\n *   Chrome 23:   ~400 Mbit/s\r\n *   Firefox 16:  ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @final\r\n * @struct\r\n */\r\nvar Sha1 = /** @class */ (function () {\r\n    function Sha1() {\r\n        /**\r\n         * Holds the previous values of accumulated variables a-e in the compress_\r\n         * function.\r\n         * @type {!Array<number>}\r\n         * @private\r\n         */\r\n        this.chain_ = [];\r\n        /**\r\n         * A buffer holding the partially computed hash result.\r\n         * @type {!Array<number>}\r\n         * @private\r\n         */\r\n        this.buf_ = [];\r\n        /**\r\n         * An array of 80 bytes, each a part of the message to be hashed.  Referred to\r\n         * as the message schedule in the docs.\r\n         * @type {!Array<number>}\r\n         * @private\r\n         */\r\n        this.W_ = [];\r\n        /**\r\n         * Contains data needed to pad messages less than 64 bytes.\r\n         * @type {!Array<number>}\r\n         * @private\r\n         */\r\n        this.pad_ = [];\r\n        /**\r\n         * @private {number}\r\n         */\r\n        this.inbuf_ = 0;\r\n        /**\r\n         * @private {number}\r\n         */\r\n        this.total_ = 0;\r\n        this.blockSize = 512 / 8;\r\n        this.pad_[0] = 128;\r\n        for (var i = 1; i < this.blockSize; ++i) {\r\n            this.pad_[i] = 0;\r\n        }\r\n        this.reset();\r\n    }\r\n    Sha1.prototype.reset = function () {\r\n        this.chain_[0] = 0x67452301;\r\n        this.chain_[1] = 0xefcdab89;\r\n        this.chain_[2] = 0x98badcfe;\r\n        this.chain_[3] = 0x10325476;\r\n        this.chain_[4] = 0xc3d2e1f0;\r\n        this.inbuf_ = 0;\r\n        this.total_ = 0;\r\n    };\r\n    /**\r\n     * Internal compress helper function.\r\n     * @param {!Array<number>|!Uint8Array|string} buf Block to compress.\r\n     * @param {number=} opt_offset Offset of the block in the buffer.\r\n     * @private\r\n     */\r\n    Sha1.prototype.compress_ = function (buf, opt_offset) {\r\n        if (!opt_offset) {\r\n            opt_offset = 0;\r\n        }\r\n        var W = this.W_;\r\n        // get 16 big endian words\r\n        if (typeof buf === 'string') {\r\n            for (var i = 0; i < 16; i++) {\r\n                // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n                // have a bug that turns the post-increment ++ operator into pre-increment\r\n                // during JIT compilation.  We have code that depends heavily on SHA-1 for\r\n                // correctness and which is affected by this bug, so I've removed all uses\r\n                // of post-increment ++ in which the result value is used.  We can revert\r\n                // this change once the Safari bug\r\n                // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n                // most clients have been updated.\r\n                W[i] =\r\n                    (buf.charCodeAt(opt_offset) << 24) |\r\n                        (buf.charCodeAt(opt_offset + 1) << 16) |\r\n                        (buf.charCodeAt(opt_offset + 2) << 8) |\r\n                        buf.charCodeAt(opt_offset + 3);\r\n                opt_offset += 4;\r\n            }\r\n        }\r\n        else {\r\n            for (var i = 0; i < 16; i++) {\r\n                W[i] =\r\n                    (buf[opt_offset] << 24) |\r\n                        (buf[opt_offset + 1] << 16) |\r\n                        (buf[opt_offset + 2] << 8) |\r\n                        buf[opt_offset + 3];\r\n                opt_offset += 4;\r\n            }\r\n        }\r\n        // expand to 80 words\r\n        for (var i = 16; i < 80; i++) {\r\n            var t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n            W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n        }\r\n        var a = this.chain_[0];\r\n        var b = this.chain_[1];\r\n        var c = this.chain_[2];\r\n        var d = this.chain_[3];\r\n        var e = this.chain_[4];\r\n        var f, k;\r\n        // TODO(user): Try to unroll this loop to speed up the computation.\r\n        for (var i = 0; i < 80; i++) {\r\n            if (i < 40) {\r\n                if (i < 20) {\r\n                    f = d ^ (b & (c ^ d));\r\n                    k = 0x5a827999;\r\n                }\r\n                else {\r\n                    f = b ^ c ^ d;\r\n                    k = 0x6ed9eba1;\r\n                }\r\n            }\r\n            else {\r\n                if (i < 60) {\r\n                    f = (b & c) | (d & (b | c));\r\n                    k = 0x8f1bbcdc;\r\n                }\r\n                else {\r\n                    f = b ^ c ^ d;\r\n                    k = 0xca62c1d6;\r\n                }\r\n            }\r\n            var t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n            e = d;\r\n            d = c;\r\n            c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n            b = a;\r\n            a = t;\r\n        }\r\n        this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n        this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n        this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n        this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n        this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n    };\r\n    Sha1.prototype.update = function (bytes, opt_length) {\r\n        // TODO(johnlenz): tighten the function signature and remove this check\r\n        if (bytes == null) {\r\n            return;\r\n        }\r\n        if (opt_length === undefined) {\r\n            opt_length = bytes.length;\r\n        }\r\n        var lengthMinusBlock = opt_length - this.blockSize;\r\n        var n = 0;\r\n        // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n        var buf = this.buf_;\r\n        var inbuf = this.inbuf_;\r\n        // The outer while loop should execute at most twice.\r\n        while (n < opt_length) {\r\n            // When we have no data in the block to top up, we can directly process the\r\n            // input buffer (assuming it contains sufficient data). This gives ~25%\r\n            // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n            // the data is provided in large chunks (or in multiples of 64 bytes).\r\n            if (inbuf == 0) {\r\n                while (n <= lengthMinusBlock) {\r\n                    this.compress_(bytes, n);\r\n                    n += this.blockSize;\r\n                }\r\n            }\r\n            if (typeof bytes === 'string') {\r\n                while (n < opt_length) {\r\n                    buf[inbuf] = bytes.charCodeAt(n);\r\n                    ++inbuf;\r\n                    ++n;\r\n                    if (inbuf == this.blockSize) {\r\n                        this.compress_(buf);\r\n                        inbuf = 0;\r\n                        // Jump to the outer loop so we use the full-block optimization.\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n                while (n < opt_length) {\r\n                    buf[inbuf] = bytes[n];\r\n                    ++inbuf;\r\n                    ++n;\r\n                    if (inbuf == this.blockSize) {\r\n                        this.compress_(buf);\r\n                        inbuf = 0;\r\n                        // Jump to the outer loop so we use the full-block optimization.\r\n                        break;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        this.inbuf_ = inbuf;\r\n        this.total_ += opt_length;\r\n    };\r\n    /** @override */\r\n    Sha1.prototype.digest = function () {\r\n        var digest = [];\r\n        var totalBits = this.total_ * 8;\r\n        // Add pad 0x80 0x00*.\r\n        if (this.inbuf_ < 56) {\r\n            this.update(this.pad_, 56 - this.inbuf_);\r\n        }\r\n        else {\r\n            this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n        }\r\n        // Add # bits.\r\n        for (var i = this.blockSize - 1; i >= 56; i--) {\r\n            this.buf_[i] = totalBits & 255;\r\n            totalBits /= 256; // Don't use bit-shifting here!\r\n        }\r\n        this.compress_(this.buf_);\r\n        var n = 0;\r\n        for (var i = 0; i < 5; i++) {\r\n            for (var j = 24; j >= 0; j -= 8) {\r\n                digest[n] = (this.chain_[i] >> j) & 255;\r\n                ++n;\r\n            }\r\n        }\r\n        return digest;\r\n    };\r\n    return Sha1;\r\n}());\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n *     as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n    var proxy = new ObserverProxy(executor, onNoObservers);\r\n    return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nvar ObserverProxy = /** @class */ (function () {\r\n    /**\r\n     * @param executor Function which can make calls to a single Observer\r\n     *     as a proxy.\r\n     * @param onNoObservers Callback when count of Observers goes to zero.\r\n     */\r\n    function ObserverProxy(executor, onNoObservers) {\r\n        var _this = this;\r\n        this.observers = [];\r\n        this.unsubscribes = [];\r\n        this.observerCount = 0;\r\n        // Micro-task scheduling by calling task.then().\r\n        this.task = Promise.resolve();\r\n        this.finalized = false;\r\n        this.onNoObservers = onNoObservers;\r\n        // Call the executor asynchronously so subscribers that are called\r\n        // synchronously after the creation of the subscribe function\r\n        // can still receive the very first value generated in the executor.\r\n        this.task\r\n            .then(function () {\r\n            executor(_this);\r\n        })\r\n            .catch(function (e) {\r\n            _this.error(e);\r\n        });\r\n    }\r\n    ObserverProxy.prototype.next = function (value) {\r\n        this.forEachObserver(function (observer) {\r\n            observer.next(value);\r\n        });\r\n    };\r\n    ObserverProxy.prototype.error = function (error) {\r\n        this.forEachObserver(function (observer) {\r\n            observer.error(error);\r\n        });\r\n        this.close(error);\r\n    };\r\n    ObserverProxy.prototype.complete = function () {\r\n        this.forEachObserver(function (observer) {\r\n            observer.complete();\r\n        });\r\n        this.close();\r\n    };\r\n    /**\r\n     * Subscribe function that can be used to add an Observer to the fan-out list.\r\n     *\r\n     * - We require that no event is sent to a subscriber sychronously to their\r\n     *   call to subscribe().\r\n     */\r\n    ObserverProxy.prototype.subscribe = function (nextOrObserver, error, complete) {\r\n        var _this = this;\r\n        var observer;\r\n        if (nextOrObserver === undefined &&\r\n            error === undefined &&\r\n            complete === undefined) {\r\n            throw new Error('Missing Observer.');\r\n        }\r\n        // Assemble an Observer object when passed as callback functions.\r\n        if (implementsAnyMethods(nextOrObserver, ['next', 'error', 'complete'])) {\r\n            observer = nextOrObserver;\r\n        }\r\n        else {\r\n            observer = {\r\n                next: nextOrObserver,\r\n                error: error,\r\n                complete: complete\r\n            };\r\n        }\r\n        if (observer.next === undefined) {\r\n            observer.next = noop;\r\n        }\r\n        if (observer.error === undefined) {\r\n            observer.error = noop;\r\n        }\r\n        if (observer.complete === undefined) {\r\n            observer.complete = noop;\r\n        }\r\n        var unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n        // Attempt to subscribe to a terminated Observable - we\r\n        // just respond to the Observer with the final error or complete\r\n        // event.\r\n        if (this.finalized) {\r\n            this.task.then(function () {\r\n                try {\r\n                    if (_this.finalError) {\r\n                        observer.error(_this.finalError);\r\n                    }\r\n                    else {\r\n                        observer.complete();\r\n                    }\r\n                }\r\n                catch (e) {\r\n                    // nothing\r\n                }\r\n                return;\r\n            });\r\n        }\r\n        this.observers.push(observer);\r\n        return unsub;\r\n    };\r\n    // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n    // any unsubscribed Observer.\r\n    ObserverProxy.prototype.unsubscribeOne = function (i) {\r\n        if (this.observers === undefined || this.observers[i] === undefined) {\r\n            return;\r\n        }\r\n        delete this.observers[i];\r\n        this.observerCount -= 1;\r\n        if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n            this.onNoObservers(this);\r\n        }\r\n    };\r\n    ObserverProxy.prototype.forEachObserver = function (fn) {\r\n        if (this.finalized) {\r\n            // Already closed by previous event....just eat the additional values.\r\n            return;\r\n        }\r\n        // Since sendOne calls asynchronously - there is no chance that\r\n        // this.observers will become undefined.\r\n        for (var i = 0; i < this.observers.length; i++) {\r\n            this.sendOne(i, fn);\r\n        }\r\n    };\r\n    // Call the Observer via one of it's callback function. We are careful to\r\n    // confirm that the observe has not been unsubscribed since this asynchronous\r\n    // function had been queued.\r\n    ObserverProxy.prototype.sendOne = function (i, fn) {\r\n        var _this = this;\r\n        // Execute the callback asynchronously\r\n        this.task.then(function () {\r\n            if (_this.observers !== undefined && _this.observers[i] !== undefined) {\r\n                try {\r\n                    fn(_this.observers[i]);\r\n                }\r\n                catch (e) {\r\n                    // Ignore exceptions raised in Observers or missing methods of an\r\n                    // Observer.\r\n                    // Log error to console. b/31404806\r\n                    if (typeof console !== 'undefined' && console.error) {\r\n                        console.error(e);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n    };\r\n    ObserverProxy.prototype.close = function (err) {\r\n        var _this = this;\r\n        if (this.finalized) {\r\n            return;\r\n        }\r\n        this.finalized = true;\r\n        if (err !== undefined) {\r\n            this.finalError = err;\r\n        }\r\n        // Proxy is no longer needed - garbage collect references\r\n        this.task.then(function () {\r\n            _this.observers = undefined;\r\n            _this.onNoObservers = undefined;\r\n        });\r\n    };\r\n    return ObserverProxy;\r\n}());\r\n/** Turn synchronous function into one called asynchronously. */\r\nfunction async(fn, onError) {\r\n    return function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        Promise.resolve(true)\r\n            .then(function () {\r\n            fn.apply(void 0, args);\r\n        })\r\n            .catch(function (error) {\r\n            if (onError) {\r\n                onError(error);\r\n            }\r\n        });\r\n    };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n    if (typeof obj !== 'object' || obj === null) {\r\n        return false;\r\n    }\r\n    for (var _i = 0, methods_1 = methods; _i < methods_1.length; _i++) {\r\n        var method = methods_1[_i];\r\n        if (method in obj && typeof obj[method] === 'function') {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\nfunction noop() {\r\n    // do nothing\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param {!string} fnName The function name\r\n * @param {!number} minCount The minimum number of arguments to allow for the function call\r\n * @param {!number} maxCount The maximum number of argument to allow for the function call\r\n * @param {!number} argCount The actual number of arguments provided.\r\n */\r\nvar validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n    var argError;\r\n    if (argCount < minCount) {\r\n        argError = 'at least ' + minCount;\r\n    }\r\n    else if (argCount > maxCount) {\r\n        argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n    }\r\n    if (argError) {\r\n        var error = fnName +\r\n            ' failed: Was called with ' +\r\n            argCount +\r\n            (argCount === 1 ? ' argument.' : ' arguments.') +\r\n            ' Expects ' +\r\n            argError +\r\n            '.';\r\n        throw new Error(error);\r\n    }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param {!string} fnName The function name\r\n * @param {!number} argumentNumber The index of the argument\r\n * @param {boolean} optional Whether or not the argument is optional\r\n * @return {!string} The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argumentNumber, optional) {\r\n    var argName = '';\r\n    switch (argumentNumber) {\r\n        case 1:\r\n            argName = optional ? 'first' : 'First';\r\n            break;\r\n        case 2:\r\n            argName = optional ? 'second' : 'Second';\r\n            break;\r\n        case 3:\r\n            argName = optional ? 'third' : 'Third';\r\n            break;\r\n        case 4:\r\n            argName = optional ? 'fourth' : 'Fourth';\r\n            break;\r\n        default:\r\n            throw new Error('errorPrefix called with argumentNumber > 4.  Need to update it?');\r\n    }\r\n    var error = fnName + ' failed: ';\r\n    error += argName + ' argument ';\r\n    return error;\r\n}\r\n/**\r\n * @param {!string} fnName\r\n * @param {!number} argumentNumber\r\n * @param {!string} namespace\r\n * @param {boolean} optional\r\n */\r\nfunction validateNamespace(fnName, argumentNumber, namespace, optional) {\r\n    if (optional && !namespace)\r\n        return;\r\n    if (typeof namespace !== 'string') {\r\n        //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n        throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n            'must be a valid firebase namespace.');\r\n    }\r\n}\r\nfunction validateCallback(fnName, argumentNumber, callback, optional) {\r\n    if (optional && !callback)\r\n        return;\r\n    if (typeof callback !== 'function')\r\n        throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n            'must be a valid function.');\r\n}\r\nfunction validateContextObject(fnName, argumentNumber, context, optional) {\r\n    if (optional && !context)\r\n        return;\r\n    if (typeof context !== 'object' || context === null)\r\n        throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n            'must be a valid context object.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript.  All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nvar stringToByteArray$1 = function (str) {\r\n    var out = [], p = 0;\r\n    for (var i = 0; i < str.length; i++) {\r\n        var c = str.charCodeAt(i);\r\n        // Is this the lead surrogate in a surrogate pair?\r\n        if (c >= 0xd800 && c <= 0xdbff) {\r\n            var high = c - 0xd800; // the high 10 bits.\r\n            i++;\r\n            assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n            var low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n            c = 0x10000 + (high << 10) + low;\r\n        }\r\n        if (c < 128) {\r\n            out[p++] = c;\r\n        }\r\n        else if (c < 2048) {\r\n            out[p++] = (c >> 6) | 192;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else if (c < 65536) {\r\n            out[p++] = (c >> 12) | 224;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n        else {\r\n            out[p++] = (c >> 18) | 240;\r\n            out[p++] = ((c >> 12) & 63) | 128;\r\n            out[p++] = ((c >> 6) & 63) | 128;\r\n            out[p++] = (c & 63) | 128;\r\n        }\r\n    }\r\n    return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nvar stringLength = function (str) {\r\n    var p = 0;\r\n    for (var i = 0; i < str.length; i++) {\r\n        var c = str.charCodeAt(i);\r\n        if (c < 128) {\r\n            p++;\r\n        }\r\n        else if (c < 2048) {\r\n            p += 2;\r\n        }\r\n        else if (c >= 0xd800 && c <= 0xdbff) {\r\n            // Lead surrogate of a surrogate pair.  The pair together will take 4 bytes to represent.\r\n            p += 4;\r\n            i++; // skip trail surrogate.\r\n        }\r\n        else {\r\n            p += 3;\r\n        }\r\n    }\r\n    return p;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\n\nexports.CONSTANTS = CONSTANTS;\nexports.Deferred = Deferred;\nexports.ErrorFactory = ErrorFactory;\nexports.FirebaseError = FirebaseError;\nexports.Sha1 = Sha1;\nexports.assert = assert;\nexports.assertionError = assertionError;\nexports.async = async;\nexports.base64 = base64;\nexports.base64Decode = base64Decode;\nexports.base64Encode = base64Encode;\nexports.clone = clone;\nexports.contains = contains;\nexports.createSubscribe = createSubscribe;\nexports.decode = decode;\nexports.deepCopy = deepCopy;\nexports.deepExtend = deepExtend;\nexports.errorPrefix = errorPrefix;\nexports.every = every;\nexports.extend = extend;\nexports.findKey = findKey;\nexports.findValue = findValue;\nexports.forEach = forEach;\nexports.getAnyKey = getAnyKey;\nexports.getCount = getCount;\nexports.getUA = getUA;\nexports.getValues = getValues;\nexports.isAdmin = isAdmin;\nexports.isEmpty = isEmpty;\nexports.isMobileCordova = isMobileCordova;\nexports.isNodeSdk = isNodeSdk;\nexports.isNonNullObject = isNonNullObject;\nexports.isReactNative = isReactNative;\nexports.isValidFormat = isValidFormat;\nexports.isValidTimestamp = isValidTimestamp;\nexports.issuedAtTime = issuedAtTime;\nexports.jsonEval = jsonEval;\nexports.map = map;\nexports.patchProperty = patchProperty;\nexports.querystring = querystring;\nexports.querystringDecode = querystringDecode;\nexports.safeGet = safeGet;\nexports.stringLength = stringLength;\nexports.stringToByteArray = stringToByteArray$1;\nexports.stringify = stringify;\nexports.validateArgCount = validateArgCount;\nexports.validateCallback = validateCallback;\nexports.validateContextObject = validateContextObject;\nexports.validateNamespace = validateNamespace;\n//# sourceMappingURL=index.cjs.js.map\n","var bind = require('../internals/bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation\n// 0 -> Array#forEach\n// https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n// 1 -> Array#map\n// https://tc39.github.io/ecma262/#sec-array.prototype.map\n// 2 -> Array#filter\n// https://tc39.github.io/ecma262/#sec-array.prototype.filter\n// 3 -> Array#some\n// https://tc39.github.io/ecma262/#sec-array.prototype.some\n// 4 -> Array#every\n// https://tc39.github.io/ecma262/#sec-array.prototype.every\n// 5 -> Array#find\n// https://tc39.github.io/ecma262/#sec-array.prototype.find\n// 6 -> Array#findIndex\n// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\nmodule.exports = function (TYPE, specificCreate) {\n  var IS_MAP = TYPE == 1;\n  var IS_FILTER = TYPE == 2;\n  var IS_SOME = TYPE == 3;\n  var IS_EVERY = TYPE == 4;\n  var IS_FIND_INDEX = TYPE == 6;\n  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n  var create = specificCreate || arraySpeciesCreate;\n  return function ($this, callbackfn, that) {\n    var O = toObject($this);\n    var self = IndexedObject(O);\n    var boundFunction = bind(callbackfn, that, 3);\n    var length = toLength(self.length);\n    var index = 0;\n    var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n    var value, result;\n    for (;length > index; index++) if (NO_HOLES || index in self) {\n      value = self[index];\n      result = boundFunction(value, index, O);\n      if (TYPE) {\n        if (IS_MAP) target[index] = result; // map\n        else if (result) switch (TYPE) {\n          case 3: return true;              // some\n          case 5: return value;             // find\n          case 6: return index;             // findIndex\n          case 2: target.push(value);       // filter\n        } else if (IS_EVERY) return false;  // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n  };\n};\n","\n\nimport { buildQueryString, parseQueryString } from 'aurelia-path';\n\nexport var State = function () {\n  function State(charSpec) {\n    \n\n    this.charSpec = charSpec;\n    this.nextStates = [];\n  }\n\n  State.prototype.get = function get(charSpec) {\n    for (var _iterator = this.nextStates, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var child = _ref;\n\n      var isEqual = child.charSpec.validChars === charSpec.validChars && child.charSpec.invalidChars === charSpec.invalidChars;\n\n      if (isEqual) {\n        return child;\n      }\n    }\n\n    return undefined;\n  };\n\n  State.prototype.put = function put(charSpec) {\n    var state = this.get(charSpec);\n\n    if (state) {\n      return state;\n    }\n\n    state = new State(charSpec);\n\n    this.nextStates.push(state);\n\n    if (charSpec.repeat) {\n      state.nextStates.push(state);\n    }\n\n    return state;\n  };\n\n  State.prototype.match = function match(ch) {\n    var nextStates = this.nextStates;\n    var results = [];\n\n    for (var i = 0, l = nextStates.length; i < l; i++) {\n      var child = nextStates[i];\n      var charSpec = child.charSpec;\n\n      if (charSpec.validChars !== undefined) {\n        if (charSpec.validChars.indexOf(ch) !== -1) {\n          results.push(child);\n        }\n      } else if (charSpec.invalidChars !== undefined) {\n        if (charSpec.invalidChars.indexOf(ch) === -1) {\n          results.push(child);\n        }\n      }\n    }\n\n    return results;\n  };\n\n  return State;\n}();\n\nvar specials = ['/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\'];\n\nvar escapeRegex = new RegExp('(\\\\' + specials.join('|\\\\') + ')', 'g');\n\nexport var StaticSegment = function () {\n  function StaticSegment(string, caseSensitive) {\n    \n\n    this.string = string;\n    this.caseSensitive = caseSensitive;\n  }\n\n  StaticSegment.prototype.eachChar = function eachChar(callback) {\n    var s = this.string;\n    for (var i = 0, ii = s.length; i < ii; ++i) {\n      var ch = s[i];\n      callback({ validChars: this.caseSensitive ? ch : ch.toUpperCase() + ch.toLowerCase() });\n    }\n  };\n\n  StaticSegment.prototype.regex = function regex() {\n    return this.string.replace(escapeRegex, '\\\\$1');\n  };\n\n  StaticSegment.prototype.generate = function generate() {\n    return this.string;\n  };\n\n  return StaticSegment;\n}();\n\nexport var DynamicSegment = function () {\n  function DynamicSegment(name, optional) {\n    \n\n    this.name = name;\n    this.optional = optional;\n  }\n\n  DynamicSegment.prototype.eachChar = function eachChar(callback) {\n    callback({ invalidChars: '/', repeat: true });\n  };\n\n  DynamicSegment.prototype.regex = function regex() {\n    return '([^/]+)';\n  };\n\n  DynamicSegment.prototype.generate = function generate(params, consumed) {\n    consumed[this.name] = true;\n    return params[this.name];\n  };\n\n  return DynamicSegment;\n}();\n\nexport var StarSegment = function () {\n  function StarSegment(name) {\n    \n\n    this.name = name;\n  }\n\n  StarSegment.prototype.eachChar = function eachChar(callback) {\n    callback({ invalidChars: '', repeat: true });\n  };\n\n  StarSegment.prototype.regex = function regex() {\n    return '(.+)';\n  };\n\n  StarSegment.prototype.generate = function generate(params, consumed) {\n    consumed[this.name] = true;\n    return params[this.name];\n  };\n\n  return StarSegment;\n}();\n\nexport var EpsilonSegment = function () {\n  function EpsilonSegment() {\n    \n  }\n\n  EpsilonSegment.prototype.eachChar = function eachChar() {};\n\n  EpsilonSegment.prototype.regex = function regex() {\n    return '';\n  };\n\n  EpsilonSegment.prototype.generate = function generate() {\n    return '';\n  };\n\n  return EpsilonSegment;\n}();\n\nexport var RouteRecognizer = function () {\n  function RouteRecognizer() {\n    \n\n    this.rootState = new State();\n    this.names = {};\n    this.routes = new Map();\n  }\n\n  RouteRecognizer.prototype.add = function add(route) {\n    var _this = this;\n\n    if (Array.isArray(route)) {\n      route.forEach(function (r) {\n        return _this.add(r);\n      });\n      return undefined;\n    }\n\n    var currentState = this.rootState;\n    var skippableStates = [];\n    var regex = '^';\n    var types = { statics: 0, dynamics: 0, stars: 0 };\n    var names = [];\n    var routeName = route.handler.name;\n    var isEmpty = true;\n    var segments = parse(route.path, names, types, route.caseSensitive);\n\n    for (var i = 0, ii = segments.length; i < ii; i++) {\n      var segment = segments[i];\n      if (segment instanceof EpsilonSegment) {\n        continue;\n      }\n\n      var _addSegment = addSegment(currentState, segment),\n          firstState = _addSegment[0],\n          nextState = _addSegment[1];\n\n      for (var j = 0, jj = skippableStates.length; j < jj; j++) {\n        skippableStates[j].nextStates.push(firstState);\n      }\n\n      if (segment.optional) {\n        skippableStates.push(nextState);\n        regex += '(?:/' + segment.regex() + ')?';\n      } else {\n        currentState = nextState;\n        regex += '/' + segment.regex();\n        skippableStates.length = 0;\n        isEmpty = false;\n      }\n    }\n\n    if (isEmpty) {\n      currentState = currentState.put({ validChars: '/' });\n      regex += '/?';\n    }\n\n    var handlers = [{ handler: route.handler, names: names }];\n\n    this.routes.set(route.handler, { segments: segments, handlers: handlers });\n    if (routeName) {\n      var routeNames = Array.isArray(routeName) ? routeName : [routeName];\n      for (var _i2 = 0; _i2 < routeNames.length; _i2++) {\n        if (!(routeNames[_i2] in this.names)) {\n          this.names[routeNames[_i2]] = { segments: segments, handlers: handlers };\n        }\n      }\n    }\n\n    for (var _i3 = 0; _i3 < skippableStates.length; _i3++) {\n      var state = skippableStates[_i3];\n      state.handlers = handlers;\n      state.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n      state.types = types;\n    }\n\n    currentState.handlers = handlers;\n    currentState.regex = new RegExp(regex + '$', route.caseSensitive ? '' : 'i');\n    currentState.types = types;\n\n    return currentState;\n  };\n\n  RouteRecognizer.prototype.getRoute = function getRoute(nameOrRoute) {\n    return typeof nameOrRoute === 'string' ? this.names[nameOrRoute] : this.routes.get(nameOrRoute);\n  };\n\n  RouteRecognizer.prototype.handlersFor = function handlersFor(nameOrRoute) {\n    var route = this.getRoute(nameOrRoute);\n    if (!route) {\n      throw new Error('There is no route named ' + nameOrRoute);\n    }\n\n    return [].concat(route.handlers);\n  };\n\n  RouteRecognizer.prototype.hasRoute = function hasRoute(nameOrRoute) {\n    return !!this.getRoute(nameOrRoute);\n  };\n\n  RouteRecognizer.prototype.generate = function generate(nameOrRoute, params) {\n    var route = this.getRoute(nameOrRoute);\n    if (!route) {\n      throw new Error('There is no route named ' + nameOrRoute);\n    }\n\n    var handler = route.handlers[0].handler;\n    if (handler.generationUsesHref) {\n      return handler.href;\n    }\n\n    var routeParams = Object.assign({}, params);\n    var segments = route.segments;\n    var consumed = {};\n    var output = '';\n\n    for (var i = 0, l = segments.length; i < l; i++) {\n      var segment = segments[i];\n\n      if (segment instanceof EpsilonSegment) {\n        continue;\n      }\n\n      var segmentValue = segment.generate(routeParams, consumed);\n      if (segmentValue === null || segmentValue === undefined) {\n        if (!segment.optional) {\n          throw new Error('A value is required for route parameter \\'' + segment.name + '\\' in route \\'' + nameOrRoute + '\\'.');\n        }\n      } else {\n        output += '/';\n        output += segmentValue;\n      }\n    }\n\n    if (output.charAt(0) !== '/') {\n      output = '/' + output;\n    }\n\n    for (var param in consumed) {\n      delete routeParams[param];\n    }\n\n    var queryString = buildQueryString(routeParams);\n    output += queryString ? '?' + queryString : '';\n\n    return output;\n  };\n\n  RouteRecognizer.prototype.recognize = function recognize(path) {\n    var states = [this.rootState];\n    var queryParams = {};\n    var isSlashDropped = false;\n    var normalizedPath = path;\n\n    var queryStart = normalizedPath.indexOf('?');\n    if (queryStart !== -1) {\n      var queryString = normalizedPath.substr(queryStart + 1, normalizedPath.length);\n      normalizedPath = normalizedPath.substr(0, queryStart);\n      queryParams = parseQueryString(queryString);\n    }\n\n    normalizedPath = decodeURI(normalizedPath);\n\n    if (normalizedPath.charAt(0) !== '/') {\n      normalizedPath = '/' + normalizedPath;\n    }\n\n    var pathLen = normalizedPath.length;\n    if (pathLen > 1 && normalizedPath.charAt(pathLen - 1) === '/') {\n      normalizedPath = normalizedPath.substr(0, pathLen - 1);\n      isSlashDropped = true;\n    }\n\n    for (var i = 0, l = normalizedPath.length; i < l; i++) {\n      states = recognizeChar(states, normalizedPath.charAt(i));\n      if (!states.length) {\n        break;\n      }\n    }\n\n    var solutions = [];\n    for (var _i4 = 0, _l = states.length; _i4 < _l; _i4++) {\n      if (states[_i4].handlers) {\n        solutions.push(states[_i4]);\n      }\n    }\n\n    states = sortSolutions(solutions);\n\n    var state = solutions[0];\n    if (state && state.handlers) {\n      if (isSlashDropped && state.regex.source.slice(-5) === '(.+)$') {\n        normalizedPath = normalizedPath + '/';\n      }\n\n      return findHandler(state, normalizedPath, queryParams);\n    }\n  };\n\n  return RouteRecognizer;\n}();\n\nvar RecognizeResults = function RecognizeResults(queryParams) {\n  \n\n  this.splice = Array.prototype.splice;\n  this.slice = Array.prototype.slice;\n  this.push = Array.prototype.push;\n  this.length = 0;\n  this.queryParams = queryParams || {};\n};\n\nfunction parse(route, names, types, caseSensitive) {\n  var normalizedRoute = route;\n  if (route.charAt(0) === '/') {\n    normalizedRoute = route.substr(1);\n  }\n\n  var results = [];\n\n  var splitRoute = normalizedRoute.split('/');\n  for (var i = 0, ii = splitRoute.length; i < ii; ++i) {\n    var segment = splitRoute[i];\n\n    var match = segment.match(/^:([^?]+)(\\?)?$/);\n    if (match) {\n      var _match = match,\n          _name = _match[1],\n          optional = _match[2];\n\n      if (_name.indexOf('=') !== -1) {\n        throw new Error('Parameter ' + _name + ' in route ' + route + ' has a default value, which is not supported.');\n      }\n      results.push(new DynamicSegment(_name, !!optional));\n      names.push(_name);\n      types.dynamics++;\n      continue;\n    }\n\n    match = segment.match(/^\\*(.+)$/);\n    if (match) {\n      results.push(new StarSegment(match[1]));\n      names.push(match[1]);\n      types.stars++;\n    } else if (segment === '') {\n      results.push(new EpsilonSegment());\n    } else {\n      results.push(new StaticSegment(segment, caseSensitive));\n      types.statics++;\n    }\n  }\n\n  return results;\n}\n\nfunction sortSolutions(states) {\n  return states.sort(function (a, b) {\n    if (a.types.stars !== b.types.stars) {\n      return a.types.stars - b.types.stars;\n    }\n\n    if (a.types.stars) {\n      if (a.types.statics !== b.types.statics) {\n        return b.types.statics - a.types.statics;\n      }\n      if (a.types.dynamics !== b.types.dynamics) {\n        return b.types.dynamics - a.types.dynamics;\n      }\n    }\n\n    if (a.types.dynamics !== b.types.dynamics) {\n      return a.types.dynamics - b.types.dynamics;\n    }\n\n    if (a.types.statics !== b.types.statics) {\n      return b.types.statics - a.types.statics;\n    }\n\n    return 0;\n  });\n}\n\nfunction recognizeChar(states, ch) {\n  var nextStates = [];\n\n  for (var i = 0, l = states.length; i < l; i++) {\n    var state = states[i];\n    nextStates.push.apply(nextStates, state.match(ch));\n  }\n\n  return nextStates;\n}\n\nfunction findHandler(state, path, queryParams) {\n  var handlers = state.handlers;\n  var regex = state.regex;\n  var captures = path.match(regex);\n  var currentCapture = 1;\n  var result = new RecognizeResults(queryParams);\n\n  for (var i = 0, l = handlers.length; i < l; i++) {\n    var _handler = handlers[i];\n    var _names = _handler.names;\n    var _params = {};\n\n    for (var j = 0, m = _names.length; j < m; j++) {\n      _params[_names[j]] = captures[currentCapture++];\n    }\n\n    result.push({ handler: _handler.handler, params: _params, isDynamic: !!_names.length });\n  }\n\n  return result;\n}\n\nfunction addSegment(currentState, segment) {\n  var firstState = currentState.put({ validChars: '/' });\n  var nextState = firstState;\n  segment.eachChar(function (ch) {\n    nextState = nextState.put(ch);\n  });\n\n  return [firstState, nextState];\n}","import { getLogger } from 'aurelia-logging';\nimport { Container } from 'aurelia-dependency-injection';\nimport { History } from 'aurelia-history';\nimport { RouteRecognizer } from 'aurelia-route-recognizer';\nimport { EventAggregator } from 'aurelia-event-aggregator';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\n/**\r\n * Class used to represent an instruction during a navigation.\r\n */\r\nvar NavigationInstruction = /** @class */ (function () {\r\n    function NavigationInstruction(init) {\r\n        /**\r\n         * Current built viewport plan of this nav instruction\r\n         */\r\n        this.plan = null;\r\n        this.options = {};\r\n        Object.assign(this, init);\r\n        this.params = this.params || {};\r\n        this.viewPortInstructions = {};\r\n        var ancestorParams = [];\r\n        var current = this;\r\n        do {\r\n            var currentParams = Object.assign({}, current.params);\r\n            if (current.config && current.config.hasChildRouter) {\r\n                // remove the param for the injected child route segment\r\n                delete currentParams[current.getWildCardName()];\r\n            }\r\n            ancestorParams.unshift(currentParams);\r\n            current = current.parentInstruction;\r\n        } while (current);\r\n        var allParams = Object.assign.apply(Object, [{}, this.queryParams].concat(ancestorParams));\r\n        this.lifecycleArgs = [allParams, this.config, this];\r\n    }\r\n    /**\r\n     * Gets an array containing this instruction and all child instructions for the current navigation.\r\n     */\r\n    NavigationInstruction.prototype.getAllInstructions = function () {\r\n        var instructions = [this];\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        for (var key in viewPortInstructions) {\r\n            var childInstruction = viewPortInstructions[key].childNavigationInstruction;\r\n            if (childInstruction) {\r\n                instructions.push.apply(instructions, childInstruction.getAllInstructions());\r\n            }\r\n        }\r\n        return instructions;\r\n    };\r\n    /**\r\n     * Gets an array containing the instruction and all child instructions for the previous navigation.\r\n     * Previous instructions are no longer available after navigation completes.\r\n     */\r\n    NavigationInstruction.prototype.getAllPreviousInstructions = function () {\r\n        return this.getAllInstructions().map(function (c) { return c.previousInstruction; }).filter(function (c) { return c; });\r\n    };\r\n    NavigationInstruction.prototype.addViewPortInstruction = function (nameOrInitOptions, strategy, moduleId, component) {\r\n        var viewPortInstruction;\r\n        var viewPortName = typeof nameOrInitOptions === 'string' ? nameOrInitOptions : nameOrInitOptions.name;\r\n        var lifecycleArgs = this.lifecycleArgs;\r\n        var config = Object.assign({}, lifecycleArgs[1], { currentViewPort: viewPortName });\r\n        if (typeof nameOrInitOptions === 'string') {\r\n            viewPortInstruction = {\r\n                name: nameOrInitOptions,\r\n                strategy: strategy,\r\n                moduleId: moduleId,\r\n                component: component,\r\n                childRouter: component.childRouter,\r\n                lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n            };\r\n        }\r\n        else {\r\n            viewPortInstruction = {\r\n                name: viewPortName,\r\n                strategy: nameOrInitOptions.strategy,\r\n                component: nameOrInitOptions.component,\r\n                moduleId: nameOrInitOptions.moduleId,\r\n                childRouter: nameOrInitOptions.component.childRouter,\r\n                lifecycleArgs: [lifecycleArgs[0], config, lifecycleArgs[2]]\r\n            };\r\n        }\r\n        return this.viewPortInstructions[viewPortName] = viewPortInstruction;\r\n    };\r\n    /**\r\n     * Gets the name of the route pattern's wildcard parameter, if applicable.\r\n     */\r\n    NavigationInstruction.prototype.getWildCardName = function () {\r\n        // todo: potential issue, or at least unsafe typings\r\n        var configRoute = this.config.route;\r\n        var wildcardIndex = configRoute.lastIndexOf('*');\r\n        return configRoute.substr(wildcardIndex + 1);\r\n    };\r\n    /**\r\n     * Gets the path and query string created by filling the route\r\n     * pattern's wildcard parameter with the matching param.\r\n     */\r\n    NavigationInstruction.prototype.getWildcardPath = function () {\r\n        var wildcardName = this.getWildCardName();\r\n        var path = this.params[wildcardName] || '';\r\n        var queryString = this.queryString;\r\n        if (queryString) {\r\n            path += '?' + queryString;\r\n        }\r\n        return path;\r\n    };\r\n    /**\r\n     * Gets the instruction's base URL, accounting for wildcard route parameters.\r\n     */\r\n    NavigationInstruction.prototype.getBaseUrl = function () {\r\n        var _this = this;\r\n        var $encodeURI = encodeURI;\r\n        var fragment = decodeURI(this.fragment);\r\n        if (fragment === '') {\r\n            var nonEmptyRoute = this.router.routes.find(function (route) {\r\n                return route.name === _this.config.name &&\r\n                    route.route !== '';\r\n            });\r\n            if (nonEmptyRoute) {\r\n                fragment = nonEmptyRoute.route;\r\n            }\r\n        }\r\n        if (!this.params) {\r\n            return $encodeURI(fragment);\r\n        }\r\n        var wildcardName = this.getWildCardName();\r\n        var path = this.params[wildcardName] || '';\r\n        if (!path) {\r\n            return $encodeURI(fragment);\r\n        }\r\n        return $encodeURI(fragment.substr(0, fragment.lastIndexOf(path)));\r\n    };\r\n    /**\r\n     * Finalize a viewport instruction\r\n     * @internal\r\n     */\r\n    NavigationInstruction.prototype._commitChanges = function (waitToSwap) {\r\n        var _this = this;\r\n        var router = this.router;\r\n        router.currentInstruction = this;\r\n        var previousInstruction = this.previousInstruction;\r\n        if (previousInstruction) {\r\n            previousInstruction.config.navModel.isActive = false;\r\n        }\r\n        this.config.navModel.isActive = true;\r\n        router.refreshNavigation();\r\n        var loads = [];\r\n        var delaySwaps = [];\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        var _loop_1 = function (viewPortName) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var viewPort = router.viewPorts[viewPortName];\r\n            if (!viewPort) {\r\n                throw new Error(\"There was no router-view found in the view for \" + viewPortInstruction.moduleId + \".\");\r\n            }\r\n            var childNavInstruction = viewPortInstruction.childNavigationInstruction;\r\n            if (viewPortInstruction.strategy === \"replace\" /* Replace */) {\r\n                if (childNavInstruction && childNavInstruction.parentCatchHandler) {\r\n                    loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n                }\r\n                else {\r\n                    if (waitToSwap) {\r\n                        delaySwaps.push({ viewPort: viewPort, viewPortInstruction: viewPortInstruction });\r\n                    }\r\n                    loads.push(viewPort\r\n                        .process(viewPortInstruction, waitToSwap)\r\n                        .then(function () { return childNavInstruction\r\n                        ? childNavInstruction._commitChanges(waitToSwap)\r\n                        : Promise.resolve(); }));\r\n                }\r\n            }\r\n            else {\r\n                if (childNavInstruction) {\r\n                    loads.push(childNavInstruction._commitChanges(waitToSwap));\r\n                }\r\n            }\r\n        };\r\n        for (var viewPortName in viewPortInstructions) {\r\n            _loop_1(viewPortName);\r\n        }\r\n        return Promise\r\n            .all(loads)\r\n            .then(function () {\r\n            delaySwaps.forEach(function (x) { return x.viewPort.swap(x.viewPortInstruction); });\r\n            return null;\r\n        })\r\n            .then(function () { return prune(_this); });\r\n    };\r\n    /**@internal */\r\n    NavigationInstruction.prototype._updateTitle = function () {\r\n        var router = this.router;\r\n        var title = this._buildTitle(router.titleSeparator);\r\n        if (title) {\r\n            router.history.setTitle(title);\r\n        }\r\n    };\r\n    /**@internal */\r\n    NavigationInstruction.prototype._buildTitle = function (separator) {\r\n        if (separator === void 0) { separator = ' | '; }\r\n        var title = '';\r\n        var childTitles = [];\r\n        var navModelTitle = this.config.navModel.title;\r\n        var instructionRouter = this.router;\r\n        var viewPortInstructions = this.viewPortInstructions;\r\n        if (navModelTitle) {\r\n            title = instructionRouter.transformTitle(navModelTitle);\r\n        }\r\n        for (var viewPortName in viewPortInstructions) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var child_nav_instruction = viewPortInstruction.childNavigationInstruction;\r\n            if (child_nav_instruction) {\r\n                var childTitle = child_nav_instruction._buildTitle(separator);\r\n                if (childTitle) {\r\n                    childTitles.push(childTitle);\r\n                }\r\n            }\r\n        }\r\n        if (childTitles.length) {\r\n            title = childTitles.join(separator) + (title ? separator : '') + title;\r\n        }\r\n        if (instructionRouter.title) {\r\n            title += (title ? separator : '') + instructionRouter.transformTitle(instructionRouter.title);\r\n        }\r\n        return title;\r\n    };\r\n    return NavigationInstruction;\r\n}());\r\nvar prune = function (instruction) {\r\n    instruction.previousInstruction = null;\r\n    instruction.plan = null;\r\n};\n\n/**\r\n* Class for storing and interacting with a route's navigation settings.\r\n*/\r\nvar NavModel = /** @class */ (function () {\r\n    function NavModel(router, relativeHref) {\r\n        /**\r\n        * True if this nav item is currently active.\r\n        */\r\n        this.isActive = false;\r\n        /**\r\n        * The title.\r\n        */\r\n        this.title = null;\r\n        /**\r\n        * This nav item's absolute href.\r\n        */\r\n        this.href = null;\r\n        /**\r\n        * This nav item's relative href.\r\n        */\r\n        this.relativeHref = null;\r\n        /**\r\n        * Data attached to the route at configuration time.\r\n        */\r\n        this.settings = {};\r\n        /**\r\n        * The route config.\r\n        */\r\n        this.config = null;\r\n        this.router = router;\r\n        this.relativeHref = relativeHref;\r\n    }\r\n    /**\r\n    * Sets the route's title and updates document.title.\r\n    *  If the a navigation is in progress, the change will be applied\r\n    *  to document.title when the navigation completes.\r\n    *\r\n    * @param title The new title.\r\n    */\r\n    NavModel.prototype.setTitle = function (title) {\r\n        this.title = title;\r\n        if (this.isActive) {\r\n            this.router.updateTitle();\r\n        }\r\n    };\r\n    return NavModel;\r\n}());\n\nfunction _normalizeAbsolutePath(path, hasPushState, absolute) {\r\n    if (absolute === void 0) { absolute = false; }\r\n    if (!hasPushState && path[0] !== '#') {\r\n        path = '#' + path;\r\n    }\r\n    if (hasPushState && absolute) {\r\n        path = path.substring(1, path.length);\r\n    }\r\n    return path;\r\n}\r\nfunction _createRootedPath(fragment, baseUrl, hasPushState, absolute) {\r\n    if (isAbsoluteUrl.test(fragment)) {\r\n        return fragment;\r\n    }\r\n    var path = '';\r\n    if (baseUrl.length && baseUrl[0] !== '/') {\r\n        path += '/';\r\n    }\r\n    path += baseUrl;\r\n    if ((!path.length || path[path.length - 1] !== '/') && fragment[0] !== '/') {\r\n        path += '/';\r\n    }\r\n    if (path.length && path[path.length - 1] === '/' && fragment[0] === '/') {\r\n        path = path.substring(0, path.length - 1);\r\n    }\r\n    return _normalizeAbsolutePath(path + fragment, hasPushState, absolute);\r\n}\r\nfunction _resolveUrl(fragment, baseUrl, hasPushState) {\r\n    if (isRootedPath.test(fragment)) {\r\n        return _normalizeAbsolutePath(fragment, hasPushState);\r\n    }\r\n    return _createRootedPath(fragment, baseUrl, hasPushState);\r\n}\r\nfunction _ensureArrayWithSingleRoutePerConfig(config) {\r\n    var routeConfigs = [];\r\n    if (Array.isArray(config.route)) {\r\n        for (var i = 0, ii = config.route.length; i < ii; ++i) {\r\n            var current = Object.assign({}, config);\r\n            current.route = config.route[i];\r\n            routeConfigs.push(current);\r\n        }\r\n    }\r\n    else {\r\n        routeConfigs.push(Object.assign({}, config));\r\n    }\r\n    return routeConfigs;\r\n}\r\nvar isRootedPath = /^#?\\//;\r\nvar isAbsoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\n\n/**\r\n * Class used to configure a [[Router]] instance.\r\n *\r\n * @constructor\r\n */\r\nvar RouterConfiguration = /** @class */ (function () {\r\n    function RouterConfiguration() {\r\n        this.instructions = [];\r\n        this.options = {};\r\n        this.pipelineSteps = [];\r\n    }\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s navigation pipeline.\r\n     *\r\n     * @param name The name of the pipeline slot to insert the step into.\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPipelineStep = function (name, step) {\r\n        if (step === null || step === undefined) {\r\n            throw new Error('Pipeline step cannot be null or undefined.');\r\n        }\r\n        this.pipelineSteps.push({ name: name, step: step });\r\n        return this;\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s authorize pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addAuthorizeStep = function (step) {\r\n        return this.addPipelineStep(\"authorize\" /* Authorize */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s preActivate pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPreActivateStep = function (step) {\r\n        return this.addPipelineStep(\"preActivate\" /* PreActivate */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s preRender pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPreRenderStep = function (step) {\r\n        return this.addPipelineStep(\"preRender\" /* PreRender */, step);\r\n    };\r\n    /**\r\n     * Adds a step to be run during the [[Router]]'s postRender pipeline slot.\r\n     *\r\n     * @param step The pipeline step.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.addPostRenderStep = function (step) {\r\n        return this.addPipelineStep(\"postRender\" /* PostRender */, step);\r\n    };\r\n    /**\r\n     * Configures a route that will be used if there is no previous location available on navigation cancellation.\r\n     *\r\n     * @param fragment The URL fragment to use as the navigation destination.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.fallbackRoute = function (fragment) {\r\n        this._fallbackRoute = fragment;\r\n        return this;\r\n    };\r\n    /**\r\n     * Maps one or more routes to be registered with the router.\r\n     *\r\n     * @param route The [[RouteConfig]] to map, or an array of [[RouteConfig]] to map.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.map = function (route) {\r\n        var _this = this;\r\n        if (Array.isArray(route)) {\r\n            route.forEach(function (r) { return _this.map(r); });\r\n            return this;\r\n        }\r\n        return this.mapRoute(route);\r\n    };\r\n    /**\r\n     * Configures defaults to use for any view ports.\r\n     *\r\n     * @param viewPortConfig a view port configuration object to use as a\r\n     *  default, of the form { viewPortName: { moduleId } }.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.useViewPortDefaults = function (viewPortConfig) {\r\n        this.viewPortDefaults = viewPortConfig;\r\n        return this;\r\n    };\r\n    /**\r\n     * Maps a single route to be registered with the router.\r\n     *\r\n     * @param route The [[RouteConfig]] to map.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.mapRoute = function (config) {\r\n        this.instructions.push(function (router) {\r\n            var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n            var navModel;\r\n            for (var i = 0, ii = routeConfigs.length; i < ii; ++i) {\r\n                var routeConfig = routeConfigs[i];\r\n                routeConfig.settings = routeConfig.settings || {};\r\n                if (!navModel) {\r\n                    navModel = router.createNavModel(routeConfig);\r\n                }\r\n                router.addRoute(routeConfig, navModel);\r\n            }\r\n        });\r\n        return this;\r\n    };\r\n    /**\r\n     * Registers an unknown route handler to be run when the URL fragment doesn't match any registered routes.\r\n     *\r\n     * @param config A string containing a moduleId to load, or a [[RouteConfig]], or a function that takes the\r\n     *  [[NavigationInstruction]] and selects a moduleId to load.\r\n     * @chainable\r\n     */\r\n    RouterConfiguration.prototype.mapUnknownRoutes = function (config) {\r\n        this.unknownRouteConfig = config;\r\n        return this;\r\n    };\r\n    /**\r\n     * Applies the current configuration to the specified [[Router]].\r\n     *\r\n     * @param router The [[Router]] to apply the configuration to.\r\n     */\r\n    RouterConfiguration.prototype.exportToRouter = function (router) {\r\n        var instructions = this.instructions;\r\n        for (var i = 0, ii = instructions.length; i < ii; ++i) {\r\n            instructions[i](router);\r\n        }\r\n        var _a = this, title = _a.title, titleSeparator = _a.titleSeparator, unknownRouteConfig = _a.unknownRouteConfig, _fallbackRoute = _a._fallbackRoute, viewPortDefaults = _a.viewPortDefaults;\r\n        if (title) {\r\n            router.title = title;\r\n        }\r\n        if (titleSeparator) {\r\n            router.titleSeparator = titleSeparator;\r\n        }\r\n        if (unknownRouteConfig) {\r\n            router.handleUnknownRoutes(unknownRouteConfig);\r\n        }\r\n        if (_fallbackRoute) {\r\n            router.fallbackRoute = _fallbackRoute;\r\n        }\r\n        if (viewPortDefaults) {\r\n            router.useViewPortDefaults(viewPortDefaults);\r\n        }\r\n        Object.assign(router.options, this.options);\r\n        var pipelineSteps = this.pipelineSteps;\r\n        var pipelineStepCount = pipelineSteps.length;\r\n        if (pipelineStepCount) {\r\n            if (!router.isRoot) {\r\n                throw new Error('Pipeline steps can only be added to the root router');\r\n            }\r\n            var pipelineProvider = router.pipelineProvider;\r\n            for (var i = 0, ii = pipelineStepCount; i < ii; ++i) {\r\n                var _b = pipelineSteps[i], name_1 = _b.name, step = _b.step;\r\n                pipelineProvider.addStep(name_1, step);\r\n            }\r\n        }\r\n    };\r\n    return RouterConfiguration;\r\n}());\n\n/**\r\n * The primary class responsible for handling routing and navigation.\r\n */\r\nvar Router = /** @class */ (function () {\r\n    /**\r\n     * @param container The [[Container]] to use when child routers.\r\n     * @param history The [[History]] implementation to delegate navigation requests to.\r\n     */\r\n    function Router(container, history) {\r\n        var _this = this;\r\n        /**\r\n         * The parent router, or null if this instance is not a child router.\r\n         */\r\n        this.parent = null;\r\n        this.options = {};\r\n        /**\r\n         * The defaults used when a viewport lacks specified content\r\n         */\r\n        this.viewPortDefaults = {};\r\n        /**\r\n         * Extension point to transform the document title before it is built and displayed.\r\n         * By default, child routers delegate to the parent router, and the app router\r\n         * returns the title unchanged.\r\n         */\r\n        this.transformTitle = function (title) {\r\n            if (_this.parent) {\r\n                return _this.parent.transformTitle(title);\r\n            }\r\n            return title;\r\n        };\r\n        this.container = container;\r\n        this.history = history;\r\n        this.reset();\r\n    }\r\n    /**\r\n     * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n     * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n     */\r\n    Router.prototype.reset = function () {\r\n        var _this = this;\r\n        this.viewPorts = {};\r\n        this.routes = [];\r\n        this.baseUrl = '';\r\n        this.isConfigured = false;\r\n        this.isNavigating = false;\r\n        this.isExplicitNavigation = false;\r\n        this.isExplicitNavigationBack = false;\r\n        this.isNavigatingFirst = false;\r\n        this.isNavigatingNew = false;\r\n        this.isNavigatingRefresh = false;\r\n        this.isNavigatingForward = false;\r\n        this.isNavigatingBack = false;\r\n        this.couldDeactivate = false;\r\n        this.navigation = [];\r\n        this.currentInstruction = null;\r\n        this.viewPortDefaults = {};\r\n        this._fallbackOrder = 100;\r\n        this._recognizer = new RouteRecognizer();\r\n        this._childRecognizer = new RouteRecognizer();\r\n        this._configuredPromise = new Promise(function (resolve) {\r\n            _this._resolveConfiguredPromise = resolve;\r\n        });\r\n    };\r\n    Object.defineProperty(Router.prototype, \"isRoot\", {\r\n        /**\r\n         * Gets a value indicating whether or not this [[Router]] is the root in the router tree. I.e., it has no parent.\r\n         */\r\n        get: function () {\r\n            return !this.parent;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Registers a viewPort to be used as a rendering target for activated routes.\r\n     *\r\n     * @param viewPort The viewPort.\r\n     * @param name The name of the viewPort. 'default' if unspecified.\r\n     */\r\n    Router.prototype.registerViewPort = function (viewPort, name) {\r\n        name = name || 'default';\r\n        this.viewPorts[name] = viewPort;\r\n    };\r\n    /**\r\n     * Returns a Promise that resolves when the router is configured.\r\n     */\r\n    Router.prototype.ensureConfigured = function () {\r\n        return this._configuredPromise;\r\n    };\r\n    /**\r\n     * Configures the router.\r\n     *\r\n     * @param callbackOrConfig The [[RouterConfiguration]] or a callback that takes a [[RouterConfiguration]].\r\n     */\r\n    Router.prototype.configure = function (callbackOrConfig) {\r\n        var _this = this;\r\n        this.isConfigured = true;\r\n        var result = callbackOrConfig;\r\n        var config;\r\n        if (typeof callbackOrConfig === 'function') {\r\n            config = new RouterConfiguration();\r\n            result = callbackOrConfig(config);\r\n        }\r\n        return Promise\r\n            .resolve(result)\r\n            .then(function (c) {\r\n            if (c && c.exportToRouter) {\r\n                config = c;\r\n            }\r\n            config.exportToRouter(_this);\r\n            _this.isConfigured = true;\r\n            _this._resolveConfiguredPromise();\r\n        });\r\n    };\r\n    /**\r\n     * Navigates to a new location.\r\n     *\r\n     * @param fragment The URL fragment to use as the navigation destination.\r\n     * @param options The navigation options.\r\n     */\r\n    Router.prototype.navigate = function (fragment, options) {\r\n        if (!this.isConfigured && this.parent) {\r\n            return this.parent.navigate(fragment, options);\r\n        }\r\n        this.isExplicitNavigation = true;\r\n        return this.history.navigate(_resolveUrl(fragment, this.baseUrl, this.history._hasPushState), options);\r\n    };\r\n    /**\r\n     * Navigates to a new location corresponding to the route and params specified. Equivallent to [[Router.generate]] followed\r\n     * by [[Router.navigate]].\r\n     *\r\n     * @param route The name of the route to use when generating the navigation location.\r\n     * @param params The route parameters to be used when populating the route pattern.\r\n     * @param options The navigation options.\r\n     */\r\n    Router.prototype.navigateToRoute = function (route, params, options) {\r\n        var path = this.generate(route, params);\r\n        return this.navigate(path, options);\r\n    };\r\n    /**\r\n     * Navigates back to the most recent location in history.\r\n     */\r\n    Router.prototype.navigateBack = function () {\r\n        this.isExplicitNavigationBack = true;\r\n        this.history.navigateBack();\r\n    };\r\n    /**\r\n     * Creates a child router of the current router.\r\n     *\r\n     * @param container The [[Container]] to provide to the child router. Uses the current [[Router]]'s [[Container]] if unspecified.\r\n     * @returns {Router} The new child Router.\r\n     */\r\n    Router.prototype.createChild = function (container) {\r\n        var childRouter = new Router(container || this.container.createChild(), this.history);\r\n        childRouter.parent = this;\r\n        return childRouter;\r\n    };\r\n    /**\r\n     * Generates a URL fragment matching the specified route pattern.\r\n     *\r\n     * @param name The name of the route whose pattern should be used to generate the fragment.\r\n     * @param params The route params to be used to populate the route pattern.\r\n     * @param options If options.absolute = true, then absolute url will be generated; otherwise, it will be relative url.\r\n     * @returns {string} A string containing the generated URL fragment.\r\n     */\r\n    Router.prototype.generate = function (nameOrRoute, params, options) {\r\n        if (params === void 0) { params = {}; }\r\n        if (options === void 0) { options = {}; }\r\n        // A child recognizer generates routes for potential child routes. Any potential child route is added\r\n        // to the childRoute property of params for the childRouter to recognize. When generating routes, we\r\n        // use the childRecognizer when childRoute params are available to generate a child router enabled route.\r\n        var recognizer = 'childRoute' in params ? this._childRecognizer : this._recognizer;\r\n        var hasRoute = recognizer.hasRoute(nameOrRoute);\r\n        if (!hasRoute) {\r\n            if (this.parent) {\r\n                return this.parent.generate(nameOrRoute, params, options);\r\n            }\r\n            throw new Error(\"A route with name '\" + nameOrRoute + \"' could not be found. Check that `name: '\" + nameOrRoute + \"'` was specified in the route's config.\");\r\n        }\r\n        var path = recognizer.generate(nameOrRoute, params);\r\n        var rootedPath = _createRootedPath(path, this.baseUrl, this.history._hasPushState, options.absolute);\r\n        return options.absolute ? \"\" + this.history.getAbsoluteRoot() + rootedPath : rootedPath;\r\n    };\r\n    /**\r\n     * Creates a [[NavModel]] for the specified route config.\r\n     *\r\n     * @param config The route config.\r\n     */\r\n    Router.prototype.createNavModel = function (config) {\r\n        var navModel = new NavModel(this, 'href' in config\r\n            ? config.href\r\n            // potential error when config.route is a string[] ?\r\n            : config.route);\r\n        navModel.title = config.title;\r\n        navModel.order = config.nav;\r\n        navModel.href = config.href;\r\n        navModel.settings = config.settings;\r\n        navModel.config = config;\r\n        return navModel;\r\n    };\r\n    /**\r\n     * Registers a new route with the router.\r\n     *\r\n     * @param config The [[RouteConfig]].\r\n     * @param navModel The [[NavModel]] to use for the route. May be omitted for single-pattern routes.\r\n     */\r\n    Router.prototype.addRoute = function (config, navModel) {\r\n        if (Array.isArray(config.route)) {\r\n            var routeConfigs = _ensureArrayWithSingleRoutePerConfig(config);\r\n            // the following is wrong. todo: fix this after TS refactoring release\r\n            routeConfigs.forEach(this.addRoute.bind(this));\r\n            return;\r\n        }\r\n        validateRouteConfig(config);\r\n        if (!('viewPorts' in config) && !config.navigationStrategy) {\r\n            config.viewPorts = {\r\n                'default': {\r\n                    moduleId: config.moduleId,\r\n                    view: config.view\r\n                }\r\n            };\r\n        }\r\n        if (!navModel) {\r\n            navModel = this.createNavModel(config);\r\n        }\r\n        this.routes.push(config);\r\n        var path = config.route;\r\n        if (path.charAt(0) === '/') {\r\n            path = path.substr(1);\r\n        }\r\n        var caseSensitive = config.caseSensitive === true;\r\n        var state = this._recognizer.add({\r\n            path: path,\r\n            handler: config,\r\n            caseSensitive: caseSensitive\r\n        });\r\n        if (path) {\r\n            var settings = config.settings;\r\n            delete config.settings;\r\n            var withChild = JSON.parse(JSON.stringify(config));\r\n            config.settings = settings;\r\n            withChild.route = path + \"/*childRoute\";\r\n            withChild.hasChildRouter = true;\r\n            this._childRecognizer.add({\r\n                path: withChild.route,\r\n                handler: withChild,\r\n                caseSensitive: caseSensitive\r\n            });\r\n            withChild.navModel = navModel;\r\n            withChild.settings = config.settings;\r\n            withChild.navigationStrategy = config.navigationStrategy;\r\n        }\r\n        config.navModel = navModel;\r\n        var navigation = this.navigation;\r\n        if ((navModel.order || navModel.order === 0) && navigation.indexOf(navModel) === -1) {\r\n            if ((!navModel.href && navModel.href !== '') && (state.types.dynamics || state.types.stars)) {\r\n                throw new Error('Invalid route config for \"' + config.route + '\" : dynamic routes must specify an \"href:\" to be included in the navigation model.');\r\n            }\r\n            if (typeof navModel.order !== 'number') {\r\n                navModel.order = ++this._fallbackOrder;\r\n            }\r\n            navigation.push(navModel);\r\n            // this is a potential error / inconsistency between browsers\r\n            //\r\n            // MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\r\n            // If compareFunction(a, b) returns 0, leave a and b unchanged with respect to each other,\r\n            // but sorted with respect to all different elements.\r\n            // Note: the ECMAscript standard does not guarantee this behaviour,\r\n            // and thus not all browsers (e.g. Mozilla versions dating back to at least 2003) respect this.\r\n            navigation.sort(function (a, b) { return a.order - b.order; });\r\n        }\r\n    };\r\n    /**\r\n     * Gets a value indicating whether or not this [[Router]] or one of its ancestors has a route registered with the specified name.\r\n     *\r\n     * @param name The name of the route to check.\r\n     */\r\n    Router.prototype.hasRoute = function (name) {\r\n        return !!(this._recognizer.hasRoute(name) || this.parent && this.parent.hasRoute(name));\r\n    };\r\n    /**\r\n     * Gets a value indicating whether or not this [[Router]] has a route registered with the specified name.\r\n     *\r\n     * @param name The name of the route to check.\r\n     */\r\n    Router.prototype.hasOwnRoute = function (name) {\r\n        return this._recognizer.hasRoute(name);\r\n    };\r\n    /**\r\n     * Register a handler to use when the incoming URL fragment doesn't match any registered routes.\r\n     *\r\n     * @param config The moduleId, or a function that selects the moduleId, or a [[RouteConfig]].\r\n     */\r\n    Router.prototype.handleUnknownRoutes = function (config) {\r\n        var _this = this;\r\n        if (!config) {\r\n            throw new Error('Invalid unknown route handler');\r\n        }\r\n        this.catchAllHandler = function (instruction) {\r\n            return _this\r\n                ._createRouteConfig(config, instruction)\r\n                .then(function (c) {\r\n                instruction.config = c;\r\n                return instruction;\r\n            });\r\n        };\r\n    };\r\n    /**\r\n     * Updates the document title using the current navigation instruction.\r\n     */\r\n    Router.prototype.updateTitle = function () {\r\n        var parentRouter = this.parent;\r\n        if (parentRouter) {\r\n            return parentRouter.updateTitle();\r\n        }\r\n        var currentInstruction = this.currentInstruction;\r\n        if (currentInstruction) {\r\n            currentInstruction._updateTitle();\r\n        }\r\n        return undefined;\r\n    };\r\n    /**\r\n     * Updates the navigation routes with hrefs relative to the current location.\r\n     * Note: This method will likely move to a plugin in a future release.\r\n     */\r\n    Router.prototype.refreshNavigation = function () {\r\n        var nav = this.navigation;\r\n        for (var i = 0, length_1 = nav.length; i < length_1; i++) {\r\n            var current = nav[i];\r\n            if (!current.config.href) {\r\n                current.href = _createRootedPath(current.relativeHref, this.baseUrl, this.history._hasPushState);\r\n            }\r\n            else {\r\n                current.href = _normalizeAbsolutePath(current.config.href, this.history._hasPushState);\r\n            }\r\n        }\r\n    };\r\n    /**\r\n     * Sets the default configuration for the view ports. This specifies how to\r\n     *  populate a view port for which no module is specified. The default is\r\n     *  an empty view/view-model pair.\r\n     */\r\n    Router.prototype.useViewPortDefaults = function ($viewPortDefaults) {\r\n        // a workaround to have strong typings while not requiring to expose interface ViewPortInstruction\r\n        var viewPortDefaults = $viewPortDefaults;\r\n        for (var viewPortName in viewPortDefaults) {\r\n            var viewPortConfig = viewPortDefaults[viewPortName];\r\n            this.viewPortDefaults[viewPortName] = {\r\n                moduleId: viewPortConfig.moduleId\r\n            };\r\n        }\r\n    };\r\n    /**@internal */\r\n    Router.prototype._refreshBaseUrl = function () {\r\n        var parentRouter = this.parent;\r\n        if (parentRouter) {\r\n            this.baseUrl = generateBaseUrl(parentRouter, parentRouter.currentInstruction);\r\n        }\r\n    };\r\n    /**@internal */\r\n    Router.prototype._createNavigationInstruction = function (url, parentInstruction) {\r\n        if (url === void 0) { url = ''; }\r\n        if (parentInstruction === void 0) { parentInstruction = null; }\r\n        var fragment = url;\r\n        var queryString = '';\r\n        var queryIndex = url.indexOf('?');\r\n        if (queryIndex !== -1) {\r\n            fragment = url.substr(0, queryIndex);\r\n            queryString = url.substr(queryIndex + 1);\r\n        }\r\n        var urlRecognizationResults = this._recognizer.recognize(url);\r\n        if (!urlRecognizationResults || !urlRecognizationResults.length) {\r\n            urlRecognizationResults = this._childRecognizer.recognize(url);\r\n        }\r\n        var instructionInit = {\r\n            fragment: fragment,\r\n            queryString: queryString,\r\n            config: null,\r\n            parentInstruction: parentInstruction,\r\n            previousInstruction: this.currentInstruction,\r\n            router: this,\r\n            options: {\r\n                compareQueryParams: this.options.compareQueryParams\r\n            }\r\n        };\r\n        var result;\r\n        if (urlRecognizationResults && urlRecognizationResults.length) {\r\n            var first = urlRecognizationResults[0];\r\n            var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                params: first.params,\r\n                queryParams: first.queryParams || urlRecognizationResults.queryParams,\r\n                config: first.config || first.handler\r\n            }));\r\n            if (typeof first.handler === 'function') {\r\n                result = evaluateNavigationStrategy(instruction, first.handler, first);\r\n            }\r\n            else if (first.handler && typeof first.handler.navigationStrategy === 'function') {\r\n                result = evaluateNavigationStrategy(instruction, first.handler.navigationStrategy, first.handler);\r\n            }\r\n            else {\r\n                result = Promise.resolve(instruction);\r\n            }\r\n        }\r\n        else if (this.catchAllHandler) {\r\n            var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                params: { path: fragment },\r\n                queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n                config: null // config will be created by the catchAllHandler\r\n            }));\r\n            result = evaluateNavigationStrategy(instruction, this.catchAllHandler);\r\n        }\r\n        else if (this.parent) {\r\n            var router = this._parentCatchAllHandler(this.parent);\r\n            if (router) {\r\n                var newParentInstruction = this._findParentInstructionFromRouter(router, parentInstruction);\r\n                var instruction = new NavigationInstruction(Object.assign({}, instructionInit, {\r\n                    params: { path: fragment },\r\n                    queryParams: urlRecognizationResults ? urlRecognizationResults.queryParams : {},\r\n                    router: router,\r\n                    parentInstruction: newParentInstruction,\r\n                    parentCatchHandler: true,\r\n                    config: null // config will be created by the chained parent catchAllHandler\r\n                }));\r\n                result = evaluateNavigationStrategy(instruction, router.catchAllHandler);\r\n            }\r\n        }\r\n        if (result && parentInstruction) {\r\n            this.baseUrl = generateBaseUrl(this.parent, parentInstruction);\r\n        }\r\n        return result || Promise.reject(new Error(\"Route not found: \" + url));\r\n    };\r\n    /**@internal */\r\n    Router.prototype._findParentInstructionFromRouter = function (router, instruction) {\r\n        if (instruction.router === router) {\r\n            instruction.fragment = router.baseUrl; // need to change the fragment in case of a redirect instead of moduleId\r\n            return instruction;\r\n        }\r\n        else if (instruction.parentInstruction) {\r\n            return this._findParentInstructionFromRouter(router, instruction.parentInstruction);\r\n        }\r\n        return undefined;\r\n    };\r\n    /**@internal */\r\n    Router.prototype._parentCatchAllHandler = function (router) {\r\n        if (router.catchAllHandler) {\r\n            return router;\r\n        }\r\n        else if (router.parent) {\r\n            return this._parentCatchAllHandler(router.parent);\r\n        }\r\n        return false;\r\n    };\r\n    /**\r\n     * @internal\r\n     */\r\n    Router.prototype._createRouteConfig = function (config, instruction) {\r\n        var _this = this;\r\n        return Promise\r\n            .resolve(config)\r\n            .then(function (c) {\r\n            if (typeof c === 'string') {\r\n                return { moduleId: c };\r\n            }\r\n            else if (typeof c === 'function') {\r\n                return c(instruction);\r\n            }\r\n            return c;\r\n        })\r\n            // typing here could be either RouteConfig or RedirectConfig\r\n            // but temporarily treat both as RouteConfig\r\n            // todo: improve typings precision\r\n            .then(function (c) { return typeof c === 'string' ? { moduleId: c } : c; })\r\n            .then(function (c) {\r\n            c.route = instruction.params.path;\r\n            validateRouteConfig(c);\r\n            if (!c.navModel) {\r\n                c.navModel = _this.createNavModel(c);\r\n            }\r\n            return c;\r\n        });\r\n    };\r\n    return Router;\r\n}());\r\n/* @internal exported for unit testing */\r\nvar generateBaseUrl = function (router, instruction) {\r\n    return \"\" + (router.baseUrl || '') + (instruction.getBaseUrl() || '');\r\n};\r\n/* @internal exported for unit testing */\r\nvar validateRouteConfig = function (config) {\r\n    if (typeof config !== 'object') {\r\n        throw new Error('Invalid Route Config');\r\n    }\r\n    if (typeof config.route !== 'string') {\r\n        var name_1 = config.name || '(no name)';\r\n        throw new Error('Invalid Route Config for \"' + name_1 + '\": You must specify a \"route:\" pattern.');\r\n    }\r\n    if (!('redirect' in config || config.moduleId || config.navigationStrategy || config.viewPorts)) {\r\n        throw new Error('Invalid Route Config for \"' + config.route + '\": You must specify a \"moduleId:\", \"redirect:\", \"navigationStrategy:\", or \"viewPorts:\".');\r\n    }\r\n};\r\n/* @internal exported for unit testing */\r\nvar evaluateNavigationStrategy = function (instruction, evaluator, context) {\r\n    return Promise\r\n        .resolve(evaluator.call(context, instruction))\r\n        .then(function () {\r\n        if (!('viewPorts' in instruction.config)) {\r\n            instruction.config.viewPorts = {\r\n                'default': {\r\n                    moduleId: instruction.config.moduleId\r\n                }\r\n            };\r\n        }\r\n        return instruction;\r\n    });\r\n};\n\n/**@internal exported for unit testing */\r\nvar createNextFn = function (instruction, steps) {\r\n    var index = -1;\r\n    var next = function () {\r\n        index++;\r\n        if (index < steps.length) {\r\n            var currentStep = steps[index];\r\n            try {\r\n                return currentStep(instruction, next);\r\n            }\r\n            catch (e) {\r\n                return next.reject(e);\r\n            }\r\n        }\r\n        else {\r\n            return next.complete();\r\n        }\r\n    };\r\n    next.complete = createCompletionHandler(next, \"completed\" /* Completed */);\r\n    next.cancel = createCompletionHandler(next, \"canceled\" /* Canceled */);\r\n    next.reject = createCompletionHandler(next, \"rejected\" /* Rejected */);\r\n    return next;\r\n};\r\n/**@internal exported for unit testing */\r\nvar createCompletionHandler = function (next, status) {\r\n    return function (output) { return Promise\r\n        .resolve({\r\n        status: status,\r\n        output: output,\r\n        completed: status === \"completed\" /* Completed */\r\n    }); };\r\n};\n\n/**\r\n * The class responsible for managing and processing the navigation pipeline.\r\n */\r\nvar Pipeline = /** @class */ (function () {\r\n    function Pipeline() {\r\n        /**\r\n         * The pipeline steps. And steps added via addStep will be converted to a function\r\n         * The actualy running functions with correct step contexts of this pipeline\r\n         */\r\n        this.steps = [];\r\n    }\r\n    /**\r\n     * Adds a step to the pipeline.\r\n     *\r\n     * @param step The pipeline step.\r\n     */\r\n    Pipeline.prototype.addStep = function (step) {\r\n        var run;\r\n        if (typeof step === 'function') {\r\n            run = step;\r\n        }\r\n        else if (typeof step.getSteps === 'function') {\r\n            // getSteps is to enable support open slots\r\n            // where devs can add multiple steps into the same slot name\r\n            var steps = step.getSteps();\r\n            for (var i = 0, l = steps.length; i < l; i++) {\r\n                this.addStep(steps[i]);\r\n            }\r\n            return this;\r\n        }\r\n        else {\r\n            run = step.run.bind(step);\r\n        }\r\n        this.steps.push(run);\r\n        return this;\r\n    };\r\n    /**\r\n     * Runs the pipeline.\r\n     *\r\n     * @param instruction The navigation instruction to process.\r\n     */\r\n    Pipeline.prototype.run = function (instruction) {\r\n        var nextFn = createNextFn(instruction, this.steps);\r\n        return nextFn();\r\n    };\r\n    return Pipeline;\r\n}());\n\n/**\r\n* Determines if the provided object is a navigation command.\r\n* A navigation command is anything with a navigate method.\r\n*\r\n* @param obj The object to check.\r\n*/\r\nfunction isNavigationCommand(obj) {\r\n    return obj && typeof obj.navigate === 'function';\r\n}\r\n/**\r\n* Used during the activation lifecycle to cause a redirect.\r\n*/\r\nvar Redirect = /** @class */ (function () {\r\n    /**\r\n     * @param url The URL fragment to use as the navigation destination.\r\n     * @param options The navigation options.\r\n     */\r\n    function Redirect(url, options) {\r\n        if (options === void 0) { options = {}; }\r\n        this.url = url;\r\n        this.options = Object.assign({ trigger: true, replace: true }, options);\r\n        this.shouldContinueProcessing = false;\r\n    }\r\n    /**\r\n     * Called by the activation system to set the child router.\r\n     *\r\n     * @param router The router.\r\n     */\r\n    Redirect.prototype.setRouter = function (router) {\r\n        this.router = router;\r\n    };\r\n    /**\r\n     * Called by the navigation pipeline to navigate.\r\n     *\r\n     * @param appRouter The router to be redirected.\r\n     */\r\n    Redirect.prototype.navigate = function (appRouter) {\r\n        var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n        navigatingRouter.navigate(this.url, this.options);\r\n    };\r\n    return Redirect;\r\n}());\r\n/**\r\n * Used during the activation lifecycle to cause a redirect to a named route.\r\n */\r\nvar RedirectToRoute = /** @class */ (function () {\r\n    /**\r\n     * @param route The name of the route.\r\n     * @param params The parameters to be sent to the activation method.\r\n     * @param options The options to use for navigation.\r\n     */\r\n    function RedirectToRoute(route, params, options) {\r\n        if (params === void 0) { params = {}; }\r\n        if (options === void 0) { options = {}; }\r\n        this.route = route;\r\n        this.params = params;\r\n        this.options = Object.assign({ trigger: true, replace: true }, options);\r\n        this.shouldContinueProcessing = false;\r\n    }\r\n    /**\r\n     * Called by the activation system to set the child router.\r\n     *\r\n     * @param router The router.\r\n     */\r\n    RedirectToRoute.prototype.setRouter = function (router) {\r\n        this.router = router;\r\n    };\r\n    /**\r\n     * Called by the navigation pipeline to navigate.\r\n     *\r\n     * @param appRouter The router to be redirected.\r\n     */\r\n    RedirectToRoute.prototype.navigate = function (appRouter) {\r\n        var navigatingRouter = this.options.useAppRouter ? appRouter : (this.router || appRouter);\r\n        navigatingRouter.navigateToRoute(this.route, this.params, this.options);\r\n    };\r\n    return RedirectToRoute;\r\n}());\n\n/**\r\n * @internal exported for unit testing\r\n */\r\nfunction _buildNavigationPlan(instruction, forceLifecycleMinimum) {\r\n    var config = instruction.config;\r\n    if ('redirect' in config) {\r\n        return buildRedirectPlan(instruction);\r\n    }\r\n    var prevInstruction = instruction.previousInstruction;\r\n    var defaultViewPortConfigs = instruction.router.viewPortDefaults;\r\n    if (prevInstruction) {\r\n        return buildTransitionPlans(instruction, prevInstruction, defaultViewPortConfigs, forceLifecycleMinimum);\r\n    }\r\n    // first navigation, only need to prepare a few information for each viewport plan\r\n    var viewPortPlans = {};\r\n    var viewPortConfigs = config.viewPorts;\r\n    for (var viewPortName in viewPortConfigs) {\r\n        var viewPortConfig = viewPortConfigs[viewPortName];\r\n        if (viewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n            viewPortConfig = defaultViewPortConfigs[viewPortName];\r\n        }\r\n        viewPortPlans[viewPortName] = {\r\n            name: viewPortName,\r\n            strategy: \"replace\" /* Replace */,\r\n            config: viewPortConfig\r\n        };\r\n    }\r\n    return Promise.resolve(viewPortPlans);\r\n}\r\n/**\r\n * Build redirect plan based on config of a navigation instruction\r\n * @internal exported for unit testing\r\n */\r\nvar buildRedirectPlan = function (instruction) {\r\n    var config = instruction.config;\r\n    var router = instruction.router;\r\n    return router\r\n        ._createNavigationInstruction(config.redirect)\r\n        .then(function (redirectInstruction) {\r\n        var params = {};\r\n        var originalInstructionParams = instruction.params;\r\n        var redirectInstructionParams = redirectInstruction.params;\r\n        for (var key in redirectInstructionParams) {\r\n            // If the param on the redirect points to another param, e.g. { route: first/:this, redirect: second/:this }\r\n            var val = redirectInstructionParams[key];\r\n            if (typeof val === 'string' && val[0] === ':') {\r\n                val = val.slice(1);\r\n                // And if that param is found on the original instruction then use it\r\n                if (val in originalInstructionParams) {\r\n                    params[key] = originalInstructionParams[val];\r\n                }\r\n            }\r\n            else {\r\n                params[key] = redirectInstructionParams[key];\r\n            }\r\n        }\r\n        var redirectLocation = router.generate(redirectInstruction.config, params, instruction.options);\r\n        // Special handling for child routes\r\n        for (var key in originalInstructionParams) {\r\n            redirectLocation = redirectLocation.replace(\":\" + key, originalInstructionParams[key]);\r\n        }\r\n        var queryString = instruction.queryString;\r\n        if (queryString) {\r\n            redirectLocation += '?' + queryString;\r\n        }\r\n        return Promise.resolve(new Redirect(redirectLocation));\r\n    });\r\n};\r\n/**\r\n * @param viewPortPlans the Plan record that holds information about built plans\r\n * @internal exported for unit testing\r\n */\r\nvar buildTransitionPlans = function (currentInstruction, previousInstruction, defaultViewPortConfigs, forceLifecycleMinimum) {\r\n    var viewPortPlans = {};\r\n    var newInstructionConfig = currentInstruction.config;\r\n    var hasNewParams = hasDifferentParameterValues(previousInstruction, currentInstruction);\r\n    var pending = [];\r\n    var previousViewPortInstructions = previousInstruction.viewPortInstructions;\r\n    var _loop_1 = function (viewPortName) {\r\n        var prevViewPortInstruction = previousViewPortInstructions[viewPortName];\r\n        var prevViewPortComponent = prevViewPortInstruction.component;\r\n        var newInstructionViewPortConfigs = newInstructionConfig.viewPorts;\r\n        // if this is invoked on a viewport without any changes, based on new url,\r\n        // newViewPortConfig will be the existing viewport instruction\r\n        var nextViewPortConfig = viewPortName in newInstructionViewPortConfigs\r\n            ? newInstructionViewPortConfigs[viewPortName]\r\n            : prevViewPortInstruction;\r\n        if (nextViewPortConfig.moduleId === null && viewPortName in defaultViewPortConfigs) {\r\n            nextViewPortConfig = defaultViewPortConfigs[viewPortName];\r\n        }\r\n        var viewPortActivationStrategy = determineActivationStrategy(currentInstruction, prevViewPortInstruction, nextViewPortConfig, hasNewParams, forceLifecycleMinimum);\r\n        var viewPortPlan = viewPortPlans[viewPortName] = {\r\n            name: viewPortName,\r\n            // ViewPortInstruction can quack like a RouteConfig\r\n            config: nextViewPortConfig,\r\n            prevComponent: prevViewPortComponent,\r\n            prevModuleId: prevViewPortInstruction.moduleId,\r\n            strategy: viewPortActivationStrategy\r\n        };\r\n        // recursively build nav plans for all existing child routers/viewports of this viewport\r\n        // this is possible because existing child viewports and routers already have necessary information\r\n        // to process the wildcard path from parent instruction\r\n        if (viewPortActivationStrategy !== \"replace\" /* Replace */ && prevViewPortInstruction.childRouter) {\r\n            var path = currentInstruction.getWildcardPath();\r\n            var task = prevViewPortInstruction\r\n                .childRouter\r\n                ._createNavigationInstruction(path, currentInstruction)\r\n                .then(function (childInstruction) {\r\n                viewPortPlan.childNavigationInstruction = childInstruction;\r\n                return _buildNavigationPlan(childInstruction, \r\n                // is it safe to assume viewPortPlan has not been changed from previous assignment?\r\n                // if so, can just use local variable viewPortPlanStrategy\r\n                // there could be user code modifying viewport plan during _createNavigationInstruction?\r\n                viewPortPlan.strategy === \"invoke-lifecycle\" /* InvokeLifecycle */)\r\n                    .then(function (childPlan) {\r\n                    if (childPlan instanceof Redirect) {\r\n                        return Promise.reject(childPlan);\r\n                    }\r\n                    childInstruction.plan = childPlan;\r\n                    // for bluebird ?\r\n                    return null;\r\n                });\r\n            });\r\n            pending.push(task);\r\n        }\r\n    };\r\n    for (var viewPortName in previousViewPortInstructions) {\r\n        _loop_1(viewPortName);\r\n    }\r\n    return Promise.all(pending).then(function () { return viewPortPlans; });\r\n};\r\n/**\r\n * @param newViewPortConfig if this is invoked on a viewport without any changes, based on new url, newViewPortConfig will be the existing viewport instruction\r\n * @internal exported for unit testing\r\n */\r\nvar determineActivationStrategy = function (currentNavInstruction, prevViewPortInstruction, newViewPortConfig, \r\n// indicates whether there is difference between old and new url params\r\nhasNewParams, forceLifecycleMinimum) {\r\n    var newInstructionConfig = currentNavInstruction.config;\r\n    var prevViewPortViewModel = prevViewPortInstruction.component.viewModel;\r\n    var viewPortPlanStrategy;\r\n    if (prevViewPortInstruction.moduleId !== newViewPortConfig.moduleId) {\r\n        viewPortPlanStrategy = \"replace\" /* Replace */;\r\n    }\r\n    else if ('determineActivationStrategy' in prevViewPortViewModel) {\r\n        viewPortPlanStrategy = prevViewPortViewModel.determineActivationStrategy.apply(prevViewPortViewModel, currentNavInstruction.lifecycleArgs);\r\n    }\r\n    else if (newInstructionConfig.activationStrategy) {\r\n        viewPortPlanStrategy = newInstructionConfig.activationStrategy;\r\n    }\r\n    else if (hasNewParams || forceLifecycleMinimum) {\r\n        viewPortPlanStrategy = \"invoke-lifecycle\" /* InvokeLifecycle */;\r\n    }\r\n    else {\r\n        viewPortPlanStrategy = \"no-change\" /* NoChange */;\r\n    }\r\n    return viewPortPlanStrategy;\r\n};\r\n/**@internal exported for unit testing */\r\nvar hasDifferentParameterValues = function (prev, next) {\r\n    var prevParams = prev.params;\r\n    var nextParams = next.params;\r\n    var nextWildCardName = next.config.hasChildRouter ? next.getWildCardName() : null;\r\n    for (var key in nextParams) {\r\n        if (key === nextWildCardName) {\r\n            continue;\r\n        }\r\n        if (prevParams[key] !== nextParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    for (var key in prevParams) {\r\n        if (key === nextWildCardName) {\r\n            continue;\r\n        }\r\n        if (prevParams[key] !== nextParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    if (!next.options.compareQueryParams) {\r\n        return false;\r\n    }\r\n    var prevQueryParams = prev.queryParams;\r\n    var nextQueryParams = next.queryParams;\r\n    for (var key in nextQueryParams) {\r\n        if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    for (var key in prevQueryParams) {\r\n        if (prevQueryParams[key] !== nextQueryParams[key]) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n};\n\n/**\r\n * Transform a navigation instruction into viewport plan record object,\r\n * or a redirect request if user viewmodel demands\r\n */\r\nvar BuildNavigationPlanStep = /** @class */ (function () {\r\n    function BuildNavigationPlanStep() {\r\n    }\r\n    BuildNavigationPlanStep.prototype.run = function (navigationInstruction, next) {\r\n        return _buildNavigationPlan(navigationInstruction)\r\n            .then(function (plan) {\r\n            if (plan instanceof Redirect) {\r\n                return next.cancel(plan);\r\n            }\r\n            navigationInstruction.plan = plan;\r\n            return next();\r\n        })\r\n            .catch(next.cancel);\r\n    };\r\n    return BuildNavigationPlanStep;\r\n}());\n\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadNewRoute = function (routeLoader, navigationInstruction) {\r\n    var loadingPlans = determineLoadingPlans(navigationInstruction);\r\n    var loadPromises = loadingPlans.map(function (loadingPlan) { return loadRoute(routeLoader, loadingPlan.navigationInstruction, loadingPlan.viewPortPlan); });\r\n    return Promise.all(loadPromises);\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar determineLoadingPlans = function (navigationInstruction, loadingPlans) {\r\n    if (loadingPlans === void 0) { loadingPlans = []; }\r\n    var viewPortPlans = navigationInstruction.plan;\r\n    for (var viewPortName in viewPortPlans) {\r\n        var viewPortPlan = viewPortPlans[viewPortName];\r\n        var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n        if (viewPortPlan.strategy === \"replace\" /* Replace */) {\r\n            loadingPlans.push({ viewPortPlan: viewPortPlan, navigationInstruction: navigationInstruction });\r\n            if (childNavInstruction) {\r\n                determineLoadingPlans(childNavInstruction, loadingPlans);\r\n            }\r\n        }\r\n        else {\r\n            var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n                name: viewPortName,\r\n                strategy: viewPortPlan.strategy,\r\n                moduleId: viewPortPlan.prevModuleId,\r\n                component: viewPortPlan.prevComponent\r\n            });\r\n            if (childNavInstruction) {\r\n                viewPortInstruction.childNavigationInstruction = childNavInstruction;\r\n                determineLoadingPlans(childNavInstruction, loadingPlans);\r\n            }\r\n        }\r\n    }\r\n    return loadingPlans;\r\n};\r\n/**\r\n * @internal Exported for unit testing\r\n */\r\nvar loadRoute = function (routeLoader, navigationInstruction, viewPortPlan) {\r\n    var planConfig = viewPortPlan.config;\r\n    var moduleId = planConfig ? planConfig.moduleId : null;\r\n    return loadComponent(routeLoader, navigationInstruction, planConfig)\r\n        .then(function (component) {\r\n        var viewPortInstruction = navigationInstruction.addViewPortInstruction({\r\n            name: viewPortPlan.name,\r\n            strategy: viewPortPlan.strategy,\r\n            moduleId: moduleId,\r\n            component: component\r\n        });\r\n        var childRouter = component.childRouter;\r\n        if (childRouter) {\r\n            var path = navigationInstruction.getWildcardPath();\r\n            return childRouter\r\n                ._createNavigationInstruction(path, navigationInstruction)\r\n                .then(function (childInstruction) {\r\n                viewPortPlan.childNavigationInstruction = childInstruction;\r\n                return _buildNavigationPlan(childInstruction)\r\n                    .then(function (childPlan) {\r\n                    if (childPlan instanceof Redirect) {\r\n                        return Promise.reject(childPlan);\r\n                    }\r\n                    childInstruction.plan = childPlan;\r\n                    viewPortInstruction.childNavigationInstruction = childInstruction;\r\n                    return loadNewRoute(routeLoader, childInstruction);\r\n                });\r\n            });\r\n        }\r\n        // ts complains without this, though they are same\r\n        return void 0;\r\n    });\r\n};\r\n/**\r\n * Load a routed-component based on navigation instruction and route config\r\n * @internal exported for unit testing only\r\n */\r\nvar loadComponent = function (routeLoader, navigationInstruction, config) {\r\n    var router = navigationInstruction.router;\r\n    var lifecycleArgs = navigationInstruction.lifecycleArgs;\r\n    return Promise.resolve()\r\n        .then(function () { return routeLoader.loadRoute(router, config, navigationInstruction); })\r\n        .then(\r\n    /**\r\n     * @param component an object carrying information about loaded route\r\n     * typically contains information about view model, childContainer, view and router\r\n     */\r\n    function (component) {\r\n        var viewModel = component.viewModel, childContainer = component.childContainer;\r\n        component.router = router;\r\n        component.config = config;\r\n        if ('configureRouter' in viewModel) {\r\n            var childRouter_1 = childContainer.getChildRouter();\r\n            component.childRouter = childRouter_1;\r\n            return childRouter_1\r\n                .configure(function (c) { return viewModel.configureRouter(c, childRouter_1, lifecycleArgs[0], lifecycleArgs[1], lifecycleArgs[2]); })\r\n                .then(function () { return component; });\r\n        }\r\n        return component;\r\n    });\r\n};\n\n/**\r\n * Abstract class that is responsible for loading view / view model from a route config\r\n * The default implementation can be found in `aurelia-templating-router`\r\n */\r\nvar RouteLoader = /** @class */ (function () {\r\n    function RouteLoader() {\r\n    }\r\n    /**\r\n     * Load a route config based on its viewmodel / view configuration\r\n     */\r\n    // return typing: return typings used to be never\r\n    // as it was a throw. Changing it to Promise<any> should not cause any issues\r\n    RouteLoader.prototype.loadRoute = function (router, config, navigationInstruction) {\r\n        throw new Error('Route loaders must implement \"loadRoute(router, config, navigationInstruction)\".');\r\n    };\r\n    return RouteLoader;\r\n}());\n\n/**\r\n * A pipeline step responsible for loading a route config of a navigation instruction\r\n */\r\nvar LoadRouteStep = /** @class */ (function () {\r\n    function LoadRouteStep(routeLoader) {\r\n        this.routeLoader = routeLoader;\r\n    }\r\n    /**@internal */\r\n    LoadRouteStep.inject = function () { return [RouteLoader]; };\r\n    /**\r\n     * Run the internal to load route config of a navigation instruction to prepare for next steps in the pipeline\r\n     */\r\n    LoadRouteStep.prototype.run = function (navigationInstruction, next) {\r\n        return loadNewRoute(this.routeLoader, navigationInstruction)\r\n            .then(next, next.cancel);\r\n    };\r\n    return LoadRouteStep;\r\n}());\n\n/**\r\n * A pipeline step for instructing a piepline to commit changes on a navigation instruction\r\n */\r\nvar CommitChangesStep = /** @class */ (function () {\r\n    function CommitChangesStep() {\r\n    }\r\n    CommitChangesStep.prototype.run = function (navigationInstruction, next) {\r\n        return navigationInstruction\r\n            ._commitChanges(/*wait to swap?*/ true)\r\n            .then(function () {\r\n            navigationInstruction._updateTitle();\r\n            return next();\r\n        });\r\n    };\r\n    return CommitChangesStep;\r\n}());\n\n/**\r\n * An optional interface describing the available activation strategies.\r\n * @internal Used internally.\r\n */\r\nvar InternalActivationStrategy;\r\n(function (InternalActivationStrategy) {\r\n    /**\r\n     * Reuse the existing view model, without invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"NoChange\"] = \"no-change\";\r\n    /**\r\n     * Reuse the existing view model, invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"InvokeLifecycle\"] = \"invoke-lifecycle\";\r\n    /**\r\n     * Replace the existing view model, invoking Router lifecycle hooks.\r\n     */\r\n    InternalActivationStrategy[\"Replace\"] = \"replace\";\r\n})(InternalActivationStrategy || (InternalActivationStrategy = {}));\r\n/**\r\n * The strategy to use when activating modules during navigation.\r\n */\r\n// kept for compat reason\r\nvar activationStrategy = {\r\n    noChange: \"no-change\" /* NoChange */,\r\n    invokeLifecycle: \"invoke-lifecycle\" /* InvokeLifecycle */,\r\n    replace: \"replace\" /* Replace */\r\n};\n\n/**\r\n * Recursively find list of deactivate-able view models\r\n * and invoke the either 'canDeactivate' or 'deactivate' on each\r\n * @internal exported for unit testing\r\n */\r\nvar processDeactivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n    var plan = navigationInstruction.plan;\r\n    var infos = findDeactivatable(plan, callbackName);\r\n    var i = infos.length; // query from inside out\r\n    function inspect(val) {\r\n        if (ignoreResult || shouldContinue(val)) {\r\n            return iterate();\r\n        }\r\n        return next.cancel(val);\r\n    }\r\n    function iterate() {\r\n        if (i--) {\r\n            try {\r\n                var viewModel = infos[i];\r\n                var result = viewModel[callbackName](navigationInstruction);\r\n                return processPotential(result, inspect, next.cancel);\r\n            }\r\n            catch (error) {\r\n                return next.cancel(error);\r\n            }\r\n        }\r\n        navigationInstruction.router.couldDeactivate = true;\r\n        return next();\r\n    }\r\n    return iterate();\r\n};\r\n/**\r\n * Recursively find and returns a list of deactivate-able view models\r\n * @internal exported for unit testing\r\n */\r\nvar findDeactivatable = function (plan, callbackName, list) {\r\n    if (list === void 0) { list = []; }\r\n    for (var viewPortName in plan) {\r\n        var viewPortPlan = plan[viewPortName];\r\n        var prevComponent = viewPortPlan.prevComponent;\r\n        if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle || viewPortPlan.strategy === activationStrategy.replace)\r\n            && prevComponent) {\r\n            var viewModel = prevComponent.viewModel;\r\n            if (callbackName in viewModel) {\r\n                list.push(viewModel);\r\n            }\r\n        }\r\n        if (viewPortPlan.strategy === activationStrategy.replace && prevComponent) {\r\n            addPreviousDeactivatable(prevComponent, callbackName, list);\r\n        }\r\n        else if (viewPortPlan.childNavigationInstruction) {\r\n            findDeactivatable(viewPortPlan.childNavigationInstruction.plan, callbackName, list);\r\n        }\r\n    }\r\n    return list;\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar addPreviousDeactivatable = function (component, callbackName, list) {\r\n    var childRouter = component.childRouter;\r\n    if (childRouter && childRouter.currentInstruction) {\r\n        var viewPortInstructions = childRouter.currentInstruction.viewPortInstructions;\r\n        for (var viewPortName in viewPortInstructions) {\r\n            var viewPortInstruction = viewPortInstructions[viewPortName];\r\n            var prevComponent = viewPortInstruction.component;\r\n            var prevViewModel = prevComponent.viewModel;\r\n            if (callbackName in prevViewModel) {\r\n                list.push(prevViewModel);\r\n            }\r\n            addPreviousDeactivatable(prevComponent, callbackName, list);\r\n        }\r\n    }\r\n};\r\n/**\r\n * @internal exported for unit testing\r\n */\r\nvar processActivatable = function (navigationInstruction, callbackName, next, ignoreResult) {\r\n    var infos = findActivatable(navigationInstruction, callbackName);\r\n    var length = infos.length;\r\n    var i = -1; // query from top down\r\n    function inspect(val, router) {\r\n        if (ignoreResult || shouldContinue(val, router)) {\r\n            return iterate();\r\n        }\r\n        return next.cancel(val);\r\n    }\r\n    function iterate() {\r\n        var _a;\r\n        i++;\r\n        if (i < length) {\r\n            try {\r\n                var current_1 = infos[i];\r\n                var result = (_a = current_1.viewModel)[callbackName].apply(_a, current_1.lifecycleArgs);\r\n                return processPotential(result, function (val) { return inspect(val, current_1.router); }, next.cancel);\r\n            }\r\n            catch (error) {\r\n                return next.cancel(error);\r\n            }\r\n        }\r\n        return next();\r\n    }\r\n    return iterate();\r\n};\r\n/**\r\n * Find list of activatable view model and add to list (3rd parameter)\r\n * @internal exported for unit testing\r\n */\r\nvar findActivatable = function (navigationInstruction, callbackName, list, router) {\r\n    if (list === void 0) { list = []; }\r\n    var plan = navigationInstruction.plan;\r\n    Object\r\n        .keys(plan)\r\n        .forEach(function (viewPortName) {\r\n        var viewPortPlan = plan[viewPortName];\r\n        var viewPortInstruction = navigationInstruction.viewPortInstructions[viewPortName];\r\n        var viewPortComponent = viewPortInstruction.component;\r\n        var viewModel = viewPortComponent.viewModel;\r\n        if ((viewPortPlan.strategy === activationStrategy.invokeLifecycle\r\n            || viewPortPlan.strategy === activationStrategy.replace)\r\n            && callbackName in viewModel) {\r\n            list.push({\r\n                viewModel: viewModel,\r\n                lifecycleArgs: viewPortInstruction.lifecycleArgs,\r\n                router: router\r\n            });\r\n        }\r\n        var childNavInstruction = viewPortPlan.childNavigationInstruction;\r\n        if (childNavInstruction) {\r\n            findActivatable(childNavInstruction, callbackName, list, viewPortComponent.childRouter || router);\r\n        }\r\n    });\r\n    return list;\r\n};\r\nvar shouldContinue = function (output, router) {\r\n    if (output instanceof Error) {\r\n        return false;\r\n    }\r\n    if (isNavigationCommand(output)) {\r\n        if (typeof output.setRouter === 'function') {\r\n            output.setRouter(router);\r\n        }\r\n        return !!output.shouldContinueProcessing;\r\n    }\r\n    if (output === undefined) {\r\n        return true;\r\n    }\r\n    return output;\r\n};\r\n/**\r\n * wraps a subscription, allowing unsubscribe calls even if\r\n * the first value comes synchronously\r\n */\r\nvar SafeSubscription = /** @class */ (function () {\r\n    function SafeSubscription(subscriptionFunc) {\r\n        this._subscribed = true;\r\n        this._subscription = subscriptionFunc(this);\r\n        if (!this._subscribed) {\r\n            this.unsubscribe();\r\n        }\r\n    }\r\n    Object.defineProperty(SafeSubscription.prototype, \"subscribed\", {\r\n        get: function () {\r\n            return this._subscribed;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    SafeSubscription.prototype.unsubscribe = function () {\r\n        if (this._subscribed && this._subscription) {\r\n            this._subscription.unsubscribe();\r\n        }\r\n        this._subscribed = false;\r\n    };\r\n    return SafeSubscription;\r\n}());\r\n/**\r\n * A function to process return value from `activate`/`canActivate` steps\r\n * Supports observable/promise\r\n *\r\n * For observable, resolve at first next() or on complete()\r\n */\r\nvar processPotential = function (obj, resolve, reject) {\r\n    // if promise like\r\n    if (obj && typeof obj.then === 'function') {\r\n        return Promise.resolve(obj).then(resolve).catch(reject);\r\n    }\r\n    // if observable\r\n    if (obj && typeof obj.subscribe === 'function') {\r\n        var obs_1 = obj;\r\n        return new SafeSubscription(function (sub) { return obs_1.subscribe({\r\n            next: function () {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    resolve(obj);\r\n                }\r\n            },\r\n            error: function (error) {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    reject(error);\r\n                }\r\n            },\r\n            complete: function () {\r\n                if (sub.subscribed) {\r\n                    sub.unsubscribe();\r\n                    resolve(obj);\r\n                }\r\n            }\r\n        }); });\r\n    }\r\n    // else just resolve\r\n    try {\r\n        return resolve(obj);\r\n    }\r\n    catch (error) {\r\n        return reject(error);\r\n    }\r\n};\n\n/**\r\n * A pipeline step responsible for finding and activating method `canDeactivate` on a view model of a route\r\n */\r\nvar CanDeactivatePreviousStep = /** @class */ (function () {\r\n    function CanDeactivatePreviousStep() {\r\n    }\r\n    CanDeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n        return processDeactivatable(navigationInstruction, 'canDeactivate', next);\r\n    };\r\n    return CanDeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `canActivate` on a view model of a route\r\n */\r\nvar CanActivateNextStep = /** @class */ (function () {\r\n    function CanActivateNextStep() {\r\n    }\r\n    CanActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n        return processActivatable(navigationInstruction, 'canActivate', next);\r\n    };\r\n    return CanActivateNextStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `deactivate` on a view model of a route\r\n */\r\nvar DeactivatePreviousStep = /** @class */ (function () {\r\n    function DeactivatePreviousStep() {\r\n    }\r\n    DeactivatePreviousStep.prototype.run = function (navigationInstruction, next) {\r\n        return processDeactivatable(navigationInstruction, 'deactivate', next, true);\r\n    };\r\n    return DeactivatePreviousStep;\r\n}());\r\n/**\r\n * A pipeline step responsible for finding and activating method `activate` on a view model of a route\r\n */\r\nvar ActivateNextStep = /** @class */ (function () {\r\n    function ActivateNextStep() {\r\n    }\r\n    ActivateNextStep.prototype.run = function (navigationInstruction, next) {\r\n        return processActivatable(navigationInstruction, 'activate', next, true);\r\n    };\r\n    return ActivateNextStep;\r\n}());\n\n/**\r\n * A multi-slots Pipeline Placeholder Step for hooking into a pipeline execution\r\n */\r\nvar PipelineSlot = /** @class */ (function () {\r\n    function PipelineSlot(container, name, alias) {\r\n        this.steps = [];\r\n        this.container = container;\r\n        this.slotName = name;\r\n        this.slotAlias = alias;\r\n    }\r\n    PipelineSlot.prototype.getSteps = function () {\r\n        var _this = this;\r\n        return this.steps.map(function (x) { return _this.container.get(x); });\r\n    };\r\n    return PipelineSlot;\r\n}());\r\n/**\r\n * Class responsible for creating the navigation pipeline.\r\n */\r\nvar PipelineProvider = /** @class */ (function () {\r\n    function PipelineProvider(container) {\r\n        this.container = container;\r\n        this.steps = [\r\n            BuildNavigationPlanStep,\r\n            CanDeactivatePreviousStep,\r\n            LoadRouteStep,\r\n            createPipelineSlot(container, \"authorize\" /* Authorize */),\r\n            CanActivateNextStep,\r\n            createPipelineSlot(container, \"preActivate\" /* PreActivate */, 'modelbind'),\r\n            // NOTE: app state changes start below - point of no return\r\n            DeactivatePreviousStep,\r\n            ActivateNextStep,\r\n            createPipelineSlot(container, \"preRender\" /* PreRender */, 'precommit'),\r\n            CommitChangesStep,\r\n            createPipelineSlot(container, \"postRender\" /* PostRender */, 'postcomplete')\r\n        ];\r\n    }\r\n    /**@internal */\r\n    PipelineProvider.inject = function () { return [Container]; };\r\n    /**\r\n     * Create the navigation pipeline.\r\n     */\r\n    PipelineProvider.prototype.createPipeline = function (useCanDeactivateStep) {\r\n        var _this = this;\r\n        if (useCanDeactivateStep === void 0) { useCanDeactivateStep = true; }\r\n        var pipeline = new Pipeline();\r\n        this.steps.forEach(function (step) {\r\n            if (useCanDeactivateStep || step !== CanDeactivatePreviousStep) {\r\n                pipeline.addStep(_this.container.get(step));\r\n            }\r\n        });\r\n        return pipeline;\r\n    };\r\n    /**@internal */\r\n    PipelineProvider.prototype._findStep = function (name) {\r\n        // Steps that are not PipelineSlots are constructor functions, and they will automatically fail. Probably.\r\n        return this.steps.find(function (x) { return x.slotName === name || x.slotAlias === name; });\r\n    };\r\n    /**\r\n     * Adds a step into the pipeline at a known slot location.\r\n     */\r\n    PipelineProvider.prototype.addStep = function (name, step) {\r\n        var found = this._findStep(name);\r\n        if (found) {\r\n            var slotSteps = found.steps;\r\n            // prevent duplicates\r\n            if (!slotSteps.includes(step)) {\r\n                slotSteps.push(step);\r\n            }\r\n        }\r\n        else {\r\n            throw new Error(\"Invalid pipeline slot name: \" + name + \".\");\r\n        }\r\n    };\r\n    /**\r\n     * Removes a step from a slot in the pipeline\r\n     */\r\n    PipelineProvider.prototype.removeStep = function (name, step) {\r\n        var slot = this._findStep(name);\r\n        if (slot) {\r\n            var slotSteps = slot.steps;\r\n            slotSteps.splice(slotSteps.indexOf(step), 1);\r\n        }\r\n    };\r\n    /**\r\n     * Clears all steps from a slot in the pipeline\r\n     * @internal\r\n     */\r\n    PipelineProvider.prototype._clearSteps = function (name) {\r\n        if (name === void 0) { name = ''; }\r\n        var slot = this._findStep(name);\r\n        if (slot) {\r\n            slot.steps = [];\r\n        }\r\n    };\r\n    /**\r\n     * Resets all pipeline slots\r\n     */\r\n    PipelineProvider.prototype.reset = function () {\r\n        this._clearSteps(\"authorize\" /* Authorize */);\r\n        this._clearSteps(\"preActivate\" /* PreActivate */);\r\n        this._clearSteps(\"preRender\" /* PreRender */);\r\n        this._clearSteps(\"postRender\" /* PostRender */);\r\n    };\r\n    return PipelineProvider;\r\n}());\r\n/**@internal */\r\nvar createPipelineSlot = function (container, name, alias) {\r\n    return new PipelineSlot(container, name, alias);\r\n};\n\nvar logger = getLogger('app-router');\r\n/**\r\n * The main application router.\r\n */\r\nvar AppRouter = /** @class */ (function (_super) {\r\n    __extends(AppRouter, _super);\r\n    function AppRouter(container, history, pipelineProvider, events) {\r\n        var _this = _super.call(this, container, history) || this;\r\n        _this.pipelineProvider = pipelineProvider;\r\n        _this.events = events;\r\n        return _this;\r\n    }\r\n    /**@internal */\r\n    AppRouter.inject = function () { return [Container, History, PipelineProvider, EventAggregator]; };\r\n    /**\r\n     * Fully resets the router's internal state. Primarily used internally by the framework when multiple calls to setRoot are made.\r\n     * Use with caution (actually, avoid using this). Do not use this to simply change your navigation model.\r\n     */\r\n    AppRouter.prototype.reset = function () {\r\n        _super.prototype.reset.call(this);\r\n        this.maxInstructionCount = 10;\r\n        if (!this._queue) {\r\n            this._queue = [];\r\n        }\r\n        else {\r\n            this._queue.length = 0;\r\n        }\r\n    };\r\n    /**\r\n     * Loads the specified URL.\r\n     *\r\n     * @param url The URL fragment to load.\r\n     */\r\n    AppRouter.prototype.loadUrl = function (url) {\r\n        var _this = this;\r\n        return this\r\n            ._createNavigationInstruction(url)\r\n            .then(function (instruction) { return _this._queueInstruction(instruction); })\r\n            .catch(function (error) {\r\n            logger.error(error);\r\n            restorePreviousLocation(_this);\r\n        });\r\n    };\r\n    /**\r\n     * Registers a viewPort to be used as a rendering target for activated routes.\r\n     *\r\n     * @param viewPort The viewPort. This is typically a <router-view/> element in Aurelia default impl\r\n     * @param name The name of the viewPort. 'default' if unspecified.\r\n     */\r\n    AppRouter.prototype.registerViewPort = function (viewPort, name) {\r\n        var _this = this;\r\n        // having strong typing without changing public API\r\n        var $viewPort = viewPort;\r\n        _super.prototype.registerViewPort.call(this, $viewPort, name);\r\n        // beside adding viewport to the registry of this instance\r\n        // AppRouter also configure routing/history to start routing functionality\r\n        // There are situation where there are more than 1 <router-view/> element at root view\r\n        // in that case, still only activate once via the following guard\r\n        if (!this.isActive) {\r\n            var viewModel_1 = this._findViewModel($viewPort);\r\n            if ('configureRouter' in viewModel_1) {\r\n                // If there are more than one <router-view/> element at root view\r\n                // use this flag to guard against configure method being invoked multiple times\r\n                // this flag is set inside method configure\r\n                if (!this.isConfigured) {\r\n                    // replace the real resolve with a noop to guarantee that any action in base class Router\r\n                    // won't resolve the configurePromise prematurely\r\n                    var resolveConfiguredPromise_1 = this._resolveConfiguredPromise;\r\n                    this._resolveConfiguredPromise = function () { };\r\n                    return this\r\n                        .configure(function (config) {\r\n                        return Promise\r\n                            .resolve(viewModel_1.configureRouter(config, _this))\r\n                            // an issue with configure interface. Should be fixed there\r\n                            // todo: fix this via configure interface in router\r\n                            .then(function () { return config; });\r\n                    })\r\n                        .then(function () {\r\n                        _this.activate();\r\n                        resolveConfiguredPromise_1();\r\n                    });\r\n                }\r\n            }\r\n            else {\r\n                this.activate();\r\n            }\r\n        }\r\n        // when a viewport is added dynamically to a root view that is already activated\r\n        // just process the navigation instruction\r\n        else {\r\n            this._dequeueInstruction();\r\n        }\r\n        return Promise.resolve();\r\n    };\r\n    /**\r\n     * Activates the router. This instructs the router to begin listening for history changes and processing instructions.\r\n     *\r\n     * @params options The set of options to activate the router with.\r\n     */\r\n    AppRouter.prototype.activate = function (options) {\r\n        if (this.isActive) {\r\n            return;\r\n        }\r\n        this.isActive = true;\r\n        // route handler property is responsible for handling url change\r\n        // the interface of aurelia-history isn't clear on this perspective\r\n        this.options = Object.assign({ routeHandler: this.loadUrl.bind(this) }, this.options, options);\r\n        this.history.activate(this.options);\r\n        this._dequeueInstruction();\r\n    };\r\n    /**\r\n     * Deactivates the router.\r\n     */\r\n    AppRouter.prototype.deactivate = function () {\r\n        this.isActive = false;\r\n        this.history.deactivate();\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._queueInstruction = function (instruction) {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            instruction.resolve = resolve;\r\n            _this._queue.unshift(instruction);\r\n            _this._dequeueInstruction();\r\n        });\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._dequeueInstruction = function (instructionCount) {\r\n        var _this = this;\r\n        if (instructionCount === void 0) { instructionCount = 0; }\r\n        return Promise.resolve().then(function () {\r\n            if (_this.isNavigating && !instructionCount) {\r\n                // ts complains about inconsistent returns without void 0\r\n                return void 0;\r\n            }\r\n            var instruction = _this._queue.shift();\r\n            _this._queue.length = 0;\r\n            if (!instruction) {\r\n                // ts complains about inconsistent returns without void 0\r\n                return void 0;\r\n            }\r\n            _this.isNavigating = true;\r\n            var navtracker = _this.history.getState('NavigationTracker');\r\n            var currentNavTracker = _this.currentNavigationTracker;\r\n            if (!navtracker && !currentNavTracker) {\r\n                _this.isNavigatingFirst = true;\r\n                _this.isNavigatingNew = true;\r\n            }\r\n            else if (!navtracker) {\r\n                _this.isNavigatingNew = true;\r\n            }\r\n            else if (!currentNavTracker) {\r\n                _this.isNavigatingRefresh = true;\r\n            }\r\n            else if (currentNavTracker < navtracker) {\r\n                _this.isNavigatingForward = true;\r\n            }\r\n            else if (currentNavTracker > navtracker) {\r\n                _this.isNavigatingBack = true;\r\n            }\r\n            if (!navtracker) {\r\n                navtracker = Date.now();\r\n                _this.history.setState('NavigationTracker', navtracker);\r\n            }\r\n            _this.currentNavigationTracker = navtracker;\r\n            instruction.previousInstruction = _this.currentInstruction;\r\n            var maxInstructionCount = _this.maxInstructionCount;\r\n            if (!instructionCount) {\r\n                _this.events.publish(\"router:navigation:processing\" /* Processing */, { instruction: instruction });\r\n            }\r\n            else if (instructionCount === maxInstructionCount - 1) {\r\n                logger.error(instructionCount + 1 + \" navigation instructions have been attempted without success. Restoring last known good location.\");\r\n                restorePreviousLocation(_this);\r\n                return _this._dequeueInstruction(instructionCount + 1);\r\n            }\r\n            else if (instructionCount > maxInstructionCount) {\r\n                throw new Error('Maximum navigation attempts exceeded. Giving up.');\r\n            }\r\n            var pipeline = _this.pipelineProvider.createPipeline(!_this.couldDeactivate);\r\n            return pipeline\r\n                .run(instruction)\r\n                .then(function (result) { return processResult(instruction, result, instructionCount, _this); })\r\n                .catch(function (error) {\r\n                return { output: error instanceof Error ? error : new Error(error) };\r\n            })\r\n                .then(function (result) { return resolveInstruction(instruction, result, !!instructionCount, _this); });\r\n        });\r\n    };\r\n    /**@internal */\r\n    AppRouter.prototype._findViewModel = function (viewPort) {\r\n        if (this.container.viewModel) {\r\n            return this.container.viewModel;\r\n        }\r\n        if (viewPort.container) {\r\n            var container = viewPort.container;\r\n            while (container) {\r\n                if (container.viewModel) {\r\n                    this.container.viewModel = container.viewModel;\r\n                    return container.viewModel;\r\n                }\r\n                container = container.parent;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return AppRouter;\r\n}(Router));\r\nvar processResult = function (instruction, result, instructionCount, router) {\r\n    if (!(result && 'completed' in result && 'output' in result)) {\r\n        result = result || {};\r\n        result.output = new Error(\"Expected router pipeline to return a navigation result, but got [\" + JSON.stringify(result) + \"] instead.\");\r\n    }\r\n    var finalResult = null;\r\n    var navigationCommandResult = null;\r\n    if (isNavigationCommand(result.output)) {\r\n        navigationCommandResult = result.output.navigate(router);\r\n    }\r\n    else {\r\n        finalResult = result;\r\n        if (!result.completed) {\r\n            if (result.output instanceof Error) {\r\n                logger.error(result.output.toString());\r\n            }\r\n            restorePreviousLocation(router);\r\n        }\r\n    }\r\n    return Promise.resolve(navigationCommandResult)\r\n        .then(function (_) { return router._dequeueInstruction(instructionCount + 1); })\r\n        .then(function (innerResult) { return finalResult || innerResult || result; });\r\n};\r\nvar resolveInstruction = function (instruction, result, isInnerInstruction, router) {\r\n    instruction.resolve(result);\r\n    var eventAggregator = router.events;\r\n    var eventArgs = { instruction: instruction, result: result };\r\n    if (!isInnerInstruction) {\r\n        router.isNavigating = false;\r\n        router.isExplicitNavigation = false;\r\n        router.isExplicitNavigationBack = false;\r\n        router.isNavigatingFirst = false;\r\n        router.isNavigatingNew = false;\r\n        router.isNavigatingRefresh = false;\r\n        router.isNavigatingForward = false;\r\n        router.isNavigatingBack = false;\r\n        router.couldDeactivate = false;\r\n        var eventName = void 0;\r\n        if (result.output instanceof Error) {\r\n            eventName = \"router:navigation:error\" /* Error */;\r\n        }\r\n        else if (!result.completed) {\r\n            eventName = \"router:navigation:canceled\" /* Canceled */;\r\n        }\r\n        else {\r\n            var queryString = instruction.queryString ? ('?' + instruction.queryString) : '';\r\n            router.history.previousLocation = instruction.fragment + queryString;\r\n            eventName = \"router:navigation:success\" /* Success */;\r\n        }\r\n        eventAggregator.publish(eventName, eventArgs);\r\n        eventAggregator.publish(\"router:navigation:complete\" /* Complete */, eventArgs);\r\n    }\r\n    else {\r\n        eventAggregator.publish(\"router:navigation:child:complete\" /* ChildComplete */, eventArgs);\r\n    }\r\n    return result;\r\n};\r\nvar restorePreviousLocation = function (router) {\r\n    var previousLocation = router.history.previousLocation;\r\n    if (previousLocation) {\r\n        router.navigate(previousLocation, { trigger: false, replace: true });\r\n    }\r\n    else if (router.fallbackRoute) {\r\n        router.navigate(router.fallbackRoute, { trigger: true, replace: true });\r\n    }\r\n    else {\r\n        logger.error('Router navigation failed, and no previous location or fallbackRoute could be restored.');\r\n    }\r\n};\n\n/**\r\n* The status of a Pipeline.\r\n*/\r\nvar PipelineStatus;\r\n(function (PipelineStatus) {\r\n    PipelineStatus[\"Completed\"] = \"completed\";\r\n    PipelineStatus[\"Canceled\"] = \"canceled\";\r\n    PipelineStatus[\"Rejected\"] = \"rejected\";\r\n    PipelineStatus[\"Running\"] = \"running\";\r\n})(PipelineStatus || (PipelineStatus = {}));\n\n/**\r\n * A list of known router events used by the Aurelia router\r\n * to signal the pipeline has come to a certain state\r\n */\r\n// const enum is preserved in tsconfig\r\nvar RouterEvent;\r\n(function (RouterEvent) {\r\n    RouterEvent[\"Processing\"] = \"router:navigation:processing\";\r\n    RouterEvent[\"Error\"] = \"router:navigation:error\";\r\n    RouterEvent[\"Canceled\"] = \"router:navigation:canceled\";\r\n    RouterEvent[\"Complete\"] = \"router:navigation:complete\";\r\n    RouterEvent[\"Success\"] = \"router:navigation:success\";\r\n    RouterEvent[\"ChildComplete\"] = \"router:navigation:child:complete\";\r\n})(RouterEvent || (RouterEvent = {}));\n\n/**\r\n * Available pipeline slot names to insert interceptor into router pipeline\r\n */\r\n// const enum is preserved in tsconfig\r\nvar PipelineSlotName;\r\n(function (PipelineSlotName) {\r\n    /**\r\n     * Authorization slot. Invoked early in the pipeline,\r\n     * before `canActivate` hook of incoming route\r\n     */\r\n    PipelineSlotName[\"Authorize\"] = \"authorize\";\r\n    /**\r\n     * Pre-activation slot. Invoked early in the pipeline,\r\n     * Invoked timing:\r\n     *   - after Authorization slot\r\n     *   - after canActivate hook on new view model\r\n     *   - before deactivate hook on old view model\r\n     *   - before activate hook on new view model\r\n     */\r\n    PipelineSlotName[\"PreActivate\"] = \"preActivate\";\r\n    /**\r\n     * Pre-render slot. Invoked later in the pipeline\r\n     * Invokcation timing:\r\n     *   - after activate hook on new view model\r\n     *   - before commit step on new navigation instruction\r\n     */\r\n    PipelineSlotName[\"PreRender\"] = \"preRender\";\r\n    /**\r\n     * Post-render slot. Invoked last in the pipeline\r\n     */\r\n    PipelineSlotName[\"PostRender\"] = \"postRender\";\r\n})(PipelineSlotName || (PipelineSlotName = {}));\n\nexport { ActivateNextStep, AppRouter, BuildNavigationPlanStep, CanActivateNextStep, CanDeactivatePreviousStep, CommitChangesStep, DeactivatePreviousStep, LoadRouteStep, NavModel, NavigationInstruction, Pipeline, PipelineProvider, PipelineSlotName, PipelineStatus, Redirect, RedirectToRoute, RouteLoader, Router, RouterConfiguration, RouterEvent, activationStrategy, isNavigationCommand };\n//# sourceMappingURL=aurelia-router.js.map\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n  aFunction(fn);\n  if (that === undefined) return fn;\n  switch (length) {\n    case 0: return function () {\n      return fn.call(that);\n    };\n    case 1: return function (a) {\n      return fn.call(that, a);\n    };\n    case 2: return function (a, b) {\n      return fn.call(that, a, b);\n    };\n    case 3: return function (a, b, c) {\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function (/* ...args */) {\n    return fn.apply(that, arguments);\n  };\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar SPECIES = require('../internals/well-known-symbol')('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n  var C;\n  if (isArray(originalArray)) {\n    C = originalArray.constructor;\n    // cross-realm fallback\n    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n    else if (isObject(C)) {\n      C = C[SPECIES];\n      if (C === null) C = undefined;\n    }\n  } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('../internals/descriptors') && !require('../internals/fails')(function () {\n  return Object.defineProperty(require('../internals/document-create-element')('div'), 'a', {\n    get: function () { return 7; }\n  }).a != 7;\n});\n","var isObject = require('../internals/is-object');\nvar document = require('../internals/global').document;\n// typeof document.createElement is 'object' in old IE\nvar exist = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n  return exist ? document.createElement(it) : {};\n};\n","// Chrome 38 Symbol has incorrect toString conversion\nmodule.exports = !require('../internals/fails')(function () {\n  // eslint-disable-next-line no-undef\n  return !String(Symbol());\n});\n","module.exports = require('../internals/shared')('native-function-to-string', Function.toString);\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n  var keys = ownKeys(source);\n  var defineProperty = definePropertyModule.f;\n  var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n  }\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayIndexOf = require('../internals/array-includes')(false);\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n  var O = toIndexedObject(object);\n  var i = 0;\n  var result = [];\n  var key;\n  for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while (names.length > i) if (has(O, key = names[i++])) {\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n","// `Symbol.iterator` well-known symbol\n// https://tc39.github.io/ecma262/#sec-symbol.iterator\nrequire('../internals/define-well-known-symbol')('iterator');\n","'use strict';\nvar $export = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar hide = require('../internals/hide');\nvar redefine = require('../internals/redefine');\nvar IS_PURE = require('../internals/is-pure');\nvar ITERATOR = require('../internals/well-known-symbol')('iterator');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n  createIteratorConstructor(IteratorConstructor, NAME, next);\n\n  var getIterationMethod = function (KIND) {\n    if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n    if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n    switch (KIND) {\n      case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n      case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n      case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n    } return function () { return new IteratorConstructor(this); };\n  };\n\n  var TO_STRING_TAG = NAME + ' Iterator';\n  var INCORRECT_VALUES_NAME = false;\n  var IterablePrototype = Iterable.prototype;\n  var nativeIterator = IterablePrototype[ITERATOR]\n    || IterablePrototype['@@iterator']\n    || DEFAULT && IterablePrototype[DEFAULT];\n  var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n  var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n  var CurrentIteratorPrototype, methods, KEY;\n\n  // fix native\n  if (anyNativeIterator) {\n    CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n    if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n      if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n        if (setPrototypeOf) {\n          setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n        } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n          hide(CurrentIteratorPrototype, ITERATOR, returnThis);\n        }\n      }\n      // Set @@toStringTag to native iterators\n      setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n      if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n    }\n  }\n\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n    INCORRECT_VALUES_NAME = true;\n    defaultIterator = function values() { return nativeIterator.call(this); };\n  }\n\n  // define iterator\n  if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n    hide(IterablePrototype, ITERATOR, defaultIterator);\n  }\n  Iterators[NAME] = defaultIterator;\n\n  // export additional methods\n  if (DEFAULT) {\n    methods = {\n      values: getIterationMethod(VALUES),\n      keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n      entries: getIterationMethod(ENTRIES)\n    };\n    if (FORCED) for (KEY in methods) {\n      if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n        redefine(IterablePrototype, KEY, methods[KEY]);\n      }\n    } else $export({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n  }\n\n  return methods;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar tslib_1 = require('tslib');\nvar util = require('@firebase/util');\n\n/**\r\n * @license\r\n * Copyright 2019 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar _a;\r\nvar ERRORS = (_a = {},\r\n    _a[\"no-app\" /* NO_APP */] = \"No Firebase App '{$name}' has been created - \" +\r\n        'call Firebase App.initializeApp()',\r\n    _a[\"bad-app-name\" /* BAD_APP_NAME */] = \"Illegal App name: '{$name}\",\r\n    _a[\"duplicate-app\" /* DUPLICATE_APP */] = \"Firebase App named '{$name}' already exists\",\r\n    _a[\"app-deleted\" /* APP_DELETED */] = \"Firebase App named '{$name}' already deleted\",\r\n    _a[\"duplicate-service\" /* DUPLICATE_SERVICE */] = \"Firebase service named '{$name}' already registered\",\r\n    _a[\"invalid-app-argument\" /* INVALID_APP_ARGUMENT */] = 'firebase.{$name}() takes either no argument or a ' +\r\n        'Firebase App instance.',\r\n    _a);\r\nvar appErrors = new util.ErrorFactory('app', 'Firebase', ERRORS);\r\nfunction error(code, args) {\r\n    throw appErrors.create(code, args);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// An array to capture listeners before the true auth functions\r\n// exist\r\nvar tokenListeners = [];\r\n/**\r\n * Global context object for a collection of services using\r\n * a shared authentication state.\r\n */\r\nvar FirebaseAppImpl = /** @class */ (function () {\r\n    function FirebaseAppImpl(options, config, firebase_) {\r\n        this.firebase_ = firebase_;\r\n        this.isDeleted_ = false;\r\n        this.services_ = {};\r\n        this.name_ = config.name;\r\n        this.automaticDataCollectionEnabled_ =\r\n            config.automaticDataCollectionEnabled || false;\r\n        this.options_ = util.deepCopy(options);\r\n        this.INTERNAL = {\r\n            getUid: function () { return null; },\r\n            getToken: function () { return Promise.resolve(null); },\r\n            addAuthTokenListener: function (callback) {\r\n                tokenListeners.push(callback);\r\n                // Make sure callback is called, asynchronously, in the absence of the auth module\r\n                setTimeout(function () { return callback(null); }, 0);\r\n            },\r\n            removeAuthTokenListener: function (callback) {\r\n                tokenListeners = tokenListeners.filter(function (listener) { return listener !== callback; });\r\n            }\r\n        };\r\n    }\r\n    Object.defineProperty(FirebaseAppImpl.prototype, \"automaticDataCollectionEnabled\", {\r\n        get: function () {\r\n            this.checkDestroyed_();\r\n            return this.automaticDataCollectionEnabled_;\r\n        },\r\n        set: function (val) {\r\n            this.checkDestroyed_();\r\n            this.automaticDataCollectionEnabled_ = val;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(FirebaseAppImpl.prototype, \"name\", {\r\n        get: function () {\r\n            this.checkDestroyed_();\r\n            return this.name_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    Object.defineProperty(FirebaseAppImpl.prototype, \"options\", {\r\n        get: function () {\r\n            this.checkDestroyed_();\r\n            return this.options_;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    FirebaseAppImpl.prototype.delete = function () {\r\n        var _this = this;\r\n        return new Promise(function (resolve) {\r\n            _this.checkDestroyed_();\r\n            resolve();\r\n        })\r\n            .then(function () {\r\n            _this.firebase_.INTERNAL.removeApp(_this.name_);\r\n            var services = [];\r\n            for (var _i = 0, _a = Object.keys(_this.services_); _i < _a.length; _i++) {\r\n                var serviceKey = _a[_i];\r\n                for (var _b = 0, _c = Object.keys(_this.services_[serviceKey]); _b < _c.length; _b++) {\r\n                    var instanceKey = _c[_b];\r\n                    services.push(_this.services_[serviceKey][instanceKey]);\r\n                }\r\n            }\r\n            return Promise.all(services.map(function (service) {\r\n                return service.INTERNAL.delete();\r\n            }));\r\n        })\r\n            .then(function () {\r\n            _this.isDeleted_ = true;\r\n            _this.services_ = {};\r\n        });\r\n    };\r\n    /**\r\n     * Return a service instance associated with this app (creating it\r\n     * on demand), identified by the passed instanceIdentifier.\r\n     *\r\n     * NOTE: Currently storage is the only one that is leveraging this\r\n     * functionality. They invoke it by calling:\r\n     *\r\n     * ```javascript\r\n     * firebase.app().storage('STORAGE BUCKET ID')\r\n     * ```\r\n     *\r\n     * The service name is passed to this already\r\n     * @internal\r\n     */\r\n    FirebaseAppImpl.prototype._getService = function (name, instanceIdentifier) {\r\n        if (instanceIdentifier === void 0) { instanceIdentifier = DEFAULT_ENTRY_NAME; }\r\n        this.checkDestroyed_();\r\n        if (!this.services_[name]) {\r\n            this.services_[name] = {};\r\n        }\r\n        if (!this.services_[name][instanceIdentifier]) {\r\n            /**\r\n             * If a custom instance has been defined (i.e. not '[DEFAULT]')\r\n             * then we will pass that instance on, otherwise we pass `null`\r\n             */\r\n            var instanceSpecifier = instanceIdentifier !== DEFAULT_ENTRY_NAME\r\n                ? instanceIdentifier\r\n                : undefined;\r\n            var service = this.firebase_.INTERNAL.factories[name](this, this.extendApp.bind(this), instanceSpecifier);\r\n            this.services_[name][instanceIdentifier] = service;\r\n        }\r\n        return this.services_[name][instanceIdentifier];\r\n    };\r\n    /**\r\n     * Callback function used to extend an App instance at the time\r\n     * of service instance creation.\r\n     */\r\n    FirebaseAppImpl.prototype.extendApp = function (props) {\r\n        var _this = this;\r\n        // Copy the object onto the FirebaseAppImpl prototype\r\n        util.deepExtend(this, props);\r\n        /**\r\n         * If the app has overwritten the addAuthTokenListener stub, forward\r\n         * the active token listeners on to the true fxn.\r\n         *\r\n         * TODO: This function is required due to our current module\r\n         * structure. Once we are able to rely strictly upon a single module\r\n         * implementation, this code should be refactored and Auth should\r\n         * provide these stubs and the upgrade logic\r\n         */\r\n        if (props.INTERNAL && props.INTERNAL.addAuthTokenListener) {\r\n            tokenListeners.forEach(function (listener) {\r\n                _this.INTERNAL.addAuthTokenListener(listener);\r\n            });\r\n            tokenListeners = [];\r\n        }\r\n    };\r\n    /**\r\n     * This function will throw an Error if the App has already been deleted -\r\n     * use before performing API actions on the App.\r\n     */\r\n    FirebaseAppImpl.prototype.checkDestroyed_ = function () {\r\n        if (this.isDeleted_) {\r\n            error(\"app-deleted\" /* APP_DELETED */, { name: this.name_ });\r\n        }\r\n    };\r\n    return FirebaseAppImpl;\r\n}());\r\n// Prevent dead-code elimination of these methods w/o invalid property\r\n// copying.\r\n(FirebaseAppImpl.prototype.name && FirebaseAppImpl.prototype.options) ||\r\n    FirebaseAppImpl.prototype.delete ||\r\n    console.log('dc');\n\n/**\r\n * @license\r\n * Copyright 2019 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction contains(obj, key) {\r\n    return Object.prototype.hasOwnProperty.call(obj, key);\r\n}\r\n/**\r\n * Because auth can't share code with other components, we attach the utility functions\r\n * in an internal namespace to share code.\r\n * This function return a firebase namespace object without\r\n * any utility functions, so it can be shared between the regular firebaseNamespace and\r\n * the lite version.\r\n */\r\nfunction createFirebaseNamespaceCore(firebaseAppImpl) {\r\n    var apps = {};\r\n    var factories = {};\r\n    var appHooks = {};\r\n    // A namespace is a plain JavaScript Object.\r\n    var namespace = {\r\n        // Hack to prevent Babel from modifying the object returned\r\n        // as the firebase namespace.\r\n        // @ts-ignore\r\n        __esModule: true,\r\n        initializeApp: initializeApp,\r\n        app: app,\r\n        apps: null,\r\n        Promise: Promise,\r\n        SDK_VERSION: '5.11.0',\r\n        INTERNAL: {\r\n            registerService: registerService,\r\n            removeApp: removeApp,\r\n            factories: factories,\r\n            useAsService: useAsService\r\n        }\r\n    };\r\n    // Inject a circular default export to allow Babel users who were previously\r\n    // using:\r\n    //\r\n    //   import firebase from 'firebase';\r\n    //   which becomes: var firebase = require('firebase').default;\r\n    //\r\n    // instead of\r\n    //\r\n    //   import * as firebase from 'firebase';\r\n    //   which becomes: var firebase = require('firebase');\r\n    util.patchProperty(namespace, 'default', namespace);\r\n    // firebase.apps is a read-only getter.\r\n    Object.defineProperty(namespace, 'apps', {\r\n        get: getApps\r\n    });\r\n    /**\r\n     * Called by App.delete() - but before any services associated with the App\r\n     * are deleted.\r\n     */\r\n    function removeApp(name) {\r\n        var app = apps[name];\r\n        callAppHooks(app, 'delete');\r\n        delete apps[name];\r\n    }\r\n    /**\r\n     * Get the App object for a given name (or DEFAULT).\r\n     */\r\n    function app(name) {\r\n        name = name || DEFAULT_ENTRY_NAME;\r\n        if (!contains(apps, name)) {\r\n            error(\"no-app\" /* NO_APP */, { name: name });\r\n        }\r\n        return apps[name];\r\n    }\r\n    util.patchProperty(app, 'App', firebaseAppImpl);\r\n    function initializeApp(options, rawConfig) {\r\n        if (rawConfig === void 0) { rawConfig = {}; }\r\n        if (typeof rawConfig !== 'object' || rawConfig === null) {\r\n            var name_1 = rawConfig;\r\n            rawConfig = { name: name_1 };\r\n        }\r\n        var config = rawConfig;\r\n        if (config.name === undefined) {\r\n            config.name = DEFAULT_ENTRY_NAME;\r\n        }\r\n        var name = config.name;\r\n        if (typeof name !== 'string' || !name) {\r\n            error(\"bad-app-name\" /* BAD_APP_NAME */, { name: String(name) });\r\n        }\r\n        if (contains(apps, name)) {\r\n            error(\"duplicate-app\" /* DUPLICATE_APP */, { name: name });\r\n        }\r\n        var app = new firebaseAppImpl(options, config, namespace);\r\n        apps[name] = app;\r\n        callAppHooks(app, 'create');\r\n        return app;\r\n    }\r\n    /*\r\n     * Return an array of all the non-deleted FirebaseApps.\r\n     */\r\n    function getApps() {\r\n        // Make a copy so caller cannot mutate the apps list.\r\n        return Object.keys(apps).map(function (name) { return apps[name]; });\r\n    }\r\n    /*\r\n     * Register a Firebase Service.\r\n     *\r\n     * firebase.INTERNAL.registerService()\r\n     *\r\n     * TODO: Implement serviceProperties.\r\n     */\r\n    function registerService(name, createService, serviceProperties, appHook, allowMultipleInstances) {\r\n        if (allowMultipleInstances === void 0) { allowMultipleInstances = false; }\r\n        // Cannot re-register a service that already exists\r\n        if (factories[name]) {\r\n            error(\"duplicate-service\" /* DUPLICATE_SERVICE */, { name: name });\r\n        }\r\n        // Capture the service factory for later service instantiation\r\n        factories[name] = createService;\r\n        // Capture the appHook, if passed\r\n        if (appHook) {\r\n            appHooks[name] = appHook;\r\n            // Run the **new** app hook on all existing apps\r\n            getApps().forEach(function (app) {\r\n                appHook('create', app);\r\n            });\r\n        }\r\n        // The Service namespace is an accessor function ...\r\n        function serviceNamespace(appArg) {\r\n            if (appArg === void 0) { appArg = app(); }\r\n            if (typeof appArg[name] !== 'function') {\r\n                // Invalid argument.\r\n                // This happens in the following case: firebase.storage('gs:/')\r\n                error(\"invalid-app-argument\" /* INVALID_APP_ARGUMENT */, { name: name });\r\n            }\r\n            // Forward service instance lookup to the FirebaseApp.\r\n            return appArg[name]();\r\n        }\r\n        // ... and a container for service-level properties.\r\n        if (serviceProperties !== undefined) {\r\n            util.deepExtend(serviceNamespace, serviceProperties);\r\n        }\r\n        // Monkey-patch the serviceNamespace onto the firebase namespace\r\n        namespace[name] = serviceNamespace;\r\n        // Patch the FirebaseAppImpl prototype\r\n        firebaseAppImpl.prototype[name] = function () {\r\n            var args = [];\r\n            for (var _i = 0; _i < arguments.length; _i++) {\r\n                args[_i] = arguments[_i];\r\n            }\r\n            var serviceFxn = this._getService.bind(this, name);\r\n            return serviceFxn.apply(this, allowMultipleInstances ? args : []);\r\n        };\r\n        return serviceNamespace;\r\n    }\r\n    function callAppHooks(app, eventName) {\r\n        for (var _i = 0, _a = Object.keys(factories); _i < _a.length; _i++) {\r\n            var serviceName = _a[_i];\r\n            // Ignore virtual services\r\n            var factoryName = useAsService(app, serviceName);\r\n            if (factoryName === null) {\r\n                return;\r\n            }\r\n            if (appHooks[factoryName]) {\r\n                appHooks[factoryName](eventName, app);\r\n            }\r\n        }\r\n    }\r\n    // Map the requested service to a registered service name\r\n    // (used to map auth to serverAuth service when needed).\r\n    function useAsService(app, name) {\r\n        if (name === 'serverAuth') {\r\n            return null;\r\n        }\r\n        var useService = name;\r\n        var options = app.options;\r\n        return useService;\r\n    }\r\n    return namespace;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Return a firebase namespace object.\r\n *\r\n * In production, this will be called exactly once and the result\r\n * assigned to the 'firebase' global.  It may be called multiple times\r\n * in unit tests.\r\n */\r\nfunction createFirebaseNamespace() {\r\n    var namespace = createFirebaseNamespaceCore(FirebaseAppImpl);\r\n    namespace.INTERNAL = tslib_1.__assign({}, namespace.INTERNAL, { createFirebaseNamespace: createFirebaseNamespace, extendNamespace: extendNamespace, createSubscribe: util.createSubscribe, ErrorFactory: util.ErrorFactory, deepExtend: util.deepExtend });\r\n    /**\r\n     * Patch the top-level firebase namespace with additional properties.\r\n     *\r\n     * firebase.INTERNAL.extendNamespace()\r\n     */\r\n    function extendNamespace(props) {\r\n        util.deepExtend(namespace, props);\r\n    }\r\n    return namespace;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n *   http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nvar isNode = false;\r\ntry {\r\n    isNode =\r\n        Object.prototype.toString.call(global.process) === '[object process]';\r\n}\r\ncatch (e) { }\r\nisNode &&\r\n    console.warn(\"\\nWarning: This is a browser-targeted Firebase bundle but it appears it is being\\nrun in a Node environment.  If running in a Node environment, make sure you\\nare using the bundle specified by the \\\"main\\\" field in package.json.\\n\\nIf you are using Webpack, you can specify \\\"main\\\" as the first item in\\n\\\"resolve.mainFields\\\":\\nhttps://webpack.js.org/configuration/resolve/#resolvemainfields\\n\\nIf using Rollup, use the rollup-plugin-node-resolve plugin and set \\\"module\\\"\\nto false and \\\"main\\\" to true:\\nhttps://github.com/rollup/rollup-plugin-node-resolve\\n\");\r\n// Firebase Lite detection\r\nif (self && 'firebase' in self) {\r\n    console.warn(\"\\n    Warning: Firebase is already defined in the global scope. Please make sure\\n    Firebase library is only loaded once.\\n  \");\r\n    var sdkVersion = self.firebase.SDK_VERSION;\r\n    if (sdkVersion && sdkVersion.indexOf('LITE') >= 0) {\r\n        console.warn(\"\\n    Warning: You are trying to load Firebase while using Firebase Performance standalone script.\\n    You should load Firebase Performance with this instance of Firebase to avoid loading duplicate code.\\n    \");\r\n    }\r\n}\r\nvar firebase = createFirebaseNamespace();\n\nexports.default = firebase;\nexports.firebase = firebase;\n//# sourceMappingURL=index.cjs.js.map\n","'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar hide = require('../internals/hide');\nvar has = require('../internals/has');\nvar IS_PURE = require('../internals/is-pure');\nvar ITERATOR = require('../internals/well-known-symbol')('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n  arrayIterator = [].keys();\n  // Safari 8 has buggy iterators w/o `next`\n  if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n  else {\n    PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n    if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n  }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n\nmodule.exports = {\n  IteratorPrototype: IteratorPrototype,\n  BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar IE_PROTO = require('../internals/shared-key')('IE_PROTO');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\nvar ObjectPrototype = Object.prototype;\n\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n  O = toObject(O);\n  if (has(O, IE_PROTO)) return O[IE_PROTO];\n  if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectPrototype : null;\n};\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var af = moment.defineLocale('af', {\n        months : 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n        monthsShort : 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays : 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n        weekdaysShort : 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin : 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM : function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem : function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd, D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay : '[Vandag om] LT',\n            nextDay : '[Môre om] LT',\n            nextWeek : 'dddd [om] LT',\n            lastDay : '[Gister om] LT',\n            lastWeek : '[Laas] dddd [om] LT',\n            sameElse : 'L'\n        },\n        relativeTime : {\n            future : 'oor %s',\n            past : '%s gelede',\n            s : '\\'n paar sekondes',\n            ss : '%d sekondes',\n            m : '\\'n minuut',\n            mm : '%d minute',\n            h : '\\'n uur',\n            hh : '%d ure',\n            d : '\\'n dag',\n            dd : '%d dae',\n            M : '\\'n maand',\n            MM : '%d maande',\n            y : '\\'n jaar',\n            yy : '%d jaar'\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal : function (number) {\n            return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week : {\n            dow : 1, // Maandag is die eerste dag van die week.\n            doy : 4  // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        }\n    });\n\n    return af;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var ar = moment.defineLocale('ar', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return ar;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 4  // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arDz;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arKw;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '1',\n        '2': '2',\n        '3': '3',\n        '4': '4',\n        '5': '5',\n        '6': '6',\n        '7': '7',\n        '8': '8',\n        '9': '9',\n        '0': '0'\n    }, pluralForm = function (n) {\n        return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n    }, plurals = {\n        s : ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n        m : ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n        h : ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n        d : ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n        M : ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n        y : ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n    }, pluralize = function (u) {\n        return function (number, withoutSuffix, string, isFuture) {\n            var f = pluralForm(number),\n                str = plurals[u][pluralForm(number)];\n            if (f === 2) {\n                str = str[withoutSuffix ? 0 : 1];\n            }\n            return str.replace(/%d/i, number);\n        };\n    }, months = [\n        'يناير',\n        'فبراير',\n        'مارس',\n        'أبريل',\n        'مايو',\n        'يونيو',\n        'يوليو',\n        'أغسطس',\n        'سبتمبر',\n        'أكتوبر',\n        'نوفمبر',\n        'ديسمبر'\n    ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months : months,\n        monthsShort : months,\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'D/\\u200FM/\\u200FYYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'بعد %s',\n            past : 'منذ %s',\n            s : pluralize('s'),\n            ss : pluralize('s'),\n            m : pluralize('m'),\n            mm : pluralize('m'),\n            h : pluralize('h'),\n            hh : pluralize('h'),\n            d : pluralize('d'),\n            dd : pluralize('d'),\n            M : pluralize('M'),\n            MM : pluralize('M'),\n            y : pluralize('y'),\n            yy : pluralize('y')\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arLy;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n        weekdays : 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        week : {\n            dow : 6, // Saturday is the first day of the week.\n            doy : 12  // The week that contains Jan 12th is the first week of the year.\n        }\n    });\n\n    return arMa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var symbolMap = {\n        '1': '١',\n        '2': '٢',\n        '3': '٣',\n        '4': '٤',\n        '5': '٥',\n        '6': '٦',\n        '7': '٧',\n        '8': '٨',\n        '9': '٩',\n        '0': '٠'\n    }, numberMap = {\n        '١': '1',\n        '٢': '2',\n        '٣': '3',\n        '٤': '4',\n        '٥': '5',\n        '٦': '6',\n        '٧': '7',\n        '٨': '8',\n        '٩': '9',\n        '٠': '0'\n    };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort : 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays : 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort : 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin : 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat : {\n            LT : 'HH:mm',\n            LTS : 'HH:mm:ss',\n            L : 'DD/MM/YYYY',\n            LL : 'D MMMM YYYY',\n            LLL : 'D MMMM YYYY HH:mm',\n            LLLL : 'dddd D MMMM YYYY HH:mm'\n        },\n        meridiemParse: /ص|م/,\n        isPM : function (input) {\n            return 'م' === input;\n        },\n        meridiem : function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar : {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime : {\n            future : 'في %s',\n            past : 'منذ %s',\n            s : 'ثوان',\n            ss : '%d ثانية',\n            m : 'دقيقة',\n            mm : '%d دقائق',\n            h : 'ساعة',\n            hh : '%d ساعات',\n            d : 'يوم',\n            dd : '%d أيام',\n            M : 'شهر',\n            MM : '%d أشهر',\n            y : 'سنة',\n            yy : '%d سنوات'\n        },\n        preparse: function (string) {\n            return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                return numberMap[match];\n            }).replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            }).replace(/,/g, '،');\n        },\n        week : {\n            dow : 0, // Sunday is the first day of the week.\n            doy : 6  // The week that contains Jan 6th is the first week of the year.\n        }\n    });\n\n    return arSa;\n\n})));\n","//! moment.js locale configuration\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact : true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm'\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L'\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss : '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات'\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4 // The week that contains Jan 4th is the first week of the year.\n        }\n    });\n\n    return arTn;\n\n})));\n","import { Router, RouterConfiguration, RedirectToRoute, NavigationInstruction, RouteConfig } from 'aurelia-router';\nimport { PLATFORM } from 'aurelia-pal';\nimport { Aurelia, autoinject, bindable, computedFrom } from 'aurelia-framework';\nimport { Route } from 'definitions';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from './helpers/logger';\n\nimport { Authentication } from './services/authentication';\n\nimport * as Firebase from 'firebase/app';\n\n@autoinject\nexport class App {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = (new Logger()).setStyle(Logger.colors.black, Logger.colors.white).setDefaultPrefix(\"APP\");\n\n  @bindable loadingCompleted: boolean = false;\n\n  //DOC: oggetto setup di Firebase\n  private fireSetup = {\n    apiKey: \"AIzaSyCqADz-XQi9HtvK652WHhnjSroHUXkbYTM\",\n    authDomain: \"profile-eae23.firebaseapp.com\",\n    databaseURL: \"https://profile-eae23.firebaseio.com\",\n    projectId: \"profile-eae23\",\n    storageBucket: \"profile-eae23.appspot.com\",\n    messagingSenderId: \"534682741470\"\n  };\n\n  //DOC: oggetto statico con informazioni sull'applicazione //TODO: vedere se integrarlo/sostuirlo con le info in webpack\n  public appVersionInfo = {\n    stage: \"alpha\",\n    releaseDate: new Date().toString(),\n    author: \"Jacopo Federici\"\n  }\n\n  //DOC: oggetto Firebase che viene inizializzato nel costruttore\n  public fire: Firebase.app.App;\n\n  constructor(public router: Router) {\n    this.logger.isDoc().info(\"App Version Info\", this.appVersionInfo.stage, this.appVersionInfo.releaseDate.toLocaleString());\n    //DOC: inizializzo App Firebase \n    this.fire = Firebase.initializeApp(this.fireSetup);\n    this.logger.success(\"Firebase App\", \"inizializzata correttamente\");\n  }\n\n  //----------------- ROUTING\n  //DOC: configurazione del routing //NOTE: https://aurelia.io/docs/routing/configuration#basic-configuration\n  configureRouter(config: RouterConfiguration, r: Router) {\n    config.options.pushState = true;\n    config.options.root = '/';\n    config.title = \"Profile\" + \" (\" + this.appVersionInfo.stage + \")\";\n    config.mapUnknownRoutes(PLATFORM.moduleName('pages/_404Page'));\n    config.map([\n      {\n        route: ['', 'index', 'index.html'], name: 'index', moduleId: PLATFORM.moduleName('pages/IndexPage'), title: 'Profile',\n        visibility: 'never'\n      },\n      {\n        route: 'features', name: 'features', moduleId: PLATFORM.moduleName('pages/IndexPage'), title: 'Features',\n        nav: true, visibility: 'notlogged', navPosition: 'left'\n      },\n      {\n        route: 'pricing', name: 'pricing', moduleId: PLATFORM.moduleName('pages/IndexPage'), title: 'Pricing',\n        nav: true, visibility: 'notlogged', navPosition: 'left'\n      },\n      {\n        route: 'companiesinstitutions', name: 'companiesinstitutions', moduleId: PLATFORM.moduleName('pages/IndexPage'), title: 'Companies and Institutions',\n        nav: true, visibility: 'notlogged', navPosition: 'left'\n      },\n      {\n        route: 'betatester', name: 'betatester', moduleId: PLATFORM.moduleName('pages/BetaTesterPage'), title: 'Become a βeta tester',\n        nav: true, visibility: 'notlogged', navPosition: 'left'\n      },\n      {\n        route: 'dashboard', name: 'dashboard', moduleId: PLATFORM.moduleName('pages/DashboardPage'), title: 'Dashboard',\n        nav: true, visibility: 'logged', navPosition: 'right', auth: true\n      },\n      {\n        route: 'user', name: 'user', moduleId: PLATFORM.moduleName('pages/UserPage'), title: 'Settings',\n        nav: true, visibility: 'logged', navPosition: 'right'\n      },\n      {\n        route: '/:id/', name: 'cv', href: '', moduleId: PLATFORM.moduleName('pages/CvPage'), title: 'Curriculum Vitae',\n        visibility: 'never', auth: true\n      },\n      {\n        route: 'login', name: 'login', moduleId: PLATFORM.moduleName('pages/LoginPage'), title: 'Sign in',\n        nav: true, visibility: 'notlogged', navPosition: 'right', overflow: true\n      },\n      {\n        route: 'logout', name: 'logout', moduleId: PLATFORM.moduleName('pages/LogoutPage'), title: 'Logout',\n        nav: true, visibility: 'logged', navPosition: 'right', overflow: true, auth: true\n      },\n      {\n        route: 'registration', name: 'registration', moduleId: PLATFORM.moduleName('pages/RegistrationPage'), title: 'Sign Up',\n        nav: true, visibility: 'notlogged', navPosition: 'right', overflow: true\n      },\n      //DOC: modalità lettore\n      {\n        route: ['view/:id/'], name: 'view', href: '', moduleId: PLATFORM.moduleName('pages/ViewPage'), title: 'CV',\n        nav: false, visibility: 'always', focusMode: true, onLoadingCompleted: () => { this.loadingCompleted = true; }\n      }\n    ] as Route[]);\n\n    this.router = r;\n    //TODO: redirect delle pagine con estensione (.php etc) a pagina home o pagina senza estensione\n    config.addAuthorizeStep(AuthorizeStep);\n  }\n\n  //DOC: restituisce il css in base al focus mode\n  @computedFrom('router.currentInstruction.config.route')\n  get focusModeCss(): string {\n    return (this.router.currentInstruction.config as Route).focusMode ? 'focus-mode' : '';\n  }\n  //DOC: restituisce il valore di focus mode\n  @computedFrom('router.currentInstruction.config.route')\n  get isFocusMode(): boolean {\n    return (this.router.currentInstruction.config as Route).focusMode || false;\n  }\n  //DOC: indica se la callback onLoadingCompleted è settata\n  @computedFrom('router.currentInstruction.config.route')\n  get hasOnLoadingCompletedCallback(): boolean {\n    //NOTE: se undefined allora onLoadingCompleted non ha riferita alcuna funzione\n    return (this.router.currentInstruction.config as Route).onLoadingCompleted !== undefined;\n  }\n}\n\n@autoinject\nclass AuthorizeStep {\n  constructor(private logger: Logger, private auth: Authentication) { }\n\n  //DOC: metodo necessario richiamato dallo Step\n  run(navigationInstruction: NavigationInstruction, next: any) {\n    return new Promise((resolve, reject) => {\n      this.auth.onAuthStateChanged(\n        user => {\n          var loginRequired = navigationInstruction.config.auth && navigationInstruction.config.auth == true;\n          if (!user && loginRequired) {\n            //se è richiesto il login ma non sono loggato\n            this.logger.warning(\"AuthorizeStep\", \"Login required\", \"redirect to the homepage\");\n            //console.debug(next);\n            return resolve(next.cancel(new RedirectToRoute('login')));\n          }\n          if (user) {\n            //NOTE: se sono loggato\n            //this.logger.info(\"AuthorizeStep\", \"User logged in\");\n            return resolve(next());\n          }\n          //NOTE: se il login non è richiesto \n          //this.logger.info(\"AuthorizeStep\", \"Login not required\");\n          return resolve(next());\n        }, this);\n    });\n  }\n}\n","module.exports = \"<template> <require from=sections/NavbarSection></require> <require from=sections/FooterSection></require> <navbar-section if.bind=true focus-mode.bind=isFocusMode router.bind=router></navbar-section> <div class=\\\"page-content ${focusModeCss}\\\"> <router-view></router-view> </div> <footer-section show.bind=\\\"!hasOnLoadingCompletedCallback || loadingCompleted\\\" focus-mode.to-view=isFocusMode></footer-section> </template>\";","\n\nimport * as LogManager from 'aurelia-logging';\n\nvar logger = LogManager.getLogger('event-aggregator');\n\nvar Handler = function () {\n  function Handler(messageType, callback) {\n    \n\n    this.messageType = messageType;\n    this.callback = callback;\n  }\n\n  Handler.prototype.handle = function handle(message) {\n    if (message instanceof this.messageType) {\n      this.callback.call(null, message);\n    }\n  };\n\n  return Handler;\n}();\n\nfunction invokeCallback(callback, data, event) {\n  try {\n    callback(data, event);\n  } catch (e) {\n    logger.error(e);\n  }\n}\n\nfunction invokeHandler(handler, data) {\n  try {\n    handler.handle(data);\n  } catch (e) {\n    logger.error(e);\n  }\n}\n\nexport var EventAggregator = function () {\n  function EventAggregator() {\n    \n\n    this.eventLookup = {};\n    this.messageHandlers = [];\n  }\n\n  EventAggregator.prototype.publish = function publish(event, data) {\n    var subscribers = void 0;\n    var i = void 0;\n\n    if (!event) {\n      throw new Error('Event was invalid.');\n    }\n\n    if (typeof event === 'string') {\n      subscribers = this.eventLookup[event];\n      if (subscribers) {\n        subscribers = subscribers.slice();\n        i = subscribers.length;\n\n        while (i--) {\n          invokeCallback(subscribers[i], data, event);\n        }\n      }\n    } else {\n      subscribers = this.messageHandlers.slice();\n      i = subscribers.length;\n\n      while (i--) {\n        invokeHandler(subscribers[i], event);\n      }\n    }\n  };\n\n  EventAggregator.prototype.subscribe = function subscribe(event, callback) {\n    var handler = void 0;\n    var subscribers = void 0;\n\n    if (!event) {\n      throw new Error('Event channel/type was invalid.');\n    }\n\n    if (typeof event === 'string') {\n      handler = callback;\n      subscribers = this.eventLookup[event] || (this.eventLookup[event] = []);\n    } else {\n      handler = new Handler(event, callback);\n      subscribers = this.messageHandlers;\n    }\n\n    subscribers.push(handler);\n\n    return {\n      dispose: function dispose() {\n        var idx = subscribers.indexOf(handler);\n        if (idx !== -1) {\n          subscribers.splice(idx, 1);\n        }\n      }\n    };\n  };\n\n  EventAggregator.prototype.subscribeOnce = function subscribeOnce(event, callback) {\n    var sub = this.subscribe(event, function (a, b) {\n      sub.dispose();\n      return callback(a, b);\n    });\n\n    return sub;\n  };\n\n  return EventAggregator;\n}();\n\nexport function includeEventsIn(obj) {\n  var ea = new EventAggregator();\n\n  obj.subscribeOnce = function (event, callback) {\n    return ea.subscribeOnce(event, callback);\n  };\n\n  obj.subscribe = function (event, callback) {\n    return ea.subscribe(event, callback);\n  };\n\n  obj.publish = function (event, data) {\n    ea.publish(event, data);\n  };\n\n  return ea;\n}\n\nexport function configure(config) {\n  config.instance(EventAggregator, includeEventsIn(config.aurelia));\n}","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nimport * as TheLogManager from 'aurelia-logging';\nimport { Container } from 'aurelia-dependency-injection';\nimport { Loader } from 'aurelia-loader';\nimport { BindingLanguage, ViewSlot, ViewResources, TemplatingEngine, CompositionTransaction, ViewEngine, HtmlBehaviorResource } from 'aurelia-templating';\nimport { DOM, PLATFORM } from 'aurelia-pal';\nimport { relativeToFile, join } from 'aurelia-path';\n\nfunction preventActionlessFormSubmit() {\n  DOM.addEventListener('submit', function (evt) {\n    var target = evt.target;\n    var action = target.action;\n\n    if (target.tagName.toLowerCase() === 'form' && !action) {\n      evt.preventDefault();\n    }\n  });\n}\n\nexport var Aurelia = function () {\n  function Aurelia(loader, container, resources) {\n    \n\n    this.loader = loader || new PLATFORM.Loader();\n    this.container = container || new Container().makeGlobal();\n    this.resources = resources || new ViewResources();\n    this.use = new FrameworkConfiguration(this);\n    this.logger = TheLogManager.getLogger('aurelia');\n    this.hostConfigured = false;\n    this.host = null;\n\n    this.use.instance(Aurelia, this);\n    this.use.instance(Loader, this.loader);\n    this.use.instance(ViewResources, this.resources);\n  }\n\n  Aurelia.prototype.start = function start() {\n    var _this = this;\n\n    if (this._started) {\n      return this._started;\n    }\n\n    this.logger.info('Aurelia Starting');\n    return this._started = this.use.apply().then(function () {\n      preventActionlessFormSubmit();\n\n      if (!_this.container.hasResolver(BindingLanguage)) {\n        var message = 'You must configure Aurelia with a BindingLanguage implementation.';\n        _this.logger.error(message);\n        throw new Error(message);\n      }\n\n      _this.logger.info('Aurelia Started');\n      var evt = DOM.createCustomEvent('aurelia-started', { bubbles: true, cancelable: true });\n      DOM.dispatchEvent(evt);\n      return _this;\n    });\n  };\n\n  Aurelia.prototype.enhance = function enhance() {\n    var _this2 = this;\n\n    var bindingContext = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    var applicationHost = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n    this._configureHost(applicationHost || DOM.querySelectorAll('body')[0]);\n\n    return new Promise(function (resolve) {\n      var engine = _this2.container.get(TemplatingEngine);\n      _this2.root = engine.enhance({ container: _this2.container, element: _this2.host, resources: _this2.resources, bindingContext: bindingContext });\n      _this2.root.attached();\n      _this2._onAureliaComposed();\n      resolve(_this2);\n    });\n  };\n\n  Aurelia.prototype.setRoot = function setRoot() {\n    var _this3 = this;\n\n    var root = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var applicationHost = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n    var instruction = {};\n\n    if (this.root && this.root.viewModel && this.root.viewModel.router) {\n      this.root.viewModel.router.deactivate();\n      this.root.viewModel.router.reset();\n    }\n\n    this._configureHost(applicationHost);\n\n    var engine = this.container.get(TemplatingEngine);\n    var transaction = this.container.get(CompositionTransaction);\n    delete transaction.initialComposition;\n\n    if (!root) {\n      if (this.configModuleId) {\n        root = relativeToFile('./app', this.configModuleId);\n      } else {\n        root = 'app';\n      }\n    }\n\n    instruction.viewModel = root;\n    instruction.container = instruction.childContainer = this.container;\n    instruction.viewSlot = this.hostSlot;\n    instruction.host = this.host;\n\n    return engine.compose(instruction).then(function (r) {\n      _this3.root = r;\n      instruction.viewSlot.attached();\n      _this3._onAureliaComposed();\n      return _this3;\n    });\n  };\n\n  Aurelia.prototype._configureHost = function _configureHost(applicationHost) {\n    if (this.hostConfigured) {\n      return;\n    }\n    applicationHost = applicationHost || this.host;\n\n    if (!applicationHost || typeof applicationHost === 'string') {\n      this.host = DOM.getElementById(applicationHost || 'applicationHost');\n    } else {\n      this.host = applicationHost;\n    }\n\n    if (!this.host) {\n      throw new Error('No applicationHost was specified.');\n    }\n\n    this.hostConfigured = true;\n    this.host.aurelia = this;\n    this.hostSlot = new ViewSlot(this.host, true);\n    this.hostSlot.transformChildNodesIntoView();\n    this.container.registerInstance(DOM.boundary, this.host);\n  };\n\n  Aurelia.prototype._onAureliaComposed = function _onAureliaComposed() {\n    var evt = DOM.createCustomEvent('aurelia-composed', { bubbles: true, cancelable: true });\n    setTimeout(function () {\n      return DOM.dispatchEvent(evt);\n    }, 1);\n  };\n\n  return Aurelia;\n}();\n\nvar logger = TheLogManager.getLogger('aurelia');\nvar extPattern = /\\.[^/.]+$/;\n\nfunction runTasks(config, tasks) {\n  var current = void 0;\n  var next = function next() {\n    current = tasks.shift();\n    if (current) {\n      return Promise.resolve(current(config)).then(next);\n    }\n\n    return Promise.resolve();\n  };\n\n  return next();\n}\n\nfunction loadPlugin(fwConfig, loader, info) {\n  logger.debug('Loading plugin ' + info.moduleId + '.');\n  if (typeof info.moduleId === 'string') {\n    fwConfig.resourcesRelativeTo = info.resourcesRelativeTo;\n\n    var id = info.moduleId;\n\n    if (info.resourcesRelativeTo.length > 1) {\n      return loader.normalize(info.moduleId, info.resourcesRelativeTo[1]).then(function (normalizedId) {\n        return _loadPlugin(normalizedId);\n      });\n    }\n\n    return _loadPlugin(id);\n  } else if (typeof info.configure === 'function') {\n    if (fwConfig.configuredPlugins.indexOf(info.configure) !== -1) {\n      return Promise.resolve();\n    }\n    fwConfig.configuredPlugins.push(info.configure);\n\n    return Promise.resolve(info.configure.call(null, fwConfig, info.config || {}));\n  }\n  throw new Error(invalidConfigMsg(info.moduleId || info.configure, 'plugin'));\n\n  function _loadPlugin(moduleId) {\n    return loader.loadModule(moduleId).then(function (m) {\n      if ('configure' in m) {\n        if (fwConfig.configuredPlugins.indexOf(m.configure) !== -1) {\n          return Promise.resolve();\n        }\n        return Promise.resolve(m.configure(fwConfig, info.config || {})).then(function () {\n          fwConfig.configuredPlugins.push(m.configure);\n          fwConfig.resourcesRelativeTo = null;\n          logger.debug('Configured plugin ' + info.moduleId + '.');\n        });\n      }\n\n      fwConfig.resourcesRelativeTo = null;\n      logger.debug('Loaded plugin ' + info.moduleId + '.');\n    });\n  }\n}\n\nfunction loadResources(aurelia, resourcesToLoad, appResources) {\n  if (Object.keys(resourcesToLoad).length === 0) {\n    return Promise.resolve();\n  }\n  var viewEngine = aurelia.container.get(ViewEngine);\n\n  return Promise.all(Object.keys(resourcesToLoad).map(function (n) {\n    return _normalize(resourcesToLoad[n]);\n  })).then(function (loads) {\n    var names = [];\n    var importIds = [];\n\n    loads.forEach(function (l) {\n      names.push(undefined);\n      importIds.push(l.importId);\n    });\n\n    return viewEngine.importViewResources(importIds, names, appResources);\n  });\n\n  function _normalize(load) {\n    var moduleId = load.moduleId;\n    var ext = getExt(moduleId);\n\n    if (isOtherResource(moduleId)) {\n      moduleId = removeExt(moduleId);\n    }\n\n    return aurelia.loader.normalize(moduleId, load.relativeTo).then(function (normalized) {\n      return {\n        name: load.moduleId,\n        importId: isOtherResource(load.moduleId) ? addOriginalExt(normalized, ext) : normalized\n      };\n    });\n  }\n\n  function isOtherResource(name) {\n    var ext = getExt(name);\n    if (!ext) return false;\n    if (ext === '') return false;\n    if (ext === '.js' || ext === '.ts') return false;\n    return true;\n  }\n\n  function removeExt(name) {\n    return name.replace(extPattern, '');\n  }\n\n  function addOriginalExt(normalized, ext) {\n    return removeExt(normalized) + '.' + ext;\n  }\n}\n\nfunction getExt(name) {\n  var match = name.match(extPattern);\n  if (match && match.length > 0) {\n    return match[0].split('.')[1];\n  }\n}\n\nfunction loadBehaviors(config) {\n  return Promise.all(config.behaviorsToLoad.map(function (m) {\n    return m.load(config.container, m.target);\n  })).then(function () {\n    config.behaviorsToLoad = null;\n  });\n}\n\nfunction assertProcessed(plugins) {\n  if (plugins.processed) {\n    throw new Error('This config instance has already been applied. To load more plugins or global resources, create a new FrameworkConfiguration instance.');\n  }\n}\n\nfunction invalidConfigMsg(cfg, type) {\n  return 'Invalid ' + type + ' [' + cfg + '], ' + type + ' must be specified as functions or relative module IDs.';\n}\n\nvar FrameworkConfiguration = function () {\n  function FrameworkConfiguration(aurelia) {\n    var _this4 = this;\n\n    \n\n    this.aurelia = aurelia;\n    this.container = aurelia.container;\n\n    this.info = [];\n    this.processed = false;\n    this.preTasks = [];\n    this.postTasks = [];\n\n    this.behaviorsToLoad = [];\n\n    this.configuredPlugins = [];\n    this.resourcesToLoad = {};\n    this.preTask(function () {\n      return aurelia.loader.normalize('aurelia-bootstrapper').then(function (name) {\n        return _this4.bootstrapperName = name;\n      });\n    });\n    this.postTask(function () {\n      return loadResources(aurelia, _this4.resourcesToLoad, aurelia.resources);\n    });\n  }\n\n  FrameworkConfiguration.prototype.instance = function instance(type, _instance) {\n    this.container.registerInstance(type, _instance);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.singleton = function singleton(type, implementation) {\n    this.container.registerSingleton(type, implementation);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.transient = function transient(type, implementation) {\n    this.container.registerTransient(type, implementation);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.preTask = function preTask(task) {\n    assertProcessed(this);\n    this.preTasks.push(task);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.postTask = function postTask(task) {\n    assertProcessed(this);\n    this.postTasks.push(task);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.feature = function feature(plugin) {\n    var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    switch (typeof plugin === 'undefined' ? 'undefined' : _typeof(plugin)) {\n      case 'string':\n        var hasIndex = /\\/index$/i.test(plugin);\n        var _moduleId = hasIndex || getExt(plugin) ? plugin : plugin + '/index';\n        var root = hasIndex ? plugin.substr(0, plugin.length - 6) : plugin;\n        this.info.push({ moduleId: _moduleId, resourcesRelativeTo: [root, ''], config: config });\n        break;\n\n      case 'function':\n        this.info.push({ configure: plugin, config: config || {} });\n        break;\n      default:\n        throw new Error(invalidConfigMsg(plugin, 'feature'));\n    }\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.globalResources = function globalResources(resources) {\n    var _this5 = this;\n\n    assertProcessed(this);\n\n    var toAdd = Array.isArray(resources) ? resources : arguments;\n    var resource = void 0;\n    var resourcesRelativeTo = this.resourcesRelativeTo || ['', ''];\n\n    for (var i = 0, ii = toAdd.length; i < ii; ++i) {\n      resource = toAdd[i];\n      switch (typeof resource === 'undefined' ? 'undefined' : _typeof(resource)) {\n        case 'string':\n          var parent = resourcesRelativeTo[0];\n          var grandParent = resourcesRelativeTo[1];\n          var name = resource;\n\n          if ((resource.startsWith('./') || resource.startsWith('../')) && parent !== '') {\n            name = join(parent, resource);\n          }\n\n          this.resourcesToLoad[name] = { moduleId: name, relativeTo: grandParent };\n          break;\n        case 'function':\n          var meta = this.aurelia.resources.autoRegister(this.container, resource);\n          if (meta instanceof HtmlBehaviorResource && meta.elementName !== null) {\n            if (this.behaviorsToLoad.push(meta) === 1) {\n              this.postTask(function () {\n                return loadBehaviors(_this5);\n              });\n            }\n          }\n          break;\n        default:\n          throw new Error(invalidConfigMsg(resource, 'resource'));\n      }\n    }\n\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.globalName = function globalName(resourcePath, newName) {\n    assertProcessed(this);\n    this.resourcesToLoad[resourcePath] = { moduleId: newName, relativeTo: '' };\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.plugin = function plugin(_plugin, pluginConfig) {\n    assertProcessed(this);\n\n    var info = void 0;\n    switch (typeof _plugin === 'undefined' ? 'undefined' : _typeof(_plugin)) {\n      case 'string':\n        info = { moduleId: _plugin, resourcesRelativeTo: [_plugin, ''], config: pluginConfig || {} };\n        break;\n      case 'function':\n        info = { configure: _plugin, config: pluginConfig || {} };\n        break;\n      default:\n        throw new Error(invalidConfigMsg(_plugin, 'plugin'));\n    }\n    this.info.push(info);\n    return this;\n  };\n\n  FrameworkConfiguration.prototype._addNormalizedPlugin = function _addNormalizedPlugin(name, config) {\n    var _this6 = this;\n\n    var plugin = { moduleId: name, resourcesRelativeTo: [name, ''], config: config || {} };\n    this.info.push(plugin);\n\n    this.preTask(function () {\n      var relativeTo = [name, _this6.bootstrapperName];\n      plugin.moduleId = name;\n      plugin.resourcesRelativeTo = relativeTo;\n      return Promise.resolve();\n    });\n\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.defaultBindingLanguage = function defaultBindingLanguage() {\n    return this._addNormalizedPlugin('aurelia-templating-binding');\n  };\n\n  FrameworkConfiguration.prototype.router = function router() {\n    return this._addNormalizedPlugin('aurelia-templating-router');\n  };\n\n  FrameworkConfiguration.prototype.history = function history() {\n    return this._addNormalizedPlugin('aurelia-history-browser');\n  };\n\n  FrameworkConfiguration.prototype.defaultResources = function defaultResources() {\n    return this._addNormalizedPlugin('aurelia-templating-resources');\n  };\n\n  FrameworkConfiguration.prototype.eventAggregator = function eventAggregator() {\n    return this._addNormalizedPlugin('aurelia-event-aggregator');\n  };\n\n  FrameworkConfiguration.prototype.basicConfiguration = function basicConfiguration() {\n    return this.defaultBindingLanguage().defaultResources().eventAggregator();\n  };\n\n  FrameworkConfiguration.prototype.standardConfiguration = function standardConfiguration() {\n    return this.basicConfiguration().history().router();\n  };\n\n  FrameworkConfiguration.prototype.developmentLogging = function developmentLogging(level) {\n    var _this7 = this;\n\n    var logLevel = level ? TheLogManager.logLevel[level] : undefined;\n\n    if (logLevel === undefined) {\n      logLevel = TheLogManager.logLevel.debug;\n    }\n\n    this.preTask(function () {\n      return _this7.aurelia.loader.normalize('aurelia-logging-console', _this7.bootstrapperName).then(function (name) {\n        return _this7.aurelia.loader.loadModule(name).then(function (m) {\n          TheLogManager.addAppender(new m.ConsoleAppender());\n          TheLogManager.setLevel(logLevel);\n        });\n      });\n    });\n\n    return this;\n  };\n\n  FrameworkConfiguration.prototype.apply = function apply() {\n    var _this8 = this;\n\n    if (this.processed) {\n      return Promise.resolve();\n    }\n\n    return runTasks(this, this.preTasks).then(function () {\n      var loader = _this8.aurelia.loader;\n      var info = _this8.info;\n      var current = void 0;\n\n      var next = function next() {\n        current = info.shift();\n        if (current) {\n          return loadPlugin(_this8, loader, current).then(next);\n        }\n\n        _this8.processed = true;\n        _this8.configuredPlugins = null;\n        return Promise.resolve();\n      };\n\n      return next().then(function () {\n        return runTasks(_this8, _this8.postTasks);\n      });\n    });\n  };\n\n  return FrameworkConfiguration;\n}();\n\nexport { FrameworkConfiguration };\n\n\nexport * from 'aurelia-dependency-injection';\nexport * from 'aurelia-binding';\nexport * from 'aurelia-metadata';\nexport * from 'aurelia-templating';\nexport * from 'aurelia-loader';\nexport * from 'aurelia-task-queue';\nexport * from 'aurelia-path';\nexport * from 'aurelia-pal';\n\nexport var LogManager = TheLogManager;","import { History } from 'aurelia-history';\nimport { DOM, PLATFORM } from 'aurelia-pal';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar LinkHandler = (function () {\r\n    function LinkHandler() {\r\n    }\r\n    LinkHandler.prototype.activate = function (history) { };\r\n    LinkHandler.prototype.deactivate = function () { };\r\n    return LinkHandler;\r\n}());\r\nvar DefaultLinkHandler = (function (_super) {\r\n    __extends(DefaultLinkHandler, _super);\r\n    function DefaultLinkHandler() {\r\n        var _this = _super.call(this) || this;\r\n        _this.handler = function (e) {\r\n            var _a = DefaultLinkHandler.getEventInfo(e), shouldHandleEvent = _a.shouldHandleEvent, href = _a.href;\r\n            if (shouldHandleEvent) {\r\n                e.preventDefault();\r\n                _this.history.navigate(href);\r\n            }\r\n        };\r\n        return _this;\r\n    }\r\n    DefaultLinkHandler.prototype.activate = function (history) {\r\n        if (history._hasPushState) {\r\n            this.history = history;\r\n            DOM.addEventListener('click', this.handler, true);\r\n        }\r\n    };\r\n    DefaultLinkHandler.prototype.deactivate = function () {\r\n        DOM.removeEventListener('click', this.handler, true);\r\n    };\r\n    DefaultLinkHandler.getEventInfo = function (event) {\r\n        var $event = event;\r\n        var info = {\r\n            shouldHandleEvent: false,\r\n            href: null,\r\n            anchor: null\r\n        };\r\n        var target = DefaultLinkHandler.findClosestAnchor($event.target);\r\n        if (!target || !DefaultLinkHandler.targetIsThisWindow(target)) {\r\n            return info;\r\n        }\r\n        if (hasAttribute(target, 'download')\r\n            || hasAttribute(target, 'router-ignore')\r\n            || hasAttribute(target, 'data-router-ignore')) {\r\n            return info;\r\n        }\r\n        if ($event.altKey || $event.ctrlKey || $event.metaKey || $event.shiftKey) {\r\n            return info;\r\n        }\r\n        var href = target.getAttribute('href');\r\n        info.anchor = target;\r\n        info.href = href;\r\n        var leftButtonClicked = $event.which === 1;\r\n        var isRelative = href && !(href.charAt(0) === '#' || (/^[a-z]+:/i).test(href));\r\n        info.shouldHandleEvent = leftButtonClicked && isRelative;\r\n        return info;\r\n    };\r\n    DefaultLinkHandler.findClosestAnchor = function (el) {\r\n        while (el) {\r\n            if (el.tagName === 'A') {\r\n                return el;\r\n            }\r\n            el = el.parentNode;\r\n        }\r\n    };\r\n    DefaultLinkHandler.targetIsThisWindow = function (target) {\r\n        var targetWindow = target.getAttribute('target');\r\n        var win = PLATFORM.global;\r\n        return !targetWindow ||\r\n            targetWindow === win.name ||\r\n            targetWindow === '_self';\r\n    };\r\n    return DefaultLinkHandler;\r\n}(LinkHandler));\r\nvar hasAttribute = function (el, attr) { return el.hasAttribute(attr); };\n\nvar BrowserHistory = (function (_super) {\r\n    __extends(BrowserHistory, _super);\r\n    function BrowserHistory(linkHandler) {\r\n        var _this = _super.call(this) || this;\r\n        _this._isActive = false;\r\n        _this._checkUrlCallback = _this._checkUrl.bind(_this);\r\n        _this.location = PLATFORM.location;\r\n        _this.history = PLATFORM.history;\r\n        _this.linkHandler = linkHandler;\r\n        return _this;\r\n    }\r\n    BrowserHistory.prototype.activate = function (options) {\r\n        if (this._isActive) {\r\n            throw new Error('History has already been activated.');\r\n        }\r\n        var $history = this.history;\r\n        var wantsPushState = !!options.pushState;\r\n        this._isActive = true;\r\n        var normalizedOptions = this.options = Object.assign({}, { root: '/' }, this.options, options);\r\n        var rootUrl = this.root = ('/' + normalizedOptions.root + '/').replace(rootStripper, '/');\r\n        var wantsHashChange = this._wantsHashChange = normalizedOptions.hashChange !== false;\r\n        var hasPushState = this._hasPushState = !!(normalizedOptions.pushState && $history && $history.pushState);\r\n        var eventName;\r\n        if (hasPushState) {\r\n            eventName = 'popstate';\r\n        }\r\n        else if (wantsHashChange) {\r\n            eventName = 'hashchange';\r\n        }\r\n        PLATFORM.addEventListener(eventName, this._checkUrlCallback);\r\n        if (wantsHashChange && wantsPushState) {\r\n            var $location = this.location;\r\n            var atRoot = $location.pathname.replace(/[^\\/]$/, '$&/') === rootUrl;\r\n            if (!hasPushState && !atRoot) {\r\n                var fragment = this.fragment = this._getFragment(null, true);\r\n                $location.replace(rootUrl + $location.search + '#' + fragment);\r\n                return true;\r\n            }\r\n            else if (hasPushState && atRoot && $location.hash) {\r\n                var fragment = this.fragment = this._getHash().replace(routeStripper, '');\r\n                $history.replaceState({}, DOM.title, rootUrl + fragment + $location.search);\r\n            }\r\n        }\r\n        if (!this.fragment) {\r\n            this.fragment = this._getFragment('');\r\n        }\r\n        this.linkHandler.activate(this);\r\n        if (!normalizedOptions.silent) {\r\n            return this._loadUrl('');\r\n        }\r\n    };\r\n    BrowserHistory.prototype.deactivate = function () {\r\n        var handler = this._checkUrlCallback;\r\n        PLATFORM.removeEventListener('popstate', handler);\r\n        PLATFORM.removeEventListener('hashchange', handler);\r\n        this._isActive = false;\r\n        this.linkHandler.deactivate();\r\n    };\r\n    BrowserHistory.prototype.getAbsoluteRoot = function () {\r\n        var $location = this.location;\r\n        var origin = createOrigin($location.protocol, $location.hostname, $location.port);\r\n        return \"\" + origin + this.root;\r\n    };\r\n    BrowserHistory.prototype.navigate = function (fragment, _a) {\r\n        var _b = _a === void 0 ? {} : _a, _c = _b.trigger, trigger = _c === void 0 ? true : _c, _d = _b.replace, replace = _d === void 0 ? false : _d;\r\n        var location = this.location;\r\n        if (fragment && absoluteUrl.test(fragment)) {\r\n            location.href = fragment;\r\n            return true;\r\n        }\r\n        if (!this._isActive) {\r\n            return false;\r\n        }\r\n        fragment = this._getFragment(fragment || '');\r\n        if (this.fragment === fragment && !replace) {\r\n            return false;\r\n        }\r\n        this.fragment = fragment;\r\n        var url = this.root + fragment;\r\n        if (fragment === '' && url !== '/') {\r\n            url = url.slice(0, -1);\r\n        }\r\n        if (this._hasPushState) {\r\n            url = url.replace('//', '/');\r\n            this.history[replace ? 'replaceState' : 'pushState']({}, DOM.title, url);\r\n        }\r\n        else if (this._wantsHashChange) {\r\n            updateHash(location, fragment, replace);\r\n        }\r\n        else {\r\n            location.assign(url);\r\n        }\r\n        if (trigger) {\r\n            return this._loadUrl(fragment);\r\n        }\r\n        return true;\r\n    };\r\n    BrowserHistory.prototype.navigateBack = function () {\r\n        this.history.back();\r\n    };\r\n    BrowserHistory.prototype.setTitle = function (title) {\r\n        DOM.title = title;\r\n    };\r\n    BrowserHistory.prototype.setState = function (key, value) {\r\n        var $history = this.history;\r\n        var state = Object.assign({}, $history.state);\r\n        var _a = this.location, pathname = _a.pathname, search = _a.search, hash = _a.hash;\r\n        state[key] = value;\r\n        $history.replaceState(state, null, \"\" + pathname + search + hash);\r\n    };\r\n    BrowserHistory.prototype.getState = function (key) {\r\n        var state = Object.assign({}, this.history.state);\r\n        return state[key];\r\n    };\r\n    BrowserHistory.prototype.getHistoryIndex = function () {\r\n        var historyIndex = this.getState('HistoryIndex');\r\n        if (historyIndex === undefined) {\r\n            historyIndex = this.history.length - 1;\r\n            this.setState('HistoryIndex', historyIndex);\r\n        }\r\n        return historyIndex;\r\n    };\r\n    BrowserHistory.prototype.go = function (movement) {\r\n        this.history.go(movement);\r\n    };\r\n    BrowserHistory.prototype._getHash = function () {\r\n        return this.location.hash.substr(1);\r\n    };\r\n    BrowserHistory.prototype._getFragment = function (fragment, forcePushState) {\r\n        var rootUrl;\r\n        if (!fragment) {\r\n            if (this._hasPushState || !this._wantsHashChange || forcePushState) {\r\n                var location_1 = this.location;\r\n                fragment = location_1.pathname + location_1.search;\r\n                rootUrl = this.root.replace(trailingSlash, '');\r\n                if (!fragment.indexOf(rootUrl)) {\r\n                    fragment = fragment.substr(rootUrl.length);\r\n                }\r\n            }\r\n            else {\r\n                fragment = this._getHash();\r\n            }\r\n        }\r\n        return '/' + fragment.replace(routeStripper, '');\r\n    };\r\n    BrowserHistory.prototype._checkUrl = function () {\r\n        var current = this._getFragment('');\r\n        if (current !== this.fragment) {\r\n            this._loadUrl('');\r\n        }\r\n    };\r\n    BrowserHistory.prototype._loadUrl = function (fragmentOverride) {\r\n        var fragment = this.fragment = this._getFragment(fragmentOverride);\r\n        return this.options.routeHandler ?\r\n            this.options.routeHandler(fragment) :\r\n            false;\r\n    };\r\n    BrowserHistory.inject = [LinkHandler];\r\n    return BrowserHistory;\r\n}(History));\r\nvar routeStripper = /^#?\\/*|\\s+$/g;\r\nvar rootStripper = /^\\/+|\\/+$/g;\r\nvar trailingSlash = /\\/$/;\r\nvar absoluteUrl = /^([a-z][a-z0-9+\\-.]*:)?\\/\\//i;\r\nfunction updateHash($location, fragment, replace) {\r\n    if (replace) {\r\n        var href = $location.href.replace(/(javascript:|#).*$/, '');\r\n        $location.replace(href + '#' + fragment);\r\n    }\r\n    else {\r\n        $location.hash = '#' + fragment;\r\n    }\r\n}\r\nfunction createOrigin(protocol, hostname, port) {\r\n    return protocol + \"//\" + hostname + (port ? ':' + port : '');\r\n}\n\nfunction configure(config) {\r\n    var $config = config;\r\n    $config.singleton(History, BrowserHistory);\r\n    $config.transient(LinkHandler, DefaultLinkHandler);\r\n}\n\nexport { BrowserHistory, DefaultLinkHandler, LinkHandler, configure };\n//# sourceMappingURL=aurelia-history-browser.js.map\n","\n\nexport var ConsoleAppender = function () {\n  function ConsoleAppender() {\n    \n  }\n\n  ConsoleAppender.prototype.debug = function debug(logger) {\n    var _console;\n\n    for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      rest[_key - 1] = arguments[_key];\n    }\n\n    (_console = console).debug.apply(_console, [\"DEBUG [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  ConsoleAppender.prototype.info = function info(logger) {\n    var _console2;\n\n    for (var _len2 = arguments.length, rest = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      rest[_key2 - 1] = arguments[_key2];\n    }\n\n    (_console2 = console).info.apply(_console2, [\"INFO [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  ConsoleAppender.prototype.warn = function warn(logger) {\n    var _console3;\n\n    for (var _len3 = arguments.length, rest = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      rest[_key3 - 1] = arguments[_key3];\n    }\n\n    (_console3 = console).warn.apply(_console3, [\"WARN [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  ConsoleAppender.prototype.error = function error(logger) {\n    var _console4;\n\n    for (var _len4 = arguments.length, rest = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n      rest[_key4 - 1] = arguments[_key4];\n    }\n\n    (_console4 = console).error.apply(_console4, [\"ERROR [\" + logger.id + \"]\"].concat(rest));\n  };\n\n  return ConsoleAppender;\n}();","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nimport { initializePAL, isInitialized } from 'aurelia-pal';\n\nexport var _PLATFORM = {\n  location: window.location,\n  history: window.history,\n  addEventListener: function addEventListener(eventName, callback, capture) {\n    this.global.addEventListener(eventName, callback, capture);\n  },\n  removeEventListener: function removeEventListener(eventName, callback, capture) {\n    this.global.removeEventListener(eventName, callback, capture);\n  },\n\n  performance: window.performance,\n  requestAnimationFrame: function requestAnimationFrame(callback) {\n    return this.global.requestAnimationFrame(callback);\n  }\n};\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var test = function test() {};\n\n  if (test.name === undefined) {\n    Object.defineProperty(Function.prototype, 'name', {\n      get: function get() {\n        var name = this.toString().match(/^\\s*function\\s*(\\S*)\\s*\\(/)[1];\n\n        Object.defineProperty(this, 'name', { value: name });\n        return name;\n      }\n    });\n  }\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  if (!('classList' in document.createElement('_')) || document.createElementNS && !('classList' in document.createElementNS('http://www.w3.org/2000/svg', 'g'))) {\n    var protoProp = 'prototype';\n    var strTrim = String.prototype.trim;\n    var arrIndexOf = Array.prototype.indexOf;\n    var emptyArray = [];\n\n    var DOMEx = function DOMEx(type, message) {\n      this.name = type;\n      this.code = DOMException[type];\n      this.message = message;\n    };\n\n    var checkTokenAndGetIndex = function checkTokenAndGetIndex(classList, token) {\n      if (token === '') {\n        throw new DOMEx('SYNTAX_ERR', 'An invalid or illegal string was specified');\n      }\n\n      if (/\\s/.test(token)) {\n        throw new DOMEx('INVALID_CHARACTER_ERR', 'String contains an invalid character');\n      }\n\n      return arrIndexOf.call(classList, token);\n    };\n\n    var ClassList = function ClassList(elem) {\n      var trimmedClasses = strTrim.call(elem.getAttribute('class') || '');\n      var classes = trimmedClasses ? trimmedClasses.split(/\\s+/) : emptyArray;\n\n      for (var i = 0, ii = classes.length; i < ii; ++i) {\n        this.push(classes[i]);\n      }\n\n      this._updateClassName = function () {\n        elem.setAttribute('class', this.toString());\n      };\n    };\n\n    var classListProto = ClassList[protoProp] = [];\n\n    DOMEx[protoProp] = Error[protoProp];\n\n    classListProto.item = function (i) {\n      return this[i] || null;\n    };\n\n    classListProto.contains = function (token) {\n      token += '';\n      return checkTokenAndGetIndex(this, token) !== -1;\n    };\n\n    classListProto.add = function () {\n      var tokens = arguments;\n      var i = 0;\n      var ii = tokens.length;\n      var token = void 0;\n      var updated = false;\n\n      do {\n        token = tokens[i] + '';\n        if (checkTokenAndGetIndex(this, token) === -1) {\n          this.push(token);\n          updated = true;\n        }\n      } while (++i < ii);\n\n      if (updated) {\n        this._updateClassName();\n      }\n    };\n\n    classListProto.remove = function () {\n      var tokens = arguments;\n      var i = 0;\n      var ii = tokens.length;\n      var token = void 0;\n      var updated = false;\n      var index = void 0;\n\n      do {\n        token = tokens[i] + '';\n        index = checkTokenAndGetIndex(this, token);\n        while (index !== -1) {\n          this.splice(index, 1);\n          updated = true;\n          index = checkTokenAndGetIndex(this, token);\n        }\n      } while (++i < ii);\n\n      if (updated) {\n        this._updateClassName();\n      }\n    };\n\n    classListProto.toggle = function (token, force) {\n      token += '';\n\n      var result = this.contains(token);\n      var method = result ? force !== true && 'remove' : force !== false && 'add';\n\n      if (method) {\n        this[method](token);\n      }\n\n      if (force === true || force === false) {\n        return force;\n      }\n\n      return !result;\n    };\n\n    classListProto.toString = function () {\n      return this.join(' ');\n    };\n\n    Object.defineProperty(Element.prototype, 'classList', {\n      get: function get() {\n        return new ClassList(this);\n      },\n      enumerable: true,\n      configurable: true\n    });\n  } else {\n    var testElement = document.createElement('_');\n    testElement.classList.add('c1', 'c2');\n\n    if (!testElement.classList.contains('c2')) {\n      var createMethod = function createMethod(method) {\n        var original = DOMTokenList.prototype[method];\n\n        DOMTokenList.prototype[method] = function (token) {\n          for (var i = 0, ii = arguments.length; i < ii; ++i) {\n            token = arguments[i];\n            original.call(this, token);\n          }\n        };\n      };\n\n      createMethod('add');\n      createMethod('remove');\n    }\n\n    testElement.classList.toggle('c3', false);\n\n    if (testElement.classList.contains('c3')) {\n      var _toggle = DOMTokenList.prototype.toggle;\n\n      DOMTokenList.prototype.toggle = function (token, force) {\n        if (1 in arguments && !this.contains(token) === !force) {\n          return force;\n        }\n\n        return _toggle.call(this, token);\n      };\n    }\n\n    testElement = null;\n  }\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var _filterEntries = function _filterEntries(key, value) {\n    var i = 0,\n        n = _entries.length,\n        result = [];\n    for (; i < n; i++) {\n      if (_entries[i][key] == value) {\n        result.push(_entries[i]);\n      }\n    }\n    return result;\n  };\n\n  var _clearEntries = function _clearEntries(type, name) {\n    var i = _entries.length,\n        entry;\n    while (i--) {\n      entry = _entries[i];\n      if (entry.entryType == type && (name === void 0 || entry.name == name)) {\n        _entries.splice(i, 1);\n      }\n    }\n  };\n\n  // @license http://opensource.org/licenses/MIT\n  if ('performance' in window === false) {\n    window.performance = {};\n  }\n\n  if ('now' in window.performance === false) {\n    var nowOffset = Date.now();\n\n    if (performance.timing && performance.timing.navigationStart) {\n      nowOffset = performance.timing.navigationStart;\n    }\n\n    window.performance.now = function now() {\n      return Date.now() - nowOffset;\n    };\n  }\n\n  var startOffset = Date.now ? Date.now() : +new Date();\n  var _entries = [];\n  var _marksIndex = {};\n\n  ;\n\n  if (!window.performance.mark) {\n    window.performance.mark = window.performance.webkitMark || function (name) {\n      var mark = {\n        name: name,\n        entryType: \"mark\",\n        startTime: window.performance.now(),\n        duration: 0\n      };\n\n      _entries.push(mark);\n      _marksIndex[name] = mark;\n    };\n  }\n\n  if (!window.performance.measure) {\n    window.performance.measure = window.performance.webkitMeasure || function (name, startMark, endMark) {\n      startMark = _marksIndex[startMark].startTime;\n      endMark = _marksIndex[endMark].startTime;\n\n      _entries.push({\n        name: name,\n        entryType: \"measure\",\n        startTime: startMark,\n        duration: endMark - startMark\n      });\n    };\n  }\n\n  if (!window.performance.getEntriesByType) {\n    window.performance.getEntriesByType = window.performance.webkitGetEntriesByType || function (type) {\n      return _filterEntries(\"entryType\", type);\n    };\n  }\n\n  if (!window.performance.getEntriesByName) {\n    window.performance.getEntriesByName = window.performance.webkitGetEntriesByName || function (name) {\n      return _filterEntries(\"name\", name);\n    };\n  }\n\n  if (!window.performance.clearMarks) {\n    window.performance.clearMarks = window.performance.webkitClearMarks || function (name) {\n      _clearEntries(\"mark\", name);\n    };\n  }\n\n  if (!window.performance.clearMeasures) {\n    window.performance.clearMeasures = window.performance.webkitClearMeasures || function (name) {\n      _clearEntries(\"measure\", name);\n    };\n  }\n\n  _PLATFORM.performance = window.performance;\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var con = window.console = window.console || {};\n  var nop = function nop() {};\n\n  if (!con.memory) con.memory = {};\n  ('assert,clear,count,debug,dir,dirxml,error,exception,group,' + 'groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,' + 'show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn').split(',').forEach(function (m) {\n    if (!con[m]) con[m] = nop;\n  });\n\n  if (_typeof(con.log) === 'object') {\n    'log,info,warn,error,assert,dir,clear,profile,profileEnd'.split(',').forEach(function (method) {\n      console[method] = this.bind(console[method], console);\n    }, Function.prototype.call);\n  }\n}\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  if (!window.CustomEvent || typeof window.CustomEvent !== 'function') {\n    var _CustomEvent = function _CustomEvent(event, params) {\n      params = params || {\n        bubbles: false,\n        cancelable: false,\n        detail: undefined\n      };\n\n      var evt = document.createEvent('CustomEvent');\n      evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n      return evt;\n    };\n\n    _CustomEvent.prototype = window.Event.prototype;\n    window.CustomEvent = _CustomEvent;\n  }\n}\n\nif (Element && !Element.prototype.matches) {\n  var proto = Element.prototype;\n  proto.matches = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector;\n}\n\nexport var _FEATURE = {\n  shadowDOM: !!HTMLElement.prototype.attachShadow,\n  scopedCSS: 'scoped' in document.createElement('style'),\n  htmlTemplateElement: function () {\n    var d = document.createElement('div');\n    d.innerHTML = '<template></template>';\n    return 'content' in d.children[0];\n  }(),\n  mutationObserver: !!(window.MutationObserver || window.WebKitMutationObserver),\n  ensureHTMLTemplateElement: function ensureHTMLTemplateElement(t) {\n    return t;\n  }\n};\n\nif (typeof FEATURE_NO_IE === 'undefined') {\n  var isSVGTemplate = function isSVGTemplate(el) {\n    return el.tagName === 'template' && el.namespaceURI === 'http://www.w3.org/2000/svg';\n  };\n\n  var fixSVGTemplateElement = function fixSVGTemplateElement(el) {\n    var template = el.ownerDocument.createElement('template');\n    var attrs = el.attributes;\n    var length = attrs.length;\n    var attr = void 0;\n\n    el.parentNode.insertBefore(template, el);\n\n    while (length-- > 0) {\n      attr = attrs[length];\n      template.setAttribute(attr.name, attr.value);\n      el.removeAttribute(attr.name);\n    }\n\n    el.parentNode.removeChild(el);\n\n    return fixHTMLTemplateElement(template);\n  };\n\n  var fixHTMLTemplateElement = function fixHTMLTemplateElement(template) {\n    var content = template.content = document.createDocumentFragment();\n    var child = void 0;\n\n    while (child = template.firstChild) {\n      content.appendChild(child);\n    }\n\n    return template;\n  };\n\n  var fixHTMLTemplateElementRoot = function fixHTMLTemplateElementRoot(template) {\n    var content = fixHTMLTemplateElement(template).content;\n    var childTemplates = content.querySelectorAll('template');\n\n    for (var i = 0, ii = childTemplates.length; i < ii; ++i) {\n      var child = childTemplates[i];\n\n      if (isSVGTemplate(child)) {\n        fixSVGTemplateElement(child);\n      } else {\n        fixHTMLTemplateElement(child);\n      }\n    }\n\n    return template;\n  };\n\n  if (!_FEATURE.htmlTemplateElement) {\n    _FEATURE.ensureHTMLTemplateElement = fixHTMLTemplateElementRoot;\n  }\n}\n\nvar shadowPoly = window.ShadowDOMPolyfill || null;\n\nexport var _DOM = {\n  Element: Element,\n  NodeList: NodeList,\n  SVGElement: SVGElement,\n  boundary: 'aurelia-dom-boundary',\n  addEventListener: function addEventListener(eventName, callback, capture) {\n    document.addEventListener(eventName, callback, capture);\n  },\n  removeEventListener: function removeEventListener(eventName, callback, capture) {\n    document.removeEventListener(eventName, callback, capture);\n  },\n  adoptNode: function adoptNode(node) {\n    return document.adoptNode(node);\n  },\n  createAttribute: function createAttribute(name) {\n    return document.createAttribute(name);\n  },\n  createElement: function createElement(tagName) {\n    return document.createElement(tagName);\n  },\n  createTextNode: function createTextNode(text) {\n    return document.createTextNode(text);\n  },\n  createComment: function createComment(text) {\n    return document.createComment(text);\n  },\n  createDocumentFragment: function createDocumentFragment() {\n    return document.createDocumentFragment();\n  },\n  createTemplateElement: function createTemplateElement() {\n    var template = document.createElement('template');\n    return _FEATURE.ensureHTMLTemplateElement(template);\n  },\n  createMutationObserver: function createMutationObserver(callback) {\n    return new (window.MutationObserver || window.WebKitMutationObserver)(callback);\n  },\n  createCustomEvent: function createCustomEvent(eventType, options) {\n    return new window.CustomEvent(eventType, options);\n  },\n  dispatchEvent: function dispatchEvent(evt) {\n    document.dispatchEvent(evt);\n  },\n  getComputedStyle: function getComputedStyle(element) {\n    return window.getComputedStyle(element);\n  },\n  getElementById: function getElementById(id) {\n    return document.getElementById(id);\n  },\n  querySelector: function querySelector(query) {\n    return document.querySelector(query);\n  },\n  querySelectorAll: function querySelectorAll(query) {\n    return document.querySelectorAll(query);\n  },\n  nextElementSibling: function nextElementSibling(element) {\n    if (element.nextElementSibling) {\n      return element.nextElementSibling;\n    }\n    do {\n      element = element.nextSibling;\n    } while (element && element.nodeType !== 1);\n    return element;\n  },\n  createTemplateFromMarkup: function createTemplateFromMarkup(markup) {\n    var parser = document.createElement('div');\n    parser.innerHTML = markup;\n\n    var temp = parser.firstElementChild;\n    if (!temp || temp.nodeName !== 'TEMPLATE') {\n      throw new Error('Template markup must be wrapped in a <template> element e.g. <template> <!-- markup here --> </template>');\n    }\n\n    return _FEATURE.ensureHTMLTemplateElement(temp);\n  },\n  appendNode: function appendNode(newNode, parentNode) {\n    (parentNode || document.body).appendChild(newNode);\n  },\n  replaceNode: function replaceNode(newNode, node, parentNode) {\n    if (node.parentNode) {\n      node.parentNode.replaceChild(newNode, node);\n    } else if (shadowPoly !== null) {\n      shadowPoly.unwrap(parentNode).replaceChild(shadowPoly.unwrap(newNode), shadowPoly.unwrap(node));\n    } else {\n      parentNode.replaceChild(newNode, node);\n    }\n  },\n  removeNode: function removeNode(node, parentNode) {\n    if (node.parentNode) {\n      node.parentNode.removeChild(node);\n    } else if (parentNode) {\n      if (shadowPoly !== null) {\n        shadowPoly.unwrap(parentNode).removeChild(shadowPoly.unwrap(node));\n      } else {\n        parentNode.removeChild(node);\n      }\n    }\n  },\n  injectStyles: function injectStyles(styles, destination, prepend, id) {\n    if (id) {\n      var oldStyle = document.getElementById(id);\n      if (oldStyle) {\n        var isStyleTag = oldStyle.tagName.toLowerCase() === 'style';\n\n        if (isStyleTag) {\n          oldStyle.innerHTML = styles;\n          return;\n        }\n\n        throw new Error('The provided id does not indicate a style tag.');\n      }\n    }\n\n    var node = document.createElement('style');\n    node.innerHTML = styles;\n    node.type = 'text/css';\n\n    if (id) {\n      node.id = id;\n    }\n\n    destination = destination || document.head;\n\n    if (prepend && destination.childNodes.length > 0) {\n      destination.insertBefore(node, destination.childNodes[0]);\n    } else {\n      destination.appendChild(node);\n    }\n\n    return node;\n  }\n};\n\nexport function initialize() {\n  if (isInitialized) {\n    return;\n  }\n\n  initializePAL(function (platform, feature, dom) {\n    Object.assign(platform, _PLATFORM);\n    Object.assign(feature, _FEATURE);\n    Object.assign(dom, _DOM);\n\n    Object.defineProperty(dom, 'title', {\n      get: function get() {\n        return document.title;\n      },\n      set: function set(value) {\n        document.title = value;\n      }\n    });\n\n    Object.defineProperty(dom, 'activeElement', {\n      get: function get() {\n        return document.activeElement;\n      }\n    });\n\n    Object.defineProperty(platform, 'XMLHttpRequest', {\n      get: function get() {\n        return platform.global.XMLHttpRequest;\n      }\n    });\n  });\n}","var _class, _temp, _dec, _class2, _dec2, _class3, _class4, _temp2, _class5, _temp3;\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\nimport * as LogManager from 'aurelia-logging';\nimport { camelCase, SVGAnalyzer, bindingMode, connectable, enqueueBindingConnect, sourceContext, Parser, ObserverLocator, EventManager, ListenerExpression, BindingExpression, CallExpression, delegationStrategy, NameExpression, LiteralString } from 'aurelia-binding';\nimport { BehaviorInstruction, BindingLanguage } from 'aurelia-templating';\n\nexport var AttributeMap = (_temp = _class = function () {\n  function AttributeMap(svg) {\n    \n\n    this.elements = Object.create(null);\n    this.allElements = Object.create(null);\n\n    this.svg = svg;\n\n    this.registerUniversal('accesskey', 'accessKey');\n    this.registerUniversal('contenteditable', 'contentEditable');\n    this.registerUniversal('tabindex', 'tabIndex');\n    this.registerUniversal('textcontent', 'textContent');\n    this.registerUniversal('innerhtml', 'innerHTML');\n    this.registerUniversal('scrolltop', 'scrollTop');\n    this.registerUniversal('scrollleft', 'scrollLeft');\n    this.registerUniversal('readonly', 'readOnly');\n\n    this.register('label', 'for', 'htmlFor');\n\n    this.register('img', 'usemap', 'useMap');\n\n    this.register('input', 'maxlength', 'maxLength');\n    this.register('input', 'minlength', 'minLength');\n    this.register('input', 'formaction', 'formAction');\n    this.register('input', 'formenctype', 'formEncType');\n    this.register('input', 'formmethod', 'formMethod');\n    this.register('input', 'formnovalidate', 'formNoValidate');\n    this.register('input', 'formtarget', 'formTarget');\n\n    this.register('textarea', 'maxlength', 'maxLength');\n\n    this.register('td', 'rowspan', 'rowSpan');\n    this.register('td', 'colspan', 'colSpan');\n    this.register('th', 'rowspan', 'rowSpan');\n    this.register('th', 'colspan', 'colSpan');\n  }\n\n  AttributeMap.prototype.register = function register(elementName, attributeName, propertyName) {\n    elementName = elementName.toLowerCase();\n    attributeName = attributeName.toLowerCase();\n    var element = this.elements[elementName] = this.elements[elementName] || Object.create(null);\n    element[attributeName] = propertyName;\n  };\n\n  AttributeMap.prototype.registerUniversal = function registerUniversal(attributeName, propertyName) {\n    attributeName = attributeName.toLowerCase();\n    this.allElements[attributeName] = propertyName;\n  };\n\n  AttributeMap.prototype.map = function map(elementName, attributeName) {\n    if (this.svg.isStandardSvgAttribute(elementName, attributeName)) {\n      return attributeName;\n    }\n    elementName = elementName.toLowerCase();\n    attributeName = attributeName.toLowerCase();\n    var element = this.elements[elementName];\n    if (element !== undefined && attributeName in element) {\n      return element[attributeName];\n    }\n    if (attributeName in this.allElements) {\n      return this.allElements[attributeName];\n    }\n\n    if (/(?:^data-)|(?:^aria-)|:/.test(attributeName)) {\n      return attributeName;\n    }\n    return camelCase(attributeName);\n  };\n\n  return AttributeMap;\n}(), _class.inject = [SVGAnalyzer], _temp);\n\nexport var InterpolationBindingExpression = function () {\n  function InterpolationBindingExpression(observerLocator, targetProperty, parts, mode, lookupFunctions, attribute) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.parts = parts;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n    this.attribute = this.attrToRemove = attribute;\n    this.discrete = false;\n  }\n\n  InterpolationBindingExpression.prototype.createBinding = function createBinding(target) {\n    if (this.parts.length === 3) {\n      return new ChildInterpolationBinding(target, this.observerLocator, this.parts[1], this.mode, this.lookupFunctions, this.targetProperty, this.parts[0], this.parts[2]);\n    }\n    return new InterpolationBinding(this.observerLocator, this.parts, target, this.targetProperty, this.mode, this.lookupFunctions);\n  };\n\n  return InterpolationBindingExpression;\n}();\n\nfunction validateTarget(target, propertyName) {\n  if (propertyName === 'style') {\n    LogManager.getLogger('templating-binding').info('Internet Explorer does not support interpolation in \"style\" attributes.  Use the style attribute\\'s alias, \"css\" instead.');\n  } else if (target.parentElement && target.parentElement.nodeName === 'TEXTAREA' && propertyName === 'textContent') {\n    throw new Error('Interpolation binding cannot be used in the content of a textarea element.  Use <textarea value.bind=\"expression\"></textarea> instead.');\n  }\n}\n\nexport var InterpolationBinding = function () {\n  function InterpolationBinding(observerLocator, parts, target, targetProperty, mode, lookupFunctions) {\n    \n\n    validateTarget(target, targetProperty);\n    this.observerLocator = observerLocator;\n    this.parts = parts;\n    this.target = target;\n    this.targetProperty = targetProperty;\n    this.targetAccessor = observerLocator.getAccessor(target, targetProperty);\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n  }\n\n  InterpolationBinding.prototype.interpolate = function interpolate() {\n    if (this.isBound) {\n      var value = '';\n      var parts = this.parts;\n      for (var i = 0, ii = parts.length; i < ii; i++) {\n        value += i % 2 === 0 ? parts[i] : this['childBinding' + i].value;\n      }\n      this.targetAccessor.setValue(value, this.target, this.targetProperty);\n    }\n  };\n\n  InterpolationBinding.prototype.updateOneTimeBindings = function updateOneTimeBindings() {\n    for (var i = 1, ii = this.parts.length; i < ii; i += 2) {\n      var child = this['childBinding' + i];\n      if (child.mode === bindingMode.oneTime) {\n        child.call();\n      }\n    }\n  };\n\n  InterpolationBinding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.source = source;\n\n    var parts = this.parts;\n    for (var i = 1, ii = parts.length; i < ii; i += 2) {\n      var binding = new ChildInterpolationBinding(this, this.observerLocator, parts[i], this.mode, this.lookupFunctions);\n      binding.bind(source);\n      this['childBinding' + i] = binding;\n    }\n\n    this.isBound = true;\n    this.interpolate();\n  };\n\n  InterpolationBinding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    this.source = null;\n    var parts = this.parts;\n    for (var i = 1, ii = parts.length; i < ii; i += 2) {\n      var name = 'childBinding' + i;\n      this[name].unbind();\n    }\n  };\n\n  return InterpolationBinding;\n}();\n\nexport var ChildInterpolationBinding = (_dec = connectable(), _dec(_class2 = function () {\n  function ChildInterpolationBinding(target, observerLocator, sourceExpression, mode, lookupFunctions, targetProperty, left, right) {\n    \n\n    if (target instanceof InterpolationBinding) {\n      this.parent = target;\n    } else {\n      validateTarget(target, targetProperty);\n      this.target = target;\n      this.targetProperty = targetProperty;\n      this.targetAccessor = observerLocator.getAccessor(target, targetProperty);\n    }\n    this.observerLocator = observerLocator;\n    this.sourceExpression = sourceExpression;\n    this.mode = mode;\n    this.lookupFunctions = lookupFunctions;\n    this.left = left;\n    this.right = right;\n  }\n\n  ChildInterpolationBinding.prototype.updateTarget = function updateTarget(value) {\n    value = value === null || value === undefined ? '' : value.toString();\n    if (value !== this.value) {\n      this.value = value;\n      if (this.parent) {\n        this.parent.interpolate();\n      } else {\n        this.targetAccessor.setValue(this.left + value + this.right, this.target, this.targetProperty);\n      }\n    }\n  };\n\n  ChildInterpolationBinding.prototype.call = function call() {\n    if (!this.isBound) {\n      return;\n    }\n\n    this.rawValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n    this.updateTarget(this.rawValue);\n\n    if (this.mode !== bindingMode.oneTime) {\n      this._version++;\n      this.sourceExpression.connect(this, this.source);\n      if (this.rawValue instanceof Array) {\n        this.observeArray(this.rawValue);\n      }\n      this.unobserve(false);\n    }\n  };\n\n  ChildInterpolationBinding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n    this.isBound = true;\n    this.source = source;\n\n    var sourceExpression = this.sourceExpression;\n    if (sourceExpression.bind) {\n      sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n\n    this.rawValue = sourceExpression.evaluate(source, this.lookupFunctions);\n    this.updateTarget(this.rawValue);\n\n    if (this.mode === bindingMode.oneWay) {\n      enqueueBindingConnect(this);\n    }\n  };\n\n  ChildInterpolationBinding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    var sourceExpression = this.sourceExpression;\n    if (sourceExpression.unbind) {\n      sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this.value = null;\n    this.rawValue = null;\n    this.unobserve(true);\n  };\n\n  ChildInterpolationBinding.prototype.connect = function connect(evaluate) {\n    if (!this.isBound) {\n      return;\n    }\n    if (evaluate) {\n      this.rawValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n      this.updateTarget(this.rawValue);\n    }\n    this.sourceExpression.connect(this, this.source);\n    if (this.rawValue instanceof Array) {\n      this.observeArray(this.rawValue);\n    }\n  };\n\n  return ChildInterpolationBinding;\n}()) || _class2);\n\nexport var LetExpression = function () {\n  function LetExpression(observerLocator, targetProperty, sourceExpression, lookupFunctions, toBindingContext) {\n    \n\n    this.observerLocator = observerLocator;\n    this.sourceExpression = sourceExpression;\n    this.targetProperty = targetProperty;\n    this.lookupFunctions = lookupFunctions;\n    this.toBindingContext = toBindingContext;\n  }\n\n  LetExpression.prototype.createBinding = function createBinding() {\n    return new LetBinding(this.observerLocator, this.sourceExpression, this.targetProperty, this.lookupFunctions, this.toBindingContext);\n  };\n\n  return LetExpression;\n}();\n\nexport var LetBinding = (_dec2 = connectable(), _dec2(_class3 = function () {\n  function LetBinding(observerLocator, sourceExpression, targetProperty, lookupFunctions, toBindingContext) {\n    \n\n    this.observerLocator = observerLocator;\n    this.sourceExpression = sourceExpression;\n    this.targetProperty = targetProperty;\n    this.lookupFunctions = lookupFunctions;\n    this.source = null;\n    this.target = null;\n    this.toBindingContext = toBindingContext;\n  }\n\n  LetBinding.prototype.updateTarget = function updateTarget() {\n    var value = this.sourceExpression.evaluate(this.source, this.lookupFunctions);\n    this.target[this.targetProperty] = value;\n  };\n\n  LetBinding.prototype.call = function call(context) {\n    if (!this.isBound) {\n      return;\n    }\n    if (context === sourceContext) {\n      this.updateTarget();\n      return;\n    }\n    throw new Error('Unexpected call context ' + context);\n  };\n\n  LetBinding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n\n    this.isBound = true;\n    this.source = source;\n    this.target = this.toBindingContext ? source.bindingContext : source.overrideContext;\n\n    if (this.sourceExpression.bind) {\n      this.sourceExpression.bind(this, source, this.lookupFunctions);\n    }\n\n    enqueueBindingConnect(this);\n  };\n\n  LetBinding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    if (this.sourceExpression.unbind) {\n      this.sourceExpression.unbind(this, this.source);\n    }\n    this.source = null;\n    this.target = null;\n    this.unobserve(true);\n  };\n\n  LetBinding.prototype.connect = function connect() {\n    if (!this.isBound) {\n      return;\n    }\n    this.updateTarget();\n    this.sourceExpression.connect(this, this.source);\n  };\n\n  return LetBinding;\n}()) || _class3);\n\nexport var LetInterpolationBindingExpression = function () {\n  function LetInterpolationBindingExpression(observerLocator, targetProperty, parts, lookupFunctions, toBindingContext) {\n    \n\n    this.observerLocator = observerLocator;\n    this.targetProperty = targetProperty;\n    this.parts = parts;\n    this.lookupFunctions = lookupFunctions;\n    this.toBindingContext = toBindingContext;\n  }\n\n  LetInterpolationBindingExpression.prototype.createBinding = function createBinding() {\n    return new LetInterpolationBinding(this.observerLocator, this.targetProperty, this.parts, this.lookupFunctions, this.toBindingContext);\n  };\n\n  return LetInterpolationBindingExpression;\n}();\n\nexport var LetInterpolationBinding = function () {\n  function LetInterpolationBinding(observerLocator, targetProperty, parts, lookupFunctions, toBindingContext) {\n    \n\n    this.observerLocator = observerLocator;\n    this.parts = parts;\n    this.targetProperty = targetProperty;\n    this.lookupFunctions = lookupFunctions;\n    this.toBindingContext = toBindingContext;\n    this.target = null;\n  }\n\n  LetInterpolationBinding.prototype.bind = function bind(source) {\n    if (this.isBound) {\n      if (this.source === source) {\n        return;\n      }\n      this.unbind();\n    }\n\n    this.isBound = true;\n    this.source = source;\n    this.target = this.toBindingContext ? source.bindingContext : source.overrideContext;\n\n    this.interpolationBinding = this.createInterpolationBinding();\n    this.interpolationBinding.bind(source);\n  };\n\n  LetInterpolationBinding.prototype.unbind = function unbind() {\n    if (!this.isBound) {\n      return;\n    }\n    this.isBound = false;\n    this.source = null;\n    this.target = null;\n    this.interpolationBinding.unbind();\n    this.interpolationBinding = null;\n  };\n\n  LetInterpolationBinding.prototype.createInterpolationBinding = function createInterpolationBinding() {\n    if (this.parts.length === 3) {\n      return new ChildInterpolationBinding(this.target, this.observerLocator, this.parts[1], bindingMode.oneWay, this.lookupFunctions, this.targetProperty, this.parts[0], this.parts[2]);\n    }\n    return new InterpolationBinding(this.observerLocator, this.parts, this.target, this.targetProperty, bindingMode.oneWay, this.lookupFunctions);\n  };\n\n  return LetInterpolationBinding;\n}();\n\nexport var SyntaxInterpreter = (_temp2 = _class4 = function () {\n  function SyntaxInterpreter(parser, observerLocator, eventManager, attributeMap) {\n    \n\n    this.parser = parser;\n    this.observerLocator = observerLocator;\n    this.eventManager = eventManager;\n    this.attributeMap = attributeMap;\n  }\n\n  SyntaxInterpreter.prototype.interpret = function interpret(resources, element, info, existingInstruction, context) {\n    if (info.command in this) {\n      return this[info.command](resources, element, info, existingInstruction, context);\n    }\n\n    return this.handleUnknownCommand(resources, element, info, existingInstruction, context);\n  };\n\n  SyntaxInterpreter.prototype.handleUnknownCommand = function handleUnknownCommand(resources, element, info, existingInstruction, context) {\n    LogManager.getLogger('templating-binding').warn('Unknown binding command.', info);\n    return existingInstruction;\n  };\n\n  SyntaxInterpreter.prototype.determineDefaultBindingMode = function determineDefaultBindingMode(element, attrName, context) {\n    var tagName = element.tagName.toLowerCase();\n\n    if (tagName === 'input' && (attrName === 'value' || attrName === 'files') && element.type !== 'checkbox' && element.type !== 'radio' || tagName === 'input' && attrName === 'checked' && (element.type === 'checkbox' || element.type === 'radio') || (tagName === 'textarea' || tagName === 'select') && attrName === 'value' || (attrName === 'textcontent' || attrName === 'innerhtml') && element.contentEditable === 'true' || attrName === 'scrolltop' || attrName === 'scrollleft') {\n      return bindingMode.twoWay;\n    }\n\n    if (context && attrName in context.attributes && context.attributes[attrName] && context.attributes[attrName].defaultBindingMode >= bindingMode.oneTime) {\n      return context.attributes[attrName].defaultBindingMode;\n    }\n\n    return bindingMode.oneWay;\n  };\n\n  SyntaxInterpreter.prototype.bind = function bind(resources, element, info, existingInstruction, context) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), info.defaultBindingMode === undefined || info.defaultBindingMode === null ? this.determineDefaultBindingMode(element, info.attrName, context) : info.defaultBindingMode, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype.trigger = function trigger(resources, element, info) {\n    return new ListenerExpression(this.eventManager, info.attrName, this.parser.parse(info.attrValue), delegationStrategy.none, true, resources.lookupFunctions);\n  };\n\n  SyntaxInterpreter.prototype.capture = function capture(resources, element, info) {\n    return new ListenerExpression(this.eventManager, info.attrName, this.parser.parse(info.attrValue), delegationStrategy.capturing, true, resources.lookupFunctions);\n  };\n\n  SyntaxInterpreter.prototype.delegate = function delegate(resources, element, info) {\n    return new ListenerExpression(this.eventManager, info.attrName, this.parser.parse(info.attrValue), delegationStrategy.bubbling, true, resources.lookupFunctions);\n  };\n\n  SyntaxInterpreter.prototype.call = function call(resources, element, info, existingInstruction) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new CallExpression(this.observerLocator, info.attrName, this.parser.parse(info.attrValue), resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype.options = function options(resources, element, info, existingInstruction, context) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n    var attrValue = info.attrValue;\n    var language = this.language;\n    var name = null;\n    var target = '';\n    var current = void 0;\n    var i = void 0;\n    var ii = void 0;\n    var inString = false;\n    var inEscape = false;\n    var foundName = false;\n\n    for (i = 0, ii = attrValue.length; i < ii; ++i) {\n      current = attrValue[i];\n\n      if (current === ';' && !inString) {\n        if (!foundName) {\n          name = this._getPrimaryPropertyName(resources, context);\n        }\n        info = language.inspectAttribute(resources, '?', name, target.trim());\n        language.createAttributeInstruction(resources, element, info, instruction, context);\n\n        if (!instruction.attributes[info.attrName]) {\n          instruction.attributes[info.attrName] = info.attrValue;\n        }\n\n        target = '';\n        name = null;\n      } else if (current === ':' && name === null) {\n        foundName = true;\n        name = target.trim();\n        target = '';\n      } else if (current === '\\\\') {\n        target += current;\n        inEscape = true;\n        continue;\n      } else {\n        target += current;\n\n        if (name !== null && inEscape === false && current === '\\'') {\n          inString = !inString;\n        }\n      }\n\n      inEscape = false;\n    }\n\n    if (!foundName) {\n      name = this._getPrimaryPropertyName(resources, context);\n    }\n\n    if (name !== null) {\n      info = language.inspectAttribute(resources, '?', name, target.trim());\n      language.createAttributeInstruction(resources, element, info, instruction, context);\n\n      if (!instruction.attributes[info.attrName]) {\n        instruction.attributes[info.attrName] = info.attrValue;\n      }\n    }\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype._getPrimaryPropertyName = function _getPrimaryPropertyName(resources, context) {\n    var type = resources.getAttribute(context.attributeName);\n    if (type && type.primaryProperty) {\n      return type.primaryProperty.attribute;\n    }\n    return null;\n  };\n\n  SyntaxInterpreter.prototype['for'] = function _for(resources, element, info, existingInstruction) {\n    var parts = void 0;\n    var keyValue = void 0;\n    var instruction = void 0;\n    var attrValue = void 0;\n    var isDestructuring = void 0;\n\n    attrValue = info.attrValue;\n    isDestructuring = attrValue.match(/^ *[[].+[\\]]/);\n    parts = isDestructuring ? attrValue.split('of ') : attrValue.split(' of ');\n\n    if (parts.length !== 2) {\n      throw new Error('Incorrect syntax for \"for\". The form is: \"$local of $items\" or \"[$key, $value] of $items\".');\n    }\n\n    instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    if (isDestructuring) {\n      keyValue = parts[0].replace(/[[\\]]/g, '').replace(/,/g, ' ').replace(/\\s+/g, ' ').trim().split(' ');\n      instruction.attributes.key = keyValue[0];\n      instruction.attributes.value = keyValue[1];\n    } else {\n      instruction.attributes.local = parts[0];\n    }\n\n    instruction.attributes.items = new BindingExpression(this.observerLocator, 'items', this.parser.parse(parts[1]), bindingMode.oneWay, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype['two-way'] = function twoWay(resources, element, info, existingInstruction) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.twoWay, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype['to-view'] = function toView(resources, element, info, existingInstruction) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.toView, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype['from-view'] = function fromView(resources, element, info, existingInstruction) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.fromView, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  SyntaxInterpreter.prototype['one-time'] = function oneTime(resources, element, info, existingInstruction) {\n    var instruction = existingInstruction || BehaviorInstruction.attribute(info.attrName);\n\n    instruction.attributes[info.attrName] = new BindingExpression(this.observerLocator, this.attributeMap.map(element.tagName, info.attrName), this.parser.parse(info.attrValue), bindingMode.oneTime, resources.lookupFunctions);\n\n    return instruction;\n  };\n\n  return SyntaxInterpreter;\n}(), _class4.inject = [Parser, ObserverLocator, EventManager, AttributeMap], _temp2);\n\nSyntaxInterpreter.prototype['one-way'] = SyntaxInterpreter.prototype['to-view'];\n\nvar info = {};\n\nexport var TemplatingBindingLanguage = (_temp3 = _class5 = function (_BindingLanguage) {\n  _inherits(TemplatingBindingLanguage, _BindingLanguage);\n\n  function TemplatingBindingLanguage(parser, observerLocator, syntaxInterpreter, attributeMap) {\n    \n\n    var _this = _possibleConstructorReturn(this, _BindingLanguage.call(this));\n\n    _this.parser = parser;\n    _this.observerLocator = observerLocator;\n    _this.syntaxInterpreter = syntaxInterpreter;\n    _this.emptyStringExpression = _this.parser.parse('\\'\\'');\n    syntaxInterpreter.language = _this;\n    _this.attributeMap = attributeMap;\n    _this.toBindingContextAttr = 'to-binding-context';\n    return _this;\n  }\n\n  TemplatingBindingLanguage.prototype.inspectAttribute = function inspectAttribute(resources, elementName, attrName, attrValue) {\n    var parts = attrName.split('.');\n\n    info.defaultBindingMode = null;\n\n    if (parts.length === 2) {\n      info.attrName = parts[0].trim();\n      info.attrValue = attrValue;\n      info.command = parts[1].trim();\n\n      if (info.command === 'ref') {\n        info.expression = new NameExpression(this.parser.parse(attrValue), info.attrName, resources.lookupFunctions);\n        info.command = null;\n        info.attrName = 'ref';\n      } else {\n        info.expression = null;\n      }\n    } else if (attrName === 'ref') {\n      info.attrName = attrName;\n      info.attrValue = attrValue;\n      info.command = null;\n      info.expression = new NameExpression(this.parser.parse(attrValue), 'element', resources.lookupFunctions);\n    } else {\n      info.attrName = attrName;\n      info.attrValue = attrValue;\n      info.command = null;\n      var interpolationParts = this.parseInterpolation(resources, attrValue);\n      if (interpolationParts === null) {\n        info.expression = null;\n      } else {\n        info.expression = new InterpolationBindingExpression(this.observerLocator, this.attributeMap.map(elementName, attrName), interpolationParts, bindingMode.oneWay, resources.lookupFunctions, attrName);\n      }\n    }\n\n    return info;\n  };\n\n  TemplatingBindingLanguage.prototype.createAttributeInstruction = function createAttributeInstruction(resources, element, theInfo, existingInstruction, context) {\n    var instruction = void 0;\n\n    if (theInfo.expression) {\n      if (theInfo.attrName === 'ref') {\n        return theInfo.expression;\n      }\n\n      instruction = existingInstruction || BehaviorInstruction.attribute(theInfo.attrName);\n      instruction.attributes[theInfo.attrName] = theInfo.expression;\n    } else if (theInfo.command) {\n      instruction = this.syntaxInterpreter.interpret(resources, element, theInfo, existingInstruction, context);\n    }\n\n    return instruction;\n  };\n\n  TemplatingBindingLanguage.prototype.createLetExpressions = function createLetExpressions(resources, letElement) {\n    var expressions = [];\n    var attributes = letElement.attributes;\n\n    var attr = void 0;\n\n    var parts = void 0;\n    var attrName = void 0;\n    var attrValue = void 0;\n    var command = void 0;\n    var toBindingContextAttr = this.toBindingContextAttr;\n    var toBindingContext = letElement.hasAttribute(toBindingContextAttr);\n    for (var i = 0, ii = attributes.length; ii > i; ++i) {\n      attr = attributes[i];\n      attrName = attr.name;\n      attrValue = attr.nodeValue;\n      parts = attrName.split('.');\n\n      if (attrName === toBindingContextAttr) {\n        continue;\n      }\n\n      if (parts.length === 2) {\n        command = parts[1];\n        if (command !== 'bind') {\n          LogManager.getLogger('templating-binding-language').warn('Detected invalid let command. Expected \"' + parts[0] + '.bind\", given \"' + attrName + '\"');\n          continue;\n        }\n        expressions.push(new LetExpression(this.observerLocator, camelCase(parts[0]), this.parser.parse(attrValue), resources.lookupFunctions, toBindingContext));\n      } else {\n        attrName = camelCase(attrName);\n        parts = this.parseInterpolation(resources, attrValue);\n        if (parts === null) {\n          LogManager.getLogger('templating-binding-language').warn('Detected string literal in let bindings. Did you mean \"' + attrName + '.bind=' + attrValue + '\" or \"' + attrName + '=${' + attrValue + '}\" ?');\n        }\n        if (parts) {\n          expressions.push(new LetInterpolationBindingExpression(this.observerLocator, attrName, parts, resources.lookupFunctions, toBindingContext));\n        } else {\n          expressions.push(new LetExpression(this.observerLocator, attrName, new LiteralString(attrValue), resources.lookupFunctions, toBindingContext));\n        }\n      }\n    }\n    return expressions;\n  };\n\n  TemplatingBindingLanguage.prototype.inspectTextContent = function inspectTextContent(resources, value) {\n    var parts = this.parseInterpolation(resources, value);\n    if (parts === null) {\n      return null;\n    }\n    return new InterpolationBindingExpression(this.observerLocator, 'textContent', parts, bindingMode.oneWay, resources.lookupFunctions, 'textContent');\n  };\n\n  TemplatingBindingLanguage.prototype.parseInterpolation = function parseInterpolation(resources, value) {\n    var i = value.indexOf('${', 0);\n    var ii = value.length;\n    var char = void 0;\n    var pos = 0;\n    var open = 0;\n    var quote = null;\n    var interpolationStart = void 0;\n    var parts = void 0;\n    var partIndex = 0;\n\n    while (i >= 0 && i < ii - 2) {\n      open = 1;\n      interpolationStart = i;\n      i += 2;\n\n      do {\n        char = value[i];\n        i++;\n\n        if (char === \"'\" || char === '\"') {\n          if (quote === null) {\n            quote = char;\n          } else if (quote === char) {\n            quote = null;\n          }\n          continue;\n        }\n\n        if (char === '\\\\') {\n          i++;\n          continue;\n        }\n\n        if (quote !== null) {\n          continue;\n        }\n\n        if (char === '{') {\n          open++;\n        } else if (char === '}') {\n          open--;\n        }\n      } while (open > 0 && i < ii);\n\n      if (open === 0) {\n        parts = parts || [];\n        if (value[interpolationStart - 1] === '\\\\' && value[interpolationStart - 2] !== '\\\\') {\n          parts[partIndex] = value.substring(pos, interpolationStart - 1) + value.substring(interpolationStart, i);\n          partIndex++;\n          parts[partIndex] = this.emptyStringExpression;\n          partIndex++;\n        } else {\n          parts[partIndex] = value.substring(pos, interpolationStart);\n          partIndex++;\n          parts[partIndex] = this.parser.parse(value.substring(interpolationStart + 2, i - 1));\n          partIndex++;\n        }\n        pos = i;\n        i = value.indexOf('${', i);\n      } else {\n        break;\n      }\n    }\n\n    if (partIndex === 0) {\n      return null;\n    }\n\n    parts[partIndex] = value.substr(pos);\n    return parts;\n  };\n\n  return TemplatingBindingLanguage;\n}(BindingLanguage), _class5.inject = [Parser, ObserverLocator, SyntaxInterpreter, AttributeMap], _temp3);\n\nexport function configure(config) {\n  config.container.registerSingleton(BindingLanguage, TemplatingBindingLanguage);\n  config.container.registerAlias(BindingLanguage, TemplatingBindingLanguage);\n}","import { Container, inject, Optional } from 'aurelia-dependency-injection';\nimport { DOM, FEATURE } from 'aurelia-pal';\nimport { TaskQueue } from 'aurelia-task-queue';\nimport { CompositionEngine, ViewSlot, ViewResources, bindable, noView, customElement, customAttribute, templateController, BoundViewFactory, TargetInstruction, Animator, resource, useView, useShadowDOM, ViewEngine } from 'aurelia-templating';\nimport { createOverrideContext, bindingMode, BindingBehavior, ValueConverter, sourceContext, mergeSplice, ObserverLocator, valueConverter, DataAttributeObserver, bindingBehavior, targetContext, EventSubscriber } from 'aurelia-binding';\nimport { getLogger } from 'aurelia-logging';\nimport { Loader } from 'aurelia-loader';\nimport { relativeToFile } from 'aurelia-path';\nimport { mixin } from 'aurelia-metadata';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\nvar ActivationStrategy;\r\n(function (ActivationStrategy) {\r\n    ActivationStrategy[\"InvokeLifecycle\"] = \"invoke-lifecycle\";\r\n    ActivationStrategy[\"Replace\"] = \"replace\";\r\n})(ActivationStrategy || (ActivationStrategy = {}));\r\nvar Compose = (function () {\r\n    function Compose(element, container, compositionEngine, viewSlot, viewResources, taskQueue) {\r\n        this.activationStrategy = ActivationStrategy.InvokeLifecycle;\r\n        this.element = element;\r\n        this.container = container;\r\n        this.compositionEngine = compositionEngine;\r\n        this.viewSlot = viewSlot;\r\n        this.viewResources = viewResources;\r\n        this.taskQueue = taskQueue;\r\n        this.currentController = null;\r\n        this.currentViewModel = null;\r\n        this.changes = Object.create(null);\r\n    }\r\n    Compose.inject = function () {\r\n        return [DOM.Element, Container, CompositionEngine, ViewSlot, ViewResources, TaskQueue];\r\n    };\r\n    Compose.prototype.created = function (owningView) {\r\n        this.owningView = owningView;\r\n    };\r\n    Compose.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.bindingContext = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n        var changes = this.changes;\r\n        changes.view = this.view;\r\n        changes.viewModel = this.viewModel;\r\n        changes.model = this.model;\r\n        if (!this.pendingTask) {\r\n            processChanges(this);\r\n        }\r\n    };\r\n    Compose.prototype.unbind = function () {\r\n        this.changes = Object.create(null);\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        var returnToCache = true;\r\n        var skipAnimation = true;\r\n        this.viewSlot.removeAll(returnToCache, skipAnimation);\r\n    };\r\n    Compose.prototype.modelChanged = function (newValue, oldValue) {\r\n        this.changes.model = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    Compose.prototype.viewChanged = function (newValue, oldValue) {\r\n        this.changes.view = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    Compose.prototype.viewModelChanged = function (newValue, oldValue) {\r\n        this.changes.viewModel = newValue;\r\n        requestUpdate(this);\r\n    };\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"model\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"view\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"viewModel\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"activationStrategy\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Compose.prototype, \"swapOrder\", void 0);\r\n    Compose = __decorate([\r\n        noView,\r\n        customElement('compose')\r\n    ], Compose);\r\n    return Compose;\r\n}());\r\nfunction isEmpty(obj) {\r\n    for (var _ in obj) {\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\nfunction tryActivateViewModel(vm, model) {\r\n    if (vm && typeof vm.activate === 'function') {\r\n        return Promise.resolve(vm.activate(model));\r\n    }\r\n}\r\nfunction createInstruction(composer, instruction) {\r\n    return Object.assign(instruction, {\r\n        bindingContext: composer.bindingContext,\r\n        overrideContext: composer.overrideContext,\r\n        owningView: composer.owningView,\r\n        container: composer.container,\r\n        viewSlot: composer.viewSlot,\r\n        viewResources: composer.viewResources,\r\n        currentController: composer.currentController,\r\n        host: composer.element,\r\n        swapOrder: composer.swapOrder\r\n    });\r\n}\r\nfunction processChanges(composer) {\r\n    var changes = composer.changes;\r\n    composer.changes = Object.create(null);\r\n    if (needsReInitialization(composer, changes)) {\r\n        var instruction = {\r\n            view: composer.view,\r\n            viewModel: composer.currentViewModel || composer.viewModel,\r\n            model: composer.model\r\n        };\r\n        instruction = Object.assign(instruction, changes);\r\n        instruction = createInstruction(composer, instruction);\r\n        composer.pendingTask = composer.compositionEngine.compose(instruction).then(function (controller) {\r\n            composer.currentController = controller;\r\n            composer.currentViewModel = controller ? controller.viewModel : null;\r\n        });\r\n    }\r\n    else {\r\n        composer.pendingTask = tryActivateViewModel(composer.currentViewModel, changes.model);\r\n        if (!composer.pendingTask) {\r\n            return;\r\n        }\r\n    }\r\n    composer.pendingTask = composer.pendingTask\r\n        .then(function () {\r\n        completeCompositionTask(composer);\r\n    }, function (reason) {\r\n        completeCompositionTask(composer);\r\n        throw reason;\r\n    });\r\n}\r\nfunction completeCompositionTask(composer) {\r\n    composer.pendingTask = null;\r\n    if (!isEmpty(composer.changes)) {\r\n        processChanges(composer);\r\n    }\r\n}\r\nfunction requestUpdate(composer) {\r\n    if (composer.pendingTask || composer.updateRequested) {\r\n        return;\r\n    }\r\n    composer.updateRequested = true;\r\n    composer.taskQueue.queueMicroTask(function () {\r\n        composer.updateRequested = false;\r\n        processChanges(composer);\r\n    });\r\n}\r\nfunction needsReInitialization(composer, changes) {\r\n    var activationStrategy = composer.activationStrategy;\r\n    var vm = composer.currentViewModel;\r\n    if (vm && typeof vm.determineActivationStrategy === 'function') {\r\n        activationStrategy = vm.determineActivationStrategy();\r\n    }\r\n    return 'view' in changes\r\n        || 'viewModel' in changes\r\n        || activationStrategy === ActivationStrategy.Replace;\r\n}\n\nvar IfCore = (function () {\r\n    function IfCore(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.view = null;\r\n        this.bindingContext = null;\r\n        this.overrideContext = null;\r\n        this.showing = false;\r\n        this.cache = true;\r\n    }\r\n    IfCore.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.bindingContext = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n    };\r\n    IfCore.prototype.unbind = function () {\r\n        if (this.view === null) {\r\n            return;\r\n        }\r\n        this.view.unbind();\r\n        if (!this.viewFactory.isCaching) {\r\n            return;\r\n        }\r\n        if (this.showing) {\r\n            this.showing = false;\r\n            this.viewSlot.remove(this.view, true, true);\r\n        }\r\n        else {\r\n            this.view.returnToCache();\r\n        }\r\n        this.view = null;\r\n    };\r\n    IfCore.prototype._show = function () {\r\n        if (this.showing) {\r\n            if (!this.view.isBound) {\r\n                this.view.bind(this.bindingContext, this.overrideContext);\r\n            }\r\n            return;\r\n        }\r\n        if (this.view === null) {\r\n            this.view = this.viewFactory.create();\r\n        }\r\n        if (!this.view.isBound) {\r\n            this.view.bind(this.bindingContext, this.overrideContext);\r\n        }\r\n        this.showing = true;\r\n        return this.viewSlot.add(this.view);\r\n    };\r\n    IfCore.prototype._hide = function () {\r\n        var _this = this;\r\n        if (!this.showing) {\r\n            return;\r\n        }\r\n        this.showing = false;\r\n        var removed = this.viewSlot.remove(this.view);\r\n        if (removed instanceof Promise) {\r\n            return removed.then(function () {\r\n                _this._unbindView();\r\n            });\r\n        }\r\n        this._unbindView();\r\n    };\r\n    IfCore.prototype._unbindView = function () {\r\n        var cache = this.cache === 'false' ? false : !!this.cache;\r\n        this.view.unbind();\r\n        if (!cache) {\r\n            this.view = null;\r\n        }\r\n    };\r\n    return IfCore;\r\n}());\n\nvar If = (function (_super) {\r\n    __extends(If, _super);\r\n    function If() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.cache = true;\r\n        return _this;\r\n    }\r\n    If.prototype.bind = function (bindingContext, overrideContext) {\r\n        _super.prototype.bind.call(this, bindingContext, overrideContext);\r\n        if (this.condition) {\r\n            this._show();\r\n        }\r\n        else {\r\n            this._hide();\r\n        }\r\n    };\r\n    If.prototype.conditionChanged = function (newValue) {\r\n        this._update(newValue);\r\n    };\r\n    If.prototype._update = function (show) {\r\n        var _this = this;\r\n        if (this.animating) {\r\n            return;\r\n        }\r\n        var promise;\r\n        if (this.elseVm) {\r\n            promise = show ? this._swap(this.elseVm, this) : this._swap(this, this.elseVm);\r\n        }\r\n        else {\r\n            promise = show ? this._show() : this._hide();\r\n        }\r\n        if (promise) {\r\n            this.animating = true;\r\n            promise.then(function () {\r\n                _this.animating = false;\r\n                if (_this.condition !== _this.showing) {\r\n                    _this._update(_this.condition);\r\n                }\r\n            });\r\n        }\r\n    };\r\n    If.prototype._swap = function (remove, add) {\r\n        switch (this.swapOrder) {\r\n            case 'before':\r\n                return Promise.resolve(add._show()).then(function () { return remove._hide(); });\r\n            case 'with':\r\n                return Promise.all([remove._hide(), add._show()]);\r\n            default:\r\n                var promise = remove._hide();\r\n                return promise ? promise.then(function () { return add._show(); }) : add._show();\r\n        }\r\n    };\r\n    __decorate([\r\n        bindable({ primaryProperty: true })\r\n    ], If.prototype, \"condition\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], If.prototype, \"swapOrder\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], If.prototype, \"cache\", void 0);\r\n    If = __decorate([\r\n        customAttribute('if'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], If);\r\n    return If;\r\n}(IfCore));\n\nvar Else = (function (_super) {\r\n    __extends(Else, _super);\r\n    function Else(viewFactory, viewSlot) {\r\n        var _this = _super.call(this, viewFactory, viewSlot) || this;\r\n        _this._registerInIf();\r\n        return _this;\r\n    }\r\n    Else.prototype.bind = function (bindingContext, overrideContext) {\r\n        _super.prototype.bind.call(this, bindingContext, overrideContext);\r\n        if (this.ifVm.condition) {\r\n            this._hide();\r\n        }\r\n        else {\r\n            this._show();\r\n        }\r\n    };\r\n    Else.prototype._registerInIf = function () {\r\n        var previous = this.viewSlot.anchor.previousSibling;\r\n        while (previous && !previous.au) {\r\n            previous = previous.previousSibling;\r\n        }\r\n        if (!previous || !previous.au.if) {\r\n            throw new Error(\"Can't find matching If for Else custom attribute.\");\r\n        }\r\n        this.ifVm = previous.au.if.viewModel;\r\n        this.ifVm.elseVm = this;\r\n    };\r\n    Else = __decorate([\r\n        customAttribute('else'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], Else);\r\n    return Else;\r\n}(IfCore));\n\nvar With = (function () {\r\n    function With(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.parentOverrideContext = null;\r\n        this.view = null;\r\n    }\r\n    With.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.parentOverrideContext = overrideContext;\r\n        this.valueChanged(this.value);\r\n    };\r\n    With.prototype.valueChanged = function (newValue) {\r\n        var overrideContext = createOverrideContext(newValue, this.parentOverrideContext);\r\n        var view = this.view;\r\n        if (!view) {\r\n            view = this.view = this.viewFactory.create();\r\n            view.bind(newValue, overrideContext);\r\n            this.viewSlot.add(view);\r\n        }\r\n        else {\r\n            view.bind(newValue, overrideContext);\r\n        }\r\n    };\r\n    With.prototype.unbind = function () {\r\n        var view = this.view;\r\n        this.parentOverrideContext = null;\r\n        if (view) {\r\n            view.unbind();\r\n        }\r\n    };\r\n    With = __decorate([\r\n        customAttribute('with'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], With);\r\n    return With;\r\n}());\n\nvar oneTime = bindingMode.oneTime;\r\nfunction updateOverrideContexts(views, startIndex) {\r\n    var length = views.length;\r\n    if (startIndex > 0) {\r\n        startIndex = startIndex - 1;\r\n    }\r\n    for (; startIndex < length; ++startIndex) {\r\n        updateOverrideContext(views[startIndex].overrideContext, startIndex, length);\r\n    }\r\n}\r\nfunction createFullOverrideContext(repeat, data, index, length, key) {\r\n    var bindingContext = {};\r\n    var overrideContext = createOverrideContext(bindingContext, repeat.scope.overrideContext);\r\n    if (typeof key !== 'undefined') {\r\n        bindingContext[repeat.key] = key;\r\n        bindingContext[repeat.value] = data;\r\n    }\r\n    else {\r\n        bindingContext[repeat.local] = data;\r\n    }\r\n    updateOverrideContext(overrideContext, index, length);\r\n    return overrideContext;\r\n}\r\nfunction updateOverrideContext(overrideContext, index, length) {\r\n    var first = (index === 0);\r\n    var last = (index === length - 1);\r\n    var even = index % 2 === 0;\r\n    overrideContext.$index = index;\r\n    overrideContext.$first = first;\r\n    overrideContext.$last = last;\r\n    overrideContext.$middle = !(first || last);\r\n    overrideContext.$odd = !even;\r\n    overrideContext.$even = even;\r\n}\r\nfunction getItemsSourceExpression(instruction, attrName) {\r\n    return instruction.behaviorInstructions\r\n        .filter(function (bi) { return bi.originalAttrName === attrName; })[0]\r\n        .attributes\r\n        .items\r\n        .sourceExpression;\r\n}\r\nfunction unwrapExpression(expression) {\r\n    var unwrapped = false;\r\n    while (expression instanceof BindingBehavior) {\r\n        expression = expression.expression;\r\n    }\r\n    while (expression instanceof ValueConverter) {\r\n        expression = expression.expression;\r\n        unwrapped = true;\r\n    }\r\n    return unwrapped ? expression : null;\r\n}\r\nfunction isOneTime(expression) {\r\n    while (expression instanceof BindingBehavior) {\r\n        if (expression.name === 'oneTime') {\r\n            return true;\r\n        }\r\n        expression = expression.expression;\r\n    }\r\n    return false;\r\n}\r\nfunction updateOneTimeBinding(binding) {\r\n    if (binding.call && binding.mode === oneTime) {\r\n        binding.call(sourceContext);\r\n    }\r\n    else if (binding.updateOneTimeBindings) {\r\n        binding.updateOneTimeBindings();\r\n    }\r\n}\r\nfunction indexOf(array, item, matcher, startIndex) {\r\n    if (!matcher) {\r\n        return array.indexOf(item);\r\n    }\r\n    var length = array.length;\r\n    for (var index = startIndex || 0; index < length; index++) {\r\n        if (matcher(array[index], item)) {\r\n            return index;\r\n        }\r\n    }\r\n    return -1;\r\n}\n\nvar ArrayRepeatStrategy = (function () {\r\n    function ArrayRepeatStrategy() {\r\n    }\r\n    ArrayRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getArrayObserver(items);\r\n    };\r\n    ArrayRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var $repeat = repeat;\r\n        var itemsLength = items.length;\r\n        if (!items || itemsLength === 0) {\r\n            $repeat.removeAllViews(true, !$repeat.viewsRequireLifecycle);\r\n            return;\r\n        }\r\n        var children = $repeat.views();\r\n        var viewsLength = children.length;\r\n        if (viewsLength === 0) {\r\n            this._standardProcessInstanceChanged($repeat, items);\r\n            return;\r\n        }\r\n        if ($repeat.viewsRequireLifecycle) {\r\n            var childrenSnapshot = children.slice(0);\r\n            var itemNameInBindingContext = $repeat.local;\r\n            var matcher_1 = $repeat.matcher();\r\n            var itemsPreviouslyInViews_1 = [];\r\n            var viewsToRemove = [];\r\n            for (var index = 0; index < viewsLength; index++) {\r\n                var view = childrenSnapshot[index];\r\n                var oldItem = view.bindingContext[itemNameInBindingContext];\r\n                if (indexOf(items, oldItem, matcher_1) === -1) {\r\n                    viewsToRemove.push(view);\r\n                }\r\n                else {\r\n                    itemsPreviouslyInViews_1.push(oldItem);\r\n                }\r\n            }\r\n            var updateViews = void 0;\r\n            var removePromise = void 0;\r\n            if (itemsPreviouslyInViews_1.length > 0) {\r\n                removePromise = $repeat.removeViews(viewsToRemove, true, !$repeat.viewsRequireLifecycle);\r\n                updateViews = function () {\r\n                    for (var index = 0; index < itemsLength; index++) {\r\n                        var item = items[index];\r\n                        var indexOfView = indexOf(itemsPreviouslyInViews_1, item, matcher_1, index);\r\n                        var view = void 0;\r\n                        if (indexOfView === -1) {\r\n                            var overrideContext = createFullOverrideContext($repeat, items[index], index, itemsLength);\r\n                            $repeat.insertView(index, overrideContext.bindingContext, overrideContext);\r\n                            itemsPreviouslyInViews_1.splice(index, 0, undefined);\r\n                        }\r\n                        else if (indexOfView === index) {\r\n                            view = children[indexOfView];\r\n                            itemsPreviouslyInViews_1[indexOfView] = undefined;\r\n                        }\r\n                        else {\r\n                            view = children[indexOfView];\r\n                            $repeat.moveView(indexOfView, index);\r\n                            itemsPreviouslyInViews_1.splice(indexOfView, 1);\r\n                            itemsPreviouslyInViews_1.splice(index, 0, undefined);\r\n                        }\r\n                        if (view) {\r\n                            updateOverrideContext(view.overrideContext, index, itemsLength);\r\n                        }\r\n                    }\r\n                    _this._inPlaceProcessItems($repeat, items);\r\n                };\r\n            }\r\n            else {\r\n                removePromise = $repeat.removeAllViews(true, !$repeat.viewsRequireLifecycle);\r\n                updateViews = function () { return _this._standardProcessInstanceChanged($repeat, items); };\r\n            }\r\n            if (removePromise instanceof Promise) {\r\n                removePromise.then(updateViews);\r\n            }\r\n            else {\r\n                updateViews();\r\n            }\r\n        }\r\n        else {\r\n            this._inPlaceProcessItems($repeat, items);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._standardProcessInstanceChanged = function (repeat, items) {\r\n        for (var i = 0, ii = items.length; i < ii; i++) {\r\n            var overrideContext = createFullOverrideContext(repeat, items[i], i, ii);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._inPlaceProcessItems = function (repeat, items) {\r\n        var itemsLength = items.length;\r\n        var viewsLength = repeat.viewCount();\r\n        while (viewsLength > itemsLength) {\r\n            viewsLength--;\r\n            repeat.removeView(viewsLength, true, !repeat.viewsRequireLifecycle);\r\n        }\r\n        var local = repeat.local;\r\n        for (var i = 0; i < viewsLength; i++) {\r\n            var view = repeat.view(i);\r\n            var last = i === itemsLength - 1;\r\n            var middle = i !== 0 && !last;\r\n            var bindingContext = view.bindingContext;\r\n            var overrideContext = view.overrideContext;\r\n            if (bindingContext[local] === items[i]\r\n                && overrideContext.$middle === middle\r\n                && overrideContext.$last === last) {\r\n                continue;\r\n            }\r\n            bindingContext[local] = items[i];\r\n            overrideContext.$middle = middle;\r\n            overrideContext.$last = last;\r\n            repeat.updateBindings(view);\r\n        }\r\n        for (var i = viewsLength; i < itemsLength; i++) {\r\n            var overrideContext = createFullOverrideContext(repeat, items[i], i, itemsLength);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype.instanceMutated = function (repeat, array, splices) {\r\n        var _this = this;\r\n        if (repeat.__queuedSplices) {\r\n            for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n                var _a = splices[i], index = _a.index, removed = _a.removed, addedCount = _a.addedCount;\r\n                mergeSplice(repeat.__queuedSplices, index, removed, addedCount);\r\n            }\r\n            repeat.__array = array.slice(0);\r\n            return;\r\n        }\r\n        var maybePromise = this._runSplices(repeat, array.slice(0), splices);\r\n        if (maybePromise instanceof Promise) {\r\n            var queuedSplices_1 = repeat.__queuedSplices = [];\r\n            var runQueuedSplices_1 = function () {\r\n                if (!queuedSplices_1.length) {\r\n                    repeat.__queuedSplices = undefined;\r\n                    repeat.__array = undefined;\r\n                    return;\r\n                }\r\n                var nextPromise = _this._runSplices(repeat, repeat.__array, queuedSplices_1) || Promise.resolve();\r\n                queuedSplices_1 = repeat.__queuedSplices = [];\r\n                nextPromise.then(runQueuedSplices_1);\r\n            };\r\n            maybePromise.then(runQueuedSplices_1);\r\n        }\r\n    };\r\n    ArrayRepeatStrategy.prototype._runSplices = function (repeat, array, splices) {\r\n        var _this = this;\r\n        var removeDelta = 0;\r\n        var rmPromises = [];\r\n        for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n            var splice = splices[i];\r\n            var removed = splice.removed;\r\n            for (var j = 0, jj = removed.length; j < jj; ++j) {\r\n                var viewOrPromise = repeat.removeView(splice.index + removeDelta + rmPromises.length, true);\r\n                if (viewOrPromise instanceof Promise) {\r\n                    rmPromises.push(viewOrPromise);\r\n                }\r\n            }\r\n            removeDelta -= splice.addedCount;\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            return Promise.all(rmPromises).then(function () {\r\n                var spliceIndexLow = _this._handleAddedSplices(repeat, array, splices);\r\n                updateOverrideContexts(repeat.views(), spliceIndexLow);\r\n            });\r\n        }\r\n        var spliceIndexLow = this._handleAddedSplices(repeat, array, splices);\r\n        updateOverrideContexts(repeat.views(), spliceIndexLow);\r\n        return undefined;\r\n    };\r\n    ArrayRepeatStrategy.prototype._handleAddedSplices = function (repeat, array, splices) {\r\n        var spliceIndex;\r\n        var spliceIndexLow;\r\n        var arrayLength = array.length;\r\n        for (var i = 0, ii = splices.length; i < ii; ++i) {\r\n            var splice = splices[i];\r\n            var addIndex = spliceIndex = splice.index;\r\n            var end = splice.index + splice.addedCount;\r\n            if (typeof spliceIndexLow === 'undefined' || spliceIndexLow === null || spliceIndexLow > splice.index) {\r\n                spliceIndexLow = spliceIndex;\r\n            }\r\n            for (; addIndex < end; ++addIndex) {\r\n                var overrideContext = createFullOverrideContext(repeat, array[addIndex], addIndex, arrayLength);\r\n                repeat.insertView(addIndex, overrideContext.bindingContext, overrideContext);\r\n            }\r\n        }\r\n        return spliceIndexLow;\r\n    };\r\n    return ArrayRepeatStrategy;\r\n}());\n\nvar MapRepeatStrategy = (function () {\r\n    function MapRepeatStrategy() {\r\n    }\r\n    MapRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getMapObserver(items);\r\n    };\r\n    MapRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, items); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, items);\r\n    };\r\n    MapRepeatStrategy.prototype._standardProcessItems = function (repeat, items) {\r\n        var index = 0;\r\n        var overrideContext;\r\n        items.forEach(function (value, key) {\r\n            overrideContext = createFullOverrideContext(repeat, value, index, items.size, key);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n            ++index;\r\n        });\r\n    };\r\n    MapRepeatStrategy.prototype.instanceMutated = function (repeat, map, records) {\r\n        var key;\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var removeIndex;\r\n        var addIndex;\r\n        var record;\r\n        var rmPromises = [];\r\n        var viewOrPromise;\r\n        for (i = 0, ii = records.length; i < ii; ++i) {\r\n            record = records[i];\r\n            key = record.key;\r\n            switch (record.type) {\r\n                case 'update':\r\n                    removeIndex = this._getViewIndexByKey(repeat, key);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    overrideContext = createFullOverrideContext(repeat, map.get(key), removeIndex, map.size, key);\r\n                    repeat.insertView(removeIndex, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case 'add':\r\n                    addIndex = repeat.viewCount() <= map.size - 1 ? repeat.viewCount() : map.size - 1;\r\n                    overrideContext = createFullOverrideContext(repeat, map.get(key), addIndex, map.size, key);\r\n                    repeat.insertView(map.size - 1, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case 'delete':\r\n                    if (record.oldValue === undefined) {\r\n                        return;\r\n                    }\r\n                    removeIndex = this._getViewIndexByKey(repeat, key);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    break;\r\n                case 'clear':\r\n                    repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n                    break;\r\n                default:\r\n                    continue;\r\n            }\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            Promise.all(rmPromises).then(function () {\r\n                updateOverrideContexts(repeat.views(), 0);\r\n            });\r\n        }\r\n        else {\r\n            updateOverrideContexts(repeat.views(), 0);\r\n        }\r\n    };\r\n    MapRepeatStrategy.prototype._getViewIndexByKey = function (repeat, key) {\r\n        var i;\r\n        var ii;\r\n        var child;\r\n        for (i = 0, ii = repeat.viewCount(); i < ii; ++i) {\r\n            child = repeat.view(i);\r\n            if (child.bindingContext[repeat.key] === key) {\r\n                return i;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return MapRepeatStrategy;\r\n}());\n\nvar NullRepeatStrategy = (function () {\r\n    function NullRepeatStrategy() {\r\n    }\r\n    NullRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        repeat.removeAllViews(true);\r\n    };\r\n    NullRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n    };\r\n    return NullRepeatStrategy;\r\n}());\n\nvar NumberRepeatStrategy = (function () {\r\n    function NumberRepeatStrategy() {\r\n    }\r\n    NumberRepeatStrategy.prototype.getCollectionObserver = function () {\r\n        return null;\r\n    };\r\n    NumberRepeatStrategy.prototype.instanceChanged = function (repeat, value) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, value); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, value);\r\n    };\r\n    NumberRepeatStrategy.prototype._standardProcessItems = function (repeat, value) {\r\n        var childrenLength = repeat.viewCount();\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var viewsToRemove;\r\n        value = Math.floor(value);\r\n        viewsToRemove = childrenLength - value;\r\n        if (viewsToRemove > 0) {\r\n            if (viewsToRemove > childrenLength) {\r\n                viewsToRemove = childrenLength;\r\n            }\r\n            for (i = 0, ii = viewsToRemove; i < ii; ++i) {\r\n                repeat.removeView(childrenLength - (i + 1), true, !repeat.viewsRequireLifecycle);\r\n            }\r\n            return;\r\n        }\r\n        for (i = childrenLength, ii = value; i < ii; ++i) {\r\n            overrideContext = createFullOverrideContext(repeat, i, i, ii);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n        }\r\n        updateOverrideContexts(repeat.views(), 0);\r\n    };\r\n    return NumberRepeatStrategy;\r\n}());\n\nvar SetRepeatStrategy = (function () {\r\n    function SetRepeatStrategy() {\r\n    }\r\n    SetRepeatStrategy.prototype.getCollectionObserver = function (observerLocator, items) {\r\n        return observerLocator.getSetObserver(items);\r\n    };\r\n    SetRepeatStrategy.prototype.instanceChanged = function (repeat, items) {\r\n        var _this = this;\r\n        var removePromise = repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n        if (removePromise instanceof Promise) {\r\n            removePromise.then(function () { return _this._standardProcessItems(repeat, items); });\r\n            return;\r\n        }\r\n        this._standardProcessItems(repeat, items);\r\n    };\r\n    SetRepeatStrategy.prototype._standardProcessItems = function (repeat, items) {\r\n        var index = 0;\r\n        var overrideContext;\r\n        items.forEach(function (value) {\r\n            overrideContext = createFullOverrideContext(repeat, value, index, items.size);\r\n            repeat.addView(overrideContext.bindingContext, overrideContext);\r\n            ++index;\r\n        });\r\n    };\r\n    SetRepeatStrategy.prototype.instanceMutated = function (repeat, set, records) {\r\n        var value;\r\n        var i;\r\n        var ii;\r\n        var overrideContext;\r\n        var removeIndex;\r\n        var record;\r\n        var rmPromises = [];\r\n        var viewOrPromise;\r\n        for (i = 0, ii = records.length; i < ii; ++i) {\r\n            record = records[i];\r\n            value = record.value;\r\n            switch (record.type) {\r\n                case 'add':\r\n                    var size = Math.max(set.size - 1, 0);\r\n                    overrideContext = createFullOverrideContext(repeat, value, size, set.size);\r\n                    repeat.insertView(size, overrideContext.bindingContext, overrideContext);\r\n                    break;\r\n                case 'delete':\r\n                    removeIndex = this._getViewIndexByValue(repeat, value);\r\n                    viewOrPromise = repeat.removeView(removeIndex, true, !repeat.viewsRequireLifecycle);\r\n                    if (viewOrPromise instanceof Promise) {\r\n                        rmPromises.push(viewOrPromise);\r\n                    }\r\n                    break;\r\n                case 'clear':\r\n                    repeat.removeAllViews(true, !repeat.viewsRequireLifecycle);\r\n                    break;\r\n                default:\r\n                    continue;\r\n            }\r\n        }\r\n        if (rmPromises.length > 0) {\r\n            Promise.all(rmPromises).then(function () {\r\n                updateOverrideContexts(repeat.views(), 0);\r\n            });\r\n        }\r\n        else {\r\n            updateOverrideContexts(repeat.views(), 0);\r\n        }\r\n    };\r\n    SetRepeatStrategy.prototype._getViewIndexByValue = function (repeat, value) {\r\n        var i;\r\n        var ii;\r\n        var child;\r\n        for (i = 0, ii = repeat.viewCount(); i < ii; ++i) {\r\n            child = repeat.view(i);\r\n            if (child.bindingContext[repeat.local] === value) {\r\n                return i;\r\n            }\r\n        }\r\n        return undefined;\r\n    };\r\n    return SetRepeatStrategy;\r\n}());\n\nvar RepeatStrategyLocator = (function () {\r\n    function RepeatStrategyLocator() {\r\n        this.matchers = [];\r\n        this.strategies = [];\r\n        this.addStrategy(function (items) { return items === null || items === undefined; }, new NullRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Array; }, new ArrayRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Map; }, new MapRepeatStrategy());\r\n        this.addStrategy(function (items) { return items instanceof Set; }, new SetRepeatStrategy());\r\n        this.addStrategy(function (items) { return typeof items === 'number'; }, new NumberRepeatStrategy());\r\n    }\r\n    RepeatStrategyLocator.prototype.addStrategy = function (matcher, strategy) {\r\n        this.matchers.push(matcher);\r\n        this.strategies.push(strategy);\r\n    };\r\n    RepeatStrategyLocator.prototype.getStrategy = function (items) {\r\n        var matchers = this.matchers;\r\n        for (var i = 0, ii = matchers.length; i < ii; ++i) {\r\n            if (matchers[i](items)) {\r\n                return this.strategies[i];\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    return RepeatStrategyLocator;\r\n}());\n\nvar lifecycleOptionalBehaviors = ['focus', 'if', 'else', 'repeat', 'show', 'hide', 'with'];\r\nfunction behaviorRequiresLifecycle(instruction) {\r\n    var t = instruction.type;\r\n    var name = t.elementName !== null ? t.elementName : t.attributeName;\r\n    return lifecycleOptionalBehaviors.indexOf(name) === -1 && (t.handlesAttached || t.handlesBind || t.handlesCreated || t.handlesDetached || t.handlesUnbind)\r\n        || t.viewFactory && viewsRequireLifecycle(t.viewFactory)\r\n        || instruction.viewFactory && viewsRequireLifecycle(instruction.viewFactory);\r\n}\r\nfunction targetRequiresLifecycle(instruction) {\r\n    var behaviors = instruction.behaviorInstructions;\r\n    if (behaviors) {\r\n        var i = behaviors.length;\r\n        while (i--) {\r\n            if (behaviorRequiresLifecycle(behaviors[i])) {\r\n                return true;\r\n            }\r\n        }\r\n    }\r\n    return instruction.viewFactory && viewsRequireLifecycle(instruction.viewFactory);\r\n}\r\nfunction viewsRequireLifecycle(viewFactory) {\r\n    if ('_viewsRequireLifecycle' in viewFactory) {\r\n        return viewFactory._viewsRequireLifecycle;\r\n    }\r\n    viewFactory._viewsRequireLifecycle = false;\r\n    if (viewFactory.viewFactory) {\r\n        viewFactory._viewsRequireLifecycle = viewsRequireLifecycle(viewFactory.viewFactory);\r\n        return viewFactory._viewsRequireLifecycle;\r\n    }\r\n    if (viewFactory.template.querySelector('.au-animate')) {\r\n        viewFactory._viewsRequireLifecycle = true;\r\n        return true;\r\n    }\r\n    for (var id in viewFactory.instructions) {\r\n        if (targetRequiresLifecycle(viewFactory.instructions[id])) {\r\n            viewFactory._viewsRequireLifecycle = true;\r\n            return true;\r\n        }\r\n    }\r\n    viewFactory._viewsRequireLifecycle = false;\r\n    return false;\r\n}\n\nvar AbstractRepeater = (function () {\r\n    function AbstractRepeater(options) {\r\n        Object.assign(this, {\r\n            local: 'items',\r\n            viewsRequireLifecycle: true\r\n        }, options);\r\n    }\r\n    AbstractRepeater.prototype.viewCount = function () {\r\n        throw new Error('subclass must implement `viewCount`');\r\n    };\r\n    AbstractRepeater.prototype.views = function () {\r\n        throw new Error('subclass must implement `views`');\r\n    };\r\n    AbstractRepeater.prototype.view = function (index) {\r\n        throw new Error('subclass must implement `view`');\r\n    };\r\n    AbstractRepeater.prototype.matcher = function () {\r\n        throw new Error('subclass must implement `matcher`');\r\n    };\r\n    AbstractRepeater.prototype.addView = function (bindingContext, overrideContext) {\r\n        throw new Error('subclass must implement `addView`');\r\n    };\r\n    AbstractRepeater.prototype.insertView = function (index, bindingContext, overrideContext) {\r\n        throw new Error('subclass must implement `insertView`');\r\n    };\r\n    AbstractRepeater.prototype.moveView = function (sourceIndex, targetIndex) {\r\n        throw new Error('subclass must implement `moveView`');\r\n    };\r\n    AbstractRepeater.prototype.removeAllViews = function (returnToCache, skipAnimation) {\r\n        throw new Error('subclass must implement `removeAllViews`');\r\n    };\r\n    AbstractRepeater.prototype.removeViews = function (viewsToRemove, returnToCache, skipAnimation) {\r\n        throw new Error('subclass must implement `removeView`');\r\n    };\r\n    AbstractRepeater.prototype.removeView = function (index, returnToCache, skipAnimation) {\r\n        throw new Error('subclass must implement `removeView`');\r\n    };\r\n    AbstractRepeater.prototype.updateBindings = function (view) {\r\n        throw new Error('subclass must implement `updateBindings`');\r\n    };\r\n    return AbstractRepeater;\r\n}());\n\nvar Repeat = (function (_super) {\r\n    __extends(Repeat, _super);\r\n    function Repeat(viewFactory, instruction, viewSlot, viewResources, observerLocator, strategyLocator) {\r\n        var _this = _super.call(this, {\r\n            local: 'item',\r\n            viewsRequireLifecycle: viewsRequireLifecycle(viewFactory)\r\n        }) || this;\r\n        _this.viewFactory = viewFactory;\r\n        _this.instruction = instruction;\r\n        _this.viewSlot = viewSlot;\r\n        _this.lookupFunctions = viewResources.lookupFunctions;\r\n        _this.observerLocator = observerLocator;\r\n        _this.key = 'key';\r\n        _this.value = 'value';\r\n        _this.strategyLocator = strategyLocator;\r\n        _this.ignoreMutation = false;\r\n        _this.sourceExpression = getItemsSourceExpression(_this.instruction, 'repeat.for');\r\n        _this.isOneTime = isOneTime(_this.sourceExpression);\r\n        _this.viewsRequireLifecycle = viewsRequireLifecycle(viewFactory);\r\n        return _this;\r\n    }\r\n    Repeat_1 = Repeat;\r\n    Repeat.prototype.call = function (context, changes) {\r\n        this[context](this.items, changes);\r\n    };\r\n    Repeat.prototype.bind = function (bindingContext, overrideContext) {\r\n        this.scope = { bindingContext: bindingContext, overrideContext: overrideContext };\r\n        this.matcherBinding = this._captureAndRemoveMatcherBinding();\r\n        this.itemsChanged();\r\n    };\r\n    Repeat.prototype.unbind = function () {\r\n        this.scope = null;\r\n        this.items = null;\r\n        this.matcherBinding = null;\r\n        this.viewSlot.removeAll(true, true);\r\n        this._unsubscribeCollection();\r\n    };\r\n    Repeat.prototype._unsubscribeCollection = function () {\r\n        if (this.collectionObserver) {\r\n            this.collectionObserver.unsubscribe(this.callContext, this);\r\n            this.collectionObserver = null;\r\n            this.callContext = null;\r\n        }\r\n    };\r\n    Repeat.prototype.itemsChanged = function () {\r\n        var _this = this;\r\n        this._unsubscribeCollection();\r\n        if (!this.scope) {\r\n            return;\r\n        }\r\n        var items = this.items;\r\n        this.strategy = this.strategyLocator.getStrategy(items);\r\n        if (!this.strategy) {\r\n            throw new Error(\"Value for '\" + this.sourceExpression + \"' is non-repeatable\");\r\n        }\r\n        if (!this.isOneTime && !this._observeInnerCollection()) {\r\n            this._observeCollection();\r\n        }\r\n        this.ignoreMutation = true;\r\n        this.strategy.instanceChanged(this, items);\r\n        this.observerLocator.taskQueue.queueMicroTask(function () {\r\n            _this.ignoreMutation = false;\r\n        });\r\n    };\r\n    Repeat.prototype._getInnerCollection = function () {\r\n        var expression = unwrapExpression(this.sourceExpression);\r\n        if (!expression) {\r\n            return null;\r\n        }\r\n        return expression.evaluate(this.scope, null);\r\n    };\r\n    Repeat.prototype.handleCollectionMutated = function (collection, changes) {\r\n        if (!this.collectionObserver) {\r\n            return;\r\n        }\r\n        if (this.ignoreMutation) {\r\n            return;\r\n        }\r\n        this.strategy.instanceMutated(this, collection, changes);\r\n    };\r\n    Repeat.prototype.handleInnerCollectionMutated = function (collection, changes) {\r\n        var _this = this;\r\n        if (!this.collectionObserver) {\r\n            return;\r\n        }\r\n        if (this.ignoreMutation) {\r\n            return;\r\n        }\r\n        this.ignoreMutation = true;\r\n        var newItems = this.sourceExpression.evaluate(this.scope, this.lookupFunctions);\r\n        this.observerLocator.taskQueue.queueMicroTask(function () { return _this.ignoreMutation = false; });\r\n        if (newItems === this.items) {\r\n            this.itemsChanged();\r\n        }\r\n        else {\r\n            this.items = newItems;\r\n        }\r\n    };\r\n    Repeat.prototype._observeInnerCollection = function () {\r\n        var items = this._getInnerCollection();\r\n        var strategy = this.strategyLocator.getStrategy(items);\r\n        if (!strategy) {\r\n            return false;\r\n        }\r\n        this.collectionObserver = strategy.getCollectionObserver(this.observerLocator, items);\r\n        if (!this.collectionObserver) {\r\n            return false;\r\n        }\r\n        this.callContext = 'handleInnerCollectionMutated';\r\n        this.collectionObserver.subscribe(this.callContext, this);\r\n        return true;\r\n    };\r\n    Repeat.prototype._observeCollection = function () {\r\n        var items = this.items;\r\n        this.collectionObserver = this.strategy.getCollectionObserver(this.observerLocator, items);\r\n        if (this.collectionObserver) {\r\n            this.callContext = 'handleCollectionMutated';\r\n            this.collectionObserver.subscribe(this.callContext, this);\r\n        }\r\n    };\r\n    Repeat.prototype._captureAndRemoveMatcherBinding = function () {\r\n        var viewFactory = this.viewFactory.viewFactory;\r\n        if (viewFactory) {\r\n            var template = viewFactory.template;\r\n            var instructions = viewFactory.instructions;\r\n            if (Repeat_1.useInnerMatcher) {\r\n                return extractMatcherBindingExpression(instructions);\r\n            }\r\n            if (template.children.length > 1) {\r\n                return undefined;\r\n            }\r\n            var repeatedElement = template.firstElementChild;\r\n            if (!repeatedElement.hasAttribute('au-target-id')) {\r\n                return undefined;\r\n            }\r\n            var repeatedElementTargetId = repeatedElement.getAttribute('au-target-id');\r\n            return extractMatcherBindingExpression(instructions, repeatedElementTargetId);\r\n        }\r\n        return undefined;\r\n    };\r\n    Repeat.prototype.viewCount = function () { return this.viewSlot.children.length; };\r\n    Repeat.prototype.views = function () { return this.viewSlot.children; };\r\n    Repeat.prototype.view = function (index) { return this.viewSlot.children[index]; };\r\n    Repeat.prototype.matcher = function () {\r\n        var matcherBinding = this.matcherBinding;\r\n        return matcherBinding\r\n            ? matcherBinding.sourceExpression.evaluate(this.scope, matcherBinding.lookupFunctions)\r\n            : null;\r\n    };\r\n    Repeat.prototype.addView = function (bindingContext, overrideContext) {\r\n        var view = this.viewFactory.create();\r\n        view.bind(bindingContext, overrideContext);\r\n        this.viewSlot.add(view);\r\n    };\r\n    Repeat.prototype.insertView = function (index, bindingContext, overrideContext) {\r\n        var view = this.viewFactory.create();\r\n        view.bind(bindingContext, overrideContext);\r\n        this.viewSlot.insert(index, view);\r\n    };\r\n    Repeat.prototype.moveView = function (sourceIndex, targetIndex) {\r\n        this.viewSlot.move(sourceIndex, targetIndex);\r\n    };\r\n    Repeat.prototype.removeAllViews = function (returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeAll(returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.removeViews = function (viewsToRemove, returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeMany(viewsToRemove, returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.removeView = function (index, returnToCache, skipAnimation) {\r\n        return this.viewSlot.removeAt(index, returnToCache, skipAnimation);\r\n    };\r\n    Repeat.prototype.updateBindings = function (view) {\r\n        var $view = view;\r\n        var j = $view.bindings.length;\r\n        while (j--) {\r\n            updateOneTimeBinding($view.bindings[j]);\r\n        }\r\n        j = $view.controllers.length;\r\n        while (j--) {\r\n            var k = $view.controllers[j].boundProperties.length;\r\n            while (k--) {\r\n                var binding = $view.controllers[j].boundProperties[k].binding;\r\n                updateOneTimeBinding(binding);\r\n            }\r\n        }\r\n    };\r\n    var Repeat_1;\r\n    Repeat.useInnerMatcher = true;\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"items\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"local\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"key\", void 0);\r\n    __decorate([\r\n        bindable\r\n    ], Repeat.prototype, \"value\", void 0);\r\n    Repeat = Repeat_1 = __decorate([\r\n        customAttribute('repeat'),\r\n        templateController,\r\n        inject(BoundViewFactory, TargetInstruction, ViewSlot, ViewResources, ObserverLocator, RepeatStrategyLocator)\r\n    ], Repeat);\r\n    return Repeat;\r\n}(AbstractRepeater));\r\nvar extractMatcherBindingExpression = function (instructions, targetedElementId) {\r\n    var instructionIds = Object.keys(instructions);\r\n    for (var i = 0; i < instructionIds.length; i++) {\r\n        var instructionId = instructionIds[i];\r\n        if (targetedElementId !== undefined && instructionId !== targetedElementId) {\r\n            continue;\r\n        }\r\n        var expressions = instructions[instructionId].expressions;\r\n        if (expressions) {\r\n            for (var ii = 0; ii < expressions.length; ii++) {\r\n                if (expressions[ii].targetProperty === 'matcher') {\r\n                    var matcherBindingExpression = expressions[ii];\r\n                    expressions.splice(ii, 1);\r\n                    return matcherBindingExpression;\r\n                }\r\n            }\r\n        }\r\n    }\r\n};\n\nvar aureliaHideClassName = 'aurelia-hide';\r\nvar aureliaHideClass = \".\" + aureliaHideClassName + \" { display:none !important; }\";\r\nfunction injectAureliaHideStyleAtHead() {\r\n    DOM.injectStyles(aureliaHideClass);\r\n}\r\nfunction injectAureliaHideStyleAtBoundary(domBoundary) {\r\n    if (FEATURE.shadowDOM && domBoundary && !domBoundary.hasAureliaHideStyle) {\r\n        domBoundary.hasAureliaHideStyle = true;\r\n        DOM.injectStyles(aureliaHideClass, domBoundary);\r\n    }\r\n}\n\nvar Show = (function () {\r\n    function Show(element, animator, domBoundary) {\r\n        this.element = element;\r\n        this.animator = animator;\r\n        this.domBoundary = domBoundary;\r\n    }\r\n    Show.inject = function () {\r\n        return [DOM.Element, Animator, Optional.of(DOM.boundary, true)];\r\n    };\r\n    Show.prototype.created = function () {\r\n        injectAureliaHideStyleAtBoundary(this.domBoundary);\r\n    };\r\n    Show.prototype.valueChanged = function (newValue) {\r\n        var element = this.element;\r\n        var animator = this.animator;\r\n        if (newValue) {\r\n            animator.removeClass(element, aureliaHideClassName);\r\n        }\r\n        else {\r\n            animator.addClass(element, aureliaHideClassName);\r\n        }\r\n    };\r\n    Show.prototype.bind = function (bindingContext) {\r\n        this.valueChanged(this.value);\r\n    };\r\n    Show = __decorate([\r\n        customAttribute('show')\r\n    ], Show);\r\n    return Show;\r\n}());\n\nvar Hide = (function () {\r\n    function Hide(element, animator, domBoundary) {\r\n        this.element = element;\r\n        this.animator = animator;\r\n        this.domBoundary = domBoundary;\r\n    }\r\n    Hide.inject = function () {\r\n        return [DOM.Element, Animator, Optional.of(DOM.boundary, true)];\r\n    };\r\n    Hide.prototype.created = function () {\r\n        injectAureliaHideStyleAtBoundary(this.domBoundary);\r\n    };\r\n    Hide.prototype.valueChanged = function (newValue) {\r\n        if (newValue) {\r\n            this.animator.addClass(this.element, aureliaHideClassName);\r\n        }\r\n        else {\r\n            this.animator.removeClass(this.element, aureliaHideClassName);\r\n        }\r\n    };\r\n    Hide.prototype.bind = function (bindingContext) {\r\n        this.valueChanged(this.value);\r\n    };\r\n    Hide.prototype.value = function (value) {\r\n        throw new Error('Method not implemented.');\r\n    };\r\n    Hide = __decorate([\r\n        customAttribute('hide')\r\n    ], Hide);\r\n    return Hide;\r\n}());\n\nvar SCRIPT_REGEX = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi;\r\nvar needsToWarn = true;\r\nvar HTMLSanitizer = (function () {\r\n    function HTMLSanitizer() {\r\n    }\r\n    HTMLSanitizer.prototype.sanitize = function (input) {\r\n        if (needsToWarn) {\r\n            needsToWarn = false;\r\n            getLogger('html-sanitizer')\r\n                .warn(\"CAUTION: The default HTMLSanitizer does NOT provide security against a wide variety of sophisticated XSS attacks,\\nand should not be relied on for sanitizing input from unknown sources.\\nPlease see https://aurelia.io/docs/binding/basics#element-content for instructions on how to use a secure solution like DOMPurify or sanitize-html.\");\r\n        }\r\n        return input.replace(SCRIPT_REGEX, '');\r\n    };\r\n    return HTMLSanitizer;\r\n}());\n\nvar SanitizeHTMLValueConverter = (function () {\r\n    function SanitizeHTMLValueConverter(sanitizer) {\r\n        this.sanitizer = sanitizer;\r\n    }\r\n    SanitizeHTMLValueConverter.prototype.toView = function (untrustedMarkup) {\r\n        if (untrustedMarkup === null || untrustedMarkup === undefined) {\r\n            return null;\r\n        }\r\n        return this.sanitizer.sanitize(untrustedMarkup);\r\n    };\r\n    SanitizeHTMLValueConverter = __decorate([\r\n        valueConverter('sanitizeHTML'),\r\n        inject(HTMLSanitizer)\r\n    ], SanitizeHTMLValueConverter);\r\n    return SanitizeHTMLValueConverter;\r\n}());\n\nvar Replaceable = (function () {\r\n    function Replaceable(viewFactory, viewSlot) {\r\n        this.viewFactory = viewFactory;\r\n        this.viewSlot = viewSlot;\r\n        this.view = null;\r\n    }\r\n    Replaceable.prototype.bind = function (bindingContext, overrideContext) {\r\n        if (this.view === null) {\r\n            this.view = this.viewFactory.create();\r\n            this.viewSlot.add(this.view);\r\n        }\r\n        this.view.bind(bindingContext, overrideContext);\r\n    };\r\n    Replaceable.prototype.unbind = function () {\r\n        this.view.unbind();\r\n    };\r\n    Replaceable = __decorate([\r\n        customAttribute('replaceable'),\r\n        templateController,\r\n        inject(BoundViewFactory, ViewSlot)\r\n    ], Replaceable);\r\n    return Replaceable;\r\n}());\n\nvar Focus = (function () {\r\n    function Focus(element, taskQueue) {\r\n        this.element = element;\r\n        this.taskQueue = taskQueue;\r\n        this.isAttached = false;\r\n        this.needsApply = false;\r\n    }\r\n    Focus.inject = function () {\r\n        return [DOM.Element, TaskQueue];\r\n    };\r\n    Focus.prototype.valueChanged = function (newValue) {\r\n        if (this.isAttached) {\r\n            this._apply();\r\n        }\r\n        else {\r\n            this.needsApply = true;\r\n        }\r\n    };\r\n    Focus.prototype._apply = function () {\r\n        var _this = this;\r\n        if (this.value) {\r\n            this.taskQueue.queueMicroTask(function () {\r\n                if (_this.value) {\r\n                    _this.element.focus();\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            this.element.blur();\r\n        }\r\n    };\r\n    Focus.prototype.attached = function () {\r\n        this.isAttached = true;\r\n        if (this.needsApply) {\r\n            this.needsApply = false;\r\n            this._apply();\r\n        }\r\n        this.element.addEventListener('focus', this);\r\n        this.element.addEventListener('blur', this);\r\n    };\r\n    Focus.prototype.detached = function () {\r\n        this.isAttached = false;\r\n        this.element.removeEventListener('focus', this);\r\n        this.element.removeEventListener('blur', this);\r\n    };\r\n    Focus.prototype.handleEvent = function (e) {\r\n        if (e.type === 'focus') {\r\n            this.value = true;\r\n        }\r\n        else if (DOM.activeElement !== this.element) {\r\n            this.value = false;\r\n        }\r\n    };\r\n    Focus = __decorate([\r\n        customAttribute('focus', bindingMode.twoWay)\r\n    ], Focus);\r\n    return Focus;\r\n}());\n\nvar cssUrlMatcher = /url\\((?!['\"]data)([^)]+)\\)/gi;\r\nfunction fixupCSSUrls(address, css) {\r\n    if (typeof css !== 'string') {\r\n        throw new Error(\"Failed loading required CSS file: \" + address);\r\n    }\r\n    return css.replace(cssUrlMatcher, function (match, p1) {\r\n        var quote = p1.charAt(0);\r\n        if (quote === '\\'' || quote === '\"') {\r\n            p1 = p1.substr(1, p1.length - 2);\r\n        }\r\n        return 'url(\\'' + relativeToFile(p1, address) + '\\')';\r\n    });\r\n}\r\nvar CSSResource = (function () {\r\n    function CSSResource(address) {\r\n        this.address = address;\r\n        this._scoped = null;\r\n        this._global = false;\r\n        this._alreadyGloballyInjected = false;\r\n    }\r\n    CSSResource.prototype.initialize = function (container, Target) {\r\n        this._scoped = new Target(this);\r\n    };\r\n    CSSResource.prototype.register = function (registry, name) {\r\n        if (name === 'scoped') {\r\n            registry.registerViewEngineHooks(this._scoped);\r\n        }\r\n        else {\r\n            this._global = true;\r\n        }\r\n    };\r\n    CSSResource.prototype.load = function (container) {\r\n        var _this = this;\r\n        return container.get(Loader)\r\n            .loadText(this.address)\r\n            .catch(function (err) { return null; })\r\n            .then(function (text) {\r\n            text = fixupCSSUrls(_this.address, text);\r\n            _this._scoped.css = text;\r\n            if (_this._global) {\r\n                _this._alreadyGloballyInjected = true;\r\n                DOM.injectStyles(text);\r\n            }\r\n        });\r\n    };\r\n    return CSSResource;\r\n}());\r\nvar CSSViewEngineHooks = (function () {\r\n    function CSSViewEngineHooks(owner) {\r\n        this.owner = owner;\r\n        this.css = null;\r\n    }\r\n    CSSViewEngineHooks.prototype.beforeCompile = function (content, resources, instruction) {\r\n        if (instruction.targetShadowDOM) {\r\n            DOM.injectStyles(this.css, content, true);\r\n        }\r\n        else if (FEATURE.scopedCSS) {\r\n            var styleNode = DOM.injectStyles(this.css, content, true);\r\n            styleNode.setAttribute('scoped', 'scoped');\r\n        }\r\n        else if (this._global && !this.owner._alreadyGloballyInjected) {\r\n            DOM.injectStyles(this.css);\r\n            this.owner._alreadyGloballyInjected = true;\r\n        }\r\n    };\r\n    return CSSViewEngineHooks;\r\n}());\r\nfunction _createCSSResource(address) {\r\n    var ViewCSS = (function (_super) {\r\n        __extends(ViewCSS, _super);\r\n        function ViewCSS() {\r\n            return _super !== null && _super.apply(this, arguments) || this;\r\n        }\r\n        ViewCSS = __decorate([\r\n            resource(new CSSResource(address))\r\n        ], ViewCSS);\r\n        return ViewCSS;\r\n    }(CSSViewEngineHooks));\r\n    return ViewCSS;\r\n}\n\nvar AttrBindingBehavior = (function () {\r\n    function AttrBindingBehavior() {\r\n    }\r\n    AttrBindingBehavior.prototype.bind = function (binding, source) {\r\n        binding.targetObserver = new DataAttributeObserver(binding.target, binding.targetProperty);\r\n    };\r\n    AttrBindingBehavior.prototype.unbind = function (binding, source) {\r\n    };\r\n    AttrBindingBehavior = __decorate([\r\n        bindingBehavior('attr')\r\n    ], AttrBindingBehavior);\r\n    return AttrBindingBehavior;\r\n}());\n\nvar modeBindingBehavior = {\r\n    bind: function (binding, source, lookupFunctions) {\r\n        binding.originalMode = binding.mode;\r\n        binding.mode = this.mode;\r\n    },\r\n    unbind: function (binding, source) {\r\n        binding.mode = binding.originalMode;\r\n        binding.originalMode = null;\r\n    }\r\n};\r\nvar OneTimeBindingBehavior = (function () {\r\n    function OneTimeBindingBehavior() {\r\n        this.mode = bindingMode.oneTime;\r\n    }\r\n    OneTimeBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('oneTime')\r\n    ], OneTimeBindingBehavior);\r\n    return OneTimeBindingBehavior;\r\n}());\r\nvar OneWayBindingBehavior = (function () {\r\n    function OneWayBindingBehavior() {\r\n        this.mode = bindingMode.toView;\r\n    }\r\n    OneWayBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('oneWay')\r\n    ], OneWayBindingBehavior);\r\n    return OneWayBindingBehavior;\r\n}());\r\nvar ToViewBindingBehavior = (function () {\r\n    function ToViewBindingBehavior() {\r\n        this.mode = bindingMode.toView;\r\n    }\r\n    ToViewBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('toView')\r\n    ], ToViewBindingBehavior);\r\n    return ToViewBindingBehavior;\r\n}());\r\nvar FromViewBindingBehavior = (function () {\r\n    function FromViewBindingBehavior() {\r\n        this.mode = bindingMode.fromView;\r\n    }\r\n    FromViewBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('fromView')\r\n    ], FromViewBindingBehavior);\r\n    return FromViewBindingBehavior;\r\n}());\r\nvar TwoWayBindingBehavior = (function () {\r\n    function TwoWayBindingBehavior() {\r\n        this.mode = bindingMode.twoWay;\r\n    }\r\n    TwoWayBindingBehavior = __decorate([\r\n        mixin(modeBindingBehavior),\r\n        bindingBehavior('twoWay')\r\n    ], TwoWayBindingBehavior);\r\n    return TwoWayBindingBehavior;\r\n}());\n\nfunction throttle(newValue) {\r\n    var _this = this;\r\n    var state = this.throttleState;\r\n    var elapsed = +new Date() - state.last;\r\n    if (elapsed >= state.delay) {\r\n        clearTimeout(state.timeoutId);\r\n        state.timeoutId = null;\r\n        state.last = +new Date();\r\n        this.throttledMethod(newValue);\r\n        return;\r\n    }\r\n    state.newValue = newValue;\r\n    if (state.timeoutId === null) {\r\n        state.timeoutId = setTimeout(function () {\r\n            state.timeoutId = null;\r\n            state.last = +new Date();\r\n            _this.throttledMethod(state.newValue);\r\n        }, state.delay - elapsed);\r\n    }\r\n}\r\nvar ThrottleBindingBehavior = (function () {\r\n    function ThrottleBindingBehavior() {\r\n    }\r\n    ThrottleBindingBehavior.prototype.bind = function (binding, source, delay) {\r\n        if (delay === void 0) { delay = 200; }\r\n        var methodToThrottle = 'updateTarget';\r\n        if (binding.callSource) {\r\n            methodToThrottle = 'callSource';\r\n        }\r\n        else if (binding.updateSource && binding.mode === bindingMode.twoWay) {\r\n            methodToThrottle = 'updateSource';\r\n        }\r\n        binding.throttledMethod = binding[methodToThrottle];\r\n        binding.throttledMethod.originalName = methodToThrottle;\r\n        binding[methodToThrottle] = throttle;\r\n        binding.throttleState = {\r\n            delay: delay,\r\n            last: 0,\r\n            timeoutId: null\r\n        };\r\n    };\r\n    ThrottleBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var methodToRestore = binding.throttledMethod.originalName;\r\n        binding[methodToRestore] = binding.throttledMethod;\r\n        binding.throttledMethod = null;\r\n        clearTimeout(binding.throttleState.timeoutId);\r\n        binding.throttleState = null;\r\n    };\r\n    ThrottleBindingBehavior = __decorate([\r\n        bindingBehavior('throttle')\r\n    ], ThrottleBindingBehavior);\r\n    return ThrottleBindingBehavior;\r\n}());\n\nvar unset = {};\r\nfunction debounceCallSource(event) {\r\n    var _this = this;\r\n    var state = this.debounceState;\r\n    clearTimeout(state.timeoutId);\r\n    state.timeoutId = setTimeout(function () { return _this.debouncedMethod(event); }, state.delay);\r\n}\r\nfunction debounceCall(context, newValue, oldValue) {\r\n    var _this = this;\r\n    var state = this.debounceState;\r\n    clearTimeout(state.timeoutId);\r\n    if (context !== state.callContextToDebounce) {\r\n        state.oldValue = unset;\r\n        this.debouncedMethod(context, newValue, oldValue);\r\n        return;\r\n    }\r\n    if (state.oldValue === unset) {\r\n        state.oldValue = oldValue;\r\n    }\r\n    state.timeoutId = setTimeout(function () {\r\n        var _oldValue = state.oldValue;\r\n        state.oldValue = unset;\r\n        _this.debouncedMethod(context, newValue, _oldValue);\r\n    }, state.delay);\r\n}\r\nvar DebounceBindingBehavior = (function () {\r\n    function DebounceBindingBehavior() {\r\n    }\r\n    DebounceBindingBehavior.prototype.bind = function (binding, source, delay) {\r\n        if (delay === void 0) { delay = 200; }\r\n        var isCallSource = binding.callSource !== undefined;\r\n        var methodToDebounce = isCallSource ? 'callSource' : 'call';\r\n        var debouncer = isCallSource ? debounceCallSource : debounceCall;\r\n        var mode = binding.mode;\r\n        var callContextToDebounce = mode === bindingMode.twoWay || mode === bindingMode.fromView ? targetContext : sourceContext;\r\n        binding.debouncedMethod = binding[methodToDebounce];\r\n        binding.debouncedMethod.originalName = methodToDebounce;\r\n        binding[methodToDebounce] = debouncer;\r\n        binding.debounceState = {\r\n            callContextToDebounce: callContextToDebounce,\r\n            delay: delay,\r\n            timeoutId: 0,\r\n            oldValue: unset\r\n        };\r\n    };\r\n    DebounceBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var methodToRestore = binding.debouncedMethod.originalName;\r\n        binding[methodToRestore] = binding.debouncedMethod;\r\n        binding.debouncedMethod = null;\r\n        clearTimeout(binding.debounceState.timeoutId);\r\n        binding.debounceState = null;\r\n    };\r\n    DebounceBindingBehavior = __decorate([\r\n        bindingBehavior('debounce')\r\n    ], DebounceBindingBehavior);\r\n    return DebounceBindingBehavior;\r\n}());\n\nfunction findOriginalEventTarget(event) {\r\n    return (event.path && event.path[0]) || (event.deepPath && event.deepPath[0]) || event.target;\r\n}\r\nfunction handleSelfEvent(event) {\r\n    var target = findOriginalEventTarget(event);\r\n    if (this.target !== target) {\r\n        return;\r\n    }\r\n    this.selfEventCallSource(event);\r\n}\r\nvar SelfBindingBehavior = (function () {\r\n    function SelfBindingBehavior() {\r\n    }\r\n    SelfBindingBehavior.prototype.bind = function (binding, source) {\r\n        if (!binding.callSource || !binding.targetEvent) {\r\n            throw new Error('Self binding behavior only supports event.');\r\n        }\r\n        binding.selfEventCallSource = binding.callSource;\r\n        binding.callSource = handleSelfEvent;\r\n    };\r\n    SelfBindingBehavior.prototype.unbind = function (binding, source) {\r\n        binding.callSource = binding.selfEventCallSource;\r\n        binding.selfEventCallSource = null;\r\n    };\r\n    SelfBindingBehavior = __decorate([\r\n        bindingBehavior('self')\r\n    ], SelfBindingBehavior);\r\n    return SelfBindingBehavior;\r\n}());\n\nvar BindingSignaler = (function () {\r\n    function BindingSignaler() {\r\n        this.signals = {};\r\n    }\r\n    BindingSignaler.prototype.signal = function (name) {\r\n        var bindings = this.signals[name];\r\n        if (!bindings) {\r\n            return;\r\n        }\r\n        var i = bindings.length;\r\n        while (i--) {\r\n            bindings[i].call(sourceContext);\r\n        }\r\n    };\r\n    return BindingSignaler;\r\n}());\n\nvar SignalBindingBehavior = (function () {\r\n    function SignalBindingBehavior(bindingSignaler) {\r\n        this.signals = bindingSignaler.signals;\r\n    }\r\n    SignalBindingBehavior.inject = function () { return [BindingSignaler]; };\r\n    SignalBindingBehavior.prototype.bind = function (binding, source) {\r\n        var names = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            names[_i - 2] = arguments[_i];\r\n        }\r\n        if (!binding.updateTarget) {\r\n            throw new Error('Only property bindings and string interpolation bindings can be signaled.  Trigger, delegate and call bindings cannot be signaled.');\r\n        }\r\n        var signals = this.signals;\r\n        if (names.length === 1) {\r\n            var name_1 = names[0];\r\n            var bindings = signals[name_1] || (signals[name_1] = []);\r\n            bindings.push(binding);\r\n            binding.signalName = name_1;\r\n        }\r\n        else if (names.length > 1) {\r\n            var i = names.length;\r\n            while (i--) {\r\n                var name_2 = names[i];\r\n                var bindings = signals[name_2] || (signals[name_2] = []);\r\n                bindings.push(binding);\r\n            }\r\n            binding.signalName = names;\r\n        }\r\n        else {\r\n            throw new Error('Signal name is required.');\r\n        }\r\n    };\r\n    SignalBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var signals = this.signals;\r\n        var name = binding.signalName;\r\n        binding.signalName = null;\r\n        if (Array.isArray(name)) {\r\n            var names = name;\r\n            var i = names.length;\r\n            while (i--) {\r\n                var n = names[i];\r\n                var bindings = signals[n];\r\n                bindings.splice(bindings.indexOf(binding), 1);\r\n            }\r\n        }\r\n        else {\r\n            var bindings = signals[name];\r\n            bindings.splice(bindings.indexOf(binding), 1);\r\n        }\r\n    };\r\n    SignalBindingBehavior = __decorate([\r\n        bindingBehavior('signal')\r\n    ], SignalBindingBehavior);\r\n    return SignalBindingBehavior;\r\n}());\n\nvar eventNamesRequired = 'The updateTrigger binding behavior requires at least one event name argument: eg <input value.bind=\"firstName & updateTrigger:\\'blur\\'\">';\r\nvar notApplicableMessage = 'The updateTrigger binding behavior can only be applied to two-way/ from-view bindings on input/select elements.';\r\nvar UpdateTriggerBindingBehavior = (function () {\r\n    function UpdateTriggerBindingBehavior() {\r\n    }\r\n    UpdateTriggerBindingBehavior.prototype.bind = function (binding, source) {\r\n        var events = [];\r\n        for (var _i = 2; _i < arguments.length; _i++) {\r\n            events[_i - 2] = arguments[_i];\r\n        }\r\n        if (events.length === 0) {\r\n            throw new Error(eventNamesRequired);\r\n        }\r\n        if (binding.mode !== bindingMode.twoWay && binding.mode !== bindingMode.fromView) {\r\n            throw new Error(notApplicableMessage);\r\n        }\r\n        var targetObserver = binding.observerLocator.getObserver(binding.target, binding.targetProperty);\r\n        if (!targetObserver.handler) {\r\n            throw new Error(notApplicableMessage);\r\n        }\r\n        binding.targetObserver = targetObserver;\r\n        targetObserver.originalHandler = binding.targetObserver.handler;\r\n        var handler = new EventSubscriber(events);\r\n        targetObserver.handler = handler;\r\n    };\r\n    UpdateTriggerBindingBehavior.prototype.unbind = function (binding, source) {\r\n        var targetObserver = binding.targetObserver;\r\n        targetObserver.handler.dispose();\r\n        targetObserver.handler = targetObserver.originalHandler;\r\n        targetObserver.originalHandler = null;\r\n    };\r\n    UpdateTriggerBindingBehavior = __decorate([\r\n        bindingBehavior('updateTrigger')\r\n    ], UpdateTriggerBindingBehavior);\r\n    return UpdateTriggerBindingBehavior;\r\n}());\n\nfunction _createDynamicElement(_a) {\r\n    var name = _a.name, viewUrl = _a.viewUrl, bindableNames = _a.bindableNames, useShadowDOMmode = _a.useShadowDOMmode;\r\n    var DynamicElement = (function () {\r\n        function DynamicElement() {\r\n        }\r\n        DynamicElement.prototype.bind = function (bindingContext) {\r\n            this.$parent = bindingContext;\r\n        };\r\n        DynamicElement = __decorate([\r\n            customElement(name),\r\n            useView(viewUrl)\r\n        ], DynamicElement);\r\n        return DynamicElement;\r\n    }());\r\n    for (var i = 0, ii = bindableNames.length; i < ii; ++i) {\r\n        bindable(bindableNames[i])(DynamicElement);\r\n    }\r\n    switch (useShadowDOMmode) {\r\n        case 'open':\r\n            useShadowDOM({ mode: 'open' })(DynamicElement);\r\n            break;\r\n        case 'closed':\r\n            useShadowDOM({ mode: 'closed' })(DynamicElement);\r\n            break;\r\n        case '':\r\n            useShadowDOM(DynamicElement);\r\n            break;\r\n        case null:\r\n            break;\r\n        default:\r\n            getLogger('aurelia-html-only-element')\r\n                .warn(\"Expected 'use-shadow-dom' value to be \\\"close\\\", \\\"open\\\" or \\\"\\\", received \" + useShadowDOMmode);\r\n            break;\r\n    }\r\n    return DynamicElement;\r\n}\n\nfunction getElementName(address) {\r\n    return /([^\\/^\\?]+)\\.html/i.exec(address)[1].toLowerCase();\r\n}\r\nfunction configure(config) {\r\n    var viewEngine = config.container.get(ViewEngine);\r\n    var loader = config.aurelia.loader;\r\n    viewEngine.addResourcePlugin('.html', {\r\n        'fetch': function (viewUrl) {\r\n            return loader.loadTemplate(viewUrl).then(function (registryEntry) {\r\n                var _a;\r\n                var bindableNames = registryEntry.template.getAttribute('bindable');\r\n                var useShadowDOMmode = registryEntry.template.getAttribute('use-shadow-dom');\r\n                var name = getElementName(viewUrl);\r\n                if (bindableNames) {\r\n                    bindableNames = bindableNames.split(',').map(function (x) { return x.trim(); });\r\n                    registryEntry.template.removeAttribute('bindable');\r\n                }\r\n                else {\r\n                    bindableNames = [];\r\n                }\r\n                return _a = {}, _a[name] = _createDynamicElement({ name: name, viewUrl: viewUrl, bindableNames: bindableNames, useShadowDOMmode: useShadowDOMmode }), _a;\r\n            });\r\n        }\r\n    });\r\n}\n\nfunction configure$1(config) {\r\n    injectAureliaHideStyleAtHead();\r\n    config.globalResources(Compose, If, Else, With, Repeat, Show, Hide, Replaceable, Focus, SanitizeHTMLValueConverter, OneTimeBindingBehavior, OneWayBindingBehavior, ToViewBindingBehavior, FromViewBindingBehavior, TwoWayBindingBehavior, ThrottleBindingBehavior, DebounceBindingBehavior, SelfBindingBehavior, SignalBindingBehavior, UpdateTriggerBindingBehavior, AttrBindingBehavior);\r\n    configure(config);\r\n    var viewEngine = config.container.get(ViewEngine);\r\n    var styleResourcePlugin = {\r\n        fetch: function (address) {\r\n            var _a;\r\n            return _a = {}, _a[address] = _createCSSResource(address), _a;\r\n        }\r\n    };\r\n    ['.css', '.less', '.sass', '.scss', '.styl'].forEach(function (ext) { return viewEngine.addResourcePlugin(ext, styleResourcePlugin); });\r\n}\n\nexport { AbstractRepeater, ArrayRepeatStrategy, AttrBindingBehavior, BindingSignaler, Compose, DebounceBindingBehavior, Else, Focus, FromViewBindingBehavior, HTMLSanitizer, Hide, If, MapRepeatStrategy, NullRepeatStrategy, NumberRepeatStrategy, OneTimeBindingBehavior, OneWayBindingBehavior, Repeat, RepeatStrategyLocator, Replaceable, SanitizeHTMLValueConverter, SelfBindingBehavior, SetRepeatStrategy, Show, SignalBindingBehavior, ThrottleBindingBehavior, ToViewBindingBehavior, TwoWayBindingBehavior, UpdateTriggerBindingBehavior, With, configure$1 as configure, createFullOverrideContext, getItemsSourceExpression, isOneTime, unwrapExpression, updateOneTimeBinding, updateOverrideContext, viewsRequireLifecycle };\n//# sourceMappingURL=aurelia-templating-resources.js.map\n","import { Router, RouteLoader, AppRouter } from 'aurelia-router';\nimport { Origin } from 'aurelia-metadata';\nimport { relativeToFile } from 'aurelia-path';\nimport { BehaviorInstruction, ShadowDOM, ViewSlot, ViewLocator, CompositionTransaction, CompositionEngine, SwapStrategies, inlineView, customElement, useView } from 'aurelia-templating';\nimport { Container } from 'aurelia-dependency-injection';\nimport { createOverrideContext } from 'aurelia-binding';\nimport { DOM } from 'aurelia-pal';\nimport { getLogger } from 'aurelia-logging';\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\n\nvar EmptyLayoutViewModel = /** @class */ (function () {\r\n    function EmptyLayoutViewModel() {\r\n    }\r\n    return EmptyLayoutViewModel;\r\n}());\r\n/**\r\n * Implementation of Aurelia Router ViewPort. Responsible for loading route, composing and swapping routes views\r\n */\r\nvar RouterView = /** @class */ (function () {\r\n    function RouterView(element, container, viewSlot, router, viewLocator, compositionTransaction, compositionEngine) {\r\n        this.element = element;\r\n        this.container = container;\r\n        this.viewSlot = viewSlot;\r\n        this.router = router;\r\n        this.viewLocator = viewLocator;\r\n        this.compositionTransaction = compositionTransaction;\r\n        this.compositionEngine = compositionEngine;\r\n        // add this <router-view/> to router view ports lookup based on name attribute\r\n        // when this router is the root router-view\r\n        // also trigger AppRouter registerViewPort extra flow\r\n        this.router.registerViewPort(this, this.element.getAttribute('name'));\r\n        // Each <router-view/> process its instruction as a composition transaction\r\n        // there are differences between intial composition and subsequent compositions\r\n        // also there are differences between root composition and child <router-view/> composition\r\n        // mark the first composition transaction with a property initialComposition to distinguish it\r\n        // when the root <router-view/> gets new instruction for the first time\r\n        if (!('initialComposition' in compositionTransaction)) {\r\n            compositionTransaction.initialComposition = true;\r\n            this.compositionTransactionNotifier = compositionTransaction.enlist();\r\n        }\r\n    }\r\n    /**@internal */\r\n    RouterView.inject = function () {\r\n        return [DOM.Element, Container, ViewSlot, Router, ViewLocator, CompositionTransaction, CompositionEngine];\r\n    };\r\n    RouterView.prototype.created = function (owningView) {\r\n        this.owningView = owningView;\r\n    };\r\n    RouterView.prototype.bind = function (bindingContext, overrideContext) {\r\n        // router needs to get access to view model of current route parent\r\n        // doing it in generic way via viewModel property on container\r\n        this.container.viewModel = bindingContext;\r\n        this.overrideContext = overrideContext;\r\n    };\r\n    /**\r\n     * Implementation of `aurelia-router` ViewPort interface, responsible for templating related part in routing Pipeline\r\n     */\r\n    RouterView.prototype.process = function ($viewPortInstruction, waitToSwap) {\r\n        var _this = this;\r\n        // have strong typings without exposing it in public typings, this is to ensure maximum backward compat\r\n        var viewPortInstruction = $viewPortInstruction;\r\n        var component = viewPortInstruction.component;\r\n        var childContainer = component.childContainer;\r\n        var viewModel = component.viewModel;\r\n        var viewModelResource = component.viewModelResource;\r\n        var metadata = viewModelResource.metadata;\r\n        var config = component.router.currentInstruction.config;\r\n        var viewPortConfig = config.viewPorts ? (config.viewPorts[viewPortInstruction.name] || {}) : {};\r\n        childContainer.get(RouterViewLocator)._notify(this);\r\n        // layoutInstruction is our layout viewModel\r\n        var layoutInstruction = {\r\n            viewModel: viewPortConfig.layoutViewModel || config.layoutViewModel || this.layoutViewModel,\r\n            view: viewPortConfig.layoutView || config.layoutView || this.layoutView,\r\n            model: viewPortConfig.layoutModel || config.layoutModel || this.layoutModel,\r\n            router: viewPortInstruction.component.router,\r\n            childContainer: childContainer,\r\n            viewSlot: this.viewSlot\r\n        };\r\n        // viewport will be a thin wrapper around composition engine\r\n        // to process instruction/configuration from users\r\n        // preparing all information related to a composition process\r\n        // first by getting view strategy of a ViewPortComponent View\r\n        var viewStrategy = this.viewLocator.getViewStrategy(component.view || viewModel);\r\n        if (viewStrategy && component.view) {\r\n            viewStrategy.makeRelativeTo(Origin.get(component.router.container.viewModel.constructor).moduleId);\r\n        }\r\n        // using metadata of a custom element view model to load appropriate view-factory instance\r\n        return metadata\r\n            .load(childContainer, viewModelResource.value, null, viewStrategy, true)\r\n            // for custom element, viewFactory typing is always ViewFactory\r\n            // for custom attribute, it will be HtmlBehaviorResource\r\n            .then(function (viewFactory) {\r\n            // if this is not the first time that this <router-view/> is composing its instruction\r\n            // try to capture ownership of the composition transaction\r\n            // child <router-view/> will not be able to capture, since root <router-view/> typically captures\r\n            // the ownership token\r\n            if (!_this.compositionTransactionNotifier) {\r\n                _this.compositionTransactionOwnershipToken = _this.compositionTransaction.tryCapture();\r\n            }\r\n            if (layoutInstruction.viewModel || layoutInstruction.view) {\r\n                viewPortInstruction.layoutInstruction = layoutInstruction;\r\n            }\r\n            var viewPortComponentBehaviorInstruction = BehaviorInstruction.dynamic(_this.element, viewModel, viewFactory);\r\n            viewPortInstruction.controller = metadata.create(childContainer, viewPortComponentBehaviorInstruction);\r\n            if (waitToSwap) {\r\n                return null;\r\n            }\r\n            _this.swap(viewPortInstruction);\r\n        });\r\n    };\r\n    RouterView.prototype.swap = function ($viewPortInstruction) {\r\n        var _this = this;\r\n        // have strong typings without exposing it in public typings, this is to ensure maximum backward compat\r\n        var viewPortInstruction = $viewPortInstruction;\r\n        var viewPortController = viewPortInstruction.controller;\r\n        var layoutInstruction = viewPortInstruction.layoutInstruction;\r\n        var previousView = this.view;\r\n        // Final step of swapping a <router-view/> ViewPortComponent\r\n        var work = function () {\r\n            var swapStrategy = SwapStrategies[_this.swapOrder] || SwapStrategies.after;\r\n            var viewSlot = _this.viewSlot;\r\n            swapStrategy(viewSlot, previousView, function () { return Promise.resolve(viewSlot.add(_this.view)); }).then(function () {\r\n                _this._notify();\r\n            });\r\n        };\r\n        // Ensure all users setups have been completed\r\n        var ready = function (owningView_or_layoutView) {\r\n            viewPortController.automate(_this.overrideContext, owningView_or_layoutView);\r\n            var transactionOwnerShipToken = _this.compositionTransactionOwnershipToken;\r\n            // if this router-view is the root <router-view/> of a normal startup via aurelia.setRoot\r\n            // attemp to take control of the transaction\r\n            // if ownership can be taken\r\n            // wait for transaction to complete before swapping\r\n            if (transactionOwnerShipToken) {\r\n                return transactionOwnerShipToken\r\n                    .waitForCompositionComplete()\r\n                    .then(function () {\r\n                    _this.compositionTransactionOwnershipToken = null;\r\n                    return work();\r\n                });\r\n            }\r\n            // otherwise, just swap\r\n            return work();\r\n        };\r\n        // If there is layout instruction, new to compose layout before processing ViewPortComponent\r\n        // layout controller/view/view-model is composed using composition engine APIs\r\n        if (layoutInstruction) {\r\n            if (!layoutInstruction.viewModel) {\r\n                // createController chokes if there's no viewmodel, so create a dummy one\r\n                // but avoid using a POJO as it creates unwanted metadata in Object constructor\r\n                layoutInstruction.viewModel = new EmptyLayoutViewModel();\r\n            }\r\n            // using composition engine to create compose layout\r\n            return this.compositionEngine\r\n                // first create controller from layoutInstruction\r\n                // and treat it as CompositionContext\r\n                // then emulate slot projection with ViewPortComponent view\r\n                .createController(layoutInstruction)\r\n                .then(function (layoutController) {\r\n                var layoutView = layoutController.view;\r\n                ShadowDOM.distributeView(viewPortController.view, layoutController.slots || layoutView.slots);\r\n                // when there is a layout\r\n                // view hierarchy is: <router-view/> owner view -> layout view -> ViewPortComponent view\r\n                layoutController.automate(createOverrideContext(layoutInstruction.viewModel), _this.owningView);\r\n                layoutView.children.push(viewPortController.view);\r\n                return layoutView || layoutController;\r\n            })\r\n                .then(function (newView) {\r\n                _this.view = newView;\r\n                return ready(newView);\r\n            });\r\n        }\r\n        // if there is no layout, then get ViewPortComponent view ready as view property\r\n        // and process controller/swapping\r\n        // when there is no layout\r\n        // view hierarchy is: <router-view/> owner view -> ViewPortComponent view\r\n        this.view = viewPortController.view;\r\n        return ready(this.owningView);\r\n    };\r\n    /**\r\n     * Notify composition transaction that this router has finished processing\r\n     * Happens when this <router-view/> is the root router-view\r\n     * @internal\r\n     */\r\n    RouterView.prototype._notify = function () {\r\n        var notifier = this.compositionTransactionNotifier;\r\n        if (notifier) {\r\n            notifier.done();\r\n            this.compositionTransactionNotifier = null;\r\n        }\r\n    };\r\n    /**\r\n     * @internal Actively avoid using decorator to reduce the amount of code generated\r\n     *\r\n     * There is no view to compose by default in a router view\r\n     * This custom element is responsible for composing its own view, based on current config\r\n     */\r\n    RouterView.$view = null;\r\n    /**\r\n     * @internal Actively avoid using decorator to reduce the amount of code generated\r\n     */\r\n    RouterView.$resource = {\r\n        name: 'router-view',\r\n        bindables: ['swapOrder', 'layoutView', 'layoutViewModel', 'layoutModel', 'inherit-binding-context']\r\n    };\r\n    return RouterView;\r\n}());\r\n/**\r\n* Locator which finds the nearest RouterView, relative to the current dependency injection container.\r\n*/\r\nvar RouterViewLocator = /** @class */ (function () {\r\n    /**\r\n    * Creates an instance of the RouterViewLocator class.\r\n    */\r\n    function RouterViewLocator() {\r\n        var _this = this;\r\n        this.promise = new Promise(function (resolve) { return _this.resolve = resolve; });\r\n    }\r\n    /**\r\n    * Finds the nearest RouterView instance.\r\n    * @returns A promise that will be resolved with the located RouterView instance.\r\n    */\r\n    RouterViewLocator.prototype.findNearest = function () {\r\n        return this.promise;\r\n    };\r\n    /**@internal */\r\n    RouterViewLocator.prototype._notify = function (routerView) {\r\n        this.resolve(routerView);\r\n    };\r\n    return RouterViewLocator;\r\n}());\n\n/**@internal exported for unit testing */\r\nvar EmptyClass = /** @class */ (function () {\r\n    function EmptyClass() {\r\n    }\r\n    return EmptyClass;\r\n}());\r\ninlineView('<template></template>')(EmptyClass);\r\n/**\r\n * Default implementation of `RouteLoader` used for loading component based on a route config\r\n */\r\nvar TemplatingRouteLoader = /** @class */ (function (_super) {\r\n    __extends(TemplatingRouteLoader, _super);\r\n    function TemplatingRouteLoader(compositionEngine) {\r\n        var _this = _super.call(this) || this;\r\n        _this.compositionEngine = compositionEngine;\r\n        return _this;\r\n    }\r\n    /**\r\n     * Resolve a view model from a RouteConfig\r\n     * Throws when there is neither \"moduleId\" nor \"viewModel\" property\r\n     * @internal\r\n     */\r\n    TemplatingRouteLoader.prototype.resolveViewModel = function (router, config) {\r\n        return new Promise(function (resolve, reject) {\r\n            var viewModel;\r\n            if ('moduleId' in config) {\r\n                var moduleId = config.moduleId;\r\n                if (moduleId === null) {\r\n                    viewModel = EmptyClass;\r\n                }\r\n                else {\r\n                    // this requires container of router has passes a certain point\r\n                    // where a view model has been setup on the container\r\n                    // it will fail in enhance scenario because no viewport has been registered\r\n                    moduleId = relativeToFile(moduleId, Origin.get(router.container.viewModel.constructor).moduleId);\r\n                    if (/\\.html/i.test(moduleId)) {\r\n                        viewModel = createDynamicClass(moduleId);\r\n                    }\r\n                    else {\r\n                        viewModel = moduleId;\r\n                    }\r\n                }\r\n                return resolve(viewModel);\r\n            }\r\n            // todo: add if ('viewModel' in config) to support static view model resolution\r\n            reject(new Error('Invalid route config. No \"moduleId\" found.'));\r\n        });\r\n    };\r\n    /**\r\n     * Create child container based on a router container\r\n     * Also ensures that child router are properly constructed in the newly created child container\r\n     * @internal\r\n     */\r\n    TemplatingRouteLoader.prototype.createChildContainer = function (router) {\r\n        var childContainer = router.container.createChild();\r\n        childContainer.registerSingleton(RouterViewLocator);\r\n        childContainer.getChildRouter = function () {\r\n            var childRouter;\r\n            childContainer.registerHandler(Router, function () { return childRouter || (childRouter = router.createChild(childContainer)); });\r\n            return childContainer.get(Router);\r\n        };\r\n        return childContainer;\r\n    };\r\n    /**\r\n     * Load corresponding component of a route config of a navigation instruction\r\n     */\r\n    TemplatingRouteLoader.prototype.loadRoute = function (router, config, _navInstruction) {\r\n        var _this = this;\r\n        return this\r\n            .resolveViewModel(router, config)\r\n            .then(function (viewModel) { return _this.compositionEngine.ensureViewModel({\r\n            viewModel: viewModel,\r\n            childContainer: _this.createChildContainer(router),\r\n            view: config.view || config.viewStrategy,\r\n            router: router\r\n        }); });\r\n    };\r\n    /**@internal */\r\n    TemplatingRouteLoader.inject = [CompositionEngine];\r\n    return TemplatingRouteLoader;\r\n}(RouteLoader));\r\n/**@internal exported for unit testing */\r\nfunction createDynamicClass(moduleId) {\r\n    var name = /([^\\/^\\?]+)\\.html/i.exec(moduleId)[1];\r\n    var DynamicClass = /** @class */ (function () {\r\n        function DynamicClass() {\r\n        }\r\n        DynamicClass.prototype.bind = function (bindingContext) {\r\n            this.$parent = bindingContext;\r\n        };\r\n        return DynamicClass;\r\n    }());\r\n    customElement(name)(DynamicClass);\r\n    useView(moduleId)(DynamicClass);\r\n    return DynamicClass;\r\n}\n\nvar logger = getLogger('route-href');\r\n/**\r\n * Helper custom attribute to help associate an element with a route by name\r\n */\r\nvar RouteHref = /** @class */ (function () {\r\n    function RouteHref(router, element) {\r\n        this.router = router;\r\n        this.element = element;\r\n        this.attribute = 'href';\r\n    }\r\n    /*@internal */\r\n    RouteHref.inject = function () {\r\n        return [Router, DOM.Element];\r\n    };\r\n    RouteHref.prototype.bind = function () {\r\n        this.isActive = true;\r\n        this.processChange();\r\n    };\r\n    RouteHref.prototype.unbind = function () {\r\n        this.isActive = false;\r\n    };\r\n    RouteHref.prototype.attributeChanged = function (value, previous) {\r\n        if (previous) {\r\n            this.element.removeAttribute(previous);\r\n        }\r\n        return this.processChange();\r\n    };\r\n    RouteHref.prototype.processChange = function () {\r\n        var _this = this;\r\n        return this.router\r\n            .ensureConfigured()\r\n            .then(function () {\r\n            if (!_this.isActive) {\r\n                // returning null to avoid Bluebird warning\r\n                return null;\r\n            }\r\n            var element = _this.element;\r\n            var href = _this.router.generate(_this.route, _this.params);\r\n            if (element.au.controller) {\r\n                element.au.controller.viewModel[_this.attribute] = href;\r\n            }\r\n            else {\r\n                element.setAttribute(_this.attribute, href);\r\n            }\r\n            // returning null to avoid Bluebird warning\r\n            return null;\r\n        })\r\n            .catch(function (reason) {\r\n            logger.error(reason);\r\n        });\r\n    };\r\n    /**\r\n     * @internal Actively avoid using decorator to reduce the amount of code generated\r\n     */\r\n    RouteHref.$resource = {\r\n        type: 'attribute',\r\n        name: 'route-href',\r\n        bindables: [\r\n            { name: 'route', changeHandler: 'processChange', primaryProperty: true },\r\n            { name: 'params', changeHandler: 'processChange' },\r\n            'attribute'\r\n        ] // type definition of Aurelia templating is wrong\r\n    };\r\n    return RouteHref;\r\n}());\n\nfunction configure(config) {\r\n    config\r\n        .singleton(RouteLoader, TemplatingRouteLoader)\r\n        .singleton(Router, AppRouter)\r\n        .globalResources(RouterView, RouteHref);\r\n    config.container.registerAlias(Router, AppRouter);\r\n}\n\nexport { RouteHref, RouterView, TemplatingRouteLoader, configure };\n//# sourceMappingURL=aurelia-templating-router.js.map\n","import { DOM } from 'aurelia-pal';\nimport { AccessMember, AccessScope, AccessKeyed, BindingBehavior, ValueConverter, getContextFor, Parser, bindingBehavior, bindingMode, LiteralString, Binary, Conditional, LiteralPrimitive, CallMember } from 'aurelia-binding';\nimport { Optional, Lazy } from 'aurelia-dependency-injection';\nimport { TaskQueue } from 'aurelia-task-queue';\nimport { customAttribute, bindable, BindingLanguage, ViewResources } from 'aurelia-templating';\nimport { getLogger } from 'aurelia-logging';\n\n/**\r\n * Gets the DOM element associated with the data-binding. Most of the time it's\r\n * the binding.target but sometimes binding.target is an aurelia custom element,\r\n * or custom attribute which is a javascript \"class\" instance, so we need to use\r\n * the controller's container to retrieve the actual DOM element.\r\n */\r\nfunction getTargetDOMElement(binding, view) {\r\n    var target = binding.target;\r\n    // DOM element\r\n    if (target instanceof Element) {\r\n        return target;\r\n    }\r\n    // custom element or custom attribute\r\n    // tslint:disable-next-line:prefer-const\r\n    for (var i = 0, ii = view.controllers.length; i < ii; i++) {\r\n        var controller = view.controllers[i];\r\n        if (controller.viewModel === target) {\r\n            var element = controller.container.get(DOM.Element);\r\n            if (element) {\r\n                return element;\r\n            }\r\n            throw new Error(\"Unable to locate target element for \\\"\" + binding.sourceExpression + \"\\\".\");\r\n        }\r\n    }\r\n    throw new Error(\"Unable to locate target element for \\\"\" + binding.sourceExpression + \"\\\".\");\r\n}\n\nfunction getObject(expression, objectExpression, source) {\r\n    var value = objectExpression.evaluate(source, null);\r\n    if (value === null || value === undefined || value instanceof Object) {\r\n        return value;\r\n    }\r\n    // tslint:disable-next-line:max-line-length\r\n    throw new Error(\"The '\" + objectExpression + \"' part of '\" + expression + \"' evaluates to \" + value + \" instead of an object, null or undefined.\");\r\n}\r\n/**\r\n * Retrieves the object and property name for the specified expression.\r\n * @param expression The expression\r\n * @param source The scope\r\n */\r\nfunction getPropertyInfo(expression, source) {\r\n    var originalExpression = expression;\r\n    while (expression instanceof BindingBehavior || expression instanceof ValueConverter) {\r\n        expression = expression.expression;\r\n    }\r\n    var object;\r\n    var propertyName;\r\n    if (expression instanceof AccessScope) {\r\n        object = getContextFor(expression.name, source, expression.ancestor);\r\n        propertyName = expression.name;\r\n    }\r\n    else if (expression instanceof AccessMember) {\r\n        object = getObject(originalExpression, expression.object, source);\r\n        propertyName = expression.name;\r\n    }\r\n    else if (expression instanceof AccessKeyed) {\r\n        object = getObject(originalExpression, expression.object, source);\r\n        propertyName = expression.key.evaluate(source);\r\n    }\r\n    else {\r\n        throw new Error(\"Expression '\" + originalExpression + \"' is not compatible with the validate binding-behavior.\");\r\n    }\r\n    if (object === null || object === undefined) {\r\n        return null;\r\n    }\r\n    return { object: object, propertyName: propertyName };\r\n}\n\nfunction isString(value) {\r\n    return Object.prototype.toString.call(value) === '[object String]';\r\n}\r\nfunction isNumber(value) {\r\n    return Object.prototype.toString.call(value) === '[object Number]';\r\n}\n\nvar PropertyAccessorParser = /** @class */ (function () {\r\n    function PropertyAccessorParser(parser) {\r\n        this.parser = parser;\r\n    }\r\n    PropertyAccessorParser.prototype.parse = function (property) {\r\n        if (isString(property) || isNumber(property)) {\r\n            return property;\r\n        }\r\n        var accessorText = getAccessorExpression(property.toString());\r\n        var accessor = this.parser.parse(accessorText);\r\n        if (accessor instanceof AccessScope\r\n            || accessor instanceof AccessMember && accessor.object instanceof AccessScope) {\r\n            return accessor.name;\r\n        }\r\n        throw new Error(\"Invalid property expression: \\\"\" + accessor + \"\\\"\");\r\n    };\r\n    PropertyAccessorParser.inject = [Parser];\r\n    return PropertyAccessorParser;\r\n}());\r\nfunction getAccessorExpression(fn) {\r\n    /* tslint:disable:max-line-length */\r\n    var classic = /^function\\s*\\([$_\\w\\d]+\\)\\s*\\{(?:\\s*\"use strict\";)?\\s*(?:[$_\\w\\d.['\"\\]+;]+)?\\s*return\\s+[$_\\w\\d]+\\.([$_\\w\\d]+)\\s*;?\\s*\\}$/;\r\n    /* tslint:enable:max-line-length */\r\n    var arrow = /^\\(?[$_\\w\\d]+\\)?\\s*=>\\s*[$_\\w\\d]+\\.([$_\\w\\d]+)$/;\r\n    var match = classic.exec(fn) || arrow.exec(fn);\r\n    if (match === null) {\r\n        throw new Error(\"Unable to parse accessor function:\\n\" + fn);\r\n    }\r\n    return match[1];\r\n}\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nfunction __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nfunction __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\n\n/**\r\n * Validation triggers.\r\n */\r\nvar validateTrigger;\r\n(function (validateTrigger) {\r\n    /**\r\n     * Manual validation.  Use the controller's `validate()` and  `reset()` methods\r\n     * to validate all bindings.\r\n     */\r\n    validateTrigger[validateTrigger[\"manual\"] = 0] = \"manual\";\r\n    /**\r\n     * Validate the binding when the binding's target element fires a DOM \"blur\" event.\r\n     */\r\n    validateTrigger[validateTrigger[\"blur\"] = 1] = \"blur\";\r\n    /**\r\n     * Validate the binding when it updates the model due to a change in the view.\r\n     */\r\n    validateTrigger[validateTrigger[\"change\"] = 2] = \"change\";\r\n    /**\r\n     * Validate the binding when the binding's target element fires a DOM \"blur\" event and\r\n     * when it updates the model due to a change in the view.\r\n     */\r\n    validateTrigger[validateTrigger[\"changeOrBlur\"] = 3] = \"changeOrBlur\";\r\n})(validateTrigger || (validateTrigger = {}));\n\n/**\r\n * Validates objects and properties.\r\n */\r\nvar Validator = /** @class */ (function () {\r\n    function Validator() {\r\n    }\r\n    return Validator;\r\n}());\n\n/**\r\n * The result of validating an individual validation rule.\r\n */\r\nvar ValidateResult = /** @class */ (function () {\r\n    /**\r\n     * @param rule The rule associated with the result. Validator implementation specific.\r\n     * @param object The object that was validated.\r\n     * @param propertyName The name of the property that was validated.\r\n     * @param error The error, if the result is a validation error.\r\n     */\r\n    function ValidateResult(rule, object, propertyName, valid, message) {\r\n        if (message === void 0) { message = null; }\r\n        this.rule = rule;\r\n        this.object = object;\r\n        this.propertyName = propertyName;\r\n        this.valid = valid;\r\n        this.message = message;\r\n        this.id = ValidateResult.nextId++;\r\n    }\r\n    ValidateResult.prototype.toString = function () {\r\n        return this.valid ? 'Valid.' : this.message;\r\n    };\r\n    ValidateResult.nextId = 0;\r\n    return ValidateResult;\r\n}());\n\nvar ValidateEvent = /** @class */ (function () {\r\n    function ValidateEvent(\r\n    /**\r\n     * The type of validate event. Either \"validate\" or \"reset\".\r\n     */\r\n    type, \r\n    /**\r\n     * The controller's current array of errors. For an array containing both\r\n     * failed rules and passed rules, use the \"results\" property.\r\n     */\r\n    errors, \r\n    /**\r\n     * The controller's current array of validate results. This\r\n     * includes both passed rules and failed rules. For an array of only failed rules,\r\n     * use the \"errors\" property.\r\n     */\r\n    results, \r\n    /**\r\n     * The instruction passed to the \"validate\" or \"reset\" event. Will be null when\r\n     * the controller's validate/reset method was called with no instruction argument.\r\n     */\r\n    instruction, \r\n    /**\r\n     * In events with type === \"validate\", this property will contain the result\r\n     * of validating the instruction (see \"instruction\" property). Use the controllerValidateResult\r\n     * to access the validate results specific to the call to \"validate\"\r\n     * (as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\r\n     * set of results/errors).\r\n     */\r\n    controllerValidateResult) {\r\n        this.type = type;\r\n        this.errors = errors;\r\n        this.results = results;\r\n        this.instruction = instruction;\r\n        this.controllerValidateResult = controllerValidateResult;\r\n    }\r\n    return ValidateEvent;\r\n}());\n\n/**\r\n * Orchestrates validation.\r\n * Manages a set of bindings, renderers and objects.\r\n * Exposes the current list of validation results for binding purposes.\r\n */\r\nvar ValidationController = /** @class */ (function () {\r\n    function ValidationController(validator, propertyParser) {\r\n        this.validator = validator;\r\n        this.propertyParser = propertyParser;\r\n        // Registered bindings (via the validate binding behavior)\r\n        this.bindings = new Map();\r\n        // Renderers that have been added to the controller instance.\r\n        this.renderers = [];\r\n        /**\r\n         * Validation results that have been rendered by the controller.\r\n         */\r\n        this.results = [];\r\n        /**\r\n         * Validation errors that have been rendered by the controller.\r\n         */\r\n        this.errors = [];\r\n        /**\r\n         *  Whether the controller is currently validating.\r\n         */\r\n        this.validating = false;\r\n        // Elements related to validation results that have been rendered.\r\n        this.elements = new Map();\r\n        // Objects that have been added to the controller instance (entity-style validation).\r\n        this.objects = new Map();\r\n        /**\r\n         * The trigger that will invoke automatic validation of a property used in a binding.\r\n         */\r\n        this.validateTrigger = validateTrigger.blur;\r\n        // Promise that resolves when validation has completed.\r\n        this.finishValidating = Promise.resolve();\r\n        this.eventCallbacks = [];\r\n    }\r\n    /**\r\n     * Subscribe to controller validate and reset events. These events occur when the\r\n     * controller's \"validate\"\" and \"reset\" methods are called.\r\n     * @param callback The callback to be invoked when the controller validates or resets.\r\n     */\r\n    ValidationController.prototype.subscribe = function (callback) {\r\n        var _this = this;\r\n        this.eventCallbacks.push(callback);\r\n        return {\r\n            dispose: function () {\r\n                var index = _this.eventCallbacks.indexOf(callback);\r\n                if (index === -1) {\r\n                    return;\r\n                }\r\n                _this.eventCallbacks.splice(index, 1);\r\n            }\r\n        };\r\n    };\r\n    /**\r\n     * Adds an object to the set of objects that should be validated when validate is called.\r\n     * @param object The object.\r\n     * @param rules Optional. The rules. If rules aren't supplied the Validator implementation will lookup the rules.\r\n     */\r\n    ValidationController.prototype.addObject = function (object, rules) {\r\n        this.objects.set(object, rules);\r\n    };\r\n    /**\r\n     * Removes an object from the set of objects that should be validated when validate is called.\r\n     * @param object The object.\r\n     */\r\n    ValidationController.prototype.removeObject = function (object) {\r\n        this.objects.delete(object);\r\n        this.processResultDelta('reset', this.results.filter(function (result) { return result.object === object; }), []);\r\n    };\r\n    /**\r\n     * Adds and renders an error.\r\n     */\r\n    ValidationController.prototype.addError = function (message, object, propertyName) {\r\n        if (propertyName === void 0) { propertyName = null; }\r\n        var resolvedPropertyName;\r\n        if (propertyName === null) {\r\n            resolvedPropertyName = propertyName;\r\n        }\r\n        else {\r\n            resolvedPropertyName = this.propertyParser.parse(propertyName);\r\n        }\r\n        var result = new ValidateResult({ __manuallyAdded__: true }, object, resolvedPropertyName, false, message);\r\n        this.processResultDelta('validate', [], [result]);\r\n        return result;\r\n    };\r\n    /**\r\n     * Removes and unrenders an error.\r\n     */\r\n    ValidationController.prototype.removeError = function (result) {\r\n        if (this.results.indexOf(result) !== -1) {\r\n            this.processResultDelta('reset', [result], []);\r\n        }\r\n    };\r\n    /**\r\n     * Adds a renderer.\r\n     * @param renderer The renderer.\r\n     */\r\n    ValidationController.prototype.addRenderer = function (renderer) {\r\n        var _this = this;\r\n        this.renderers.push(renderer);\r\n        renderer.render({\r\n            kind: 'validate',\r\n            render: this.results.map(function (result) { return ({ result: result, elements: _this.elements.get(result) }); }),\r\n            unrender: []\r\n        });\r\n    };\r\n    /**\r\n     * Removes a renderer.\r\n     * @param renderer The renderer.\r\n     */\r\n    ValidationController.prototype.removeRenderer = function (renderer) {\r\n        var _this = this;\r\n        this.renderers.splice(this.renderers.indexOf(renderer), 1);\r\n        renderer.render({\r\n            kind: 'reset',\r\n            render: [],\r\n            unrender: this.results.map(function (result) { return ({ result: result, elements: _this.elements.get(result) }); })\r\n        });\r\n    };\r\n    /**\r\n     * Registers a binding with the controller.\r\n     * @param binding The binding instance.\r\n     * @param target The DOM element.\r\n     * @param rules (optional) rules associated with the binding. Validator implementation specific.\r\n     */\r\n    ValidationController.prototype.registerBinding = function (binding, target, rules) {\r\n        this.bindings.set(binding, { target: target, rules: rules, propertyInfo: null });\r\n    };\r\n    /**\r\n     * Unregisters a binding with the controller.\r\n     * @param binding The binding instance.\r\n     */\r\n    ValidationController.prototype.unregisterBinding = function (binding) {\r\n        this.resetBinding(binding);\r\n        this.bindings.delete(binding);\r\n    };\r\n    /**\r\n     * Interprets the instruction and returns a predicate that will identify\r\n     * relevant results in the list of rendered validation results.\r\n     */\r\n    ValidationController.prototype.getInstructionPredicate = function (instruction) {\r\n        var _this = this;\r\n        if (instruction) {\r\n            var object_1 = instruction.object, propertyName_1 = instruction.propertyName, rules_1 = instruction.rules;\r\n            var predicate_1;\r\n            if (instruction.propertyName) {\r\n                predicate_1 = function (x) { return x.object === object_1 && x.propertyName === propertyName_1; };\r\n            }\r\n            else {\r\n                predicate_1 = function (x) { return x.object === object_1; };\r\n            }\r\n            if (rules_1) {\r\n                return function (x) { return predicate_1(x) && _this.validator.ruleExists(rules_1, x.rule); };\r\n            }\r\n            return predicate_1;\r\n        }\r\n        else {\r\n            return function () { return true; };\r\n        }\r\n    };\r\n    /**\r\n     * Validates and renders results.\r\n     * @param instruction Optional. Instructions on what to validate. If undefined, all\r\n     * objects and bindings will be validated.\r\n     */\r\n    ValidationController.prototype.validate = function (instruction) {\r\n        var _this = this;\r\n        // Get a function that will process the validation instruction.\r\n        var execute;\r\n        if (instruction) {\r\n            // tslint:disable-next-line:prefer-const\r\n            var object_2 = instruction.object, propertyName_2 = instruction.propertyName, rules_2 = instruction.rules;\r\n            // if rules were not specified, check the object map.\r\n            rules_2 = rules_2 || this.objects.get(object_2);\r\n            // property specified?\r\n            if (instruction.propertyName === undefined) {\r\n                // validate the specified object.\r\n                execute = function () { return _this.validator.validateObject(object_2, rules_2); };\r\n            }\r\n            else {\r\n                // validate the specified property.\r\n                execute = function () { return _this.validator.validateProperty(object_2, propertyName_2, rules_2); };\r\n            }\r\n        }\r\n        else {\r\n            // validate all objects and bindings.\r\n            execute = function () {\r\n                var promises = [];\r\n                for (var _i = 0, _a = Array.from(_this.objects); _i < _a.length; _i++) {\r\n                    var _b = _a[_i], object = _b[0], rules = _b[1];\r\n                    promises.push(_this.validator.validateObject(object, rules));\r\n                }\r\n                for (var _c = 0, _d = Array.from(_this.bindings); _c < _d.length; _c++) {\r\n                    var _e = _d[_c], binding = _e[0], rules = _e[1].rules;\r\n                    var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n                    if (!propertyInfo || _this.objects.has(propertyInfo.object)) {\r\n                        continue;\r\n                    }\r\n                    promises.push(_this.validator.validateProperty(propertyInfo.object, propertyInfo.propertyName, rules));\r\n                }\r\n                return Promise.all(promises).then(function (resultSets) { return resultSets.reduce(function (a, b) { return a.concat(b); }, []); });\r\n            };\r\n        }\r\n        // Wait for any existing validation to finish, execute the instruction, render the results.\r\n        this.validating = true;\r\n        var returnPromise = this.finishValidating\r\n            .then(execute)\r\n            .then(function (newResults) {\r\n            var predicate = _this.getInstructionPredicate(instruction);\r\n            var oldResults = _this.results.filter(predicate);\r\n            _this.processResultDelta('validate', oldResults, newResults);\r\n            if (returnPromise === _this.finishValidating) {\r\n                _this.validating = false;\r\n            }\r\n            var result = {\r\n                instruction: instruction,\r\n                valid: newResults.find(function (x) { return !x.valid; }) === undefined,\r\n                results: newResults\r\n            };\r\n            _this.invokeCallbacks(instruction, result);\r\n            return result;\r\n        })\r\n            .catch(function (exception) {\r\n            // recover, to enable subsequent calls to validate()\r\n            _this.validating = false;\r\n            _this.finishValidating = Promise.resolve();\r\n            return Promise.reject(exception);\r\n        });\r\n        this.finishValidating = returnPromise;\r\n        return returnPromise;\r\n    };\r\n    /**\r\n     * Resets any rendered validation results (unrenders).\r\n     * @param instruction Optional. Instructions on what to reset. If unspecified all rendered results\r\n     * will be unrendered.\r\n     */\r\n    ValidationController.prototype.reset = function (instruction) {\r\n        var predicate = this.getInstructionPredicate(instruction);\r\n        var oldResults = this.results.filter(predicate);\r\n        this.processResultDelta('reset', oldResults, []);\r\n        this.invokeCallbacks(instruction, null);\r\n    };\r\n    /**\r\n     * Gets the elements associated with an object and propertyName (if any).\r\n     */\r\n    ValidationController.prototype.getAssociatedElements = function (_a) {\r\n        var object = _a.object, propertyName = _a.propertyName;\r\n        var elements = [];\r\n        for (var _i = 0, _b = Array.from(this.bindings); _i < _b.length; _i++) {\r\n            var _c = _b[_i], binding = _c[0], target = _c[1].target;\r\n            var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n            if (propertyInfo && propertyInfo.object === object && propertyInfo.propertyName === propertyName) {\r\n                elements.push(target);\r\n            }\r\n        }\r\n        return elements;\r\n    };\r\n    ValidationController.prototype.processResultDelta = function (kind, oldResults, newResults) {\r\n        // prepare the instruction.\r\n        var instruction = {\r\n            kind: kind,\r\n            render: [],\r\n            unrender: []\r\n        };\r\n        // create a shallow copy of newResults so we can mutate it without causing side-effects.\r\n        newResults = newResults.slice(0);\r\n        var _loop_1 = function (oldResult) {\r\n            // get the elements associated with the old result.\r\n            var elements = this_1.elements.get(oldResult);\r\n            // remove the old result from the element map.\r\n            this_1.elements.delete(oldResult);\r\n            // create the unrender instruction.\r\n            instruction.unrender.push({ result: oldResult, elements: elements });\r\n            // determine if there's a corresponding new result for the old result we are unrendering.\r\n            var newResultIndex = newResults.findIndex(function (x) { return x.rule === oldResult.rule && x.object === oldResult.object && x.propertyName === oldResult.propertyName; });\r\n            if (newResultIndex === -1) {\r\n                // no corresponding new result... simple remove.\r\n                this_1.results.splice(this_1.results.indexOf(oldResult), 1);\r\n                if (!oldResult.valid) {\r\n                    this_1.errors.splice(this_1.errors.indexOf(oldResult), 1);\r\n                }\r\n            }\r\n            else {\r\n                // there is a corresponding new result...\r\n                var newResult = newResults.splice(newResultIndex, 1)[0];\r\n                // get the elements that are associated with the new result.\r\n                var elements_1 = this_1.getAssociatedElements(newResult);\r\n                this_1.elements.set(newResult, elements_1);\r\n                // create a render instruction for the new result.\r\n                instruction.render.push({ result: newResult, elements: elements_1 });\r\n                // do an in-place replacement of the old result with the new result.\r\n                // this ensures any repeats bound to this.results will not thrash.\r\n                this_1.results.splice(this_1.results.indexOf(oldResult), 1, newResult);\r\n                if (!oldResult.valid && newResult.valid) {\r\n                    this_1.errors.splice(this_1.errors.indexOf(oldResult), 1);\r\n                }\r\n                else if (!oldResult.valid && !newResult.valid) {\r\n                    this_1.errors.splice(this_1.errors.indexOf(oldResult), 1, newResult);\r\n                }\r\n                else if (!newResult.valid) {\r\n                    this_1.errors.push(newResult);\r\n                }\r\n            }\r\n        };\r\n        var this_1 = this;\r\n        // create unrender instructions from the old results.\r\n        for (var _i = 0, oldResults_1 = oldResults; _i < oldResults_1.length; _i++) {\r\n            var oldResult = oldResults_1[_i];\r\n            _loop_1(oldResult);\r\n        }\r\n        // create render instructions from the remaining new results.\r\n        for (var _a = 0, newResults_1 = newResults; _a < newResults_1.length; _a++) {\r\n            var result = newResults_1[_a];\r\n            var elements = this.getAssociatedElements(result);\r\n            instruction.render.push({ result: result, elements: elements });\r\n            this.elements.set(result, elements);\r\n            this.results.push(result);\r\n            if (!result.valid) {\r\n                this.errors.push(result);\r\n            }\r\n        }\r\n        // render.\r\n        for (var _b = 0, _c = this.renderers; _b < _c.length; _b++) {\r\n            var renderer = _c[_b];\r\n            renderer.render(instruction);\r\n        }\r\n    };\r\n    /**\r\n     * Validates the property associated with a binding.\r\n     */\r\n    ValidationController.prototype.validateBinding = function (binding) {\r\n        if (!binding.isBound) {\r\n            return;\r\n        }\r\n        var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n        var rules;\r\n        var registeredBinding = this.bindings.get(binding);\r\n        if (registeredBinding) {\r\n            rules = registeredBinding.rules;\r\n            registeredBinding.propertyInfo = propertyInfo;\r\n        }\r\n        if (!propertyInfo) {\r\n            return;\r\n        }\r\n        var object = propertyInfo.object, propertyName = propertyInfo.propertyName;\r\n        this.validate({ object: object, propertyName: propertyName, rules: rules });\r\n    };\r\n    /**\r\n     * Resets the results for a property associated with a binding.\r\n     */\r\n    ValidationController.prototype.resetBinding = function (binding) {\r\n        var registeredBinding = this.bindings.get(binding);\r\n        var propertyInfo = getPropertyInfo(binding.sourceExpression, binding.source);\r\n        if (!propertyInfo && registeredBinding) {\r\n            propertyInfo = registeredBinding.propertyInfo;\r\n        }\r\n        if (registeredBinding) {\r\n            registeredBinding.propertyInfo = null;\r\n        }\r\n        if (!propertyInfo) {\r\n            return;\r\n        }\r\n        var object = propertyInfo.object, propertyName = propertyInfo.propertyName;\r\n        this.reset({ object: object, propertyName: propertyName });\r\n    };\r\n    /**\r\n     * Changes the controller's validateTrigger.\r\n     * @param newTrigger The new validateTrigger\r\n     */\r\n    ValidationController.prototype.changeTrigger = function (newTrigger) {\r\n        this.validateTrigger = newTrigger;\r\n        var bindings = Array.from(this.bindings.keys());\r\n        for (var _i = 0, bindings_1 = bindings; _i < bindings_1.length; _i++) {\r\n            var binding = bindings_1[_i];\r\n            var source = binding.source;\r\n            binding.unbind();\r\n            binding.bind(source);\r\n        }\r\n    };\r\n    /**\r\n     * Revalidates the controller's current set of errors.\r\n     */\r\n    ValidationController.prototype.revalidateErrors = function () {\r\n        for (var _i = 0, _a = this.errors; _i < _a.length; _i++) {\r\n            var _b = _a[_i], object = _b.object, propertyName = _b.propertyName, rule = _b.rule;\r\n            if (rule.__manuallyAdded__) {\r\n                continue;\r\n            }\r\n            var rules = [[rule]];\r\n            this.validate({ object: object, propertyName: propertyName, rules: rules });\r\n        }\r\n    };\r\n    ValidationController.prototype.invokeCallbacks = function (instruction, result) {\r\n        if (this.eventCallbacks.length === 0) {\r\n            return;\r\n        }\r\n        var event = new ValidateEvent(result ? 'validate' : 'reset', this.errors, this.results, instruction || null, result);\r\n        for (var i = 0; i < this.eventCallbacks.length; i++) {\r\n            this.eventCallbacks[i](event);\r\n        }\r\n    };\r\n    ValidationController.inject = [Validator, PropertyAccessorParser];\r\n    return ValidationController;\r\n}());\n\n/**\r\n * Binding behavior. Indicates the bound property should be validated.\r\n */\r\nvar ValidateBindingBehaviorBase = /** @class */ (function () {\r\n    function ValidateBindingBehaviorBase(taskQueue) {\r\n        this.taskQueue = taskQueue;\r\n    }\r\n    ValidateBindingBehaviorBase.prototype.bind = function (binding, source, rulesOrController, rules) {\r\n        var _this = this;\r\n        // identify the target element.\r\n        var target = getTargetDOMElement(binding, source);\r\n        // locate the controller.\r\n        var controller;\r\n        if (rulesOrController instanceof ValidationController) {\r\n            controller = rulesOrController;\r\n        }\r\n        else {\r\n            controller = source.container.get(Optional.of(ValidationController));\r\n            rules = rulesOrController;\r\n        }\r\n        if (controller === null) {\r\n            throw new Error(\"A ValidationController has not been registered.\");\r\n        }\r\n        controller.registerBinding(binding, target, rules);\r\n        binding.validationController = controller;\r\n        var trigger = this.getValidateTrigger(controller);\r\n        // tslint:disable-next-line:no-bitwise\r\n        if (trigger & validateTrigger.change) {\r\n            binding.vbbUpdateSource = binding.updateSource;\r\n            // tslint:disable-next-line:only-arrow-functions\r\n            // tslint:disable-next-line:space-before-function-paren\r\n            binding.updateSource = function (value) {\r\n                this.vbbUpdateSource(value);\r\n                this.validationController.validateBinding(this);\r\n            };\r\n        }\r\n        // tslint:disable-next-line:no-bitwise\r\n        if (trigger & validateTrigger.blur) {\r\n            binding.validateBlurHandler = function () {\r\n                _this.taskQueue.queueMicroTask(function () { return controller.validateBinding(binding); });\r\n            };\r\n            binding.validateTarget = target;\r\n            target.addEventListener('blur', binding.validateBlurHandler);\r\n        }\r\n        if (trigger !== validateTrigger.manual) {\r\n            binding.standardUpdateTarget = binding.updateTarget;\r\n            // tslint:disable-next-line:only-arrow-functions\r\n            // tslint:disable-next-line:space-before-function-paren\r\n            binding.updateTarget = function (value) {\r\n                this.standardUpdateTarget(value);\r\n                this.validationController.resetBinding(this);\r\n            };\r\n        }\r\n    };\r\n    ValidateBindingBehaviorBase.prototype.unbind = function (binding) {\r\n        // reset the binding to it's original state.\r\n        if (binding.vbbUpdateSource) {\r\n            binding.updateSource = binding.vbbUpdateSource;\r\n            binding.vbbUpdateSource = null;\r\n        }\r\n        if (binding.standardUpdateTarget) {\r\n            binding.updateTarget = binding.standardUpdateTarget;\r\n            binding.standardUpdateTarget = null;\r\n        }\r\n        if (binding.validateBlurHandler) {\r\n            binding.validateTarget.removeEventListener('blur', binding.validateBlurHandler);\r\n            binding.validateBlurHandler = null;\r\n            binding.validateTarget = null;\r\n        }\r\n        binding.validationController.unregisterBinding(binding);\r\n        binding.validationController = null;\r\n    };\r\n    return ValidateBindingBehaviorBase;\r\n}());\n\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the validate trigger specified by the associated controller's\r\n * validateTrigger property occurs.\r\n */\r\nvar ValidateBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateBindingBehavior, _super);\r\n    function ValidateBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateBindingBehavior.prototype.getValidateTrigger = function (controller) {\r\n        return controller.validateTrigger;\r\n    };\r\n    ValidateBindingBehavior.inject = [TaskQueue];\r\n    ValidateBindingBehavior = __decorate([\r\n        bindingBehavior('validate')\r\n    ], ValidateBindingBehavior);\r\n    return ValidateBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property will be validated\r\n * manually, by calling controller.validate(). No automatic validation\r\n * triggered by data-entry or blur will occur.\r\n */\r\nvar ValidateManuallyBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateManuallyBindingBehavior, _super);\r\n    function ValidateManuallyBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateManuallyBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.manual;\r\n    };\r\n    ValidateManuallyBindingBehavior.inject = [TaskQueue];\r\n    ValidateManuallyBindingBehavior = __decorate([\r\n        bindingBehavior('validateManually')\r\n    ], ValidateManuallyBindingBehavior);\r\n    return ValidateManuallyBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs.\r\n */\r\nvar ValidateOnBlurBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateOnBlurBindingBehavior, _super);\r\n    function ValidateOnBlurBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateOnBlurBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.blur;\r\n    };\r\n    ValidateOnBlurBindingBehavior.inject = [TaskQueue];\r\n    ValidateOnBlurBindingBehavior = __decorate([\r\n        bindingBehavior('validateOnBlur')\r\n    ], ValidateOnBlurBindingBehavior);\r\n    return ValidateOnBlurBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element is changed by the user, causing a change\r\n * to the model.\r\n */\r\nvar ValidateOnChangeBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateOnChangeBindingBehavior, _super);\r\n    function ValidateOnChangeBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateOnChangeBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.change;\r\n    };\r\n    ValidateOnChangeBindingBehavior.inject = [TaskQueue];\r\n    ValidateOnChangeBindingBehavior = __decorate([\r\n        bindingBehavior('validateOnChange')\r\n    ], ValidateOnChangeBindingBehavior);\r\n    return ValidateOnChangeBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs or is changed by the user, causing\r\n * a change to the model.\r\n */\r\nvar ValidateOnChangeOrBlurBindingBehavior = /** @class */ (function (_super) {\r\n    __extends(ValidateOnChangeOrBlurBindingBehavior, _super);\r\n    function ValidateOnChangeOrBlurBindingBehavior() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ValidateOnChangeOrBlurBindingBehavior.prototype.getValidateTrigger = function () {\r\n        return validateTrigger.changeOrBlur;\r\n    };\r\n    ValidateOnChangeOrBlurBindingBehavior.inject = [TaskQueue];\r\n    ValidateOnChangeOrBlurBindingBehavior = __decorate([\r\n        bindingBehavior('validateOnChangeOrBlur')\r\n    ], ValidateOnChangeOrBlurBindingBehavior);\r\n    return ValidateOnChangeOrBlurBindingBehavior;\r\n}(ValidateBindingBehaviorBase));\n\n/**\r\n * Creates ValidationController instances.\r\n */\r\nvar ValidationControllerFactory = /** @class */ (function () {\r\n    function ValidationControllerFactory(container) {\r\n        this.container = container;\r\n    }\r\n    ValidationControllerFactory.get = function (container) {\r\n        return new ValidationControllerFactory(container);\r\n    };\r\n    /**\r\n     * Creates a new controller instance.\r\n     */\r\n    ValidationControllerFactory.prototype.create = function (validator) {\r\n        if (!validator) {\r\n            validator = this.container.get(Validator);\r\n        }\r\n        var propertyParser = this.container.get(PropertyAccessorParser);\r\n        return new ValidationController(validator, propertyParser);\r\n    };\r\n    /**\r\n     * Creates a new controller and registers it in the current element's container so that it's\r\n     * available to the validate binding behavior and renderers.\r\n     */\r\n    ValidationControllerFactory.prototype.createForCurrentScope = function (validator) {\r\n        var controller = this.create(validator);\r\n        this.container.registerInstance(ValidationController, controller);\r\n        return controller;\r\n    };\r\n    return ValidationControllerFactory;\r\n}());\r\nValidationControllerFactory['protocol:aurelia:resolver'] = true;\n\nvar ValidationErrorsCustomAttribute = /** @class */ (function () {\r\n    function ValidationErrorsCustomAttribute(boundaryElement, controllerAccessor) {\r\n        this.boundaryElement = boundaryElement;\r\n        this.controllerAccessor = controllerAccessor;\r\n        this.controller = null;\r\n        this.errors = [];\r\n        this.errorsInternal = [];\r\n    }\r\n    ValidationErrorsCustomAttribute.inject = function () {\r\n        return [DOM.Element, Lazy.of(ValidationController)];\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.sort = function () {\r\n        this.errorsInternal.sort(function (a, b) {\r\n            if (a.targets[0] === b.targets[0]) {\r\n                return 0;\r\n            }\r\n            // tslint:disable-next-line:no-bitwise\r\n            return a.targets[0].compareDocumentPosition(b.targets[0]) & 2 ? 1 : -1;\r\n        });\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.interestingElements = function (elements) {\r\n        var _this = this;\r\n        return elements.filter(function (e) { return _this.boundaryElement.contains(e); });\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.render = function (instruction) {\r\n        var _loop_1 = function (result) {\r\n            var index = this_1.errorsInternal.findIndex(function (x) { return x.error === result; });\r\n            if (index !== -1) {\r\n                this_1.errorsInternal.splice(index, 1);\r\n            }\r\n        };\r\n        var this_1 = this;\r\n        for (var _i = 0, _a = instruction.unrender; _i < _a.length; _i++) {\r\n            var result = _a[_i].result;\r\n            _loop_1(result);\r\n        }\r\n        for (var _b = 0, _c = instruction.render; _b < _c.length; _b++) {\r\n            var _d = _c[_b], result = _d.result, elements = _d.elements;\r\n            if (result.valid) {\r\n                continue;\r\n            }\r\n            var targets = this.interestingElements(elements);\r\n            if (targets.length) {\r\n                this.errorsInternal.push({ error: result, targets: targets });\r\n            }\r\n        }\r\n        this.sort();\r\n        this.errors = this.errorsInternal;\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.bind = function () {\r\n        if (!this.controller) {\r\n            this.controller = this.controllerAccessor();\r\n        }\r\n        // this will call render() with the side-effect of updating this.errors\r\n        this.controller.addRenderer(this);\r\n    };\r\n    ValidationErrorsCustomAttribute.prototype.unbind = function () {\r\n        if (this.controller) {\r\n            this.controller.removeRenderer(this);\r\n        }\r\n    };\r\n    __decorate([\r\n        bindable({ defaultBindingMode: bindingMode.oneWay })\r\n    ], ValidationErrorsCustomAttribute.prototype, \"controller\", void 0);\r\n    __decorate([\r\n        bindable({ primaryProperty: true, defaultBindingMode: bindingMode.twoWay })\r\n    ], ValidationErrorsCustomAttribute.prototype, \"errors\", void 0);\r\n    ValidationErrorsCustomAttribute = __decorate([\r\n        customAttribute('validation-errors')\r\n    ], ValidationErrorsCustomAttribute);\r\n    return ValidationErrorsCustomAttribute;\r\n}());\n\nvar ValidationRendererCustomAttribute = /** @class */ (function () {\r\n    function ValidationRendererCustomAttribute() {\r\n    }\r\n    ValidationRendererCustomAttribute.prototype.created = function (view) {\r\n        this.container = view.container;\r\n    };\r\n    ValidationRendererCustomAttribute.prototype.bind = function () {\r\n        this.controller = this.container.get(ValidationController);\r\n        this.renderer = this.container.get(this.value);\r\n        this.controller.addRenderer(this.renderer);\r\n    };\r\n    ValidationRendererCustomAttribute.prototype.unbind = function () {\r\n        this.controller.removeRenderer(this.renderer);\r\n        this.controller = null;\r\n        this.renderer = null;\r\n    };\r\n    ValidationRendererCustomAttribute = __decorate([\r\n        customAttribute('validation-renderer')\r\n    ], ValidationRendererCustomAttribute);\r\n    return ValidationRendererCustomAttribute;\r\n}());\n\n/**\r\n * Sets, unsets and retrieves rules on an object or constructor function.\r\n */\r\nvar Rules = /** @class */ (function () {\r\n    function Rules() {\r\n    }\r\n    /**\r\n     * Applies the rules to a target.\r\n     */\r\n    Rules.set = function (target, rules) {\r\n        if (target instanceof Function) {\r\n            target = target.prototype;\r\n        }\r\n        Object.defineProperty(target, Rules.key, { enumerable: false, configurable: false, writable: true, value: rules });\r\n    };\r\n    /**\r\n     * Removes rules from a target.\r\n     */\r\n    Rules.unset = function (target) {\r\n        if (target instanceof Function) {\r\n            target = target.prototype;\r\n        }\r\n        target[Rules.key] = null;\r\n    };\r\n    /**\r\n     * Retrieves the target's rules.\r\n     */\r\n    Rules.get = function (target) {\r\n        return target[Rules.key] || null;\r\n    };\r\n    /**\r\n     * The name of the property that stores the rules.\r\n     */\r\n    Rules.key = '__rules__';\r\n    return Rules;\r\n}());\n\n// tslint:disable:no-empty\r\nvar ExpressionVisitor = /** @class */ (function () {\r\n    function ExpressionVisitor() {\r\n    }\r\n    ExpressionVisitor.prototype.visitChain = function (chain) {\r\n        this.visitArgs(chain.expressions);\r\n    };\r\n    ExpressionVisitor.prototype.visitBindingBehavior = function (behavior) {\r\n        behavior.expression.accept(this);\r\n        this.visitArgs(behavior.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitValueConverter = function (converter) {\r\n        converter.expression.accept(this);\r\n        this.visitArgs(converter.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitAssign = function (assign) {\r\n        assign.target.accept(this);\r\n        assign.value.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitConditional = function (conditional) {\r\n        conditional.condition.accept(this);\r\n        conditional.yes.accept(this);\r\n        conditional.no.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessThis = function (access) {\r\n        access.ancestor = access.ancestor;\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessScope = function (access) {\r\n        access.name = access.name;\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessMember = function (access) {\r\n        access.object.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitAccessKeyed = function (access) {\r\n        access.object.accept(this);\r\n        access.key.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitCallScope = function (call) {\r\n        this.visitArgs(call.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitCallFunction = function (call) {\r\n        call.func.accept(this);\r\n        this.visitArgs(call.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitCallMember = function (call) {\r\n        call.object.accept(this);\r\n        this.visitArgs(call.args);\r\n    };\r\n    ExpressionVisitor.prototype.visitPrefix = function (prefix) {\r\n        prefix.expression.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitBinary = function (binary) {\r\n        binary.left.accept(this);\r\n        binary.right.accept(this);\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralPrimitive = function (literal) {\r\n        literal.value = literal.value;\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralArray = function (literal) {\r\n        this.visitArgs(literal.elements);\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralObject = function (literal) {\r\n        this.visitArgs(literal.values);\r\n    };\r\n    ExpressionVisitor.prototype.visitLiteralString = function (literal) {\r\n        literal.value = literal.value;\r\n    };\r\n    ExpressionVisitor.prototype.visitArgs = function (args) {\r\n        for (var i = 0; i < args.length; i++) {\r\n            args[i].accept(this);\r\n        }\r\n    };\r\n    return ExpressionVisitor;\r\n}());\n\nvar ValidationMessageParser = /** @class */ (function () {\r\n    function ValidationMessageParser(bindinqLanguage) {\r\n        this.bindinqLanguage = bindinqLanguage;\r\n        this.emptyStringExpression = new LiteralString('');\r\n        this.nullExpression = new LiteralPrimitive(null);\r\n        this.undefinedExpression = new LiteralPrimitive(undefined);\r\n        this.cache = {};\r\n    }\r\n    ValidationMessageParser.prototype.parse = function (message) {\r\n        if (this.cache[message] !== undefined) {\r\n            return this.cache[message];\r\n        }\r\n        var parts = this.bindinqLanguage.parseInterpolation(null, message);\r\n        if (parts === null) {\r\n            return new LiteralString(message);\r\n        }\r\n        var expression = new LiteralString(parts[0]);\r\n        for (var i = 1; i < parts.length; i += 2) {\r\n            expression = new Binary('+', expression, new Binary('+', this.coalesce(parts[i]), new LiteralString(parts[i + 1])));\r\n        }\r\n        MessageExpressionValidator.validate(expression, message);\r\n        this.cache[message] = expression;\r\n        return expression;\r\n    };\r\n    ValidationMessageParser.prototype.coalesce = function (part) {\r\n        // part === null || part === undefined ? '' : part\r\n        return new Conditional(new Binary('||', new Binary('===', part, this.nullExpression), new Binary('===', part, this.undefinedExpression)), this.emptyStringExpression, new CallMember(part, 'toString', []));\r\n    };\r\n    ValidationMessageParser.inject = [BindingLanguage];\r\n    return ValidationMessageParser;\r\n}());\r\nvar MessageExpressionValidator = /** @class */ (function (_super) {\r\n    __extends(MessageExpressionValidator, _super);\r\n    function MessageExpressionValidator(originalMessage) {\r\n        var _this = _super.call(this) || this;\r\n        _this.originalMessage = originalMessage;\r\n        return _this;\r\n    }\r\n    MessageExpressionValidator.validate = function (expression, originalMessage) {\r\n        var visitor = new MessageExpressionValidator(originalMessage);\r\n        expression.accept(visitor);\r\n    };\r\n    MessageExpressionValidator.prototype.visitAccessScope = function (access) {\r\n        if (access.ancestor !== 0) {\r\n            throw new Error('$parent is not permitted in validation message expressions.');\r\n        }\r\n        if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) {\r\n            getLogger('aurelia-validation')\r\n                // tslint:disable-next-line:max-line-length\r\n                .warn(\"Did you mean to use \\\"$\" + access.name + \"\\\" instead of \\\"\" + access.name + \"\\\" in this validation message template: \\\"\" + this.originalMessage + \"\\\"?\");\r\n        }\r\n    };\r\n    return MessageExpressionValidator;\r\n}(ExpressionVisitor));\n\n/**\r\n * Dictionary of validation messages. [messageKey]: messageExpression\r\n */\r\nvar validationMessages = {\r\n    /**\r\n     * The default validation message. Used with rules that have no standard message.\r\n     */\r\n    default: \"${$displayName} is invalid.\",\r\n    required: \"${$displayName} is required.\",\r\n    matches: \"${$displayName} is not correctly formatted.\",\r\n    email: \"${$displayName} is not a valid email.\",\r\n    minLength: \"${$displayName} must be at least ${$config.length} character${$config.length === 1 ? '' : 's'}.\",\r\n    maxLength: \"${$displayName} cannot be longer than ${$config.length} character${$config.length === 1 ? '' : 's'}.\",\r\n    minItems: \"${$displayName} must contain at least ${$config.count} item${$config.count === 1 ? '' : 's'}.\",\r\n    maxItems: \"${$displayName} cannot contain more than ${$config.count} item${$config.count === 1 ? '' : 's'}.\",\r\n    min: \"${$displayName} must be at least ${$config.constraint}.\",\r\n    max: \"${$displayName} must be at most ${$config.constraint}.\",\r\n    range: \"${$displayName} must be between or equal to ${$config.min} and ${$config.max}.\",\r\n    between: \"${$displayName} must be between but not equal to ${$config.min} and ${$config.max}.\",\r\n    equals: \"${$displayName} must be ${$config.expectedValue}.\",\r\n};\r\n/**\r\n * Retrieves validation messages and property display names.\r\n */\r\nvar ValidationMessageProvider = /** @class */ (function () {\r\n    function ValidationMessageProvider(parser) {\r\n        this.parser = parser;\r\n    }\r\n    /**\r\n     * Returns a message binding expression that corresponds to the key.\r\n     * @param key The message key.\r\n     */\r\n    ValidationMessageProvider.prototype.getMessage = function (key) {\r\n        var message;\r\n        if (key in validationMessages) {\r\n            message = validationMessages[key];\r\n        }\r\n        else {\r\n            message = validationMessages['default'];\r\n        }\r\n        return this.parser.parse(message);\r\n    };\r\n    /**\r\n     * Formulates a property display name using the property name and the configured\r\n     * displayName (if provided).\r\n     * Override this with your own custom logic.\r\n     * @param propertyName The property name.\r\n     */\r\n    ValidationMessageProvider.prototype.getDisplayName = function (propertyName, displayName) {\r\n        if (displayName !== null && displayName !== undefined) {\r\n            return (displayName instanceof Function) ? displayName() : displayName;\r\n        }\r\n        // split on upper-case letters.\r\n        var words = propertyName.toString().split(/(?=[A-Z])/).join(' ');\r\n        // capitalize first letter.\r\n        return words.charAt(0).toUpperCase() + words.slice(1);\r\n    };\r\n    ValidationMessageProvider.inject = [ValidationMessageParser];\r\n    return ValidationMessageProvider;\r\n}());\n\n/**\r\n * Validates.\r\n * Responsible for validating objects and properties.\r\n */\r\nvar StandardValidator = /** @class */ (function (_super) {\r\n    __extends(StandardValidator, _super);\r\n    function StandardValidator(messageProvider, resources) {\r\n        var _this = _super.call(this) || this;\r\n        _this.messageProvider = messageProvider;\r\n        _this.lookupFunctions = resources.lookupFunctions;\r\n        _this.getDisplayName = messageProvider.getDisplayName.bind(messageProvider);\r\n        return _this;\r\n    }\r\n    /**\r\n     * Validates the specified property.\r\n     * @param object The object to validate.\r\n     * @param propertyName The name of the property to validate.\r\n     * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n     * for the object created by ValidationRules....on(class/object)\r\n     */\r\n    StandardValidator.prototype.validateProperty = function (object, propertyName, rules) {\r\n        return this.validate(object, propertyName, rules || null);\r\n    };\r\n    /**\r\n     * Validates all rules for specified object and it's properties.\r\n     * @param object The object to validate.\r\n     * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n     * for the object created by ValidationRules....on(class/object)\r\n     */\r\n    StandardValidator.prototype.validateObject = function (object, rules) {\r\n        return this.validate(object, null, rules || null);\r\n    };\r\n    /**\r\n     * Determines whether a rule exists in a set of rules.\r\n     * @param rules The rules to search.\r\n     * @parem rule The rule to find.\r\n     */\r\n    StandardValidator.prototype.ruleExists = function (rules, rule) {\r\n        var i = rules.length;\r\n        while (i--) {\r\n            if (rules[i].indexOf(rule) !== -1) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    StandardValidator.prototype.getMessage = function (rule, object, value) {\r\n        var expression = rule.message || this.messageProvider.getMessage(rule.messageKey);\r\n        // tslint:disable-next-line:prefer-const\r\n        var _a = rule.property, propertyName = _a.name, displayName = _a.displayName;\r\n        if (propertyName !== null) {\r\n            displayName = this.messageProvider.getDisplayName(propertyName, displayName);\r\n        }\r\n        var overrideContext = {\r\n            $displayName: displayName,\r\n            $propertyName: propertyName,\r\n            $value: value,\r\n            $object: object,\r\n            $config: rule.config,\r\n            // returns the name of a given property, given just the property name (irrespective of the property's displayName)\r\n            // split on capital letters, first letter ensured to be capitalized\r\n            $getDisplayName: this.getDisplayName\r\n        };\r\n        return expression.evaluate({ bindingContext: object, overrideContext: overrideContext }, this.lookupFunctions);\r\n    };\r\n    StandardValidator.prototype.validateRuleSequence = function (object, propertyName, ruleSequence, sequence, results) {\r\n        var _this = this;\r\n        // are we validating all properties or a single property?\r\n        var validateAllProperties = propertyName === null || propertyName === undefined;\r\n        var rules = ruleSequence[sequence];\r\n        var allValid = true;\r\n        // validate each rule.\r\n        var promises = [];\r\n        var _loop_1 = function (i) {\r\n            var rule = rules[i];\r\n            // is the rule related to the property we're validating.\r\n            // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n            if (!validateAllProperties && rule.property.name != propertyName) {\r\n                return \"continue\";\r\n            }\r\n            // is this a conditional rule? is the condition met?\r\n            if (rule.when && !rule.when(object)) {\r\n                return \"continue\";\r\n            }\r\n            // validate.\r\n            var value = rule.property.name === null ? object : object[rule.property.name];\r\n            var promiseOrBoolean = rule.condition(value, object);\r\n            if (!(promiseOrBoolean instanceof Promise)) {\r\n                promiseOrBoolean = Promise.resolve(promiseOrBoolean);\r\n            }\r\n            promises.push(promiseOrBoolean.then(function (valid) {\r\n                var message = valid ? null : _this.getMessage(rule, object, value);\r\n                results.push(new ValidateResult(rule, object, rule.property.name, valid, message));\r\n                allValid = allValid && valid;\r\n                return valid;\r\n            }));\r\n        };\r\n        for (var i = 0; i < rules.length; i++) {\r\n            _loop_1(i);\r\n        }\r\n        return Promise.all(promises)\r\n            .then(function () {\r\n            sequence++;\r\n            if (allValid && sequence < ruleSequence.length) {\r\n                return _this.validateRuleSequence(object, propertyName, ruleSequence, sequence, results);\r\n            }\r\n            return results;\r\n        });\r\n    };\r\n    StandardValidator.prototype.validate = function (object, propertyName, rules) {\r\n        // rules specified?\r\n        if (!rules) {\r\n            // no. attempt to locate the rules.\r\n            rules = Rules.get(object);\r\n        }\r\n        // any rules?\r\n        if (!rules || rules.length === 0) {\r\n            return Promise.resolve([]);\r\n        }\r\n        return this.validateRuleSequence(object, propertyName, rules, 0, []);\r\n    };\r\n    StandardValidator.inject = [ValidationMessageProvider, ViewResources];\r\n    return StandardValidator;\r\n}(Validator));\n\n/**\r\n * Part of the fluent rule API. Enables customizing property rules.\r\n */\r\nvar FluentRuleCustomizer = /** @class */ (function () {\r\n    function FluentRuleCustomizer(property, condition, config, fluentEnsure, fluentRules, parsers) {\r\n        if (config === void 0) { config = {}; }\r\n        this.fluentEnsure = fluentEnsure;\r\n        this.fluentRules = fluentRules;\r\n        this.parsers = parsers;\r\n        this.rule = {\r\n            property: property,\r\n            condition: condition,\r\n            config: config,\r\n            when: null,\r\n            messageKey: 'default',\r\n            message: null,\r\n            sequence: fluentRules.sequence\r\n        };\r\n        this.fluentEnsure._addRule(this.rule);\r\n    }\r\n    /**\r\n     * Validate subsequent rules after previously declared rules have\r\n     * been validated successfully. Use to postpone validation of costly\r\n     * rules until less expensive rules pass validation.\r\n     */\r\n    FluentRuleCustomizer.prototype.then = function () {\r\n        this.fluentRules.sequence++;\r\n        return this;\r\n    };\r\n    /**\r\n     * Specifies the key to use when looking up the rule's validation message.\r\n     */\r\n    FluentRuleCustomizer.prototype.withMessageKey = function (key) {\r\n        this.rule.messageKey = key;\r\n        this.rule.message = null;\r\n        return this;\r\n    };\r\n    /**\r\n     * Specifies rule's validation message.\r\n     */\r\n    FluentRuleCustomizer.prototype.withMessage = function (message) {\r\n        this.rule.messageKey = 'custom';\r\n        this.rule.message = this.parsers.message.parse(message);\r\n        return this;\r\n    };\r\n    /**\r\n     * Specifies a condition that must be met before attempting to validate the rule.\r\n     * @param condition A function that accepts the object as a parameter and returns true\r\n     * or false whether the rule should be evaluated.\r\n     */\r\n    FluentRuleCustomizer.prototype.when = function (condition) {\r\n        this.rule.when = condition;\r\n        return this;\r\n    };\r\n    /**\r\n     * Tags the rule instance, enabling the rule to be found easily\r\n     * using ValidationRules.taggedRules(rules, tag)\r\n     */\r\n    FluentRuleCustomizer.prototype.tag = function (tag) {\r\n        this.rule.tag = tag;\r\n        return this;\r\n    };\r\n    ///// FluentEnsure APIs /////\r\n    /**\r\n     * Target a property with validation rules.\r\n     * @param property The property to target. Can be the property name or a property accessor function.\r\n     */\r\n    FluentRuleCustomizer.prototype.ensure = function (subject) {\r\n        return this.fluentEnsure.ensure(subject);\r\n    };\r\n    /**\r\n     * Targets an object with validation rules.\r\n     */\r\n    FluentRuleCustomizer.prototype.ensureObject = function () {\r\n        return this.fluentEnsure.ensureObject();\r\n    };\r\n    Object.defineProperty(FluentRuleCustomizer.prototype, \"rules\", {\r\n        /**\r\n         * Rules that have been defined using the fluent API.\r\n         */\r\n        get: function () {\r\n            return this.fluentEnsure.rules;\r\n        },\r\n        enumerable: true,\r\n        configurable: true\r\n    });\r\n    /**\r\n     * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n     * @param target A class or object.\r\n     */\r\n    FluentRuleCustomizer.prototype.on = function (target) {\r\n        return this.fluentEnsure.on(target);\r\n    };\r\n    ///////// FluentRules APIs /////////\r\n    /**\r\n     * Applies an ad-hoc rule function to the ensured property or object.\r\n     * @param condition The function to validate the rule.\r\n     * Will be called with two arguments, the property value and the object.\r\n     * Should return a boolean or a Promise that resolves to a boolean.\r\n     */\r\n    FluentRuleCustomizer.prototype.satisfies = function (condition, config) {\r\n        return this.fluentRules.satisfies(condition, config);\r\n    };\r\n    /**\r\n     * Applies a rule by name.\r\n     * @param name The name of the custom or standard rule.\r\n     * @param args The rule's arguments.\r\n     */\r\n    FluentRuleCustomizer.prototype.satisfiesRule = function (name) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var _a;\r\n        return (_a = this.fluentRules).satisfiesRule.apply(_a, [name].concat(args));\r\n    };\r\n    /**\r\n     * Applies the \"required\" rule to the property.\r\n     * The value cannot be null, undefined or whitespace.\r\n     */\r\n    FluentRuleCustomizer.prototype.required = function () {\r\n        return this.fluentRules.required();\r\n    };\r\n    /**\r\n     * Applies the \"matches\" rule to the property.\r\n     * Value must match the specified regular expression.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.matches = function (regex) {\r\n        return this.fluentRules.matches(regex);\r\n    };\r\n    /**\r\n     * Applies the \"email\" rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.email = function () {\r\n        return this.fluentRules.email();\r\n    };\r\n    /**\r\n     * Applies the \"minLength\" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.minLength = function (length) {\r\n        return this.fluentRules.minLength(length);\r\n    };\r\n    /**\r\n     * Applies the \"maxLength\" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.maxLength = function (length) {\r\n        return this.fluentRules.maxLength(length);\r\n    };\r\n    /**\r\n     * Applies the \"minItems\" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.minItems = function (count) {\r\n        return this.fluentRules.minItems(count);\r\n    };\r\n    /**\r\n     * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.maxItems = function (count) {\r\n        return this.fluentRules.maxItems(count);\r\n    };\r\n    /**\r\n     * Applies the \"min\" NUMBER validation rule to the property.\r\n     * Value must be greater than or equal to the specified constraint.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.min = function (value) {\r\n        return this.fluentRules.min(value);\r\n    };\r\n    /**\r\n     * Applies the \"max\" NUMBER validation rule to the property.\r\n     * Value must be less than or equal to the specified constraint.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.max = function (value) {\r\n        return this.fluentRules.max(value);\r\n    };\r\n    /**\r\n     * Applies the \"range\" NUMBER validation rule to the property.\r\n     * Value must be between or equal to the specified min and max.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.range = function (min, max) {\r\n        return this.fluentRules.range(min, max);\r\n    };\r\n    /**\r\n     * Applies the \"between\" NUMBER validation rule to the property.\r\n     * Value must be between but not equal to the specified min and max.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.between = function (min, max) {\r\n        return this.fluentRules.between(min, max);\r\n    };\r\n    /**\r\n     * Applies the \"equals\" validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRuleCustomizer.prototype.equals = function (expectedValue) {\r\n        return this.fluentRules.equals(expectedValue);\r\n    };\r\n    return FluentRuleCustomizer;\r\n}());\r\n/**\r\n * Part of the fluent rule API. Enables applying rules to properties and objects.\r\n */\r\nvar FluentRules = /** @class */ (function () {\r\n    function FluentRules(fluentEnsure, parsers, property) {\r\n        this.fluentEnsure = fluentEnsure;\r\n        this.parsers = parsers;\r\n        this.property = property;\r\n        /**\r\n         * Current rule sequence number. Used to postpone evaluation of rules until rules\r\n         * with lower sequence number have successfully validated. The \"then\" fluent API method\r\n         * manages this property, there's usually no need to set it directly.\r\n         */\r\n        this.sequence = 0;\r\n    }\r\n    /**\r\n     * Sets the display name of the ensured property.\r\n     */\r\n    FluentRules.prototype.displayName = function (name) {\r\n        this.property.displayName = name;\r\n        return this;\r\n    };\r\n    /**\r\n     * Applies an ad-hoc rule function to the ensured property or object.\r\n     * @param condition The function to validate the rule.\r\n     * Will be called with two arguments, the property value and the object.\r\n     * Should return a boolean or a Promise that resolves to a boolean.\r\n     */\r\n    FluentRules.prototype.satisfies = function (condition, config) {\r\n        return new FluentRuleCustomizer(this.property, condition, config, this.fluentEnsure, this, this.parsers);\r\n    };\r\n    /**\r\n     * Applies a rule by name.\r\n     * @param name The name of the custom or standard rule.\r\n     * @param args The rule's arguments.\r\n     */\r\n    FluentRules.prototype.satisfiesRule = function (name) {\r\n        var _this = this;\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var rule = FluentRules.customRules[name];\r\n        if (!rule) {\r\n            // standard rule?\r\n            rule = this[name];\r\n            if (rule instanceof Function) {\r\n                return rule.call.apply(rule, [this].concat(args));\r\n            }\r\n            throw new Error(\"Rule with name \\\"\" + name + \"\\\" does not exist.\");\r\n        }\r\n        var config = rule.argsToConfig ? rule.argsToConfig.apply(rule, args) : undefined;\r\n        return this.satisfies(function (value, obj) {\r\n            var _a;\r\n            return (_a = rule.condition).call.apply(_a, [_this, value, obj].concat(args));\r\n        }, config)\r\n            .withMessageKey(name);\r\n    };\r\n    /**\r\n     * Applies the \"required\" rule to the property.\r\n     * The value cannot be null, undefined or whitespace.\r\n     */\r\n    FluentRules.prototype.required = function () {\r\n        return this.satisfies(function (value) {\r\n            return value !== null\r\n                && value !== undefined\r\n                && !(isString(value) && !/\\S/.test(value));\r\n        }).withMessageKey('required');\r\n    };\r\n    /**\r\n     * Applies the \"matches\" rule to the property.\r\n     * Value must match the specified regular expression.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.matches = function (regex) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length === 0 || regex.test(value); })\r\n            .withMessageKey('matches');\r\n    };\r\n    /**\r\n     * Applies the \"email\" rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.email = function () {\r\n        // regex from https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n        /* tslint:disable:max-line-length */\r\n        return this.matches(/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/)\r\n            /* tslint:enable:max-line-length */\r\n            .withMessageKey('email');\r\n    };\r\n    /**\r\n     * Applies the \"minLength\" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.minLength = function (length) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length === 0 || value.length >= length; }, { length: length })\r\n            .withMessageKey('minLength');\r\n    };\r\n    /**\r\n     * Applies the \"maxLength\" STRING validation rule to the property.\r\n     * null, undefined and empty-string values are considered valid.\r\n     */\r\n    FluentRules.prototype.maxLength = function (length) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length === 0 || value.length <= length; }, { length: length })\r\n            .withMessageKey('maxLength');\r\n    };\r\n    /**\r\n     * Applies the \"minItems\" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.minItems = function (count) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length >= count; }, { count: count })\r\n            .withMessageKey('minItems');\r\n    };\r\n    /**\r\n     * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.maxItems = function (count) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value.length <= count; }, { count: count })\r\n            .withMessageKey('maxItems');\r\n    };\r\n    /**\r\n     * Applies the \"min\" NUMBER validation rule to the property.\r\n     * Value must be greater than or equal to the specified constraint.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.min = function (constraint) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value >= constraint; }, { constraint: constraint })\r\n            .withMessageKey('min');\r\n    };\r\n    /**\r\n     * Applies the \"max\" NUMBER validation rule to the property.\r\n     * Value must be less than or equal to the specified constraint.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.max = function (constraint) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value <= constraint; }, { constraint: constraint })\r\n            .withMessageKey('max');\r\n    };\r\n    /**\r\n     * Applies the \"range\" NUMBER validation rule to the property.\r\n     * Value must be between or equal to the specified min and max.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.range = function (min, max) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || (value >= min && value <= max); }, { min: min, max: max })\r\n            .withMessageKey('range');\r\n    };\r\n    /**\r\n     * Applies the \"between\" NUMBER validation rule to the property.\r\n     * Value must be between but not equal to the specified min and max.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.between = function (min, max) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || (value > min && value < max); }, { min: min, max: max })\r\n            .withMessageKey('between');\r\n    };\r\n    /**\r\n     * Applies the \"equals\" validation rule to the property.\r\n     * null and undefined values are considered valid.\r\n     */\r\n    FluentRules.prototype.equals = function (expectedValue) {\r\n        return this.satisfies(function (value) { return value === null || value === undefined || value === '' || value === expectedValue; }, { expectedValue: expectedValue })\r\n            .withMessageKey('equals');\r\n    };\r\n    FluentRules.customRules = {};\r\n    return FluentRules;\r\n}());\r\n/**\r\n * Part of the fluent rule API. Enables targeting properties and objects with rules.\r\n */\r\nvar FluentEnsure = /** @class */ (function () {\r\n    function FluentEnsure(parsers) {\r\n        this.parsers = parsers;\r\n        /**\r\n         * Rules that have been defined using the fluent API.\r\n         */\r\n        this.rules = [];\r\n    }\r\n    /**\r\n     * Target a property with validation rules.\r\n     * @param property The property to target. Can be the property name or a property accessor\r\n     * function.\r\n     */\r\n    FluentEnsure.prototype.ensure = function (property) {\r\n        this.assertInitialized();\r\n        var name = this.parsers.property.parse(property);\r\n        var fluentRules = new FluentRules(this, this.parsers, { name: name, displayName: null });\r\n        return this.mergeRules(fluentRules, name);\r\n    };\r\n    /**\r\n     * Targets an object with validation rules.\r\n     */\r\n    FluentEnsure.prototype.ensureObject = function () {\r\n        this.assertInitialized();\r\n        var fluentRules = new FluentRules(this, this.parsers, { name: null, displayName: null });\r\n        return this.mergeRules(fluentRules, null);\r\n    };\r\n    /**\r\n     * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n     * @param target A class or object.\r\n     */\r\n    FluentEnsure.prototype.on = function (target) {\r\n        Rules.set(target, this.rules);\r\n        return this;\r\n    };\r\n    /**\r\n     * Adds a rule definition to the sequenced ruleset.\r\n     * @internal\r\n     */\r\n    FluentEnsure.prototype._addRule = function (rule) {\r\n        while (this.rules.length < rule.sequence + 1) {\r\n            this.rules.push([]);\r\n        }\r\n        this.rules[rule.sequence].push(rule);\r\n    };\r\n    FluentEnsure.prototype.assertInitialized = function () {\r\n        if (this.parsers) {\r\n            return;\r\n        }\r\n        throw new Error(\"Did you forget to add \\\".plugin('aurelia-validation')\\\" to your main.js?\");\r\n    };\r\n    FluentEnsure.prototype.mergeRules = function (fluentRules, propertyName) {\r\n        // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n        var existingRules = this.rules.find(function (r) { return r.length > 0 && r[0].property.name == propertyName; });\r\n        if (existingRules) {\r\n            var rule = existingRules[existingRules.length - 1];\r\n            fluentRules.sequence = rule.sequence;\r\n            if (rule.property.displayName !== null) {\r\n                fluentRules = fluentRules.displayName(rule.property.displayName);\r\n            }\r\n        }\r\n        return fluentRules;\r\n    };\r\n    return FluentEnsure;\r\n}());\r\n/**\r\n * Fluent rule definition API.\r\n */\r\nvar ValidationRules = /** @class */ (function () {\r\n    function ValidationRules() {\r\n    }\r\n    ValidationRules.initialize = function (messageParser, propertyParser) {\r\n        this.parsers = {\r\n            message: messageParser,\r\n            property: propertyParser\r\n        };\r\n    };\r\n    /**\r\n     * Target a property with validation rules.\r\n     * @param property The property to target. Can be the property name or a property accessor function.\r\n     */\r\n    ValidationRules.ensure = function (property) {\r\n        return new FluentEnsure(ValidationRules.parsers).ensure(property);\r\n    };\r\n    /**\r\n     * Targets an object with validation rules.\r\n     */\r\n    ValidationRules.ensureObject = function () {\r\n        return new FluentEnsure(ValidationRules.parsers).ensureObject();\r\n    };\r\n    /**\r\n     * Defines a custom rule.\r\n     * @param name The name of the custom rule. Also serves as the message key.\r\n     * @param condition The rule function.\r\n     * @param message The message expression\r\n     * @param argsToConfig A function that maps the rule's arguments to a \"config\"\r\n     * object that can be used when evaluating the message expression.\r\n     */\r\n    ValidationRules.customRule = function (name, condition, message, argsToConfig) {\r\n        validationMessages[name] = message;\r\n        FluentRules.customRules[name] = { condition: condition, argsToConfig: argsToConfig };\r\n    };\r\n    /**\r\n     * Returns rules with the matching tag.\r\n     * @param rules The rules to search.\r\n     * @param tag The tag to search for.\r\n     */\r\n    ValidationRules.taggedRules = function (rules, tag) {\r\n        return rules.map(function (x) { return x.filter(function (r) { return r.tag === tag; }); });\r\n    };\r\n    /**\r\n     * Returns rules that have no tag.\r\n     * @param rules The rules to search.\r\n     */\r\n    ValidationRules.untaggedRules = function (rules) {\r\n        return rules.map(function (x) { return x.filter(function (r) { return r.tag === undefined; }); });\r\n    };\r\n    /**\r\n     * Removes the rules from a class or object.\r\n     * @param target A class or object.\r\n     */\r\n    ValidationRules.off = function (target) {\r\n        Rules.unset(target);\r\n    };\r\n    return ValidationRules;\r\n}());\n\n// Exports\r\n/**\r\n * Aurelia Validation Configuration API\r\n */\r\nvar AureliaValidationConfiguration = /** @class */ (function () {\r\n    function AureliaValidationConfiguration() {\r\n        this.validatorType = StandardValidator;\r\n    }\r\n    /**\r\n     * Use a custom Validator implementation.\r\n     */\r\n    AureliaValidationConfiguration.prototype.customValidator = function (type) {\r\n        this.validatorType = type;\r\n    };\r\n    /**\r\n     * Applies the configuration.\r\n     */\r\n    AureliaValidationConfiguration.prototype.apply = function (container) {\r\n        var validator = container.get(this.validatorType);\r\n        container.registerInstance(Validator, validator);\r\n    };\r\n    return AureliaValidationConfiguration;\r\n}());\r\n/**\r\n * Configures the plugin.\r\n */\r\nfunction configure(\r\n// tslint:disable-next-line:ban-types\r\nframeworkConfig, callback) {\r\n    // the fluent rule definition API needs the parser to translate messages\r\n    // to interpolation expressions.\r\n    var messageParser = frameworkConfig.container.get(ValidationMessageParser);\r\n    var propertyParser = frameworkConfig.container.get(PropertyAccessorParser);\r\n    ValidationRules.initialize(messageParser, propertyParser);\r\n    // configure...\r\n    var config = new AureliaValidationConfiguration();\r\n    if (callback instanceof Function) {\r\n        callback(config);\r\n    }\r\n    config.apply(frameworkConfig.container);\r\n    // globalize the behaviors.\r\n    if (frameworkConfig.globalResources) {\r\n        frameworkConfig.globalResources(ValidateBindingBehavior, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidationErrorsCustomAttribute, ValidationRendererCustomAttribute);\r\n    }\r\n}\n\nexport { AureliaValidationConfiguration, configure, getTargetDOMElement, getPropertyInfo, PropertyAccessorParser, getAccessorExpression, ValidateBindingBehavior, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidateEvent, ValidateResult, validateTrigger, ValidationController, ValidationControllerFactory, ValidationErrorsCustomAttribute, ValidationRendererCustomAttribute, Validator, Rules, StandardValidator, validationMessages, ValidationMessageProvider, ValidationMessageParser, MessageExpressionValidator, FluentRuleCustomizer, FluentRules, FluentEnsure, ValidationRules };\n","import { customAttribute, autoinject } from 'aurelia-framework';\n\n//DOC: implementa un attributo HTML custom che abilita il popover all'oggetto agganciato\n//DOC: per l'uso aggiungere attributo html: popover. per proprietà vedere https://getbootstrap.com/docs/4.2/components/popovers/\n\nimport 'common/attributes/css/popover.css';\n\n@customAttribute('popover')\n@autoinject\nexport class BootstrapPopoverAttribute {\n  constructor(private element: Element) { }\n\n  bind() {\n    $(this.element).popover({\n      container: 'body',\n      //trigger: 'focus'\n    });\n  }\n\n  unbind() {\n    $(this.element).popover('dispose');\n  }\n\n}\n","import { customAttribute, autoinject } from 'aurelia-framework';\n\n//DOC: implementa un attributo HTML custom che aggiunge il tooltip all'oggetto agganciato\n//DOC: per l'uso aggiungere attributo html: tooltip. per proprietà vedere https://getbootstrap.com/docs/4.0/components/tooltips/\n\nimport 'common/attributes/css/tooltip.css';\n\n@customAttribute('tooltip')\n@autoinject\nexport class BootstrapTooltipAttribute {\n\n  constructor(private element: Element) { }\n\n  bind() {\n    $(this.element).tooltip();\n  }\n\n  unbind() {\n    $(this.element).tooltip(\"dispose\");\n  }\n\n}\n","import { observable, bindingMode, computedFrom, bindable, autoinject } from 'aurelia-framework';\n\nimport * as AColorPicker from 'a-color-picker';\n\nimport \"./color-picker.css\";\n\ninterface options {\n  attachTo?: String | Object,\n  showHSL?: Boolean,\n  showRGB?: Boolean,\n  showHEX?: Boolean,\n  showAlpha?: Boolean,\n  color?: string,\n  palette?: [],\n  paletteEditable?: Boolean,\n  useAlphaInPalette?: String | Boolean\n}\n\n@autoinject\nexport class ColorPicker {\n  //DOC: id univoco creato per recuperare l'oggetto\n  @bindable colorPickerId: string;\n\n  //DOC: colore iniziale del picker e che varia il valore infx della scelta dell'utente\n  @bindable({ defaultBindingMode: bindingMode.twoWay }) color: string;\n\n  //DOC: controlla la visibilità del picker controllata dal button\n  @bindable pickerVisible: boolean = false;\n\n  //DOC: classi di stile aggiuntivo che si applicano al nodo padre\n  @bindable css: string = \"\";\n\n  //DOC: opzioni per la configurazione del picker\n  @bindable options: options = {\n    showRGB: false,\n    showHSL: false,\n    showHEX: true\n  };\n\n  constructor(private element: Element) { }\n\n  bind() {\n    //creo un ID univoco necessario se ho più picker nella stessa pagina\n    this.colorPickerId = \"picker\" + (Math.floor(Math.random() * 100000) + 1).toString();\n    this.element.querySelector('.picker').classList.add(this.colorPickerId);\n    //imposto il colore di default se non è specificato il colore iniziale\n    if (!this.color || this.color == \"\")\n      this.color = \"#979797\";\n  }\n\n  attached() {\n    //creo il picker quando il DOM è stato creato\n    this.options.color = this.color;\n    let picker = (AColorPicker.from(`.${this.colorPickerId}`, this.options) as any);\n    picker.on('change', (picker, color) => {\n      //console.log(AColorPicker.parseColor(color, \"hexcss4\"));\n      this.color = AColorPicker.parseColor(color, \"hexcss4\");\n    });\n  }\n}\n","module.exports = \"<template> <div class=\\\"color-picker ${css}\\\"> <div class=picker css=\\\"display: ${pickerVisible?'block':'none'};\\\"></div> </div> </template> \";","import { bindable, bindingMode, computedFrom, autoinject } from \"aurelia-framework\";\n\nimport './input-editable.css';\n\n/*DOC: Questo componente consente di avere un testo modificabile.\n  Il testo è bindato su `text` e quando termina la sua modifica viene sollevato\n  L 'evento `onTextChanged` che contiene il testo finale.\n  Di default `bindingMode` è `toView` quindi non c'è aggiornamento nel `model`.\n  Questo comportamento è studiato per catturare il valore modificato restituito dall'evento sollevato\n  nella variabile di nome `text`. \n  E' possibile modificare il comportamento specificando il tipo di binding in `two-way`. \n*/\n@autoinject\nexport class InputEditable {\n  //DOC: indica se può essere modificato, se false mostra solo il testo senza label\n  @bindable canEdit: boolean = false;\n  //DOC: indica se si sta modificando\n  @bindable isEditing: boolean = false;\n\n  //DOC: testo bindato\n  @bindable({ defaultBindingMode: bindingMode.toView }) text: string = \"\";\n  //DOC: testo placeholder quando il testo diventa vuoto\n  @bindable placeholder: string = \"\";\n  //DOC: testo placeholder quando il testo diventa vuoto\n  @bindable placeholderTextarea: string = \"\";\n  //DOC: testo markdown di suggerimento visibile sono in editing\n  @bindable textSuggestion: string = \"\";\n  //DOC: etichetta del campo, se \"\" non la mostro\n  @bindable label: string = \"\";\n  //DOC: css aggiuntivo\n  @bindable css: string = \"\";\n\n  //proprietà grafiche\n  //DOC: numero di rows del textarea\n  @bindable maxRows: number = null;\n\n  //DOC: evento sollevato quando il testo cambia (click fuori dalla textarea)\n  @bindable onTextChanged: (text: { text: string }) => void;\n\n  constructor(public element: Element) { }\n\n  bind() {\n    if (!this.text || this.text.trim() == \"\")\n      this.text = \"\";\n  }\n\n  //DOC: imposta l'altezza della textarea in base al contenuto o alle righe massime impostate\n  public setTextareaHeight() {\n    var textarea = this.element.querySelector(\"textarea\") as HTMLTextAreaElement;\n    if (!textarea) return; //NOTE: se non è nel DOM esco\n    if (this.maxRows) {\n      textarea.style.height = parseFloat(textarea.style.lineHeight) * parseFloat(textarea.style.fontSize) + \"px\";\n    }\n    else {\n      textarea.style.height = \"auto\";\n      //ta.style.rowGap\n      textarea.style.height = (textarea.scrollHeight) + \"px\";\n    }\n    textarea.focus();\n  }\n\n  //DOC: ad ogni cambiamento del valore di text controllo che non sia null e non sia solo spazi\n  public textChanged(_new: string, _old: string) {\n    if (!_new || _new.trim() == \"\")\n      this.text = \"\";\n  }\n\n  //DOC: imposta la modalità modifica bloccando la propagazione del click in caso di url all'interno della textarea\n  public setEditing(s: boolean, e: any) {\n    event.stopImmediatePropagation();\n    this.isEditing = s;\n  }\n\n\n  //DOC: restituisce text oppure placeholder quando non si sta modificando il testo\n  @computedFrom('text')\n  get textToShow() {\n    if (!this.text || this.text == \"\")\n      return this.placeholder;\n    return this.text;\n  }\n\n  //DOC: restituisce un css se text == \"\"\n  @computedFrom('text')\n  get textIsEmptyCss() {\n    return (!this.text || this.text == \"\") ? \"text-empty\" : \"\";\n  }\n}\n","module.exports = \"<template> <require from=converters/markdown></require> <div class=\\\"input-editable ${css}\\\"> <div if.bind=!canEdit show.bind=\\\"text!=''\\\" class=\\\"text-container styled\\\" innerhtml.bind=\\\"text | markdown\\\"></div> <div if.bind=canEdit class=text-container> <small if.bind=\\\"label!=''\\\" show.bind=isEditing class=\\\"label w-100\\\">${label}</small> <div show.bind=!isEditing class=\\\"text ${textIsEmptyCss} w-100 ${canEdit ? 'can-edit' : ''} styled\\\" click.trigger=\\\"setEditing(true, $event)\\\" innerhtml.to-view=\\\"textToShow | markdown\\\"> </div> <textarea show.bind=isEditing class=\\\"align-bottom form-control\\\" value.bind=text focus.bind=isEditing placeholder.bind=placeholderTextarea focus.trigger=setTextareaHeight() blur.trigger=\\\"isEditing = true\\\" change.delegate=\\\"onTextChanged({ text: text })\\\" rows.bind=maxRows></textarea> <div if.bind=\\\"textSuggestion != ''\\\" show.bind=isEditing class=suggestion innerhtml.bind=\\\"textSuggestion | markdown\\\"></div> </div> </div> </template>\";","import { bindable, computedFrom, bindingMode } from \"aurelia-framework\";\n\nexport class LoadingComponent {\n  //DOC: stato del componente, se true è visibile, altrimenti è nascosto\n  @bindable isLoading: boolean;\n  //DOC: testo facoltativo sotto lo spinner\n  @bindable loadingText: string;\n\n  //DOC: imposta un timeout in ms scaduto il quale imposta isLoading a false\n  @bindable timeout: number = 0;\n  private timeoutDec: number = 0;\n  //DOC: restituisce la percentuale di tempo trascorso (read only lato view)\n  @bindable({ defaultBindingMode: bindingMode.toView }) timeoutPerc: number;\n  /*NOTE: è possibile utilizzare il valore di timeoutPerc all'interno del messaggio\n  view-model.ref=\"loading\" loading-text=\"${'Caricamento '+loading.timeoutPerc+'%' }\" timeout.bind=\"2000\" */\n\n  bind() {\n    if (this.timeout != 0) {\n      this.timeoutDec = this.timeout;\n      let bitOfTime: number;\n      if (this.timeout <= 1000) bitOfTime = 50;\n      else bitOfTime = 100;\n      let idTimeout = setInterval(() => {\n        this.timeoutDec -= bitOfTime;\n        this.timeoutPerc = 100 - Math.round(this.timeoutDec / this.timeout * 100);\n        //console.log(this.timeoutDec, \" --- \", this.timeoutPerc + \"%\");\n        if (this.timeoutDec <= 0) {\n          //console.log(\"fine\");\n          clearInterval(idTimeout);\n        }\n      }, bitOfTime);\n    }\n  }\n\n  @computedFrom('loadingText')\n  get isLoadingTextValid(): boolean {\n    return this.loadingText !== null && this.loadingText !== \"\";\n  }\n\n\n}\n","module.exports = \"<template> <div if.bind=isLoading class=\\\"loading-component h-100 d-flex flex-column justify-content-center align-items-center\\\"> <i class=\\\"fa fa-spinner fa-spin\\\"></i> <template if.bind=isLoadingTextValid> <p>${loadingText}</p> </template> </div> </template> \";","import * as Moment from 'moment';\n\nexport class DateFormatValueConverter {\n  toView(value: any, format: string) {\n    //console.log(\"tovalue: \", value);\n    return Moment(value).format(format);\n  }\n  fromView(value: any) {\n    //console.log(\"fromvalue: \", value);\n    return Moment(value).format('x');\n  }\n}\n","import * as Moment from 'moment';\n\nexport class DateRelativeValueConverter {\n  toView(date: string) {\n    return Moment(date).fromNow();\n  }\n}\n","//DOC: dato un array restituisce solo gli elementi che soddisfano una condizione\nexport class FilterElementsValueConverter {\n  toView(array: any[], condition: string = \"true\") {\n    //console.log(condition);\n    return array.filter((value, index, array) => eval(condition));\n  }\n}\n","import * as a from 'markdown-it';\nimport * as MarkdownIt from 'markdown-it/dist/markdown-it';\nimport * as Emoji from 'markdown-it-emoji';\nimport * as BracketedSpans from 'markdown-it-bracketed-spans';\nimport * as Attrs from 'markdown-it-attrs';\nimport * as Container from 'markdown-it-container';\n\nexport class MarkdownValueConverter {\n\n  constructor() {\n    MarkdownValueConverter.md\n      .use(Emoji)\n      .use(Attrs)\n      .use(BracketedSpans)\n      .use(Container, 'col', {\n        validate: function (params) {\n          return params.trim().match(/^col$/);\n        },\n        render: function (tokens, idx) {\n          var m = tokens[idx].info.trim().match(/^col\\s+(.*)$/);\n          if (tokens[idx].nesting === 1) {\n            // opening tag\n            return '<div class=\"col\">'; //m[1] futuro sviluppo di proporzionamento delle colonne\n          } else {\n            // closing tag\n            return '</div>\\n';\n          }\n        },\n        marker: \":\"\n      })\n      .use(Container, 'row', {\n        validate: function (params) {\n          return params.trim().match(/^row$/);\n        },\n        render: function (tokens, idx) {\n          var m = tokens[idx].info.trim().match(/^row\\s+(.*)$/);\n          if (tokens[idx].nesting === 1) {\n            // opening tag\n            return '<div class=\"row\">'; //m[1] futuro sviluppo di proporzionare le colonne\n          } else {\n            // closing tag\n            return '</div>\\n';\n          }\n        },\n        marker: \"=\"\n      });\n\n    //MarkdownValueConverter.md.inline.ruler.push(\"markdown-it-tag\", MarkdownValueConverter.V);\n    //tslint:disable-next-line: no-string-literal no-any  --  We NEED to disable this TSLint rule here since this is how the MarkdownIt library requires rules to be accessed\n    /*MarkdownValueConverter.md.renderer.rules[\"markdown-it-tag\"] =\n      (tokens: MarkdownIt.Token[], idx: number, _opts: any, _env: any, self: MarkdownIt.Renderer): string => {\n        const token = tokens[idx];\n        return '<span ' + self.renderAttrs(token) + '>' + MarkdownValueConverter.md.utils.escapeHtml(tokens[idx].content) + '</span>';\n      };*/\n  }\n\n  // ottiene il testo in markdown e restituisce l'html\n  toView(value: any) {\n    if (!value) return;\n    return MarkdownValueConverter.md.render(value);\n  }\n\n  // full options list (defaults)\n  public static md: MarkdownIt = new MarkdownIt({\n    html: false,        // Enable HTML tags in source\n    xhtmlOut: false,        // Use '/' to close single tags (<br />).\n    // This is only for full CommonMark compatibility.\n    breaks: false,        // Convert '\\n' in paragraphs into <br>\n    langPrefix: 'language-',  // CSS language prefix for fenced blocks. Can be\n    // useful for external highlighters.\n    linkify: false,        // Autoconvert URL-like text to links\n\n    // Enable some language-neutral replacement + quotes beautification\n    typographer: false,\n\n    // Double + single quotes replacement pairs, when typographer enabled,\n    // and smartquotes on. Could be either a String or an Array.\n    //\n    // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n    // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n    quotes: '“”‘’',\n\n    // Highlighter function. Should return escaped HTML,\n    // or '' if the source string is not changed and should be escaped externally.\n    // If result starts with <pre... internal wrapper is skipped.\n    highlight: function (/*str, lang*/) { return ''; }\n  });\n\n  //è la funzione custom per riconoscere un token specifico\n  //per adesso per i tag si usa BracketedSpans e Attrs che sono due estensioni di markedown-it\n  //ho modificato il css per far funzionare questo:\n  //[nometag]{.tag .classecategoria} \n  //NOTE: DO NOT WORK   |tag:nometag|   [categoria]\n  public static V = (state: MarkdownIt.State, silent: boolean): boolean => {\n    const tag1: string = \"#tag:\";\n    var p = state.pos;\n    if (state.src.charAt(p) === \"#\")\n      console.log(\"yeah\");\n    if (state.src.charAt(p) !== \"|\") return false;\n    if (state.src.substr(p, tag1.length) !== tag1) return false;\n\n    var endPos = state.src.indexOf(\"|\", p + tag1.length);\n    if (endPos == -1) {\n      if (!silent) state.pending += tag1;\n      p += tag1.length;\n      return true;\n    }\n    var content = state.src.substr(p + tag1.length, endPos);\n    if (!content.match(/\\r\\n|\\r|\\n/g)) {  //if the variable doesn't include a line break\n      if (!silent) {\n        let token = state.push(\"markdown-it-tag\", \"span\", 0);\n        token.attrs = [\n          [\"class\", \"badge badge-primary\"],\n          [\"cat\", \"for now i'm empty\"]\n        ];\n        token.content = content;\n        token.markup = tag1;\n      }\n      state.pos = p + endPos + 1;\n      return true;\n    }\n\n  };\n\n\n}\n","import { Curriculum, Category, Element, Log } from 'definitions';\n\n//dato un array lo ordina in base alla proprietà propertyName ed alla direction\nexport class SortElementValueConverter {\n  //FIXME: emettere il segnale non è un granchè, anzi: da cambiare proprio!!\n  signals = ['position-changed'];\n\n  toView(array: [Log | Element | Category | Curriculum], direction: string = \"asc\", propertyName: string = \"position\") {\n    //controllo array sia un array e che contiene oggetti (ad esempio il primo: [0]) che hanno la proprietà propertyName\n    if (Array.isArray(array) && array.length > 0 && array[0].hasOwnProperty(propertyName))\n      return array.sort((a, b) => (a[propertyName] - b[propertyName]) * (direction == \"asc\" ? 1 : -1));\n  }\n\n}\n","//DOC: dato un array restituisce il range di valori da FROM (incluso) fino a TO (escluso)\nexport class TakeElementsValueConverter {\n  toView(array: any[], from: number, to: number) {\n    return array.slice(from, to);\n  }\n}\n","// we want font-awesome to load as soon as possible to show the fa-spinner\nimport \"@fortawesome/fontawesome-free/css/all.css\"\nimport '../static/styles.css';\nimport 'bootstrap/dist/css/bootstrap.css';\n\nimport { PLATFORM } from 'aurelia-pal';\nimport { Aurelia } from 'aurelia-framework';\n\n// comment out if you don't want a Promise polyfill (remove also from webpack.config.js)\nimport * as Bluebird from 'bluebird';\n\nBluebird.config({ warnings: false });\n\nexport async function configure(aurelia: Aurelia) {\n  aurelia.use\n    .standardConfiguration()\n    .plugin(PLATFORM.moduleName('aurelia-validation'))\n    .developmentLogging();\n  //.plugin(PLATFORM.moduleName('aurelia-animator-css'));\n  // if the css animator is enabled, add swap-order=\"after\" to all router-view elements\n\n  // Anyone wanting to use HTMLImports to load views, will need to install the following plugin.\n  // aurelia.use.plugin('aurelia-html-import-template-loader')\n\n  await aurelia.start();\n  aurelia.setRoot(PLATFORM.moduleName('app'));\n}","export class BetaTesterPage {\n\n}\n","module.exports = \"<template> <iframe width=100% height=800 src=https://sibforms.com/serve/MUIEAEj1OkN4PhGQJlqx7unqcSzDVUtTkigMUJeBgfmAazRNWrPXonz1E88CiHJZaYvbgJ6jpwKBYTdJIfw-_JU_soQ-vDeF-pncnCWamNS6UQR6iqty7oeoQmv4P_AXkbJJdx81Cuu6QSbXyTihZVPKpdp_9LMoqc0VnLxolgWAtA8alqMUprJgHRHy83fdEycA0T__cjFTo1rQ frameborder=0 scrolling=auto allowfullscreen style=display:block;margin-left:auto;margin-right:auto;max-width:100%></iframe> </template> \";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router, RouteConfig, RouterConfiguration, NavigationInstruction } from 'aurelia-router';\nimport { PLATFORM } from 'aurelia-pal';\n\nimport { Curriculum, User } from 'definitions';\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\nimport * as Utils from 'helpers/utils';\n\nimport './css/cv-page.css';\n\n@autoinject\nexport class CvPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = (new Logger()).setStyle(Logger.colors.orange, Logger.colors.white).setDefaultPrefix(\"EditorCVPage\");\n\n  //DOC: indica se l'elemento è nello stato di EDIT, se false è in stato di VIEW\n  @bindable canEdit: boolean = true;\n  //DOC: indica se in stato di EDIT si sta modificando\n  @bindable isEditing: boolean = false;\n\n  constructor(private db: Database, private router: Router) { }\n\n  bind() {\n    window.scrollTo(0, 0);\n  }\n\n  configureRouter(config: RouterConfiguration, router: Router) {\n    config.map([\n      {\n        route: ['', 'view'], name: 'view', moduleId: PLATFORM.moduleName('pages/CvSubpages/ViewCvPage'),\n        nav: true, title: 'Preview', icon: 'fa-eye'\n      },\n      {\n        route: 'edit', name: 'edit', moduleId: PLATFORM.moduleName('pages/CvSubpages/EditCvPage'),\n        nav: true, title: 'Edit', icon: 'fa-pen-nib'\n      },\n      {\n        route: 'setting', name: 'setting', moduleId: PLATFORM.moduleName('pages/CvSubpages/SettingCvPage'),\n        nav: true, title: 'Setting', icon: 'fa-cog'\n      },\n      {\n        route: 'protection', name: 'protection', moduleId: PLATFORM.moduleName('pages/CvSubpages/ProtectionCvPage'),\n        nav: true, title: 'Protection', icon: 'fa-shield-alt'\n      },\n      {\n        route: 'confirms', name: 'confirms', moduleId: PLATFORM.moduleName('pages/CvSubpages/ConfirmsCvPage'),\n        nav: true, title: 'Confirms', icon: 'fa-check-double'\n      },\n      /*{\n        route: 'confirms/new/:new', name: 'confirms/new', moduleId: PLATFORM.moduleName('pages/CvSubpages/ConfirmsCvSubpages/NewConfirmPage'),\n        nav: false, title: 'New Confirm'\n      },*/\n      {\n        route: 'insight', name: 'insight', moduleId: PLATFORM.moduleName('pages/CvSubpages/InsightCvPage'),\n        nav: true, title: 'Insight', icon: 'fa-chart-bar'\n      }\n      //  Insight More\n    ]);\n    this.router = router;\n  }\n\n}\n","module.exports = \"<template> <require from=common/loading/LoadingComponent></require> <div class=\\\"container-fluid cv-page px-0\\\"> <nav class=\\\"d-none d-md-block\\\"> <div class=\\\"nav nav-tabs pt-5 mb-5\\\" id=nav-tab role=tablist> <a repeat.for=\\\"r of router.navigation\\\" href.bind=r.href class=\\\"nav-item nav-link text-secondary ${r.isActive ? 'active' : ''}\\\" id=nav-style-tab data-toggle=tab role=tab aria-controls=nav-style aria-selected=true><i class=\\\"fas ${r.config.icon} mr-2\\\"></i>${r.title} <span if.bind=r.isActive class=sr-only>(current) </span> </a> </div> </nav> <nav class=\\\"d-md-none d-lg-none\\\"> <div class=\\\"dropdown my-3\\\"> <button class=\\\"btn btn-secondary dropdown-toggle btn-block\\\" type=button id=cvSectionsNav data-toggle=dropdown aria-haspopup=true aria-expanded=false> ${router.currentInstruction.config.title} </button> <div class=\\\"dropdown-menu w-100\\\" aria-labelledby=cvSectionsNav> <a repeat.for=\\\"r of router.navigation\\\" href.bind=r.href class=\\\"dropdown-item ${r.isActive ? 'active' : ''}\\\">${r.title} </a> </div> </div> </nav> <router-view></router-view> </div> </template>\";","import { autoinject, PLATFORM } from 'aurelia-framework';\nimport { Router, RouteConfig, NavigationInstruction, RouterConfiguration } from 'aurelia-router';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport \"./css/confirms-cv-page.css\"\n\n@autoinject\nexport class ConfirmsCvPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  constructor(private router: Router) { }\n\n  configureRouter(config: RouterConfiguration, router: Router) {\n    config.map([{\n      route: [''], name: 'confirms',\n      moduleId: PLATFORM.moduleName('pages/CvSubpages/ConfirmsCvSubpages/ConfirmsListPage'),\n      nav: false, title: 'Confirms'\n    },\n    {\n      route: 'new/:new', name: 'confirms/new',\n      moduleId: PLATFORM.moduleName('pages/CvSubpages/ConfirmsCvSubpages/NewConfirmPage'),\n      nav: false, title: 'New Confirm'\n    }]);\n    config.mapUnknownRoutes({\n      route: 'confirms',\n      moduleId: PLATFORM.moduleName('pages/CvSubpages/ConfirmsCvSubpages/ConfirmsListPage')\n    });\n    this.router = router;\n  }\n}\n\n","module.exports = \"<template> <require from=common/loading/LoadingComponent></require> <section class=\\\"confirms-cv-page au-animate\\\"> <router-view></router-view> </section> </template> \";","import { autoinject, computedFrom, bindable } from 'aurelia-framework';\nimport { Router } from 'aurelia-router';\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { Confirm, ConfirmHistoryItem } from 'definitions';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport './css/confirm-requested-component.css';\n\n//DOC: modello della confirm di cui l'utente (applicant) ha chiesto la conferma\n@autoinject\nexport class ConfirmRequestedComponent {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: la confirm che mostro\n  @bindable confirm: Confirm;\n\n  //DOC: indica se si stanno caricando i dati\n  @bindable isLoadingData: boolean = true;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  constructor(private db: Database, private router: Router) { }\n\n  bind() {\n    if (!this.confirm.history || this.confirm.history.length == 0)\n      throw new Error(\"the history array for the confirm \" + this.confirm.id + \" is empty\");\n    //DOC: ordino l'array history in base alla data\n    this.confirm.history.sort((i1, i2) => i1.date - i2.date);\n\n    //TODO: caricare le informazioni del reviewer (nome, email, etc..) con una call ad una function\n  }\n\n  //DOC: mostra l'esperienza riferita\n  public viewExperience(experienceId: string) {\n    this.router.navigateToRoute(\"edit\", { goto: experienceId });\n  }\n\n  //DOC: restituiscelo lo stato della confirm\n  @computedFrom('confirm.history.length')\n  get lastStatus() {\n    return this.confirm.history[this.confirm.history.length - 1].state;\n  }\n  //DOC: restituscie la data dell'ultimo azione riguardante la confirm\n  @computedFrom('confirm.history.length')\n  get lastEdit() {\n    return this.confirm.history[this.confirm.history.length - 1].date;\n  }\n\n  //DOC: restituisce il css in base allo stato della confirm\n  @computedFrom('confirm.history.length')\n  get statusCss() {\n    switch (this.lastStatus) {\n      case \"requested\": return \"secondary\";\n      case \"incomplete\": return \"warning\";\n      case \"approved\": return \"success\";\n      case \"rejected\": return \"danger\";\n      default: return \"\";\n    }\n  }\n\n}\n","module.exports = \"<template> <require from=converters/dateFormat></require> <div class=\\\"row confirm-requested-component\\\"> <div class=\\\"col-auto text-center flex-column d-none d-sm-flex\\\"> <div class=\\\"row h-50\\\"> <div class=\\\"col timeline-start\\\">&nbsp;</div> <div class=col>&nbsp;</div> </div> <h5 class=m-2> <span class=\\\"badge badge-pill bg-${statusCss}\\\">&nbsp;</span> </h5> <div class=\\\"row h-50\\\"> <div class=\\\"col timeline-end\\\">&nbsp;</div> <div class=col>&nbsp;</div> </div> </div> <div class=\\\"col py-2\\\"> <div class=\\\"card border-${statusCss}\\\"> <div class=card-body> <div class=\\\"float-right small font-weight-bold\\\">${lastEdit | dateFormat:'MMMM Do YYYY, hh:mm a'}</div> <h4 class=\\\"card-title text-${statusCss}\\\">${confirm.idReviewer}</h4> <p class=card-text>The work experience has been approved. You cannot modify it anymore, unless you ask again the confirm.</p> <button class=\\\"btn btn-sm btn-outline-secondary\\\" type=button data-target=\\\"${'#confirmDetails'+confirm.id}\\\" data-toggle=collapse>History ▼</button> <button class=\\\"btn btn-sm btn-outline-secondary\\\" type=button click.delegate=viewExperience(confirm.idExperience)>View</button> <div class=\\\"collapse border mt-2\\\" id=\\\"${'confirmDetails'+confirm.id}\\\"> <div class=\\\"text-monospace m-0 bg-light\\\"> <div class=\\\"row no-gutters py-1 px-2 ${!$last ? 'border-bottom' : ''}\\\" repeat.for=\\\"i of confirm.history\\\"> <div class=\\\"col-12 col-md-auto small align-self-center text-center text-md-left\\\"> ${i.date | dateFormat:'L LT'}</div> <div class=\\\"col-12 col-md-auto px-md-3 align-self-center text-center text-md-left\\\">${i.text}</div> <div class=\\\"col-12 col-md-auto align-self-center text-center text-md-left ${$last ? 'font-weight-bold' : ''}\\\"> (${i.state})</div>  </div> </div> </div> </div> </div> </div> </div></template> \";","import { autoinject, computedFrom, bindable } from 'aurelia-framework';\nimport { Router } from 'aurelia-router';\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { Confirm, ConfirmState, ConfirmHistoryItem, Element } from 'definitions';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport * as Utils from 'helpers/utils';\n\nimport './css/confirm-to-review-component.css';\n\n//DOC: modello della confirm che l'utente (reviewer) deve confermare\n@autoinject\nexport class ConfirmToReviewComponent {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: la confirm che mostro\n  @bindable confirm: Confirm;\n\n  @bindable experience: Element;\n\n  //DOC: indica se si stanno caricando i dati\n  @bindable isLoadingData: boolean = true;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  constructor(private db: Database, private router: Router) { }\n\n  bind() {\n    if (!this.confirm.history || this.confirm.history.length == 0)\n      throw new Error(\"the history array for the confirm \" + this.confirm.id + \" is empty\");\n    //DOC: ordino l'array history in base alla data\n    this.confirm.history.sort((i1, i2) => i1.date - i2.date);\n\n    //caricare l'esperienza dell'utente che ha chiesta la review\n    this.db.query(Path.elements).orderByKey().equalTo(this.confirm.idExperience).limitToFirst(1)\n      .once(Action.onValue, (data: any) => {\n        if (data.exists()) {\n          this.experience = Utils.toArrayOfObjects(data.val()).map(v => v = v as Element)[0];\n          //console.log(this.experience);\n        }\n        else {\n          alert(\"Id of the Element not found\");\n          this.logger.error(\"Id of the Element not found\");\n        }\n      })\n  }\n\n  //DOC: mostra l'esperienza riferita\n  public viewExperience(experienceId: string) {\n    alert(\"jump to the user cv page on his experience\");\n    //TODO: this.router.navigateToRoute(\"/:id/edit\", {id:this.confirm., goto: experienceId });\n    //DEVO FARE LA VISTA DEL CURRICULUM SENZA ESSERE LOGGATO COME UTENTE\n  }\n\n\n  public accept() {\n    if (this.unchangeableState()) {\n      alert('The experience is blocked!');\n      return;\n    }\n    let text = prompt(\"Add a comment to notify the user\", \"I'm a confirm comment\");\n    this.db.appendHistoryConfirm(\n      this.confirm.id,\n      this.confirm.history.length,\n      { date: (new Date()).getTime(), text: (text == null ? \"\" : text), state: \"approved\" }\n    )\n  }\n  public reject() {\n    if (this.unchangeableState()) {\n      alert('The experience is blocked!');\n      return;\n    }\n    let text = prompt(\"Add a comment to notify the user\", \"I'm a confirm comment\");\n    this.db.appendHistoryConfirm(\n      this.confirm.id,\n      this.confirm.history.length,\n      { date: (new Date()).getTime(), text: (text == null ? \"\" : text), state: \"rejected\" }\n    )\n  }\n  public incomplete() {\n    if (this.unchangeableState()) {\n      alert('The experience is blocked!');\n      return;\n    }\n    let text = prompt(\"Add a comment to notify the user\", \"I'm a confirm comment\");\n    this.db.appendHistoryConfirm(\n      this.confirm.id,\n      this.confirm.history.length,\n      { date: (new Date()).getTime(), text: (text == null ? \"\" : text), state: \"incomplete\" }\n    )\n  }\n\n  public unchangeableState(): boolean {\n    return this.lastStatus == \"approved\" || this.lastStatus == \"rejected\";\n  }\n\n  //DOC: restituiscelo lo stato della confirm\n  @computedFrom('confirm.history.length')\n  get lastStatus(): string {\n    return this.confirm.history[this.confirm.history.length - 1].state;\n  }\n  //DOC: restituscie la data dell'ultimo azione riguardante la confirm\n  @computedFrom('confirm.history.length')\n  get lastEdit(): number {\n    return this.confirm.history[this.confirm.history.length - 1].date;\n  }\n\n  //DOC: restituisce il css in base allo stato della confirm\n  @computedFrom('confirm.history.length')\n  get statusCss(): string {\n    switch (this.lastStatus) {\n      case \"requested\": return \"secondary\";\n      case \"incomplete\": return \"warning\";\n      case \"approved\": return \"success\";\n      case \"rejected\": return \"danger\";\n      default: return \"\";\n    }\n  }\n\n}\n","module.exports = \"<template> <require from=converters/dateFormat></require> <require from=../../CvSubpages/EditCvComponents/ElementComponent></require> <div class=\\\"row confirm-to-review-component\\\"> <div class=\\\"col-auto text-center flex-column d-none d-sm-flex\\\"> <div class=\\\"row h-50\\\"> <div class=\\\"col timeline-start\\\">&nbsp;</div> <div class=col>&nbsp;</div> </div> <h5 class=m-2> <span class=\\\"badge badge-pill bg-${statusCss}\\\">&nbsp;</span> </h5> <div class=\\\"row h-50\\\"> <div class=\\\"col timeline-end\\\">&nbsp;</div> <div class=col>&nbsp;</div> </div> </div> <div class=\\\"col py-2\\\"> <div class=\\\"card border-${statusCss}\\\"> <div class=card-body> <div class=\\\"float-right small font-weight-bold\\\">${lastEdit | dateFormat:'MMMM Do YYYY, hh:mm a'}</div> <h4 class=\\\"card-title text-${statusCss}\\\">${confirm.idReviewer}</h4> <template if.bind=\\\"experience != null\\\"> <div id=experience class=\\\"border rounded p-1\\\"> <element-component element.to-view=experience can-edit.bind=false is-editing.bind=false></element-component> </div> </template> <p class=card-text>HERE I SHOW THE EXPIRIENCE AND SOMETHING ELSE.</p> <div class=row> <div class=\\\"col-12 col-md-auto\\\"> <button class=\\\"btn btn-sm btn-outline-secondary\\\" type=button data-target=\\\"${'#confirmDetails'+confirm.id}\\\" data-toggle=collapse>History ▼</button> <button class=\\\"btn btn-sm btn-outline-secondary\\\" type=button click.delegate=viewExperience(confirm.idExperience)>View</button> </div> <div class=\\\"col-12 col-md-auto ml-auto\\\"> <button class=\\\"btn btn-sm btn-link\\\" type=button click.delegate=accept()>Accept</button> <button class=\\\"btn btn-sm btn-link\\\" type=button click.delegate=reject()>Reject</button> <button class=\\\"btn btn-sm btn-link\\\" type=button click.delegate=incomplete()>Ask for changes</button> </div> </div> <div class=\\\"collapse border mt-2\\\" id=\\\"${'confirmDetails'+confirm.id}\\\"> <div class=\\\"text-monospace m-0 bg-light\\\"> <div class=\\\"row no-gutters py-1 px-2 ${!$last ? 'border-bottom' : ''}\\\" repeat.for=\\\"i of confirm.history\\\"> <div class=\\\"col-12 col-md-auto small align-self-center text-center text-md-left\\\"> ${i.date | dateFormat:'L LT'}</div> <div class=\\\"col-12 col-md-auto px-md-3 align-self-center text-center text-md-left\\\">${i.text}</div> <div class=\\\"col-12 col-md-auto align-self-center text-center text-md-left ${$last ? 'font-weight-bold' : ''}\\\"> (${i.state})</div>  </div> </div> </div> </div> </div> </div> </div></template> \";","import { computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router, RouteConfig, NavigationInstruction } from 'aurelia-router';\nimport { ValidationController, ValidationControllerFactory, ValidationRules } from 'aurelia-validation';\nimport { BootstrapFormRenderer } from 'helpers/validationFormRender';\nimport { Confirm, Element } from 'definitions';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport { Query, Database, Path, ChildPath, Action } from 'services/database';\nimport { Functions } from 'services/functions';\nimport { Authentication } from 'services/authentication';\n\nimport * as Utils from 'helpers/utils';\nimport * as Moment from 'moment';\n\nimport \"./css/confirms-list-page.css\"\n\n@autoinject\nexport class ConfirmslistPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: id del curriculum ottenuto dal parametro url\n  private idCv: string = \"\";\n\n  //DOC: array di confirms che mostro nella pagina\n  @bindable confirms: Confirm[];\n\n  @bindable requests: Confirm[];\n\n  //DOC: nuova confirm che si vuole aprire\n  @bindable newConfirmRequest: Confirm;\n  //DOC:\n  @bindable textConfirmRequest: string;\n\n  @bindable emailReviewer: string;\n  @bindable usersResults: any;\n\n  //DOC: esperienza (Element) che si vuole far confermare\n  @bindable experience: Element;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  //DOC: oggetto controller della validazione di forms\n  public validationController: ValidationController;\n\n  //DOC: stato e data per cui filtrare\n  filterBy = {\n    states: [{ name: \"open\", value: 2 }, { name: \"close\", value: 1 }, { name: \"all\", value: 0 }],\n    dates: [{ name: \"this month\", value: 30 }, { name: \"last 3 months\", value: 90 }, { name: \"all\", value: 0 }],\n    selectedState: { name: \"all\", value: 0 },\n    selectedDate: { name: \"all\", value: 0 }\n  }\n\n  constructor(private auth: Authentication, private db: Database, private funct: Functions, private router: Router, private controllerFactory: ValidationControllerFactory) {\n    this.validationController = controllerFactory.createForCurrentScope();\n    this.validationController.addRenderer(new BootstrapFormRenderer());\n  }\n\n  activate(params: any, routeConfig: RouteConfig, navigationInstruction: NavigationInstruction) {\n    if (params.id != null) {\n      this.idCv = params.id;\n    }\n    else {\n      alert(\"Id Cv not found\");\n      this.logger.error(\"Id Cv not found\");\n      return;\n    }\n  }\n\n  bind() {\n    //DOC: sottoscrivo eventi: onChanged su Element\n    this.queries = [\n      this.db.query(Path.confirms).orderByChild(ChildPath.idCurriculum).equalTo(this.idCv),\n      this.db.query(Path.confirms).orderByChild(ChildPath.idReviewer).equalTo(this.auth.getCurrentUser().uid)];\n    this.queries[0].on(Action.onValue, (data: any) => this.onConfirmsReading.call(this, data));\n    this.queries[1].on(Action.onValue, (data: any) => this.onRequestsReading.call(this, data));\n    window.scrollTo(0, 0);\n  }\n\n  unbind() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n\n  //DOC: callback alla lettura delle confirms del database\n  public onConfirmsReading(data: any) {\n    //console.log(\"confirms: \", data.val());\n    this.confirms = Utils.toArrayOfObjects(data.val()).map(v => v = v as Confirm);\n  }\n\n  //DOC: callback alla lettura delle requests del database\n  public onRequestsReading(data: any) {\n    //console.log(\"requests: \", data.val());\n    this.requests = Utils.toArrayOfObjects(data.val()).map(v => v = v as Confirm);\n  }\n\n  //DOC: //TODO:\n  @computedFrom('confirms.length', 'filterBy.selectedState', 'filterBy.selectedDate')\n  get filteredConfirms() {\n    if (this.confirms == null) return [];\n    return this.confirms\n      .filter(r => {\n        let s = r.history[r.history.length - 1].state;\n        switch (this.filterBy.selectedState.value) {\n          case 2: return s == \"requested\" || s == \"incomplete\";\n          case 1: return s == \"approved\" || s == \"rejected\";\n          default: return true;\n        }\n      })\n      .filter(r => {\n        let dConfirm = Moment(r.history[r.history.length - 1].date),\n          dselected = Moment().subtract(this.filterBy.selectedDate.value, 'days'),\n          today = Moment();\n        return Moment(dConfirm).isBetween(dselected, today) || this.filterBy.selectedDate.value == 0;\n\n      });\n  }\n\n  public emailReviewerChanged(_n, _o) {\n    console.log(_n, _o);\n    if (this.emailReviewer == \"\")\n      return;\n    this.funct.httpsCallable(\"getUserByEmail_onCall\")\n      ({ email: this.emailReviewer })\n      .then((result) => {\n        console.log(result, result.data);\n      });\n  }\n}\n\n\n//DOC: regole di validazione della form per la creazione di una \nValidationRules\n  .ensure(\"hello\").required()\n  .on(ConfirmslistPage);\n\n","module.exports = \"<template> <require from=common/loading/LoadingComponent></require> <require from=./ConfirmToReviewComponent></require> <require from=./ConfirmRequestedComponent></require> <require from=../EditCvComponents/ElementComponent></require> <div class=container> <loading-component is-loading.bind=!confirms></loading-component> <div show.bind=confirms> <div class=row> <div class=\\\"col-12 col-md-auto\\\"> <div class=\\\"row align-items-end\\\"> <div class=col> <h4 class=mb-0>You have some confirm requests. Review and confirm them.</h4> </div> </div> </div> </div> <hr class=mt-2> <div style=margin-bottom:20px> <confirm-to-review-component repeat.for=\\\"r of requests\\\" confirm.bind=r></confirm-to-review-component> </div> <div class=\\\"row align-items-end\\\"> <div class=col> <h4 class=mb-0>Here are listed your confirm requests.</h4> </div> <div class=\\\"col-auto d-flex\\\"> <div class=\\\"col-12 col-md-auto\\\"> <div class=\\\"d-flex flex-column float-md-right\\\"> <label for=sortByStatus>Sort by State</label> <div class=\\\"btn-group btn-group-sm btn-group-toggle mr-2\\\" role=group aria-label=\\\"Filter By State\\\"> <label repeat.for=\\\"s of filterBy.states\\\" class=\\\"btn btn-outline-secondary ${filterBy.selectedState.value == s.value ? 'active' : ''}\\\"> <input type=radio name=state autocomplete=off model.bind=s checked.bind=filterBy.selectedState>${s.name} </label> </div> </div> </div> <div class=\\\"col-12 col-md-auto mt-2 mt-md-0\\\"> <div class=\\\"d-flex flex-column float-md-right\\\"> <label for=sortByDate>Sort by Date</label> <div id=sortByDate class=\\\"btn-group btn-group-sm btn-group-toggle mr-2\\\" role=group aria-label=\\\"Filter By Date\\\"> <label repeat.for=\\\"d of filterBy.dates\\\" class=\\\"btn btn-outline-secondary ${filterBy.selectedDate.value == d.value ? 'active' : ''}\\\"> <input type=radio name=date autocomplete=off model.bind=d checked.bind=filterBy.selectedDate>${d.name} </label> </div> </div> </div> </div> </div> <hr class=mt-2> <div> <confirm-requested-component repeat.for=\\\"r of filteredConfirms\\\" confirm.bind=r></confirm-requested-component> </div> </div> </div> </template> \";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router, RouteConfig, NavigationInstruction } from 'aurelia-router';\nimport { ValidationController, ValidationControllerFactory, ValidationRules } from 'aurelia-validation';\nimport { BootstrapFormRenderer } from 'helpers/validationFormRender';\nimport { Confirm, Element } from 'definitions';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport { Query, Database, Path, ChildPath, Action } from 'services/database';\nimport { Functions } from 'services/functions';\nimport { Authentication } from 'services/authentication';\n\nimport * as Utils from 'helpers/utils';\n\nimport \"./css/new-confirm-page.css\"\nimport { validateEmail } from 'helpers/utils';\n\n@autoinject\nexport class NewConfirmPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: id del curriculum ottenuto dal parametro url\n  private idCv: string = \"\";\n\n  //DOC: array di confirms che mostro nella pagina\n  @bindable confirms: Confirm[];\n\n  @bindable requests: Confirm[];\n\n  //DOC: nuova confirm che si vuole aprire\n  @bindable newConfirmRequest: Confirm;\n  //DOC:\n  @bindable textConfirmRequest: string = \"\";\n\n  @bindable emailReviewer: string;\n  @bindable userResults: any = null;\n  @bindable error: any;\n\n  //DOC: esperienza (Element) che si vuole far confermare\n  @bindable experience: Element;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  //DOC: oggetto controller della validazione di forms\n  public validationController: ValidationController;\n\n  constructor(private auth: Authentication, private db: Database, private funct: Functions, private router: Router,\n    private controllerFactory: ValidationControllerFactory) {\n    this.validationController = controllerFactory.createForCurrentScope();\n    this.validationController.addRenderer(new BootstrapFormRenderer());\n  }\n\n  activate(params: any, routeConfig: RouteConfig, navigationInstruction: NavigationInstruction) {\n    if (params.id === null || params.new === null) {\n      this.router.navigateToRoute(\"confirms\");\n    }\n\n    this.idCv = params.id;\n    //controllo se l'id passato esiste ed in caso ottento l'esperienza\n    this.db.query(Path.elements).orderByKey().equalTo(params.new).limitToFirst(1)\n      .once(Action.onValue, (data: any) => {\n        if (data.exists()) {\n          this.experience = Utils.toArrayOfObjects(data.val()).map(v => v = v as Element)[0];\n          //console.log(this.experience);\n        }\n        else {\n          alert(\"Id of the Element not found\");\n          this.logger.error(\"Id of the Element not found\");\n          this.router.navigateToRoute(\"confirms\");\n        }\n      })\n  }\n\n  bind() {\n    window.scrollTo(0, 0);\n  }\n\n  unbind() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n\n  //DOC: callback alla lettura delle confirms del database\n  public onConfirmsReading(data: any) {\n    //console.log(\"confirms: \", data.val());\n    this.confirms = Utils.toArrayOfObjects(data.val()).map(v => v = v as Confirm);\n  }\n\n  //DOC: callback alla lettura delle requests del database\n  public onRequestsReading(data: any) {\n    //console.log(\"requests: \", data.val());\n    this.requests = Utils.toArrayOfObjects(data.val()).map(v => v = v as Confirm);\n  }\n\n  //DOC: metodo per la creazione di una richiesta di Confirm\n  public sendConfirmRequest() {\n    console.log(\"salvo la richiesta di confirm\");\n    this.newConfirmRequest = {\n      id: \"\",\n      idCurriculum: this.idCv,\n      idReviewer: \"\",\n      idExperience: this.experience.id,\n      history: []\n    } as Confirm;\n    //aggiungo il la prima voce della storia con l'apertura della richiesta di confirm\n    (this.newConfirmRequest.history = []).push({ date: (new Date()).getTime(), text: this.textConfirmRequest || \"\", state: \"requested\" });\n\n    //valido il form \n    this.validationController\n      .validate()\n      .then(r => {\n        //FIXME: la validazione non funziona\n        if (r.valid) {\n          this.logger.log(\"Salvo la richiesta di confirm\");\n          return this.db.appendConfirm(this.newConfirmRequest)\n            .then(_ => {\n              alert(\"Confirm request published successfully!\");\n              return this.closeNewConfirmPage();\n            });\n        }\n      });\n\n  }\n\n  //DOC: metodo per annullare il processo di creazione di una Confirm Request\n  public closeNewConfirmPage() {\n    this.router.navigateToRoute(\"confirms\");\n  }\n\n  public getUserByEmail() {\n    if (!validateEmail(this.emailReviewer)) return;\n    this.funct.httpsCallable(\"getUserByEmail_onCall\")\n      ({ email: this.emailReviewer })\n      .then((result) => {\n        this.userResults = result.data;\n        //console.log(this.userResults);\n      })\n      .catch((error) => {\n        this.error = error;\n        //console.log(this.error);\n      });\n  }\n}\n\n\n\n//DOC: regole di validazione della form per la creazione di una \nValidationRules\n  //.ensure((c: ConfirmsCvPage) => c.newReview.idReviewer).required()\n  //.ensure((c: ConfirmsCvPage) => c.newReview.idExperience).required()\n  //.ensure((c: ConfirmsCvPage) => c.newReview.history).minItems(1)\n  .ensure('emailReviewer').required().minLength(3) //FIXME: la validazione non funziona\n  .on(NewConfirmPage);\n\n","module.exports = \"<template> <require from=../EditCvComponents/ElementComponent></require> <div class=row> <div class=col-2></div> <div class=col> <h4 class=mb-0>Create a confirm request</h4> </div> </div> <hr class=\\\"mt-2 col-8 offset-2\\\"> <div class=row> <form class=\\\"col-5 offset-2\\\" submit.delegate=sendConfirmRequest()> <div class=\\\"row mt-2\\\"> <div class=col> <label for=reviewerEmail>Company or Istitute email address</label> <input type=email id=reviewerEmail class=form-control aria-describedby=emailHelp placeholder=\\\"Enter email\\\" value.bind=emailReviewer> </div> <div class=col> <button class=\\\"btn btn-outline-secondary\\\" type=button click.delegate=getUserByEmail()>Search</button> </div> </div> <div class=\\\"row mt-2\\\"> <div class=col> <label for=textConfirmRequest>Add a custom text</label> <textarea class=form-control id=textConfirmRequest value.bind=textConfirmRequest rows=3></textarea> </div> </div> <template if.bind=\\\"experience != null\\\"> <label for=experience>The experience you ask request for</label> <div id=experience class=\\\"border rounded p-1\\\"> <element-component element.to-view=experience can-edit.bind=false is-editing.bind=false></element-component> </div> </template> <div class=\\\"form-group mt-2\\\"> <div class=\\\"custom-control custom-checkbox\\\"> <input type=checkbox class=custom-control-input id=agreement> <label class=custom-control-label for=agreement>Some legal agreement</label> <small>This is a mandatory agreement you must ....</small> </div> </div> <hr> <button type=submit class=\\\"btn btn-light\\\" click.delegate=closeNewConfirmPage()>Cancel</button> <button type=submit class=\\\"btn btn-primary float-right\\\">Send Request</button> </form> <div class=\\\"col-4 offset-1 mt-1\\\"> <template if.bind=userResults> <label for=reviewerCard>Reviewer Profile</label> <div class=card id=reviewerCard style=width:18rem> <img class=card-img-top src.bind=userResults.photoURL alt.bind=userResults.displayName> <div class=card-body> <h5 class=card-title>${userResults.displayName}</h5> <p class=card-text>We are a software company that makes IT stuff</p> <a href=\\\"\\\" class=\\\"btn btn-link\\\">Profile</a> </div> </div> </template> <template if.bind=error> <div class=text-center> <h5>${error.message}</h5> <small>${error.details}</small> </div> </template> </div> </div> </template> \";","import { autoinject, bindable, computedFrom, signalBindings } from 'aurelia-framework';\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { LocalResources } from 'services/storage';\nimport { Category, Element as Elem, Functions, defaultElement } from 'definitions';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport './css/category-component.css';\n\n@autoinject\nexport class CategoryComponent {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: oggetto categoria del modello DB\n  @bindable category: Category;\n\n  //DOC: path base delle immagini, in funzione della definizione in webpack\n  @bindable iconBasePath: string = \"/images/\";\n\n  //DOC: indica se l'elemento è nello stato di EDIT, se false è in stato di VIEW e niente può essere modificato\n  @bindable canEdit: boolean = true;\n  //DOC: indica, se in stato di EDIT, si sta modificando\n  @bindable isEditing: boolean = false;\n\n  //DOC: indica se sta caricando gli elementi contenuti (0 se ha caricato tutti gli elementi)\n  @bindable isLoadingElements: number = -1;\n\n  //DOC: proprietà settata da padre, se true è la prima categoria in elenco\n  @bindable inFirstPosition: boolean = false;\n  //DOC: proprietà settata da padre, se true è l'ultima categoria in elenco\n  @bindable inLastPosition: boolean = false;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  //DOC: eventi da bindare per lo spostamento della posizione delle categorie\n  @bindable public onMoveUpPosition: (p: number) => void;\n  @bindable public onMoveDownPosition: (p: number) => void;\n  //DOC: eventi sollevati in CurriculumComponent per l'aggiunta o l'eliminazione delle categorie\n  @bindable public onAddingCategory: (position: number) => void;\n  @bindable public onDeletingCategory: (idCategory: string, idCurriculum: string) => void;\n\n  //DOC: evento sollevato al completamento del caricamento degli elementi\n  @bindable public onLoadingCompleted: ({ idCategory: string }) => void;\n\n  constructor(private db: Database, public element: Element) { }\n\n  bind() {\n    //DOC: sottoscrivo eventi: onChanged su Category, onAdded e onRemoved su Element\n    this.queries = [\n      this.db.query(Path.categories).orderByKey().equalTo(this.category.id),\n      this.db.query(Path.elements).orderByChild(ChildPath.idCategory).equalTo(this.category.id)];\n    this.queries[0].on(Action.onChanged, (data: any) => this.onCategoryChanged.call(this, data));\n    this.queries[1].on(Action.onAdded, (data: any) => this.onElementAdded.call(this, data));\n    this.queries[1].on(Action.onRemoved, (data: any) => this.onElementRemoved.call(this, data));\n    //this.queries.forEach(q => console.log(q.toString()));\n\n    this.category.elements = [];\n    //|| {} è perchè la categoria potrebbe non avere elementi\n    this.isLoadingElements = Object.keys((this.category as any).idElements || {}).length;\n  }\n  unbind() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n  attached() { }\n\n  //DOC: salva i cambiamenti della categoria\n  public saveChanges(value: any) {\n    value.id = this.category.id;\n    this.db.updateCategory([value]);\n  }\n\n  //DOC: aggiunge un elemento alla categoria\n  public addElement(pos: number) {\n    if (pos == null || pos < 0 || pos > Functions.maxPosition(this.category.elements) + 1)\n      throw new Error(\"Posizione di inserimento dell'elemento non valida\");\n    let ele: Elem = { ...defaultElement, idCategory: this.category.id, position: pos };\n    console.log(\"----->\", ele);\n    //filtro gli elementi di posizione maggiore ed incremento la loro posizione\n    let updates: Elem[] = [];\n    this.category.elements\n      .filter(e => e.position >= pos)\n      .forEach(e => updates.push({ id: e.id, position: ++e.position }));\n    this.db.updateElement(updates);\n    //aggiungo il nuovo elemento\n    this.db.appendElement(ele);\n  }\n\n  //DOC: elimina l'elemento\n  public deleteElement(idElement: string, idCategory: string) {\n    let pos = this.category.elements.find(e => e.id == idElement).position;\n    //filtro gli elementi di posizione maggiore e decremento la loro posizione\n    let updates: Elem[] = [];\n    this.category.elements\n      .filter(e => { e.position > pos && e.id != idElement })\n      .forEach(e => { updates.push({ id: e.id, position: --e.position }) });\n    this.db.updateElement(updates);\n    //elimino l'elemento\n    this.db.deleteElement({ id: idElement, idCategory: idCategory });\n  }\n\n  //DOC: callback alla modifica della categoria\n  public onCategoryChanged(data: any) {\n    this.logger.log(\"Categoria Modificata\");\n    if (!data.exists())\n      this.errorManager.error(\"onCategoryChanged: data not valid\");\n    let d = data.val();\n    //NOTE: per ogni campo controllo che sia stato modificato e quindi lo aggiorno nel modello\n    Object.entries(d).forEach(\n      ([key, value]) => {\n        if (this.category[key] != value) {\n          this.category[key] = value;\n          console.log(key + \" -> \" + value);\n        }\n      }\n    );\n  }\n\n  //DOC: callback all'aggiunta di un elemento\n  public onElementAdded(data: any) {\n    this.logger.log(\"Elemento effettivamente aggiunto al DB\");\n    let e = data.val() as Elem;\n    e.id = data.key;\n    // aggiungo l'elemento alla categoria\n    if (this.category.elements.some(_ => _.id == e.id))\n      throw new Error(\"L'elemento che si vuole aggiungere è già presente\");\n    this.category.elements.splice(this.category.elements.length, 0, e);\n    this.isLoadingElements--;\n  }\n  //DOC: callback alla rimozione di un elemento\n  public onElementRemoved(data: any) {\n    this.logger.log(\"Elemento effettivamente eliminato dal DB\");\n    // elimino l'elemento dalla categoria\n    let index = this.category.elements.findIndex(e => e.id == data.key);\n    let pos = this.category.elements.find(e => e.id == data.key).position;\n    if (index == -1)\n      throw new Error(\"L'elemento che si vuole eliminare non è stato trovato\");\n    this.category.elements.splice(index, 1);\n    // filtro gli elementi di posizione maggiore e decremento la loro posizione\n    this.category.elements\n      .filter(e => e.position >= pos)\n      .forEach(e => --e.position);\n  }\n\n  //DOC: scambio tra loro gli elementi di posizione p e PRECEDENTE(p)\n  public moveUpElement(p: number) {\n    if (p <= Functions.minPosition(this.category.elements))\n      throw new Error(\"Posizione di spostamento dell'elemento non valida\");\n    this.logger.log(\"sposto su\", p);\n    //trovo gli elementi da modificare\n    let e1 = this.category.elements.find(c => c.position == p);\n    let pprevious = Functions.previousPosition(this.category.elements, p);\n    let e2 = this.category.elements.find(c => c.position == pprevious);\n    //aggiorno le posizioni degli elementi in db ed in locale\n    this.db.updateElement([\n      { id: e1.id, position: (e1.position = e2.position) },\n      { id: e2.id, position: (e2.position = p) }])\n      .then(() => {\n        //chiamo il segnale per il ValueConverter\n        signalBindings('position-changed');\n      });\n  }\n\n  //DOC: scambio tra loro gli elementi di posizione p e SUCCESSIVO(p)\n  public moveDownElement(p: number) {\n    if (p >= Functions.maxPosition(this.category.elements))\n      throw new Error(\"Posizione di spostamento dell'elemento non valida\");\n    this.logger.log(\"sposto giù\", p);\n    //aggiorno le posizioni\n    let e1 = this.category.elements.find(c => c.position == p);\n    let pnext = Functions.nextPosition(this.category.elements, p);\n    let e2 = this.category.elements.find(c => c.position == pnext);\n    //aggiorno le posizioni degli elementi in db ed in locale\n    this.db.updateElement([\n      { id: e1.id, position: (e1.position = e2.position) },\n      { id: e2.id, position: (e2.position = p) }])\n      .then(() => {\n        //chiamo il segnale per il ValueConverter\n        signalBindings('position-changed');\n      });\n\n  }\n\n  //DOC: restituisce lista di icone (stringhe) del pack p\n  public getIconsInPack(p: number = 0) {\n    return LocalResources.icons[p].icons.concat(LocalResources.noIcon);\n  }\n\n  //DOC: restituisce true se l'icona scelta è valida (cioè se non ho selezionato noIcon)\n  @computedFrom(\"category.icon\")\n  get isValidIcon(): boolean {\n    return this.category.icon != LocalResources.noIcon;\n  }\n\n  //DOC: restituisce il percorso dell'icona della categoria\n  @computedFrom(\"category.icon\")\n  get iconPath() {\n    return this.iconBasePath + this.category.icon;\n  }\n\n  //DOC: restituisce il testo per l'attributo ALT del tag IMAGE\n  @computedFrom(\"category.title\")\n  get imgAltAttr() {\n    return this.category.title ? this.category.title.toLowerCase() : \"\";\n  }\n\n  //DOC: restituisce true se ci sono elementi nella categoria\n  @computedFrom(\"category.elements.length\")\n  get categoryHasElements(): boolean {\n    return this.category.elements.length != 0;\n  }\n\n  //DOC: al cambiamento di valore di isLoadingElements solleva l'evento per il termine del caricamento degli elementi\n  public isLoadingElementsChanged(_new: number, _old: number) {\n    if (_new == 0) this.onLoadingCompleted({ idCategory: this.category.id });\n  }\n}\n","module.exports = \"<template> <require from=common/attributes/tooltip></require> <require from=common/inputEditable/InputEditable></require> <require from=common/loading/LoadingComponent></require> <require from=converters/sortElement></require> <require from=./ElementComponent></require> <div id.bind=category.id class=\\\"category-component w-100 mt-4 ${css}\\\"> <div if.bind=inFirstPosition class=row> <div show.bind=canEdit class=\\\"col-12 col-md-2 offset-md-4 add-category my-4\\\"> <button type=button class=\\\"btn btn-secondary w-100\\\" click.delegate=\\\"onAddingCategory({position: category.position})\\\">Add category</button> </div> </div> <div class=row> <div class=\\\"col-12 col-md-2 d-flex text-center text-md-left\\\"> <div class=mr-3> <div if.bind=canEdit class=\\\"btn-group-vertical btn-group-sm dropright\\\"> <button type=button class=\\\"btn btn-outline-secondary dropdown-toggle caret-off\\\" data-toggle=dropdown aria-haspopup=true aria-expanded=false> <span class=\\\"fa fa-bars\\\" aria-hidden=true></span> </button> <div class=dropdown-menu> <a class=\\\"dropdown-item text-danger\\\" click.delegate=\\\"onDeletingCategory({idCategory: category.id, idCurriculum: category.idCurriculum})\\\"> Delete Category<span class=\\\"fa fa-trash fa-fw\\\" aria-hidden=true></span></a> <a if.bind=!inFirstPosition class=dropdown-item click.delegate=\\\"onMoveUpPosition({position: category.position})\\\"> Move Up<span class=\\\"fa fa-long-arrow-alt-up fa-fw\\\" aria-hidden=true></span></a> <a if.bind=!inLastPosition class=dropdown-item click.delegate=\\\"onMoveDownPosition({position: category.position})\\\"> Move Down<span class=\\\"fa fa-long-arrow-alt-down fa-fw\\\" aria-hidden=true></span></a> <div class=dropdown-divider></div> <a class=\\\"dropdown-item d-flex flex-wrap image-gallery px-2\\\"> <img repeat.for=\\\"i of getIconsInPack()\\\" src.bind=i click.delegate=\\\"saveChanges({icon: (category.icon=i)})\\\"> </a> </div> </div> </div> <div class=flex-grow-1> <input-editable can-edit.bind=canEdit text.bind=category.title placeholder=\\\"Give a name to your category\\\" placeholder-textarea=\\\"here your category title\\\" text-suggestion=\\\"_This is the title, a couple of words, maybe three, no more_\\\" label=Title css=\\\"title text-center text-md-left\\\" on-text-changed.call=\\\"saveChanges({title: text})\\\"></input-editable> <div class=\\\"w-100 icon\\\"> <img class=m-3 show.bind=isValidIcon src.bind=category.icon alt.bind=imgAltAttr /> </div> </div> </div> <div class=\\\"col-12 col-md-10\\\"> <loading-component is-loading.bind=\\\"isLoadingElements>0\\\"></loading-component> <element-component show.bind=\\\"categoryHasElements && isLoadingElements<=0\\\" repeat.for=\\\"e of category.elements | sortElement\\\" element.two-way=e can-edit.bind=canEdit is-editing.bind=isEditing in-first-position.bind=$first in-last-position.bind=$last on-move-up-position.call=moveUpElement(position) on-move-down-position.call=moveDownElement(position) on-adding-element.call=addElement(position) on-deleting-element.call=\\\"deleteElement(idElement, idCategory)\\\"></element-component> <div if.bind=\\\"!categoryHasElements && canEdit\\\" class=\\\"col-11 category-empty m-3\\\"> <div class=\\\"d-flex flex-column m-3\\\"> <div class=\\\"w-100 text-center\\\"> <p>The category has no elements</p> <button tooltip type=button class=\\\"btn btn-sm btn-outline-secondary rounded-circle\\\" data-toggle=tooltip data-placement=right data-title=\\\"Add element\\\" click.delegate=addElement(0)><i class=\\\"fas fa-plus\\\"></i></button> </div> </div> </div> </div> </div> <div class=row> <div show.bind=canEdit class=\\\"col-12 col-md-2 offset-md-4 add-category my-4\\\"> <button type=button class=\\\"btn btn-secondary w-100\\\" click.delegate=\\\"onAddingCategory({position: category.position+1})\\\">Add category</button> </div> </div> </div> </template>\";","import { autoinject, bindable, signalBindings, computedFrom, DOM } from 'aurelia-framework';\nimport { BindingEngine } from 'aurelia-binding';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { Curriculum, Category, Functions, defaultCategory } from 'definitions';\n\nimport './css/curriculum-component.css';\nimport { LocalResources } from 'services/storage';\n\n@autoinject\nexport class CurriculumComponent {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: oggetto curriculum del modello DB\n  @bindable curriculum: Curriculum = { id: \"\", categories: [] };\n\n  //DOC: indica se l'elemento è nello stato di EDIT, se false è in stato di VIEW\n  @bindable canEdit: boolean = true;\n  //DOC: indica se in stato di EDIT si sta modificando\n  @bindable isEditing: boolean = false;\n\n  //DOC: indica se sta caricando le categorie contenute\n  @bindable isLoadingCategories: number = -1;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  @bindable currentIdCategoryInViewport: string = \"\";\n  public onscroll = () => { };\n\n  //DOC: evento sollevato al completamento del caricamento delle categorie\n  @bindable public onLoadingCompleted: ({ idCurriculum: string }) => void;\n\n  constructor(private db: Database, public element: Element, private bengine: BindingEngine) { }\n\n  bind() {\n    //DOC: sottoscrivo eventi: ON sul curriculum, ADDED e REMOVED su category\n    this.queries = [\n      this.db.query(Path.curricula).orderByChild(ChildPath.idUser).equalTo(this.curriculum.uid),\n      this.db.query(Path.categories).orderByChild(ChildPath.idCurriculum).equalTo(this.curriculum.id)];\n    this.queries[0].on(Action.onChanged, (data: any) => this.onCurriculumChanged.call(this, data));\n    this.queries[1].on(Action.onAdded, (data: any) => this.onCategoryAdded.call(this, data));\n    this.queries[1].on(Action.onRemoved, (data: any) => this.onCategoryRemoved.call(this, data));\n    //this.queries.forEach(q => console.log(q.toString()));\n\n    this.curriculum.categories = [];\n    //|| {} è perchè il curriculum potrebbe non avere categorie\n    this.isLoadingCategories = Object.keys((this.curriculum as any).idCategories || {}).length;\n\n    //NOTE: funzione inizializzata che è callback all'evento scroll (NB: deve essere inizializzata nel ctor)\n    this.onscroll = () => {\n      setTimeout(() => {\n        let scroll = window.pageYOffset | document.body.scrollTop;\n        let elements = document.querySelectorAll(\"category-component > div, #personalInfo, #coverLetter\");\n        for (let i = 0; i < elements.length; i++) {\n          let el = elements.item(i) as HTMLElement;\n          let rect = el.getBoundingClientRect();\n          let offset = { top: rect.top + document.body.scrollTop, left: rect.left + document.body.scrollLeft }\n          if (offset.top >= scroll && el.offsetParent !== null) {\n            //console.log(\"--->\", el.id);\n            this.currentIdCategoryInViewport = el.id;\n            break;\n          }\n        }\n      }, 100);\n    };\n  }\n  unbind() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n  attached() {\n    document.addEventListener('scroll', this.onscroll);\n  }\n\n  detached() {\n    document.removeEventListener('scroll', this.onscroll);\n  }\n\n  //DOC: salva i cambiamenti del curriculum\n  public saveChanges(value: any) {\n    this.db.updateCurriculum(this.curriculum.id, value);\n  }\n\n  //DOC: aggiunge una nuova categoria al curriculum\n  public addCategory(pos: number) {\n    //controllo che sto aggiungendo la categoria in una posizione valida\n    if (pos == null || pos < 0 || pos > Functions.maxPosition(this.curriculum.categories) + 1)\n      throw new Error(\"Posizione di inserimento della categoria non valida\");\n    let cat: Category = { ...defaultCategory, idCurriculum: this.curriculum.id, position: pos, icon: LocalResources.noIcon };\n    //filtro le categorie di posizione maggiore ed incremento la loro posizione\n    let updates: Category[] = [];\n    this.curriculum.categories\n      .filter(c => c.position >= pos)\n      .forEach(c => updates.push({ id: c.id, position: (c.position = c.position + 1) }));\n    this.db.updateCategory(updates);\n    //aggiungo la nuova categoria\n    this.db.appendCategory(cat);\n  }\n\n  //DOC: elimina la categoria\n  public deleteCategory(idCategory: string, idCurriculum: string) {\n    if (!window.confirm('Do you really want to delete the categories?')) return;\n    let pos = this.curriculum.categories.find(c => c.id == idCategory).position;\n    //filtro gli elementi di posizione maggiore e decremento la loro posizione in db ed in locale\n    let updates: Category[] = [];\n    this.curriculum.categories\n      .filter(c => { c.position > pos && c.id != idCategory })\n      .forEach(c => { updates.push({ id: c.id, position: (c.position = c.position - 1) }) });\n    this.db.updateCategory(updates);\n    //elimino la categoria\n    this.db.deleteCategory({ id: idCategory, idCurriculum: idCurriculum });\n  }\n\n  //DOC: callback alla modifica del curriculum\n  public onCurriculumChanged(data: any) {\n    this.logger.log(\"Curriculum Modificato\");\n    if (!data.exists())\n      this.errorManager.error(\"onCurriculumChanged: data not valid\");\n    let d = data.val();\n    //NOTE: per ogni campo controllo che sia stato modificato e quindi lo aggiorno nel modello\n    Object.entries(d).forEach(\n      ([key, value]) => {\n        if (this.curriculum[key] != value) {\n          this.curriculum[key] = value;\n          console.log(key + \" -> \" + value);\n        }\n      }\n    );\n    this.changeCurriculumStyle();\n  }\n\n  //DOC: callback all'aggiunta di una categoria\n  public onCategoryAdded(data: any) {\n    this.logger.log(\"Categoria effettivamente aggiunta al DB\");\n    let c = data.val() as Category;\n    c.id = data.key;\n    // aggiungo la categoria al cv\n    if (this.curriculum.categories.some(_ => _.id == c.id))\n      throw new Error(\"La categoria che si vuole aggiungere è già presente\");\n    this.curriculum.categories.splice(this.curriculum.categories.length, 0, c);\n  }\n  //DOC: callback alla rimozione di una categoria\n  public onCategoryRemoved(data: any) {\n    this.logger.log(\"Categoria effettivamente eliminata dal DB\");\n    // elimino la categoria dal cv\n    let index = this.curriculum.categories.findIndex(c => c.id == data.key);\n    let pos = this.curriculum.categories.find(c => c.id == data.key).position;\n    if (index == -1)\n      throw new Error(\"La categoria che si vuole eliminare non è stato trovata\");\n    this.curriculum.categories.splice(index, 1);\n    // filtro le categorie di posizione maggiore e decremento la loro posizione\n    this.curriculum.categories\n      .filter(c => c.position >= pos)\n      .forEach(c => --c.position);\n  }\n\n  //DOC: scambio tra loro le categorie di posizione p e PRECEDENTE(p)\n  public moveUpCategory(p: number) {\n    if (p <= Functions.minPosition(this.curriculum.categories))\n      throw new Error(\"Posizione di spostamento della categoria non valida\");\n    this.logger.log(\"sposto su\", p);\n    //trovo le categorie da modificare\n    let c1 = this.curriculum.categories.find(c => c.position == p);\n    let pprevious = Functions.previousPosition(this.curriculum.categories, p);\n    let c2 = this.curriculum.categories.find(c => c.position == pprevious);\n    //aggiorno le posizioni delle categorie in db ed in locale\n    this.db.updateCategory([\n      { id: c1.id, position: (c1.position = c2.position) },\n      { id: c2.id, position: (c2.position = p) }])\n      .then(() => {\n        //chiamo il segnale per il ValueConverter\n        signalBindings('position-changed');\n      });\n  }\n\n  //DOC: scambio tra loro le categorie di posizione p e SUCCESSIVO(p)\n  public moveDownCategory(p: number) {\n    if (p >= Functions.maxPosition(this.curriculum.categories))\n      throw new Error(\"Posizione di spostamento della categoria non valida\");\n    this.logger.log(\"sposto giù\", p);\n    //trovo le categorie da modificare\n    let c1 = this.curriculum.categories.find(c => c.position == p);\n    let pnext = Functions.nextPosition(this.curriculum.categories, p);\n    let c2 = this.curriculum.categories.find(c => c.position == pnext);\n    //aggiorno le posizioni delle categorie in db ed in locale\n    this.db.updateCategory([\n      { id: c1.id, position: (c1.position = c2.position) },\n      { id: c2.id, position: (c2.position = p) }])\n      .then(() => {\n        //chiamo il segnale per il ValueConverter\n        signalBindings('position-changed');\n      });\n  }\n\n  //DOC: restituisce true se ci sono categorie nel curriculum\n  @computedFrom(\"curriculum.categories.length\")\n  get curriculumHasCategories(): boolean {\n    return this.curriculum.categories.length != 0;\n  }\n\n  //DOC: al cambiamento di valore di isLoadingElements solleva l'evento per il termine del caricamento delle categorie\n  public isLoadingCategoriesChanged(_new: number, _old: number) {\n    if (_new == 0) {\n      this.changeCurriculumStyle();\n      this.onLoadingCompleted({ idCurriculum: this.curriculum.id });\n    }\n  }\n  //DOC: evento sollevato al termine del caricamento della singola categoria\n  public onCategoryLoaded(idCategory: string /*DoNotDelete*/) {\n    //console.log('caricamento categoria completato: ', idCategory);\n    this.isLoadingCategories--;\n  }\n\n\n  //TODO: splittare le azioni di update dopo la singola modifica (update puntuale)\n  public changeCurriculumStyle() {\n    let root = document.querySelector(\".curriculum-component\") as HTMLElement;\n    if (!root) return;\n    root.style.setProperty(\"--text-color-primary\", this.curriculum.style.textColorPrimary);\n    root.style.setProperty(\"--text-color-secondary\", this.curriculum.style.textColorSecondary);\n    root.style.setProperty(\"--text-color-more\", this.curriculum.style.textColorMore);\n    root.style.setProperty(\"--text-size-ratio\", this.curriculum.style.textSizeRatio + \"rem\");\n    if (this.curriculum.style.layourBorder) root.classList.replace(\"container-fluid\", \"container\");\n    else root.classList.replace(\"container\", \"container-fluid\");\n    root.style.setProperty(\"--icons-enabled\", this.curriculum.style.iconsEnabled ? \"visible\" : \"hidden\");\n\n    let linktag = document.querySelector('#googlefont') as HTMLLinkElement;\n    let fontFamily = this.curriculum.style.textFamily //NOTE: deve essere del formato: 'Permanent Marker', cursive\n    let fontLink = fontFamily.split(',')[0].replace(/'/g, '').replace(/ /g, '+');\n    linktag.href = `https://fonts.googleapis.com/css?family=${fontLink}`;\n    root.style.setProperty(\"--text-family\", this.curriculum.style.textFamily);\n  }\n\n}\n","module.exports = \"<template> <require from=common/inputEditable/InputEditable></require> <require from=common/attributes/tooltip></require> <require from=common/loading/LoadingComponent></require> <require from=converters/sortElement></require> <require from=./CategoryComponent></require> <require from=./CurriculumNavbarComponent></require> <require from=./PageIndexComponent></require> <div class=\\\"curriculum-component container-fluid ${css}\\\"> <curriculum-navbar-component can-edit.two-way=canEdit links.bind=curriculum.links title.bind=curriculum.title on-links-changed.call=\\\"saveChanges({links: links})\\\" on-title-changed.call=\\\"saveChanges({title: title})\\\"> </curriculum-navbar-component> <div id=personalInfo class=\\\"container-fluid my-5\\\"> <div class=row> <div class=\\\"col-md-4 col-sm-12\\\"> <input-editable can-edit.bind=canEdit text.bind=curriculum.details placeholder=\\\"Insert your personal details\\\" label=\\\"Personal Details\\\" css=\\\"personal-details text-center\\\" on-text-changed.call=\\\"saveChanges({details: text})\\\"> </input-editable> </div> <div class=\\\"col-md-4 col-sm-12\\\"> <input-editable can-edit.bind=canEdit text.bind=curriculum.description placeholder=\\\"Insert your description\\\" label=Description css=\\\"personal-details text-center\\\" on-text-changed.call=\\\"saveChanges({description: text})\\\"> </input-editable> </div> <div class=\\\"col-md-4 col-sm-12\\\"> <input-editable can-edit.bind=canEdit text.bind=curriculum.accounts placeholder=\\\"Insert your accounts\\\" label=Accounts css=\\\"personal-details text-center\\\" on-text-changed.call=\\\"saveChanges({accounts: text})\\\"> </input-editable> </div> </div> </div> <hr> <template if.bind=\\\"canEdit || (!canEdit && curriculum.coverLetter.length>0)\\\"> <div id=coverLetter class=\\\"container my-5\\\"> <div class=row> <div class=col> <input-editable can-edit.bind=canEdit text.bind=curriculum.coverLetter placeholder=\\\"Add here you cover letter\\\" label=\\\"Cover Letter\\\" css=text-left on-text-changed.call=\\\"saveChanges({coverLetter: text})\\\"> </input-editable> </div> </div> </div> <hr> </template> <div class=container-fluid> <loading-component is-loading.bind=\\\"isLoadingCategories > 0\\\"></loading-component> <page-index-component if.bind=\\\"!canEdit && curriculumHasCategories\\\" class=\\\"d-none d-md-block d-lg-block\\\" curriculum.bind=curriculum current-id-category-in-viewport.bind=currentIdCategoryInViewport more-links.bind=\\\"[{ title:'Personal Info', id:'personalInfo'},{ title:'Cover Letter', id:'coverLetter'}]\\\"> </page-index-component> <div if.bind=\\\"canEdit && !curriculumHasCategories\\\" class=row> <div class=\\\"col-4 offset-3 text-center\\\"> You have no categories yet, start adding one. </div> <div class=\\\"col-2 offset-5\\\"> <div class=add-category> <button type=button class=\\\"btn btn-secondary\\\" click.delegate=addCategory(0)>Add category</button> </div> </div> </div> <category-component repeat.for=\\\"c of curriculum.categories | sortElement\\\" category.bind=c can-edit.bind=canEdit is-editing.bind=isEditing in-first-position.bind=$first in-last-position.bind=$last on-move-up-position.call=moveUpCategory(position) on-move-down-position.call=moveDownCategory(position) on-adding-category.call=addCategory(position) on-deleting-category.call=\\\"deleteCategory(idCategory, idCurriculum)\\\" on-loading-completed.call=onCategoryLoaded(idCategory)> </category-component> </div> </div> </template> \";","import { autoinject, bindable, signalBindings, bindingMode, computedFrom, customElement } from 'aurelia-framework';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport './css/curriculum-navbar-component.css';\n\n@autoinject\nexport class CurriculumNavbarComponent {\n  //DOC: links della navbar\n  @bindable links: string;\n  //DOC: title del curriculum\n  @bindable title: string;\n\n  //DOC: indica se l'elemento è nello stato di modifica\n  @bindable canEdit: boolean = true;\n\n  //DOC: evento sollevato quando links cambia contenuto\n  @bindable onLinksChanged: (links: { links: string }) => void;\n  //DOC: evento sollevato quando title cambia contenuto\n  @bindable onTitleChanged: (title: { title: string }) => void;\n}\n","module.exports = \"<template> <require from=common/inputEditable/InputEditable></require> <require from=converters/markdown></require> <div class=\\\"curriculum-navbar-component ${css}\\\"> <nav class=\\\"navbar navbar-expand-lg navbar-light bg-light border rounded\\\"> <input-editable can-edit.bind=canEdit text.bind=title placeholder=\\\"Insert here some useful links\\\" css=\\\"navbar-links text-left\\\" class=mx-2 max-rows=1 on-text-changed.call=\\\"onTitleChanged({ title: text })\\\"> </input-editable> <button class=navbar-toggler type=button data-toggle=collapse data-target=#navbarCurriculumComponent aria-controls=navbarCurriculumComponent aria-expanded=false aria-label=\\\"Toggle navigation\\\"> <span class=navbar-toggler-icon></span> </button> <div class=\\\"collapse navbar-collapse\\\" id=navbarCurriculumComponent> <input-editable can-edit.bind=canEdit text.bind=links placeholder=\\\"Insert here some useful links\\\" css=\\\"navbar-links text-left\\\" class=\\\"w-100 mx-2\\\" max-rows=1 on-text-changed.call=\\\"onLinksChanged({ links: text })\\\"> </input-editable> </div> </nav> </div> </template>\";","import { autoinject, bindable, computedFrom } from 'aurelia-framework'\nimport { Router } from 'aurelia-router';\nimport { Element } from 'definitions';\n\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger'\n\nimport './css/element-component.css';\n\n@autoinject\nexport class ElementComponent {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: oggetto elemento del modello DB\n  @bindable element: Element;\n\n  //DOC: indica se l'elemento è nello stato di EDIT, se false è in stato di VIEW\n  @bindable canEdit: boolean = true;\n  //DOC: indica se si sta modificano l'elemento\n  @bindable editing: boolean = true;\n\n  //DOC: proprietà settata da padre, se true è la prima categoria in elenco\n  @bindable inFirstPosition: boolean = false;\n  //DOC: proprietà settata da padre, se true è l'ultima categoria in elenco\n  @bindable inLastPosition: boolean = false;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  //DOC: eventi sollevati per il cambiamento di posizione degli elementi\n  @bindable public onMoveUpPosition: (p: any) => void;\n  @bindable public onMoveDownPosition: (p: any) => void;\n\n  //DOC: eventi sollevati in CategoryComponent per l'aggiunta o l'eliminazione degli elementi\n  @bindable public onAddingElement: (position: any) => void;\n  @bindable public onDeletingElement: (idElement: string, idCategory: string) => void;\n\n  constructor(private db: Database, private router: Router) { }\n\n  bind() {\n    //DOC: sottoscrivo eventi: onChanged su Element\n    this.queries = [this.db.query(Path.elements).orderByKey().equalTo(this.element.id)];\n    this.queries[0].on(Action.onChanged, (data: any) => this.onElementChanged.call(this, data));\n    //this.queries.forEach(q => console.log(q.toString()));\n  }\n  unbind() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n\n  //DOC: salva le modifiche all'elemento\n  public saveChanges(valueToSave: any) {\n    valueToSave.id = this.element.id;\n    this.db.updateElement([valueToSave]);\n  }\n\n  //DOC: callback alla modifica dell'elemento \n  public onElementChanged(data: any) {\n    this.logger.log(\"Elemento Modificato\");\n    if (!data.exists())\n      this.errorManager.error(\"onElementChanged: data not valid\");\n    let d = data.val();\n    //NOTE: per ogni campo controllo che sia stato modificato e quindi lo aggiorno nel modello\n    //console.log(d); se elimino qualche campo non me ne accorgo dalla console\n    Object.entries(d).forEach(\n      ([key, value]) => {\n        if (this.element[key] != value) {\n          this.element[key] = value;\n          console.log(key + \" -> \" + value);\n        }\n      }\n    );\n  }\n\n  //DOC: le seguenti indicano se l'elemento è stato approvato, richiesto, è incompleto oppure rigettato\n  @computedFrom('element.status')\n  get experienceApproved() {\n    return this.element.status == \"approved\";\n  }\n  @computedFrom('element.status')\n  get experiencePending() {\n    return this.element.status == \"requested\";\n  }\n  @computedFrom('element.status')\n  get experienceIncomplete() {\n    return this.element.status == \"requested\";\n  }\n  @computedFrom('element.status')\n  get experienceRejected() {\n    return this.element.status == \"rejected\";\n  }\n\n  //DOC: restituisce il css in base allo stato\n  @computedFrom('element.status')\n  get cssStatus() {\n    switch (this.element.status) {\n      case \"requested\": return \"text-info\";\n      case \"incomplete\": return \"text-warning\";\n      case \"approved\": return \"text-success\";\n      case \"rejected\": return \"text-danger\";\n      default: \"\";\n    }\n  }\n\n  //DOC: indica se l'elemento ha una Confirm Request\n  @computedFrom('element.idConfirm')\n  get canRequestConfirm() {\n    return this.element.idConfirm == null;\n  }\n\n  //DOC: inoltra nella pagina di Confirm per la richiesta della conferma dell'esperienza\n  public requestConfirm() {\n    //TODO: da cambiare con navigateTo\n    this.router.navigate(\"confirms/new/\" + this.element.id);\n  }\n}\n","module.exports = \"<template> <require from=common/inputEditable/InputEditable></require> <require from=common/attributes/tooltip></require> <div id.bind=element.id class=\\\"element-component ${css} au-animate\\\"> <div class=row if.bind=inFirstPosition> <div class=\\\"col-2 offset-2\\\"> <div show.bind=canEdit class=\\\"add-element text-center\\\"> <button tooltip type=button class=\\\"btn btn-sm btn-outline-secondary rounded-circle\\\" data-toggle=tooltip data-placement=right data-title=\\\"Add element\\\" click.delegate=\\\"onAddingElement({position: element.position})\\\"><i class=\\\"fas fa-plus\\\"></i></button> </div> </div> </div> <div class=row> <span class=sorthandle></span> <div class=\\\"col-12 col-md-3 form-group mb-0 mt-3 mt-md-0\\\"> <input-editable can-edit.bind=canEdit text.bind=element.period placeholder=\\\"Insert a period to the element\\\" placeholder-textarea=\\\"insert a period\\\" text-suggestion=\\\"_add here your period in the format you prefer, but keep it in all your doc. use abbr. amap._\\\" label=Period css=\\\"period text-right\\\" on-text-changed.call=\\\"saveChanges({period: text})\\\"> </input-editable> </div> <div class=divider></div> <div class=\\\"col-12 col-md-9 d-flex form-group mb-0\\\"> <div class=flex-grow-1> <div class=d-flex> <div class=flex-grow-1> <input-editable can-edit.bind=canEdit text.bind=element.title placeholder=\\\"Add a title to your experience\\\" placeholder-textarea=\\\"insert a title\\\" label=Title css=\\\"title text-left ${cssStatus}\\\" max-rows=1 on-text-changed.call=\\\"saveChanges({title: text})\\\"> </input-editable> </div> <template if.bind=experienceApproved> <p tooltip class=\\\"px-3 m-0 experience-status\\\" data-toggle=tooltip data-placement=top data-title=\\\"The experience has been approved by the company or institution\\\"> <i class=\\\"fas fa-certificate text-success\\\"></i> </p> </template> <template if.bind=experiencePending> <p tooltip class=\\\"px-3 m-0 experience-status\\\" data-toggle=tooltip data-placement=top data-title=\\\"The experience approvement is pending by the company or institution\\\"> <i class=\\\"fas fa-hourglass-start text-info\\\"></i> </p> </template> </div> <input-editable can-edit.bind=canEdit text.bind=element.description placeholder=\\\"This is the place to describe your experience\\\" placeholder-textarea=\\\"insert a description\\\" text-suggestion=\\\"_this space is more in deeph what you did in your experience_\\\" label=Description css=\\\"description text-left\\\" on-text-changed.call=\\\"saveChanges({description: text})\\\"> </input-editable> <input-editable can-edit.bind=canEdit text.bind=element.tags text-suggestion=\\\"_add here your tag in the format `[TAGNAME]{.tag .TAGCATEGORY}`_\\\" placeholder=\\\"If you have, find some tag to add here\\\" placeholder-textarea=\\\"insert tags\\\" label=Tags css=text-right on-text-changed.call=\\\"saveChanges({tags: text})\\\"> </input-editable> </div> <div class=ml-3> <div if.bind=canEdit class=\\\"btn-group-vertical btn-group-sm dropleft\\\"> <button type=button class=\\\"btn btn-outline-secondary dropdown-toggle caret-off\\\" data-toggle=dropdown aria-haspopup=true aria-expanded=false> <span class=\\\"fa fa-bars\\\" aria-hidden=true></span> </button> <div class=dropdown-menu> <a class=\\\"dropdown-item text-danger\\\" click.delegate=\\\"onDeletingElement({idElement: element.id, idCategory: element.idCategory})\\\"> <span class=\\\"fa fa-trash\\\" aria-hidden=true></span>Delete element</a> <a if.bind=!inFirstPosition class=dropdown-item click.delegate=\\\"onMoveUpPosition({position: element.position})\\\"> <span class=\\\"fa fa-long-arrow-alt-up\\\" aria-hidden=true></span>Move up</a> <a if.bind=!inLastPosition class=dropdown-item click.delegate=\\\"onMoveDownPosition({position: element.position})\\\"> <span class=\\\"fa fa-long-arrow-alt-down\\\" aria-hidden=true></span>Move down</a> <a if.bind=canRequestConfirm class=dropdown-item click.delegate=requestConfirm()> <span class=\\\"fa fa-check-double\\\" aria-hidden=true></span>Ask Confirm</a> </div> </div> </div> </div> </div> <div class=row> <div class=\\\"col-2 offset-0 offset-md-2\\\"> <div show.bind=canEdit class=\\\"add-element text-center\\\"> <button tooltip type=button class=\\\"btn btn-sm btn-outline-secondary rounded-circle\\\" data-toggle=tooltip data-placement=right data-title=\\\"Add element\\\" click.delegate=\\\"onAddingElement({position: element.position+1})\\\"><i class=\\\"fas fa-plus\\\"></i></button> </div> </div> </div> </div> </template>\";","import { autoinject, bindable, computedFrom } from 'aurelia-framework'\nimport { BindingSignaler } from 'aurelia-templating-resources';\nimport { Router } from 'aurelia-router';\nimport { Curriculum, Element } from 'definitions';\n\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger'\n\nimport './css/page-index-component.css';\n\ninterface link {\n    title: string;\n    id: string;\n}\n\n@autoinject\nexport class PageIndexComponent {\n    //DOC: gestore degli errori\n    private errorManager: ErrorManager = new ErrorManager();\n    //DOC: gestore della console\n    private logger: Logger = new Logger();\n\n    //DOC: oggetto elemento del modello DB\n    @bindable curriculum: Curriculum;\n\n    //DOC: stato del menu\n    @bindable menuOpen: boolean = false;\n\n    //DOC: id della categoria in viewport\n    @bindable currentIdCategoryInViewport: string = \"\";\n\n    //DOC: array di links aggiuntivi aggiunti in testa\n    @bindable moreLinks: link[] = [];\n\n    constructor(private db: Database, private signaler: BindingSignaler) { }\n\n    bind() {\n        //DOC: sottoscrivo eventi: onChanged su Element\n        //this.queries = [this.db.query(Path.elements).orderByKey().equalTo(this.element.id)];\n        //this.queries[0].on(Action.onChanged, (data: any) => this.onElementChanged.call(this, data));\n        //this.queries.forEach(q => console.log(q.toString()));\n    }\n    unbind() {\n        //DOC: disinscrivo tutti gli eventi\n        //this.queries.forEach(q => q.off());\n    }\n\n    //DOC: modifica lo stato del menu\n    public setMenuState(s: boolean) {\n        this.menuOpen = s;\n    }\n\n    //DOC: scrolla la pagina fino all'elemento passato (NB: id elemento = id categoria)\n    public gotoLink(id: string): void {\n        document.getElementById(id).scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n        document.getElementById(id).children[0].classList.add('goto-focus');\n    }\n\n    //DOC: metodo chiamato al cambiamento di valore di currentIdCategoryInViewport per aggiornare la view\n    public currentIdCategoryInViewportChanged(_new: string, _old: string) {\n        //DOC: invio il segnale alla view che notifica il nuovo id della categoria in viewport\n        this.signaler.signal('update-category-in-viewport');\n    }\n\n    //DOC: restituisce il css per il singolo link in base alla presenza in viewport della relativa categoria\n    public inViewportCss(id: string): string {\n        if (!id) return;\n        //console.log(id, \" =?= \", this.currentIdCategoryInViewport);\n        return id == this.currentIdCategoryInViewport ? 'in-viewport' : '';\n    }\n\n    //DOC: restituisce il css relativo allo stato del menu\n    @computedFrom('menuOpen')\n    get menuCss(): string {\n        return this.menuOpen ? \"menu-open\" : \"menu-closed\";\n    }\n}","module.exports = \"<template> <require from=converters/markdown></require> <div class=\\\"page-index-component text-left\\\"> <div class=\\\"menu ${menuCss}\\\" mouseleave.trigger=setMenuState(false)> <nav class=\\\"nav flex-column\\\"> <p repeat.for=\\\"l of moreLinks\\\" class=\\\"nav-link py-1 m-0 ${inViewportCss(l.id) & signal: 'update-category-in-viewport'}\\\" click.delegate=gotoLink(l.id)> <span class=\\\"d-inline-block text-truncate\\\" innerhtml.bind=l.title></span> </p> <p repeat.for=\\\"l of curriculum.categories\\\" class=\\\"nav-link py-1 m-0 ${inViewportCss(l.id) & signal: 'update-category-in-viewport'}\\\" click.delegate=gotoLink(l.id)> <span class=\\\"d-inline-block text-truncate\\\" innerhtml.bind=l.title.toLowerCase()></span> </p> </nav> </div> <div class=\\\"bars ${menuCss}\\\" mouseover.trigger=setMenuState(true)> <nav class=\\\"nav flex-column\\\"> <p repeat.for=\\\"l of moreLinks\\\" class=\\\"nav-link py-1 px-1 m-0 ${inViewportCss(l.id) & signal: 'update-category-in-viewport'}\\\"> <span class=\\\"\\\">&nbsp;</span> </p> <p repeat.for=\\\"l of curriculum.categories\\\" class=\\\"nav-link py-1 px-1 m-0 ${inViewportCss(l.id) & signal: 'update-category-in-viewport'}\\\"> <span class=\\\"\\\">&nbsp;</span> </p> </nav> </div> </div> </template>\";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router, RouteConfig, RouterConfiguration, NavigationInstruction } from 'aurelia-router';\nimport { PLATFORM } from 'aurelia-pal';\n\nimport { Curriculum, User } from 'definitions';\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\nimport * as Utils from 'helpers/utils';\n\n//import './css/edit-cv-page.css';\n\n@autoinject\nexport class EditCvPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = (new Logger()).setStyle(Logger.colors.orange, Logger.colors.white).setDefaultPrefix(\"EditorCVPage\");\n\n  //DOC: oggetto curriculum del modello DB\n  @bindable curriculum: Curriculum = null;\n  //DOC: id del cv nel DB\n  @bindable idCurriculum: string = \"\";\n\n  //DOC: indica se l'elemento è nello stato di EDIT, se false è in stato di VIEW\n  @bindable canEdit: boolean = true;\n  //DOC: indica se in stato di EDIT si sta modificando\n  @bindable isEditing: boolean = false;\n\n  //DOC: #id elemento su cui scrollare\n  @bindable goto: string;\n\n  //DOC: indica se il curriculum è stato completamente caricato\n  @bindable isLoadingCompleted: boolean = false;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  constructor(private db: Database, private router: Router) { }\n\n  bind() {\n    //this.router.currentInstruction.config.canEdit = this.toggleEditMode;\n    //DOC: sottoscrivo eventi: ON sul curriculum\n    this.queries = [this.db.query(Path.curricula).orderByKey().equalTo(this.idCurriculum)];\n    this.queries[0].once(Action.onValue, (data: any) => this.onCurriculumReading.call(this, data));\n    //this.queries.forEach(q => console.log(q.toString()));\n\n    window.scrollTo(0, 0);\n  }\n  unbind() { }\n\n  activate(params: any, routeConfig: RouteConfig, navigationInstruction: NavigationInstruction) {\n    //TODO: se l'id passato non corrisponde a nessun cv dell'utente allora ritorno alla dashboard\n    if (params.id == null)\n      this.router.navigateToRoute('dashboard');\n    else\n      this.idCurriculum = params.id;\n    this.goto = params.goto;\n  }\n\n  deactivate() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n\n\n  //DOC: callback richiamata al completamento del caricamento del Curriculum\n  public onCurriculumReading(data: any) {\n    if (!data.exists()) {\n      this.logger.warning(\"Cercato un curriculum che non esiste (\" + this.idCurriculum + \"), reindirizzo alla dashboard\");\n      this.router.navigateToRoute('dashboard');\n      return;\n    }\n    this.curriculum = Utils.toArrayOfObjects(data.val())[0] as Curriculum;\n  }\n\n  //DOC: callback al completamento del caricamento di tutte le categorie ed elementi\n  public isLoadingCompletedChanged(_new: boolean, _old: boolean) {\n    if (_new && this.goto != null && this.goto != \"\") {\n      document.getElementById(this.goto).scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n      document.getElementById(this.goto).children[0].classList.add('goto-focus');\n    }\n  }\n\n}\n","module.exports = \"<template> <require from=./EditCvComponents/CurriculumComponent></require> <require from=common/loading/LoadingComponent></require> <require from=sections/FooterSection></require> <div class=\\\"container-fluid p-0\\\"> <loading-component is-loading.bind=!isLoadingCompleted></loading-component> <curriculum-component if.bind=curriculum show.bind=isLoadingCompleted curriculum.bind=curriculum can-edit.bind=canEdit is-editing.bind=isEditing on-loading-completed.call=\\\"isLoadingCompleted=true\\\" class=\\\"\\\"></curriculum-component> </div> </template> \";","export default function(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n  if (compare.length === 1) compare = ascendingComparator(compare);\n  return {\n    left: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) < 0) lo = mid + 1;\n        else hi = mid;\n      }\n      return lo;\n    },\n    right: function(a, x, lo, hi) {\n      if (lo == null) lo = 0;\n      if (hi == null) hi = a.length;\n      while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (compare(a[mid], x) > 0) hi = mid;\n        else lo = mid + 1;\n      }\n      return lo;\n    }\n  };\n}\n\nfunction ascendingComparator(f) {\n  return function(d, x) {\n    return ascending(f(d), x);\n  };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","import {pair} from \"./pairs\";\n\nexport default function(values0, values1, reduce) {\n  var n0 = values0.length,\n      n1 = values1.length,\n      values = new Array(n0 * n1),\n      i0,\n      i1,\n      i,\n      value0;\n\n  if (reduce == null) reduce = pair;\n\n  for (i0 = i = 0; i0 < n0; ++i0) {\n    for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) {\n      values[i] = reduce(value0, values1[i1]);\n    }\n  }\n\n  return values;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\nexport var map = array.map;\n","var e10 = Math.sqrt(50),\n    e5 = Math.sqrt(10),\n    e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n  var reverse,\n      i = -1,\n      n,\n      ticks,\n      step;\n\n  stop = +stop, start = +start, count = +count;\n  if (start === stop && count > 0) return [start];\n  if (reverse = stop < start) n = start, start = stop, stop = n;\n  if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n  if (step > 0) {\n    start = Math.ceil(start / step);\n    stop = Math.floor(stop / step);\n    ticks = new Array(n = Math.ceil(stop - start + 1));\n    while (++i < n) ticks[i] = (start + i) * step;\n  } else {\n    start = Math.floor(start * step);\n    stop = Math.ceil(stop * step);\n    ticks = new Array(n = Math.ceil(start - stop + 1));\n    while (++i < n) ticks[i] = (start - i) / step;\n  }\n\n  if (reverse) ticks.reverse();\n\n  return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n  var step = (stop - start) / Math.max(0, count),\n      power = Math.floor(Math.log(step) / Math.LN10),\n      error = step / Math.pow(10, power);\n  return power >= 0\n      ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n      : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n  var step0 = Math.abs(stop - start) / Math.max(0, count),\n      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n      error = step0 / step1;\n  if (error >= e10) step1 *= 10;\n  else if (error >= e5) step1 *= 5;\n  else if (error >= e2) step1 *= 2;\n  return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","export default function(arrays) {\n  var n = arrays.length,\n      m,\n      i = -1,\n      j = 0,\n      merged,\n      array;\n\n  while (++i < n) j += arrays[i].length;\n  merged = new Array(j);\n\n  while (--n >= 0) {\n    array = arrays[n];\n    m = array.length;\n    while (--m >= 0) {\n      merged[--j] = array[m];\n    }\n  }\n\n  return merged;\n}\n","export var slice = Array.prototype.slice;\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n    if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n    _[t] = [];\n  }\n  return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n  this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n    return {type: t, name: name};\n  });\n}\n\nDispatch.prototype = dispatch.prototype = {\n  constructor: Dispatch,\n  on: function(typename, callback) {\n    var _ = this._,\n        T = parseTypenames(typename + \"\", _),\n        t,\n        i = -1,\n        n = T.length;\n\n    // If no callback was specified, return the callback of the given type and name.\n    if (arguments.length < 2) {\n      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n      return;\n    }\n\n    // If a type was specified, set the callback for the given type and name.\n    // Otherwise, if a null callback was specified, remove callbacks of the given name.\n    if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n    while (++i < n) {\n      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n    }\n\n    return this;\n  },\n  copy: function() {\n    var copy = {}, _ = this._;\n    for (var t in _) copy[t] = _[t].slice();\n    return new Dispatch(copy);\n  },\n  call: function(type, that) {\n    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  },\n  apply: function(type, that, args) {\n    if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n  }\n};\n\nfunction get(type, name) {\n  for (var i = 0, n = type.length, c; i < n; ++i) {\n    if ((c = type[i]).name === name) {\n      return c.value;\n    }\n  }\n}\n\nfunction set(type, name, callback) {\n  for (var i = 0, n = type.length; i < n; ++i) {\n    if (type[i].name === name) {\n      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n      break;\n    }\n  }\n  if (callback != null) type.push({name: name, value: callback});\n  return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n  svg: \"http://www.w3.org/2000/svg\",\n  xhtml: xhtml,\n  xlink: \"http://www.w3.org/1999/xlink\",\n  xml: \"http://www.w3.org/XML/1998/namespace\",\n  xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces\";\n\nexport default function(name) {\n  var prefix = name += \"\", i = prefix.indexOf(\":\");\n  if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;\n}\n","import namespace from \"./namespace\";\nimport {xhtml} from \"./namespaces\";\n\nfunction creatorInherit(name) {\n  return function() {\n    var document = this.ownerDocument,\n        uri = this.namespaceURI;\n    return uri === xhtml && document.documentElement.namespaceURI === xhtml\n        ? document.createElement(name)\n        : document.createElementNS(uri, name);\n  };\n}\n\nfunction creatorFixed(fullname) {\n  return function() {\n    return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n  };\n}\n\nexport default function(name) {\n  var fullname = namespace(name);\n  return (fullname.local\n      ? creatorFixed\n      : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n  return selector == null ? none : function() {\n    return this.querySelector(selector);\n  };\n}\n","function empty() {\n  return [];\n}\n\nexport default function(selector) {\n  return selector == null ? empty : function() {\n    return this.querySelectorAll(selector);\n  };\n}\n","export default function(selector) {\n  return function() {\n    return this.matches(selector);\n  };\n}\n","export default function(update) {\n  return new Array(update.length);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n  return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n  this.ownerDocument = parent.ownerDocument;\n  this.namespaceURI = parent.namespaceURI;\n  this._next = null;\n  this._parent = parent;\n  this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n  constructor: EnterNode,\n  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n  querySelector: function(selector) { return this._parent.querySelector(selector); },\n  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {Selection} from \"./index\";\nimport {EnterNode} from \"./enter\";\nimport constant from \"../constant\";\n\nvar keyPrefix = \"$\"; // Protect against keys like “__proto__”.\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n  var i = 0,\n      node,\n      groupLength = group.length,\n      dataLength = data.length;\n\n  // Put any non-null nodes that fit into update.\n  // Put any null nodes into enter.\n  // Put any remaining data into enter.\n  for (; i < dataLength; ++i) {\n    if (node = group[i]) {\n      node.__data__ = data[i];\n      update[i] = node;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Put any non-null nodes that don’t fit into exit.\n  for (; i < groupLength; ++i) {\n    if (node = group[i]) {\n      exit[i] = node;\n    }\n  }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n  var i,\n      node,\n      nodeByKeyValue = {},\n      groupLength = group.length,\n      dataLength = data.length,\n      keyValues = new Array(groupLength),\n      keyValue;\n\n  // Compute the key for each node.\n  // If multiple nodes have the same key, the duplicates are added to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if (node = group[i]) {\n      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);\n      if (keyValue in nodeByKeyValue) {\n        exit[i] = node;\n      } else {\n        nodeByKeyValue[keyValue] = node;\n      }\n    }\n  }\n\n  // Compute the key for each datum.\n  // If there a node associated with this key, join and add it to update.\n  // If there is not (or the key is a duplicate), add it to enter.\n  for (i = 0; i < dataLength; ++i) {\n    keyValue = keyPrefix + key.call(parent, data[i], i, data);\n    if (node = nodeByKeyValue[keyValue]) {\n      update[i] = node;\n      node.__data__ = data[i];\n      nodeByKeyValue[keyValue] = null;\n    } else {\n      enter[i] = new EnterNode(parent, data[i]);\n    }\n  }\n\n  // Add any remaining nodes that were not bound to data to exit.\n  for (i = 0; i < groupLength; ++i) {\n    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {\n      exit[i] = node;\n    }\n  }\n}\n\nexport default function(value, key) {\n  if (!value) {\n    data = new Array(this.size()), j = -1;\n    this.each(function(d) { data[++j] = d; });\n    return data;\n  }\n\n  var bind = key ? bindKey : bindIndex,\n      parents = this._parents,\n      groups = this._groups;\n\n  if (typeof value !== \"function\") value = constant(value);\n\n  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n    var parent = parents[j],\n        group = groups[j],\n        groupLength = group.length,\n        data = value.call(parent, parent && parent.__data__, j, parents),\n        dataLength = data.length,\n        enterGroup = enter[j] = new Array(dataLength),\n        updateGroup = update[j] = new Array(dataLength),\n        exitGroup = exit[j] = new Array(groupLength);\n\n    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n    // Now connect the enter nodes to their following update node, such that\n    // appendChild can insert the materialized enter node before this node,\n    // rather than at the end of the parent node.\n    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n      if (previous = enterGroup[i0]) {\n        if (i0 >= i1) i1 = i0 + 1;\n        while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n        previous._next = next || null;\n      }\n    }\n  }\n\n  update = new Selection(update, parents);\n  update._enter = enter;\n  update._exit = exit;\n  return update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(compare) {\n  if (!compare) compare = ascending;\n\n  function compareNode(a, b) {\n    return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n  }\n\n  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        sortgroup[i] = node;\n      }\n    }\n    sortgroup.sort(compareNode);\n  }\n\n  return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import namespace from \"../namespace\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, value) {\n  return function() {\n    this.setAttribute(name, value);\n  };\n}\n\nfunction attrConstantNS(fullname, value) {\n  return function() {\n    this.setAttributeNS(fullname.space, fullname.local, value);\n  };\n}\n\nfunction attrFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttribute(name);\n    else this.setAttribute(name, v);\n  };\n}\n\nfunction attrFunctionNS(fullname, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n    else this.setAttributeNS(fullname.space, fullname.local, v);\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name);\n\n  if (arguments.length < 2) {\n    var node = this.node();\n    return fullname.local\n        ? node.getAttributeNS(fullname.space, fullname.local)\n        : node.getAttribute(fullname);\n  }\n\n  return this.each((value == null\n      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)\n      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n      || (node.document && node) // node is a Window\n      || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window\";\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, value, priority) {\n  return function() {\n    this.style.setProperty(name, value, priority);\n  };\n}\n\nfunction styleFunction(name, value, priority) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) this.style.removeProperty(name);\n    else this.style.setProperty(name, v, priority);\n  };\n}\n\nexport default function(name, value, priority) {\n  return arguments.length > 1\n      ? this.each((value == null\n            ? styleRemove : typeof value === \"function\"\n            ? styleFunction\n            : styleConstant)(name, value, priority == null ? \"\" : priority))\n      : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n  return node.style.getPropertyValue(name)\n      || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n  return function() {\n    delete this[name];\n  };\n}\n\nfunction propertyConstant(name, value) {\n  return function() {\n    this[name] = value;\n  };\n}\n\nfunction propertyFunction(name, value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    if (v == null) delete this[name];\n    else this[name] = v;\n  };\n}\n\nexport default function(name, value) {\n  return arguments.length > 1\n      ? this.each((value == null\n          ? propertyRemove : typeof value === \"function\"\n          ? propertyFunction\n          : propertyConstant)(name, value))\n      : this.node()[name];\n}\n","function classArray(string) {\n  return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n  return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n  this._node = node;\n  this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n  add: function(name) {\n    var i = this._names.indexOf(name);\n    if (i < 0) {\n      this._names.push(name);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  remove: function(name) {\n    var i = this._names.indexOf(name);\n    if (i >= 0) {\n      this._names.splice(i, 1);\n      this._node.setAttribute(\"class\", this._names.join(\" \"));\n    }\n  },\n  contains: function(name) {\n    return this._names.indexOf(name) >= 0;\n  }\n};\n\nfunction classedAdd(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n  var list = classList(node), i = -1, n = names.length;\n  while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n  return function() {\n    classedAdd(this, names);\n  };\n}\n\nfunction classedFalse(names) {\n  return function() {\n    classedRemove(this, names);\n  };\n}\n\nfunction classedFunction(names, value) {\n  return function() {\n    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n  };\n}\n\nexport default function(name, value) {\n  var names = classArray(name + \"\");\n\n  if (arguments.length < 2) {\n    var list = classList(this.node()), i = -1, n = names.length;\n    while (++i < n) if (!list.contains(names[i])) return false;\n    return true;\n  }\n\n  return this.each((typeof value === \"function\"\n      ? classedFunction : value\n      ? classedTrue\n      : classedFalse)(names, value));\n}\n","function textRemove() {\n  this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.textContent = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? textRemove : (typeof value === \"function\"\n          ? textFunction\n          : textConstant)(value))\n      : this.node().textContent;\n}\n","function htmlRemove() {\n  this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n  return function() {\n    this.innerHTML = value;\n  };\n}\n\nfunction htmlFunction(value) {\n  return function() {\n    var v = value.apply(this, arguments);\n    this.innerHTML = v == null ? \"\" : v;\n  };\n}\n\nexport default function(value) {\n  return arguments.length\n      ? this.each(value == null\n          ? htmlRemove : (typeof value === \"function\"\n          ? htmlFunction\n          : htmlConstant)(value))\n      : this.node().innerHTML;\n}\n","function raise() {\n  if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n  return this.each(raise);\n}\n","function lower() {\n  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n  return this.each(lower);\n}\n","import creator from \"../creator\";\nimport selector from \"../selector\";\n\nfunction constantNull() {\n  return null;\n}\n\nexport default function(name, before) {\n  var create = typeof name === \"function\" ? name : creator(name),\n      select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n  return this.select(function() {\n    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n  });\n}\n","function remove() {\n  var parent = this.parentNode;\n  if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n  return this.each(remove);\n}\n","function selection_cloneShallow() {\n  return this.parentNode.insertBefore(this.cloneNode(false), this.nextSibling);\n}\n\nfunction selection_cloneDeep() {\n  return this.parentNode.insertBefore(this.cloneNode(true), this.nextSibling);\n}\n\nexport default function(deep) {\n  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","var filterEvents = {};\n\nexport var event = null;\n\nif (typeof document !== \"undefined\") {\n  var element = document.documentElement;\n  if (!(\"onmouseenter\" in element)) {\n    filterEvents = {mouseenter: \"mouseover\", mouseleave: \"mouseout\"};\n  }\n}\n\nfunction filterContextListener(listener, index, group) {\n  listener = contextListener(listener, index, group);\n  return function(event) {\n    var related = event.relatedTarget;\n    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {\n      listener.call(this, event);\n    }\n  };\n}\n\nfunction contextListener(listener, index, group) {\n  return function(event1) {\n    var event0 = event; // Events can be reentrant (e.g., focus).\n    event = event1;\n    try {\n      listener.call(this, this.__data__, index, group);\n    } finally {\n      event = event0;\n    }\n  };\n}\n\nfunction parseTypenames(typenames) {\n  return typenames.trim().split(/^|\\s+/).map(function(t) {\n    var name = \"\", i = t.indexOf(\".\");\n    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n    return {type: t, name: name};\n  });\n}\n\nfunction onRemove(typename) {\n  return function() {\n    var on = this.__on;\n    if (!on) return;\n    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n      } else {\n        on[++i] = o;\n      }\n    }\n    if (++i) on.length = i;\n    else delete this.__on;\n  };\n}\n\nfunction onAdd(typename, value, capture) {\n  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;\n  return function(d, i, group) {\n    var on = this.__on, o, listener = wrap(value, i, group);\n    if (on) for (var j = 0, m = on.length; j < m; ++j) {\n      if ((o = on[j]).type === typename.type && o.name === typename.name) {\n        this.removeEventListener(o.type, o.listener, o.capture);\n        this.addEventListener(o.type, o.listener = listener, o.capture = capture);\n        o.value = value;\n        return;\n      }\n    }\n    this.addEventListener(typename.type, listener, capture);\n    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};\n    if (!on) this.__on = [o];\n    else on.push(o);\n  };\n}\n\nexport default function(typename, value, capture) {\n  var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n  if (arguments.length < 2) {\n    var on = this.node().__on;\n    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n      for (i = 0, o = on[j]; i < n; ++i) {\n        if ((t = typenames[i]).type === o.type && t.name === o.name) {\n          return o.value;\n        }\n      }\n    }\n    return;\n  }\n\n  on = value ? onAdd : onRemove;\n  if (capture == null) capture = false;\n  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));\n  return this;\n}\n\nexport function customEvent(event1, listener, that, args) {\n  var event0 = event;\n  event1.sourceEvent = event;\n  event = event1;\n  try {\n    return listener.apply(that, args);\n  } finally {\n    event = event0;\n  }\n}\n","import defaultView from \"../window\";\n\nfunction dispatchEvent(node, type, params) {\n  var window = defaultView(node),\n      event = window.CustomEvent;\n\n  if (typeof event === \"function\") {\n    event = new event(type, params);\n  } else {\n    event = window.document.createEvent(\"Event\");\n    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n    else event.initEvent(type, false, false);\n  }\n\n  node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params);\n  };\n}\n\nfunction dispatchFunction(type, params) {\n  return function() {\n    return dispatchEvent(this, type, params.apply(this, arguments));\n  };\n}\n\nexport default function(type, params) {\n  return this.each((typeof params === \"function\"\n      ? dispatchFunction\n      : dispatchConstant)(type, params));\n}\n","import selection_select from \"./select\";\nimport selection_selectAll from \"./selectAll\";\nimport selection_filter from \"./filter\";\nimport selection_data from \"./data\";\nimport selection_enter from \"./enter\";\nimport selection_exit from \"./exit\";\nimport selection_join from \"./join\";\nimport selection_merge from \"./merge\";\nimport selection_order from \"./order\";\nimport selection_sort from \"./sort\";\nimport selection_call from \"./call\";\nimport selection_nodes from \"./nodes\";\nimport selection_node from \"./node\";\nimport selection_size from \"./size\";\nimport selection_empty from \"./empty\";\nimport selection_each from \"./each\";\nimport selection_attr from \"./attr\";\nimport selection_style from \"./style\";\nimport selection_property from \"./property\";\nimport selection_classed from \"./classed\";\nimport selection_text from \"./text\";\nimport selection_html from \"./html\";\nimport selection_raise from \"./raise\";\nimport selection_lower from \"./lower\";\nimport selection_append from \"./append\";\nimport selection_insert from \"./insert\";\nimport selection_remove from \"./remove\";\nimport selection_clone from \"./clone\";\nimport selection_datum from \"./datum\";\nimport selection_on from \"./on\";\nimport selection_dispatch from \"./dispatch\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n  this._groups = groups;\n  this._parents = parents;\n}\n\nfunction selection() {\n  return new Selection([[document.documentElement]], root);\n}\n\nSelection.prototype = selection.prototype = {\n  constructor: Selection,\n  select: selection_select,\n  selectAll: selection_selectAll,\n  filter: selection_filter,\n  data: selection_data,\n  enter: selection_enter,\n  exit: selection_exit,\n  join: selection_join,\n  merge: selection_merge,\n  order: selection_order,\n  sort: selection_sort,\n  call: selection_call,\n  nodes: selection_nodes,\n  node: selection_node,\n  size: selection_size,\n  empty: selection_empty,\n  each: selection_each,\n  attr: selection_attr,\n  style: selection_style,\n  property: selection_property,\n  classed: selection_classed,\n  text: selection_text,\n  html: selection_html,\n  raise: selection_raise,\n  lower: selection_lower,\n  append: selection_append,\n  insert: selection_insert,\n  remove: selection_remove,\n  clone: selection_clone,\n  datum: selection_datum,\n  on: selection_on,\n  dispatch: selection_dispatch\n};\n\nexport default selection;\n","import {Selection} from \"./index\";\nimport selector from \"../selector\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","import {Selection} from \"./index\";\nimport selectorAll from \"../selectorAll\";\n\nexport default function(select) {\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        subgroups.push(select.call(node, node.__data__, i, group));\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, parents);\n}\n","import {Selection} from \"./index\";\nimport matcher from \"../matcher\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Selection(subgroups, this._parents);\n}\n","import sparse from \"./sparse\";\nimport {Selection} from \"./index\";\n\nexport default function() {\n  return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n  var enter = this.enter(), update = this, exit = this.exit();\n  enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n  if (onupdate != null) update = onupdate(update);\n  if (onexit == null) exit.remove(); else onexit(exit);\n  return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index\";\n\nexport default function(selection) {\n\n  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Selection(merges, this._parents);\n}\n","export default function() {\n\n  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n      if (node = group[i]) {\n        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n        next = node;\n      }\n    }\n  }\n\n  return this;\n}\n","export default function() {\n  var callback = arguments[0];\n  arguments[0] = this;\n  callback.apply(null, arguments);\n  return this;\n}\n","export default function() {\n  var nodes = new Array(this.size()), i = -1;\n  this.each(function() { nodes[++i] = this; });\n  return nodes;\n}\n","export default function() {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n      var node = group[i];\n      if (node) return node;\n    }\n  }\n\n  return null;\n}\n","export default function() {\n  var size = 0;\n  this.each(function() { ++size; });\n  return size;\n}\n","export default function() {\n  return !this.node();\n}\n","export default function(callback) {\n\n  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n      if (node = group[i]) callback.call(node, node.__data__, i, group);\n    }\n  }\n\n  return this;\n}\n","import creator from \"../creator\";\n\nexport default function(name) {\n  var create = typeof name === \"function\" ? name : creator(name);\n  return this.select(function() {\n    return this.appendChild(create.apply(this, arguments));\n  });\n}\n","export default function(value) {\n  return arguments.length\n      ? this.property(\"__data__\", value)\n      : this.node().__data__;\n}\n","import {Selection, root} from \"./selection/index\";\n\nexport default function(selector) {\n  return typeof selector === \"string\"\n      ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n      : new Selection([[selector]], root);\n}\n","var nextId = 0;\n\nexport default function local() {\n  return new Local;\n}\n\nfunction Local() {\n  this._ = \"@\" + (++nextId).toString(36);\n}\n\nLocal.prototype = local.prototype = {\n  constructor: Local,\n  get: function(node) {\n    var id = this._;\n    while (!(id in node)) if (!(node = node.parentNode)) return;\n    return node[id];\n  },\n  set: function(node, value) {\n    return node[this._] = value;\n  },\n  remove: function(node) {\n    return this._ in node && delete node[this._];\n  },\n  toString: function() {\n    return this._;\n  }\n};\n","export default function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {\n  this.target = target;\n  this.type = type;\n  this.subject = subject;\n  this.identifier = id;\n  this.active = active;\n  this.x = x;\n  this.y = y;\n  this.dx = dx;\n  this.dy = dy;\n  this._ = dispatch;\n}\n\nDragEvent.prototype.on = function() {\n  var value = this._.on.apply(this._, arguments);\n  return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {event, customEvent, select, mouse, touch} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n  return this.parentNode;\n}\n\nfunction defaultSubject(d) {\n  return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n  var filter = defaultFilter,\n      container = defaultContainer,\n      subject = defaultSubject,\n      touchable = defaultTouchable,\n      gestures = {},\n      listeners = dispatch(\"start\", \"drag\", \"end\"),\n      active = 0,\n      mousedownx,\n      mousedowny,\n      mousemoving,\n      touchending,\n      clickDistance2 = 0;\n\n  function drag(selection) {\n    selection\n        .on(\"mousedown.drag\", mousedowned)\n      .filter(touchable)\n        .on(\"touchstart.drag\", touchstarted)\n        .on(\"touchmove.drag\", touchmoved)\n        .on(\"touchend.drag touchcancel.drag\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  function mousedowned() {\n    if (touchending || !filter.apply(this, arguments)) return;\n    var gesture = beforestart(\"mouse\", container.apply(this, arguments), mouse, this, arguments);\n    if (!gesture) return;\n    select(event.view).on(\"mousemove.drag\", mousemoved, true).on(\"mouseup.drag\", mouseupped, true);\n    nodrag(event.view);\n    nopropagation();\n    mousemoving = false;\n    mousedownx = event.clientX;\n    mousedowny = event.clientY;\n    gesture(\"start\");\n  }\n\n  function mousemoved() {\n    noevent();\n    if (!mousemoving) {\n      var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n      mousemoving = dx * dx + dy * dy > clickDistance2;\n    }\n    gestures.mouse(\"drag\");\n  }\n\n  function mouseupped() {\n    select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n    yesdrag(event.view, mousemoving);\n    noevent();\n    gestures.mouse(\"end\");\n  }\n\n  function touchstarted() {\n    if (!filter.apply(this, arguments)) return;\n    var touches = event.changedTouches,\n        c = container.apply(this, arguments),\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) {\n        nopropagation();\n        gesture(\"start\");\n      }\n    }\n  }\n\n  function touchmoved() {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        noevent();\n        gesture(\"drag\");\n      }\n    }\n  }\n\n  function touchended() {\n    var touches = event.changedTouches,\n        n = touches.length, i, gesture;\n\n    if (touchending) clearTimeout(touchending);\n    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n    for (i = 0; i < n; ++i) {\n      if (gesture = gestures[touches[i].identifier]) {\n        nopropagation();\n        gesture(\"end\");\n      }\n    }\n  }\n\n  function beforestart(id, container, point, that, args) {\n    var p = point(container, id), s, dx, dy,\n        sublisteners = listeners.copy();\n\n    if (!customEvent(new DragEvent(drag, \"beforestart\", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {\n      if ((event.subject = s = subject.apply(that, args)) == null) return false;\n      dx = s.x - p[0] || 0;\n      dy = s.y - p[1] || 0;\n      return true;\n    })) return;\n\n    return function gesture(type) {\n      var p0 = p, n;\n      switch (type) {\n        case \"start\": gestures[id] = gesture, n = active++; break;\n        case \"end\": delete gestures[id], --active; // nobreak\n        case \"drag\": p = point(container, id), n = active; break;\n      }\n      customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);\n    };\n  }\n\n  drag.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n  };\n\n  drag.container = function(_) {\n    return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n  };\n\n  drag.subject = function(_) {\n    return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n  };\n\n  drag.touchable = function(_) {\n    return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n  };\n\n  drag.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? drag : value;\n  };\n\n  drag.clickDistance = function(_) {\n    return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n  };\n\n  return drag;\n}\n","export default function(constructor, factory, prototype) {\n  constructor.prototype = factory.prototype = prototype;\n  prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n  var prototype = Object.create(parent.prototype);\n  for (var key in definition) prototype[key] = definition[key];\n  return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n    reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n    reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n    reHex3 = /^#([0-9a-f]{3})$/,\n    reHex6 = /^#([0-9a-f]{6})$/,\n    reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n    reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n    reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n    reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n    reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n    reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n  aliceblue: 0xf0f8ff,\n  antiquewhite: 0xfaebd7,\n  aqua: 0x00ffff,\n  aquamarine: 0x7fffd4,\n  azure: 0xf0ffff,\n  beige: 0xf5f5dc,\n  bisque: 0xffe4c4,\n  black: 0x000000,\n  blanchedalmond: 0xffebcd,\n  blue: 0x0000ff,\n  blueviolet: 0x8a2be2,\n  brown: 0xa52a2a,\n  burlywood: 0xdeb887,\n  cadetblue: 0x5f9ea0,\n  chartreuse: 0x7fff00,\n  chocolate: 0xd2691e,\n  coral: 0xff7f50,\n  cornflowerblue: 0x6495ed,\n  cornsilk: 0xfff8dc,\n  crimson: 0xdc143c,\n  cyan: 0x00ffff,\n  darkblue: 0x00008b,\n  darkcyan: 0x008b8b,\n  darkgoldenrod: 0xb8860b,\n  darkgray: 0xa9a9a9,\n  darkgreen: 0x006400,\n  darkgrey: 0xa9a9a9,\n  darkkhaki: 0xbdb76b,\n  darkmagenta: 0x8b008b,\n  darkolivegreen: 0x556b2f,\n  darkorange: 0xff8c00,\n  darkorchid: 0x9932cc,\n  darkred: 0x8b0000,\n  darksalmon: 0xe9967a,\n  darkseagreen: 0x8fbc8f,\n  darkslateblue: 0x483d8b,\n  darkslategray: 0x2f4f4f,\n  darkslategrey: 0x2f4f4f,\n  darkturquoise: 0x00ced1,\n  darkviolet: 0x9400d3,\n  deeppink: 0xff1493,\n  deepskyblue: 0x00bfff,\n  dimgray: 0x696969,\n  dimgrey: 0x696969,\n  dodgerblue: 0x1e90ff,\n  firebrick: 0xb22222,\n  floralwhite: 0xfffaf0,\n  forestgreen: 0x228b22,\n  fuchsia: 0xff00ff,\n  gainsboro: 0xdcdcdc,\n  ghostwhite: 0xf8f8ff,\n  gold: 0xffd700,\n  goldenrod: 0xdaa520,\n  gray: 0x808080,\n  green: 0x008000,\n  greenyellow: 0xadff2f,\n  grey: 0x808080,\n  honeydew: 0xf0fff0,\n  hotpink: 0xff69b4,\n  indianred: 0xcd5c5c,\n  indigo: 0x4b0082,\n  ivory: 0xfffff0,\n  khaki: 0xf0e68c,\n  lavender: 0xe6e6fa,\n  lavenderblush: 0xfff0f5,\n  lawngreen: 0x7cfc00,\n  lemonchiffon: 0xfffacd,\n  lightblue: 0xadd8e6,\n  lightcoral: 0xf08080,\n  lightcyan: 0xe0ffff,\n  lightgoldenrodyellow: 0xfafad2,\n  lightgray: 0xd3d3d3,\n  lightgreen: 0x90ee90,\n  lightgrey: 0xd3d3d3,\n  lightpink: 0xffb6c1,\n  lightsalmon: 0xffa07a,\n  lightseagreen: 0x20b2aa,\n  lightskyblue: 0x87cefa,\n  lightslategray: 0x778899,\n  lightslategrey: 0x778899,\n  lightsteelblue: 0xb0c4de,\n  lightyellow: 0xffffe0,\n  lime: 0x00ff00,\n  limegreen: 0x32cd32,\n  linen: 0xfaf0e6,\n  magenta: 0xff00ff,\n  maroon: 0x800000,\n  mediumaquamarine: 0x66cdaa,\n  mediumblue: 0x0000cd,\n  mediumorchid: 0xba55d3,\n  mediumpurple: 0x9370db,\n  mediumseagreen: 0x3cb371,\n  mediumslateblue: 0x7b68ee,\n  mediumspringgreen: 0x00fa9a,\n  mediumturquoise: 0x48d1cc,\n  mediumvioletred: 0xc71585,\n  midnightblue: 0x191970,\n  mintcream: 0xf5fffa,\n  mistyrose: 0xffe4e1,\n  moccasin: 0xffe4b5,\n  navajowhite: 0xffdead,\n  navy: 0x000080,\n  oldlace: 0xfdf5e6,\n  olive: 0x808000,\n  olivedrab: 0x6b8e23,\n  orange: 0xffa500,\n  orangered: 0xff4500,\n  orchid: 0xda70d6,\n  palegoldenrod: 0xeee8aa,\n  palegreen: 0x98fb98,\n  paleturquoise: 0xafeeee,\n  palevioletred: 0xdb7093,\n  papayawhip: 0xffefd5,\n  peachpuff: 0xffdab9,\n  peru: 0xcd853f,\n  pink: 0xffc0cb,\n  plum: 0xdda0dd,\n  powderblue: 0xb0e0e6,\n  purple: 0x800080,\n  rebeccapurple: 0x663399,\n  red: 0xff0000,\n  rosybrown: 0xbc8f8f,\n  royalblue: 0x4169e1,\n  saddlebrown: 0x8b4513,\n  salmon: 0xfa8072,\n  sandybrown: 0xf4a460,\n  seagreen: 0x2e8b57,\n  seashell: 0xfff5ee,\n  sienna: 0xa0522d,\n  silver: 0xc0c0c0,\n  skyblue: 0x87ceeb,\n  slateblue: 0x6a5acd,\n  slategray: 0x708090,\n  slategrey: 0x708090,\n  snow: 0xfffafa,\n  springgreen: 0x00ff7f,\n  steelblue: 0x4682b4,\n  tan: 0xd2b48c,\n  teal: 0x008080,\n  thistle: 0xd8bfd8,\n  tomato: 0xff6347,\n  turquoise: 0x40e0d0,\n  violet: 0xee82ee,\n  wheat: 0xf5deb3,\n  white: 0xffffff,\n  whitesmoke: 0xf5f5f5,\n  yellow: 0xffff00,\n  yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n  copy: function(channels) {\n    return Object.assign(new this.constructor, this, channels);\n  },\n  displayable: function() {\n    return this.rgb().displayable();\n  },\n  hex: color_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: color_formatHex,\n  formatHsl: color_formatHsl,\n  formatRgb: color_formatRgb,\n  toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n  return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n  return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n  return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n  var m;\n  format = (format + \"\").trim().toLowerCase();\n  return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n      : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n      : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n      : null;\n}\n\nfunction rgbn(n) {\n  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n  if (a <= 0) r = g = b = NaN;\n  return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Rgb;\n  o = o.rgb();\n  return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n  this.r = +r;\n  this.g = +g;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n  },\n  rgb: function() {\n    return this;\n  },\n  displayable: function() {\n    return (-0.5 <= this.r && this.r < 255.5)\n        && (-0.5 <= this.g && this.g < 255.5)\n        && (-0.5 <= this.b && this.b < 255.5)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n  formatHex: rgb_formatHex,\n  formatRgb: rgb_formatRgb,\n  toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n  return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\n  var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n  return (a === 1 ? \"rgb(\" : \"rgba(\")\n      + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n      + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n      + (a === 1 ? \")\" : \", \" + a + \")\");\n}\n\nfunction hex(value) {\n  value = Math.max(0, Math.min(255, Math.round(value) || 0));\n  return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n  if (a <= 0) h = s = l = NaN;\n  else if (l <= 0 || l >= 1) h = s = NaN;\n  else if (s <= 0) h = NaN;\n  return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Color)) o = color(o);\n  if (!o) return new Hsl;\n  if (o instanceof Hsl) return o;\n  o = o.rgb();\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      min = Math.min(r, g, b),\n      max = Math.max(r, g, b),\n      h = NaN,\n      s = max - min,\n      l = (max + min) / 2;\n  if (s) {\n    if (r === max) h = (g - b) / s + (g < b) * 6;\n    else if (g === max) h = (b - r) / s + 2;\n    else h = (r - g) / s + 4;\n    s /= l < 0.5 ? max + min : 2 - max - min;\n    h *= 60;\n  } else {\n    s = l > 0 && l < 1 ? 0 : h;\n  }\n  return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Hsl(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = this.h % 360 + (this.h < 0) * 360,\n        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n        l = this.l,\n        m2 = l + (l < 0.5 ? l : 1 - l) * s,\n        m1 = 2 * l - m2;\n    return new Rgb(\n      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n      hsl2rgb(h, m1, m2),\n      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n      this.opacity\n    );\n  },\n  displayable: function() {\n    return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n        && (0 <= this.l && this.l <= 1)\n        && (0 <= this.opacity && this.opacity <= 1);\n  },\n  formatHsl: function() {\n    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n    return (a === 1 ? \"hsl(\" : \"hsla(\")\n        + (this.h || 0) + \", \"\n        + (this.s || 0) * 100 + \"%, \"\n        + (this.l || 0) * 100 + \"%\"\n        + (a === 1 ? \")\" : \", \" + a + \")\");\n  }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n  return (h < 60 ? m1 + (m2 - m1) * h / 60\n      : h < 180 ? m2\n      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n      : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n    Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\n    t0 = 4 / 29,\n    t1 = 6 / 29,\n    t2 = 3 * t1 * t1,\n    t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n  if (o instanceof Hcl) return hcl2lab(o);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = rgb2lrgb(o.r),\n      g = rgb2lrgb(o.g),\n      b = rgb2lrgb(o.b),\n      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n  if (r === g && g === b) x = z = y; else {\n    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n  }\n  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n  this.l = +l;\n  this.a = +a;\n  this.b = +b;\n  this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n  brighter: function(k) {\n    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  darker: function(k) {\n    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n  },\n  rgb: function() {\n    var y = (this.l + 16) / 116,\n        x = isNaN(this.a) ? y : y + this.a / 500,\n        z = isNaN(this.b) ? y : y - this.b / 200;\n    x = Xn * lab2xyz(x);\n    y = Yn * lab2xyz(y);\n    z = Zn * lab2xyz(z);\n    return new Rgb(\n      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n      this.opacity\n    );\n  }\n}));\n\nfunction xyz2lab(t) {\n  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n  return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n  if (!(o instanceof Lab)) o = labConvert(o);\n  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n  var h = Math.atan2(o.b, o.a) * rad2deg;\n  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n  this.h = +h;\n  this.c = +c;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n  var h = o.h * deg2rad;\n  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n  brighter: function(k) {\n    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n  },\n  darker: function(k) {\n    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n  },\n  rgb: function() {\n    return hcl2lab(this).rgb();\n  }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n    B = +1.78277,\n    C = -0.29227,\n    D = -0.90649,\n    E = +1.97294,\n    ED = E * D,\n    EB = E * B,\n    BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n  if (!(o instanceof Rgb)) o = rgbConvert(o);\n  var r = o.r / 255,\n      g = o.g / 255,\n      b = o.b / 255,\n      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n      bl = b - l,\n      k = (E * (g - l) - C * bl) / D,\n      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n      h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n  this.h = +h;\n  this.s = +s;\n  this.l = +l;\n  this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n  brighter: function(k) {\n    k = k == null ? brighter : Math.pow(brighter, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  darker: function(k) {\n    k = k == null ? darker : Math.pow(darker, k);\n    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n  },\n  rgb: function() {\n    var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n        l = +this.l,\n        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n        cosh = Math.cos(h),\n        sinh = Math.sin(h);\n    return new Rgb(\n      255 * (l + a * (A * cosh + B * sinh)),\n      255 * (l + a * (C * cosh + D * sinh)),\n      255 * (l + a * (E * cosh)),\n      this.opacity\n    );\n  }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n  var t2 = t1 * t1, t3 = t2 * t1;\n  return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n      + (4 - 6 * t2 + 3 * t3) * v1\n      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n      + t3 * v3) / 6;\n}\n\nexport default function(values) {\n  var n = values.length - 1;\n  return function(t) {\n    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n        v1 = values[i],\n        v2 = values[i + 1],\n        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n  return function(t) {\n    return a + t * d;\n  };\n}\n\nfunction exponential(a, b, y) {\n  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n    return Math.pow(a + t * b, y);\n  };\n}\n\nexport function hue(a, b) {\n  var d = b - a;\n  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n  return (y = +y) === 1 ? nogamma : function(a, b) {\n    return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n  };\n}\n\nexport default function nogamma(a, b) {\n  var d = b - a;\n  return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n  var color = gamma(y);\n\n  function rgb(start, end) {\n    var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n        g = color(start.g, end.g),\n        b = color(start.b, end.b),\n        opacity = nogamma(start.opacity, end.opacity);\n    return function(t) {\n      start.r = r(t);\n      start.g = g(t);\n      start.b = b(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n\n  rgb.gamma = rgbGamma;\n\n  return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n  return function(colors) {\n    var n = colors.length,\n        r = new Array(n),\n        g = new Array(n),\n        b = new Array(n),\n        i, color;\n    for (i = 0; i < n; ++i) {\n      color = colorRgb(colors[i]);\n      r[i] = color.r || 0;\n      g[i] = color.g || 0;\n      b[i] = color.b || 0;\n    }\n    r = spline(r);\n    g = spline(g);\n    b = spline(b);\n    color.opacity = 1;\n    return function(t) {\n      color.r = r(t);\n      color.g = g(t);\n      color.b = b(t);\n      return color + \"\";\n    };\n  };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n  var n = values.length;\n  return function(t) {\n    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n        v0 = values[(i + n - 1) % n],\n        v1 = values[i % n],\n        v2 = values[(i + 1) % n],\n        v3 = values[(i + 2) % n];\n    return basis((t - i / n) * n, v0, v1, v2, v3);\n  };\n}\n","export default function(a, b) {\n  return a = +a, b -= a, function(t) {\n    return a + b * t;\n  };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n    reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n  return function() {\n    return b;\n  };\n}\n\nfunction one(b) {\n  return function(t) {\n    return b(t) + \"\";\n  };\n}\n\nexport default function(a, b) {\n  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n      am, // current match in a\n      bm, // current match in b\n      bs, // string preceding current number in b, if any\n      i = -1, // index in s\n      s = [], // string constants and placeholders\n      q = []; // number interpolators\n\n  // Coerce inputs to strings.\n  a = a + \"\", b = b + \"\";\n\n  // Interpolate pairs of numbers in a & b.\n  while ((am = reA.exec(a))\n      && (bm = reB.exec(b))) {\n    if ((bs = bm.index) > bi) { // a string precedes the next number in b\n      bs = b.slice(bi, bs);\n      if (s[i]) s[i] += bs; // coalesce with previous string\n      else s[++i] = bs;\n    }\n    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n      if (s[i]) s[i] += bm; // coalesce with previous string\n      else s[++i] = bm;\n    } else { // interpolate non-matching numbers\n      s[++i] = null;\n      q.push({i: i, x: number(am, bm)});\n    }\n    bi = reB.lastIndex;\n  }\n\n  // Add remains of b.\n  if (bi < b.length) {\n    bs = b.slice(bi);\n    if (s[i]) s[i] += bs; // coalesce with previous string\n    else s[++i] = bs;\n  }\n\n  // Special optimization for only a single match.\n  // Otherwise, interpolate each of the numbers and rejoin the string.\n  return s.length < 2 ? (q[0]\n      ? one(q[0].x)\n      : zero(b))\n      : (b = q.length, function(t) {\n          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n          return s.join(\"\");\n        });\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n    cssRoot,\n    cssView,\n    svgNode;\n\nexport function parseCss(value) {\n  if (value === \"none\") return identity;\n  if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n  cssNode.style.transform = value;\n  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n  cssRoot.removeChild(cssNode);\n  value = value.slice(7, -1).split(\",\");\n  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n  if (value == null) return identity;\n  if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n  svgNode.setAttribute(\"transform\", value);\n  if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n  value = value.matrix;\n  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n  translateX: 0,\n  translateY: 0,\n  rotate: 0,\n  skewX: 0,\n  scaleX: 1,\n  scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n  var scaleX, scaleY, skewX;\n  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n  return {\n    translateX: e,\n    translateY: f,\n    rotate: Math.atan2(b, a) * degrees,\n    skewX: Math.atan(skewX) * degrees,\n    scaleX: scaleX,\n    scaleY: scaleY\n  };\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n  function pop(s) {\n    return s.length ? s.pop() + \" \" : \"\";\n  }\n\n  function translate(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb || yb) {\n      s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n    }\n  }\n\n  function rotate(a, b, s, q) {\n    if (a !== b) {\n      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n      q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"rotate(\" + b + degParen);\n    }\n  }\n\n  function skewX(a, b, s, q) {\n    if (a !== b) {\n      q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n    } else if (b) {\n      s.push(pop(s) + \"skewX(\" + b + degParen);\n    }\n  }\n\n  function scale(xa, ya, xb, yb, s, q) {\n    if (xa !== xb || ya !== yb) {\n      var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n      q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n    } else if (xb !== 1 || yb !== 1) {\n      s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n    }\n  }\n\n  return function(a, b) {\n    var s = [], // string constants and placeholders\n        q = []; // number interpolators\n    a = parse(a), b = parse(b);\n    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n    rotate(a.rotate, b.rotate, s, q);\n    skewX(a.skewX, b.skewX, s, q);\n    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n    a = b = null; // gc\n    return function(t) {\n      var i = -1, n = q.length, o;\n      while (++i < n) s[(o = q[i]).i] = o.x(t);\n      return s.join(\"\");\n    };\n  };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n    rho2 = 2,\n    rho4 = 4,\n    epsilon2 = 1e-12;\n\nfunction cosh(x) {\n  return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n  return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n  return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n      dx = ux1 - ux0,\n      dy = uy1 - uy0,\n      d2 = dx * dx + dy * dy,\n      i,\n      S;\n\n  // Special case for u0 ≅ u1.\n  if (d2 < epsilon2) {\n    S = Math.log(w1 / w0) / rho;\n    i = function(t) {\n      return [\n        ux0 + t * dx,\n        uy0 + t * dy,\n        w0 * Math.exp(rho * t * S)\n      ];\n    }\n  }\n\n  // General case.\n  else {\n    var d1 = Math.sqrt(d2),\n        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n    S = (r1 - r0) / rho;\n    i = function(t) {\n      var s = t * S,\n          coshr0 = cosh(r0),\n          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n      return [\n        ux0 + u * dx,\n        uy0 + u * dy,\n        w0 * coshr0 / cosh(rho * s + r0)\n      ];\n    }\n  }\n\n  i.duration = S * 1000;\n\n  return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n        s = color(start.s, end.s),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.s = s(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n  return function(start, end) {\n    var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n        c = color(start.c, end.c),\n        l = color(start.l, end.l),\n        opacity = color(start.opacity, end.opacity);\n    return function(t) {\n      start.h = h(t);\n      start.c = c(t);\n      start.l = l(t);\n      start.opacity = opacity(t);\n      return start + \"\";\n    };\n  }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n  return (function cubehelixGamma(y) {\n    y = +y;\n\n    function cubehelix(start, end) {\n      var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n          s = color(start.s, end.s),\n          l = color(start.l, end.l),\n          opacity = color(start.opacity, end.opacity);\n      return function(t) {\n        start.h = h(t);\n        start.s = s(t);\n        start.l = l(Math.pow(t, y));\n        start.opacity = opacity(t);\n        return start + \"\";\n      };\n    }\n\n    cubehelix.gamma = cubehelixGamma;\n\n    return cubehelix;\n  })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function(interpolator, n) {\n  var samples = new Array(n);\n  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n  return samples;\n}\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import {Timer} from \"./timer\";\n\nexport default function(callback, delay, time) {\n  var t = new Timer;\n  delay = delay == null ? 0 : +delay;\n  t.restart(function(elapsed) {\n    t.stop();\n    callback(elapsed + delay);\n  }, delay, time);\n  return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n  var schedules = node.__transition;\n  if (!schedules) node.__transition = {};\n  else if (id in schedules) return;\n  create(node, id, {\n    name: name,\n    index: index, // For context during callback.\n    group: group, // For context during callback.\n    on: emptyOn,\n    tween: emptyTween,\n    time: timing.time,\n    delay: timing.delay,\n    duration: timing.duration,\n    ease: timing.ease,\n    timer: null,\n    state: CREATED\n  });\n}\n\nexport function init(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n  return schedule;\n}\n\nexport function set(node, id) {\n  var schedule = get(node, id);\n  if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n  return schedule;\n}\n\nexport function get(node, id) {\n  var schedule = node.__transition;\n  if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n  return schedule;\n}\n\nfunction create(node, id, self) {\n  var schedules = node.__transition,\n      tween;\n\n  // Initialize the self timer when the transition is created.\n  // Note the actual delay is not known until the first callback!\n  schedules[id] = self;\n  self.timer = timer(schedule, 0, self.time);\n\n  function schedule(elapsed) {\n    self.state = SCHEDULED;\n    self.timer.restart(start, self.delay, self.time);\n\n    // If the elapsed delay is less than our first sleep, start immediately.\n    if (self.delay <= elapsed) start(elapsed - self.delay);\n  }\n\n  function start(elapsed) {\n    var i, j, n, o;\n\n    // If the state is not SCHEDULED, then we previously errored on start.\n    if (self.state !== SCHEDULED) return stop();\n\n    for (i in schedules) {\n      o = schedules[i];\n      if (o.name !== self.name) continue;\n\n      // While this element already has a starting transition during this frame,\n      // defer starting an interrupting transition until that transition has a\n      // chance to tick (and possibly end); see d3/d3-transition#54!\n      if (o.state === STARTED) return timeout(start);\n\n      // Interrupt the active transition, if any.\n      if (o.state === RUNNING) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n\n      // Cancel any pre-empted transitions.\n      else if (+i < id) {\n        o.state = ENDED;\n        o.timer.stop();\n        o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n        delete schedules[i];\n      }\n    }\n\n    // Defer the first tick to end of the current frame; see d3/d3#1576.\n    // Note the transition may be canceled after start and before the first tick!\n    // Note this must be scheduled before the start event; see d3/d3-transition#16!\n    // Assuming this is successful, subsequent callbacks go straight to tick.\n    timeout(function() {\n      if (self.state === STARTED) {\n        self.state = RUNNING;\n        self.timer.restart(tick, self.delay, self.time);\n        tick(elapsed);\n      }\n    });\n\n    // Dispatch the start event.\n    // Note this must be done before the tween are initialized.\n    self.state = STARTING;\n    self.on.call(\"start\", node, node.__data__, self.index, self.group);\n    if (self.state !== STARTING) return; // interrupted\n    self.state = STARTED;\n\n    // Initialize the tween, deleting null tween.\n    tween = new Array(n = self.tween.length);\n    for (i = 0, j = -1; i < n; ++i) {\n      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n        tween[++j] = o;\n      }\n    }\n    tween.length = j + 1;\n  }\n\n  function tick(elapsed) {\n    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n        i = -1,\n        n = tween.length;\n\n    while (++i < n) {\n      tween[i].call(node, t);\n    }\n\n    // Dispatch the end event.\n    if (self.state === ENDING) {\n      self.on.call(\"end\", node, node.__data__, self.index, self.group);\n      stop();\n    }\n  }\n\n  function stop() {\n    self.state = ENDED;\n    self.timer.stop();\n    delete schedules[id];\n    for (var i in schedules) return; // eslint-disable-line no-unused-vars\n    delete node.__transition;\n  }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule\";\n\nexport default function(node, name) {\n  var schedules = node.__transition,\n      schedule,\n      active,\n      empty = true,\n      i;\n\n  if (!schedules) return;\n\n  name = name == null ? null : name + \"\";\n\n  for (i in schedules) {\n    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n    active = schedule.state > STARTING && schedule.state < ENDING;\n    schedule.state = ENDED;\n    schedule.timer.stop();\n    schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n    delete schedules[i];\n  }\n\n  if (empty) delete node.__transition;\n}\n","import {get, set} from \"./schedule\";\n\nfunction tweenRemove(id, name) {\n  var tween0, tween1;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = tween0 = tween;\n      for (var i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1 = tween1.slice();\n          tween1.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nfunction tweenFunction(id, name, value) {\n  var tween0, tween1;\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    var schedule = set(this, id),\n        tween = schedule.tween;\n\n    // If this node shared tween with the previous node,\n    // just assign the updated shared tween and we’re done!\n    // Otherwise, copy-on-write.\n    if (tween !== tween0) {\n      tween1 = (tween0 = tween).slice();\n      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n        if (tween1[i].name === name) {\n          tween1[i] = t;\n          break;\n        }\n      }\n      if (i === n) tween1.push(t);\n    }\n\n    schedule.tween = tween1;\n  };\n}\n\nexport default function(name, value) {\n  var id = this._id;\n\n  name += \"\";\n\n  if (arguments.length < 2) {\n    var tween = get(this.node(), id).tween;\n    for (var i = 0, n = tween.length, t; i < n; ++i) {\n      if ((t = tween[i]).name === name) {\n        return t.value;\n      }\n    }\n    return null;\n  }\n\n  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n  var id = transition._id;\n\n  transition.each(function() {\n    var schedule = set(this, id);\n    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n  });\n\n  return function(node) {\n    return get(node, id).value[name];\n  };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n  var c;\n  return (typeof b === \"number\" ? interpolateNumber\n      : b instanceof color ? interpolateRgb\n      : (c = color(b)) ? (b = c, interpolateRgb)\n      : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction attrRemove(name) {\n  return function() {\n    this.removeAttribute(name);\n  };\n}\n\nfunction attrRemoveNS(fullname) {\n  return function() {\n    this.removeAttributeNS(fullname.space, fullname.local);\n  };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttribute(name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = this.getAttributeNS(fullname.space, fullname.local);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction attrFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttribute(name);\n    string0 = this.getAttribute(name);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0, value1 = value(this), string1;\n    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n    string0 = this.getAttributeNS(fullname.space, fullname.local);\n    string1 = value1 + \"\";\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nexport default function(name, value) {\n  var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n  return this.attrTween(name, typeof value === \"function\"\n      ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n      : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n      : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n  return function(t) {\n    this.setAttribute(name, i(t));\n  };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n  return function(t) {\n    this.setAttributeNS(fullname.space, fullname.local, i(t));\n  };\n}\n\nfunction attrTweenNS(fullname, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nfunction attrTween(name, value) {\n  var t0, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n    return t0;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value) {\n  var key = \"attr.\" + name;\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  var fullname = namespace(name);\n  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule\";\n\nfunction delayFunction(id, value) {\n  return function() {\n    init(this, id).delay = +value.apply(this, arguments);\n  };\n}\n\nfunction delayConstant(id, value) {\n  return value = +value, function() {\n    init(this, id).delay = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? delayFunction\n          : delayConstant)(id, value))\n      : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule\";\n\nfunction durationFunction(id, value) {\n  return function() {\n    set(this, id).duration = +value.apply(this, arguments);\n  };\n}\n\nfunction durationConstant(id, value) {\n  return value = +value, function() {\n    set(this, id).duration = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each((typeof value === \"function\"\n          ? durationFunction\n          : durationConstant)(id, value))\n      : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule\";\n\nfunction easeConstant(id, value) {\n  if (typeof value !== \"function\") throw new Error;\n  return function() {\n    set(this, id).ease = value;\n  };\n}\n\nexport default function(value) {\n  var id = this._id;\n\n  return arguments.length\n      ? this.each(easeConstant(id, value))\n      : get(this.node(), id).ease;\n}\n","import {get, set, init} from \"./schedule\";\n\nfunction start(name) {\n  return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n    var i = t.indexOf(\".\");\n    if (i >= 0) t = t.slice(0, i);\n    return !t || t === \"start\";\n  });\n}\n\nfunction onFunction(id, name, listener) {\n  var on0, on1, sit = start(name) ? init : set;\n  return function() {\n    var schedule = sit(this, id),\n        on = schedule.on;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, listener) {\n  var id = this._id;\n\n  return arguments.length < 2\n      ? get(this.node(), id).on.on(name)\n      : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n  return function() {\n    var parent = this.parentNode;\n    for (var i in this.__transition) if (+i !== id) return;\n    if (parent) parent.removeChild(this);\n  };\n}\n\nexport default function() {\n  return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n  return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        string1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, string10 = string1);\n  };\n}\n\nfunction styleRemove(name) {\n  return function() {\n    this.style.removeProperty(name);\n  };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n  var string00,\n      string1 = value1 + \"\",\n      interpolate0;\n  return function() {\n    var string0 = style(this, name);\n    return string0 === string1 ? null\n        : string0 === string00 ? interpolate0\n        : interpolate0 = interpolate(string00 = string0, value1);\n  };\n}\n\nfunction styleFunction(name, interpolate, value) {\n  var string00,\n      string10,\n      interpolate0;\n  return function() {\n    var string0 = style(this, name),\n        value1 = value(this),\n        string1 = value1 + \"\";\n    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n    return string0 === string1 ? null\n        : string0 === string00 && string1 === string10 ? interpolate0\n        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n  };\n}\n\nfunction styleMaybeRemove(id, name) {\n  var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n  return function() {\n    var schedule = set(this, id),\n        on = schedule.on,\n        listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n    // If this node shared a dispatch with the previous node,\n    // just assign the updated shared dispatch and we’re done!\n    // Otherwise, copy-on-write.\n    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n    schedule.on = on1;\n  };\n}\n\nexport default function(name, value, priority) {\n  var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n  return value == null ? this\n      .styleTween(name, styleNull(name, i))\n      .on(\"end.style.\" + name, styleRemove(name))\n    : typeof value === \"function\" ? this\n      .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n      .each(styleMaybeRemove(this._id, name))\n    : this\n      .styleTween(name, styleConstant(name, i, value), priority)\n      .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n  return function(t) {\n    this.style.setProperty(name, i(t), priority);\n  };\n}\n\nfunction styleTween(name, value, priority) {\n  var t, i0;\n  function tween() {\n    var i = value.apply(this, arguments);\n    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n    return t;\n  }\n  tween._value = value;\n  return tween;\n}\n\nexport default function(name, value, priority) {\n  var key = \"style.\" + (name += \"\");\n  if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n  if (value == null) return this.tween(key, null);\n  if (typeof value !== \"function\") throw new Error;\n  return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween\";\n\nfunction textConstant(value) {\n  return function() {\n    this.textContent = value;\n  };\n}\n\nfunction textFunction(value) {\n  return function() {\n    var value1 = value(this);\n    this.textContent = value1 == null ? \"\" : value1;\n  };\n}\n\nexport default function(value) {\n  return this.tween(\"text\", typeof value === \"function\"\n      ? textFunction(tweenValue(this, \"text\", value))\n      : textConstant(value == null ? \"\" : value + \"\"));\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr\";\nimport transition_attrTween from \"./attrTween\";\nimport transition_delay from \"./delay\";\nimport transition_duration from \"./duration\";\nimport transition_ease from \"./ease\";\nimport transition_filter from \"./filter\";\nimport transition_merge from \"./merge\";\nimport transition_on from \"./on\";\nimport transition_remove from \"./remove\";\nimport transition_select from \"./select\";\nimport transition_selectAll from \"./selectAll\";\nimport transition_selection from \"./selection\";\nimport transition_style from \"./style\";\nimport transition_styleTween from \"./styleTween\";\nimport transition_text from \"./text\";\nimport transition_transition from \"./transition\";\nimport transition_tween from \"./tween\";\nimport transition_end from \"./end\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n  this._groups = groups;\n  this._parents = parents;\n  this._name = name;\n  this._id = id;\n}\n\nexport default function transition(name) {\n  return selection().transition(name);\n}\n\nexport function newId() {\n  return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n  constructor: Transition,\n  select: transition_select,\n  selectAll: transition_selectAll,\n  filter: transition_filter,\n  merge: transition_merge,\n  selection: transition_selection,\n  transition: transition_transition,\n  call: selection_prototype.call,\n  nodes: selection_prototype.nodes,\n  node: selection_prototype.node,\n  size: selection_prototype.size,\n  empty: selection_prototype.empty,\n  each: selection_prototype.each,\n  on: transition_on,\n  attr: transition_attr,\n  attrTween: transition_attrTween,\n  style: transition_style,\n  styleTween: transition_styleTween,\n  text: transition_text,\n  remove: transition_remove,\n  tween: transition_tween,\n  delay: transition_delay,\n  duration: transition_duration,\n  ease: transition_ease,\n  end: transition_end\n};\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selector(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n        if (\"__data__\" in node) subnode.__data__ = node.__data__;\n        subgroup[i] = subnode;\n        schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function(select) {\n  var name = this._name,\n      id = this._id;\n\n  if (typeof select !== \"function\") select = selectorAll(select);\n\n  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n          if (child = children[k]) {\n            schedule(child, name, id, k, children, inherit);\n          }\n        }\n        subgroups.push(children);\n        parents.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, parents, name, id);\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index\";\n\nexport default function(match) {\n  if (typeof match !== \"function\") match = matcher(match);\n\n  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n        subgroup.push(node);\n      }\n    }\n  }\n\n  return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index\";\n\nexport default function(transition) {\n  if (transition._id !== this._id) throw new Error;\n\n  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n      if (node = group0[i] || group1[i]) {\n        merge[i] = node;\n      }\n    }\n  }\n\n  for (; j < m0; ++j) {\n    merges[j] = groups0[j];\n  }\n\n  return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {Transition, newId} from \"./index\";\nimport schedule, {get} from \"./schedule\";\n\nexport default function() {\n  var name = this._name,\n      id0 = this._id,\n      id1 = newId();\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        var inherit = get(node, id0);\n        schedule(node, name, id1, i, group, {\n          time: inherit.time + inherit.delay + inherit.duration,\n          delay: 0,\n          duration: inherit.duration,\n          ease: inherit.ease\n        });\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule\";\n\nexport default function() {\n  var on0, on1, that = this, id = that._id, size = that.size();\n  return new Promise(function(resolve, reject) {\n    var cancel = {value: reject},\n        end = {value: function() { if (--size === 0) resolve(); }};\n\n    that.each(function() {\n      var schedule = set(this, id),\n          on = schedule.on;\n\n      // If this node shared a dispatch with the previous node,\n      // just assign the updated shared dispatch and we’re done!\n      // Otherwise, copy-on-write.\n      if (on !== on0) {\n        on1 = (on0 = on).copy();\n        on1._.cancel.push(cancel);\n        on1._.interrupt.push(cancel);\n        on1._.end.push(end);\n      }\n\n      schedule.on = on1;\n    });\n  });\n}\n","var exponent = 3;\n\nexport var polyIn = (function custom(e) {\n  e = +e;\n\n  function polyIn(t) {\n    return Math.pow(t, e);\n  }\n\n  polyIn.exponent = custom;\n\n  return polyIn;\n})(exponent);\n\nexport var polyOut = (function custom(e) {\n  e = +e;\n\n  function polyOut(t) {\n    return 1 - Math.pow(1 - t, e);\n  }\n\n  polyOut.exponent = custom;\n\n  return polyOut;\n})(exponent);\n\nexport var polyInOut = (function custom(e) {\n  e = +e;\n\n  function polyInOut(t) {\n    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;\n  }\n\n  polyInOut.exponent = custom;\n\n  return polyInOut;\n})(exponent);\n","var pi = Math.PI,\n    halfPi = pi / 2;\n\nexport function sinIn(t) {\n  return 1 - Math.cos(t * halfPi);\n}\n\nexport function sinOut(t) {\n  return Math.sin(t * halfPi);\n}\n\nexport function sinInOut(t) {\n  return (1 - Math.cos(pi * t)) / 2;\n}\n","var overshoot = 1.70158;\n\nexport var backIn = (function custom(s) {\n  s = +s;\n\n  function backIn(t) {\n    return t * t * ((s + 1) * t - s);\n  }\n\n  backIn.overshoot = custom;\n\n  return backIn;\n})(overshoot);\n\nexport var backOut = (function custom(s) {\n  s = +s;\n\n  function backOut(t) {\n    return --t * t * ((s + 1) * t + s) + 1;\n  }\n\n  backOut.overshoot = custom;\n\n  return backOut;\n})(overshoot);\n\nexport var backInOut = (function custom(s) {\n  s = +s;\n\n  function backInOut(t) {\n    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;\n  }\n\n  backInOut.overshoot = custom;\n\n  return backInOut;\n})(overshoot);\n","var tau = 2 * Math.PI,\n    amplitude = 1,\n    period = 0.3;\n\nexport var elasticIn = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticIn(t) {\n    return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);\n  }\n\n  elasticIn.amplitude = function(a) { return custom(a, p * tau); };\n  elasticIn.period = function(p) { return custom(a, p); };\n\n  return elasticIn;\n})(amplitude, period);\n\nexport var elasticOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticOut(t) {\n    return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);\n  }\n\n  elasticOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticOut.period = function(p) { return custom(a, p); };\n\n  return elasticOut;\n})(amplitude, period);\n\nexport var elasticInOut = (function custom(a, p) {\n  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);\n\n  function elasticInOut(t) {\n    return ((t = t * 2 - 1) < 0\n        ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)\n        : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;\n  }\n\n  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };\n  elasticInOut.period = function(p) { return custom(a, p); };\n\n  return elasticInOut;\n})(amplitude, period);\n","import {Transition, newId} from \"../transition/index\";\nimport schedule from \"../transition/schedule\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n  time: null, // Set on use.\n  delay: 0,\n  duration: 250,\n  ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n  var timing;\n  while (!(timing = node.__transition) || !(timing = timing[id])) {\n    if (!(node = node.parentNode)) {\n      return defaultTiming.time = now(), defaultTiming;\n    }\n  }\n  return timing;\n}\n\nexport default function(name) {\n  var id,\n      timing;\n\n  if (name instanceof Transition) {\n    id = name._id, name = name._name;\n  } else {\n    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n  }\n\n  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n      if (node = group[i]) {\n        schedule(node, name, id, i, group, timing || inherit(node, id));\n      }\n    }\n  }\n\n  return new Transition(groups, this._parents, name, id);\n}\n","export function cubicIn(t) {\n  return t * t * t;\n}\n\nexport function cubicOut(t) {\n  return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt\";\nimport selection_transition from \"./transition\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","import interrupt from \"../interrupt\";\n\nexport default function(name) {\n  return this.each(function() {\n    interrupt(this, name);\n  });\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {customEvent, event, touch, mouse, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n    MODE_SPACE = {name: \"space\"},\n    MODE_HANDLE = {name: \"handle\"},\n    MODE_CENTER = {name: \"center\"};\n\nfunction number1(e) {\n  return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n  return [number1(e[0]), number1(e[1])];\n}\n\nfunction toucher(identifier) {\n  return function(target) {\n    return touch(target, event.touches, identifier);\n  };\n}\n\nvar X = {\n  name: \"x\",\n  handles: [\"w\", \"e\"].map(type),\n  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n  name: \"y\",\n  handles: [\"n\", \"s\"].map(type),\n  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n  name: \"xy\",\n  handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n  input: function(xy) { return xy == null ? null : number2(xy); },\n  output: function(xy) { return xy; }\n};\n\nvar cursors = {\n  overlay: \"crosshair\",\n  selection: \"move\",\n  n: \"ns-resize\",\n  e: \"ew-resize\",\n  s: \"ns-resize\",\n  w: \"ew-resize\",\n  nw: \"nwse-resize\",\n  ne: \"nesw-resize\",\n  se: \"nwse-resize\",\n  sw: \"nesw-resize\"\n};\n\nvar flipX = {\n  e: \"w\",\n  w: \"e\",\n  nw: \"ne\",\n  ne: \"nw\",\n  se: \"sw\",\n  sw: \"se\"\n};\n\nvar flipY = {\n  n: \"s\",\n  s: \"n\",\n  nw: \"sw\",\n  ne: \"se\",\n  se: \"ne\",\n  sw: \"nw\"\n};\n\nvar signsX = {\n  overlay: +1,\n  selection: +1,\n  n: null,\n  e: +1,\n  s: null,\n  w: -1,\n  nw: -1,\n  ne: +1,\n  se: +1,\n  sw: -1\n};\n\nvar signsY = {\n  overlay: +1,\n  selection: +1,\n  n: -1,\n  e: null,\n  s: +1,\n  w: null,\n  nw: -1,\n  ne: -1,\n  se: +1,\n  sw: +1\n};\n\nfunction type(t) {\n  return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n  return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n  var svg = this.ownerSVGElement || this;\n  if (svg.hasAttribute(\"viewBox\")) {\n    svg = svg.viewBox.baseVal;\n    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n  }\n  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n  return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n  while (!node.__brush) if (!(node = node.parentNode)) return;\n  return node.__brush;\n}\n\nfunction empty(extent) {\n  return extent[0][0] === extent[1][0]\n      || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n  var state = node.__brush;\n  return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n  return brush(X);\n}\n\nexport function brushY() {\n  return brush(Y);\n}\n\nexport default function() {\n  return brush(XY);\n}\n\nfunction brush(dim) {\n  var extent = defaultExtent,\n      filter = defaultFilter,\n      touchable = defaultTouchable,\n      keys = true,\n      listeners = dispatch(brush, \"start\", \"brush\", \"end\"),\n      handleSize = 6,\n      touchending;\n\n  function brush(group) {\n    var overlay = group\n        .property(\"__brush\", initialize)\n      .selectAll(\".overlay\")\n      .data([type(\"overlay\")]);\n\n    overlay.enter().append(\"rect\")\n        .attr(\"class\", \"overlay\")\n        .attr(\"pointer-events\", \"all\")\n        .attr(\"cursor\", cursors.overlay)\n      .merge(overlay)\n        .each(function() {\n          var extent = local(this).extent;\n          select(this)\n              .attr(\"x\", extent[0][0])\n              .attr(\"y\", extent[0][1])\n              .attr(\"width\", extent[1][0] - extent[0][0])\n              .attr(\"height\", extent[1][1] - extent[0][1]);\n        });\n\n    group.selectAll(\".selection\")\n      .data([type(\"selection\")])\n      .enter().append(\"rect\")\n        .attr(\"class\", \"selection\")\n        .attr(\"cursor\", cursors.selection)\n        .attr(\"fill\", \"#777\")\n        .attr(\"fill-opacity\", 0.3)\n        .attr(\"stroke\", \"#fff\")\n        .attr(\"shape-rendering\", \"crispEdges\");\n\n    var handle = group.selectAll(\".handle\")\n      .data(dim.handles, function(d) { return d.type; });\n\n    handle.exit().remove();\n\n    handle.enter().append(\"rect\")\n        .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n        .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n    group\n        .each(redraw)\n        .attr(\"fill\", \"none\")\n        .attr(\"pointer-events\", \"all\")\n        .on(\"mousedown.brush\", started)\n      .filter(touchable)\n        .on(\"touchstart.brush\", started)\n        .on(\"touchmove.brush\", touchmoved)\n        .on(\"touchend.brush touchcancel.brush\", touchended)\n        .style(\"touch-action\", \"none\")\n        .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n  }\n\n  brush.move = function(group, selection) {\n    if (group.selection) {\n      group\n          .on(\"start.brush\", function() { emitter(this, arguments).beforestart().start(); })\n          .on(\"interrupt.brush end.brush\", function() { emitter(this, arguments).end(); })\n          .tween(\"brush\", function() {\n            var that = this,\n                state = that.__brush,\n                emit = emitter(that, arguments),\n                selection0 = state.selection,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n                i = interpolate(selection0, selection1);\n\n            function tween(t) {\n              state.selection = t === 1 && selection1 === null ? null : i(t);\n              redraw.call(that);\n              emit.brush();\n            }\n\n            return selection0 !== null && selection1 !== null ? tween : tween(1);\n          });\n    } else {\n      group\n          .each(function() {\n            var that = this,\n                args = arguments,\n                state = that.__brush,\n                selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n                emit = emitter(that, args).beforestart();\n\n            interrupt(that);\n            state.selection = selection1 === null ? null : selection1;\n            redraw.call(that);\n            emit.start().brush().end();\n          });\n    }\n  };\n\n  brush.clear = function(group) {\n    brush.move(group, null);\n  };\n\n  function redraw() {\n    var group = select(this),\n        selection = local(this).selection;\n\n    if (selection) {\n      group.selectAll(\".selection\")\n          .style(\"display\", null)\n          .attr(\"x\", selection[0][0])\n          .attr(\"y\", selection[0][1])\n          .attr(\"width\", selection[1][0] - selection[0][0])\n          .attr(\"height\", selection[1][1] - selection[0][1]);\n\n      group.selectAll(\".handle\")\n          .style(\"display\", null)\n          .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n          .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n          .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n          .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n    }\n\n    else {\n      group.selectAll(\".selection,.handle\")\n          .style(\"display\", \"none\")\n          .attr(\"x\", null)\n          .attr(\"y\", null)\n          .attr(\"width\", null)\n          .attr(\"height\", null);\n    }\n  }\n\n  function emitter(that, args, clean) {\n    return (!clean && that.__brush.emitter) || new Emitter(that, args);\n  }\n\n  function Emitter(that, args) {\n    this.that = that;\n    this.args = args;\n    this.state = that.__brush;\n    this.active = 0;\n  }\n\n  Emitter.prototype = {\n    beforestart: function() {\n      if (++this.active === 1) this.state.emitter = this, this.starting = true;\n      return this;\n    },\n    start: function() {\n      if (this.starting) this.starting = false, this.emit(\"start\");\n      else this.emit(\"brush\");\n      return this;\n    },\n    brush: function() {\n      this.emit(\"brush\");\n      return this;\n    },\n    end: function() {\n      if (--this.active === 0) delete this.state.emitter, this.emit(\"end\");\n      return this;\n    },\n    emit: function(type) {\n      customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);\n    }\n  };\n\n  function started() {\n    if (touchending && !event.touches) return;\n    if (!filter.apply(this, arguments)) return;\n\n    var that = this,\n        type = event.target.__data__.type,\n        mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n        signX = dim === Y ? null : signsX[type],\n        signY = dim === X ? null : signsY[type],\n        state = local(that),\n        extent = state.extent,\n        selection = state.selection,\n        W = extent[0][0], w0, w1,\n        N = extent[0][1], n0, n1,\n        E = extent[1][0], e0, e1,\n        S = extent[1][1], s0, s1,\n        dx = 0,\n        dy = 0,\n        moving,\n        shifting = signX && signY && keys && event.shiftKey,\n        lockX,\n        lockY,\n        pointer = event.touches ? toucher(event.changedTouches[0].identifier) : mouse,\n        point0 = pointer(that),\n        point = point0,\n        emit = emitter(that, arguments, true).beforestart();\n\n    if (type === \"overlay\") {\n      if (selection) moving = true;\n      state.selection = selection = [\n        [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],\n        [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]\n      ];\n    } else {\n      w0 = selection[0][0];\n      n0 = selection[0][1];\n      e0 = selection[1][0];\n      s0 = selection[1][1];\n    }\n\n    w1 = w0;\n    n1 = n0;\n    e1 = e0;\n    s1 = s0;\n\n    var group = select(that)\n        .attr(\"pointer-events\", \"none\");\n\n    var overlay = group.selectAll(\".overlay\")\n        .attr(\"cursor\", cursors[type]);\n\n    if (event.touches) {\n      emit.moved = moved;\n      emit.ended = ended;\n    } else {\n      var view = select(event.view)\n          .on(\"mousemove.brush\", moved, true)\n          .on(\"mouseup.brush\", ended, true);\n      if (keys) view\n          .on(\"keydown.brush\", keydowned, true)\n          .on(\"keyup.brush\", keyupped, true)\n\n      dragDisable(event.view);\n    }\n\n    nopropagation();\n    interrupt(that);\n    redraw.call(that);\n    emit.start();\n\n    function moved() {\n      var point1 = pointer(that);\n      if (shifting && !lockX && !lockY) {\n        if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;\n        else lockX = true;\n      }\n      point = point1;\n      moving = true;\n      noevent();\n      move();\n    }\n\n    function move() {\n      var t;\n\n      dx = point[0] - point0[0];\n      dy = point[1] - point0[1];\n\n      switch (mode) {\n        case MODE_SPACE:\n        case MODE_DRAG: {\n          if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n          if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n          break;\n        }\n        case MODE_HANDLE: {\n          if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n          else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n          if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n          else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n          break;\n        }\n        case MODE_CENTER: {\n          if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));\n          if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));\n          break;\n        }\n      }\n\n      if (e1 < w1) {\n        signX *= -1;\n        t = w0, w0 = e0, e0 = t;\n        t = w1, w1 = e1, e1 = t;\n        if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n      }\n\n      if (s1 < n1) {\n        signY *= -1;\n        t = n0, n0 = s0, s0 = t;\n        t = n1, n1 = s1, s1 = t;\n        if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n      }\n\n      if (state.selection) selection = state.selection; // May be set by brush.move!\n      if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n      if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n      if (selection[0][0] !== w1\n          || selection[0][1] !== n1\n          || selection[1][0] !== e1\n          || selection[1][1] !== s1) {\n        state.selection = [[w1, n1], [e1, s1]];\n        redraw.call(that);\n        emit.brush();\n      }\n    }\n\n    function ended() {\n      nopropagation();\n      if (event.touches) {\n        if (event.touches.length) return;\n        if (touchending) clearTimeout(touchending);\n        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n      } else {\n        dragEnable(event.view, moving);\n        view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n      }\n      group.attr(\"pointer-events\", \"all\");\n      overlay.attr(\"cursor\", cursors.overlay);\n      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n      if (empty(selection)) state.selection = null, redraw.call(that);\n      emit.end();\n    }\n\n    function keydowned() {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          shifting = signX && signY;\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_HANDLE) {\n            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n            mode = MODE_CENTER;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE; takes priority over ALT\n          if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n            mode = MODE_SPACE;\n            overlay.attr(\"cursor\", cursors.selection);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent();\n    }\n\n    function keyupped() {\n      switch (event.keyCode) {\n        case 16: { // SHIFT\n          if (shifting) {\n            lockX = lockY = shifting = false;\n            move();\n          }\n          break;\n        }\n        case 18: { // ALT\n          if (mode === MODE_CENTER) {\n            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n            mode = MODE_HANDLE;\n            move();\n          }\n          break;\n        }\n        case 32: { // SPACE\n          if (mode === MODE_SPACE) {\n            if (event.altKey) {\n              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n              mode = MODE_CENTER;\n            } else {\n              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n              mode = MODE_HANDLE;\n            }\n            overlay.attr(\"cursor\", cursors[type]);\n            move();\n          }\n          break;\n        }\n        default: return;\n      }\n      noevent();\n    }\n  }\n\n  function touchmoved() {\n    emitter(this, arguments).moved();\n  }\n\n  function touchended() {\n    emitter(this, arguments).ended();\n  }\n\n  function initialize() {\n    var state = this.__brush || {selection: null};\n    state.extent = number2(extent.apply(this, arguments));\n    state.dim = dim;\n    return state;\n  }\n\n  brush.extent = function(_) {\n    return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n  };\n\n  brush.filter = function(_) {\n    return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n  };\n\n  brush.handleSize = function(_) {\n    return arguments.length ? (handleSize = +_, brush) : handleSize;\n  };\n\n  brush.keyModifiers = function(_) {\n    return arguments.length ? (keys = !!_, brush) : keys;\n  };\n\n  brush.on = function() {\n    var value = listeners.on.apply(listeners, arguments);\n    return value === listeners ? brush : value;\n  };\n\n  return brush;\n}\n","export var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\n","export var slice = Array.prototype.slice;\n","import {range} from \"d3-array\";\nimport {max, tau} from \"./math\";\n\nfunction compareValue(compare) {\n  return function(a, b) {\n    return compare(\n      a.source.value + a.target.value,\n      b.source.value + b.target.value\n    );\n  };\n}\n\nexport default function() {\n  var padAngle = 0,\n      sortGroups = null,\n      sortSubgroups = null,\n      sortChords = null;\n\n  function chord(matrix) {\n    var n = matrix.length,\n        groupSums = [],\n        groupIndex = range(n),\n        subgroupIndex = [],\n        chords = [],\n        groups = chords.groups = new Array(n),\n        subgroups = new Array(n * n),\n        k,\n        x,\n        x0,\n        dx,\n        i,\n        j;\n\n    // Compute the sum.\n    k = 0, i = -1; while (++i < n) {\n      x = 0, j = -1; while (++j < n) {\n        x += matrix[i][j];\n      }\n      groupSums.push(x);\n      subgroupIndex.push(range(n));\n      k += x;\n    }\n\n    // Sort groups…\n    if (sortGroups) groupIndex.sort(function(a, b) {\n      return sortGroups(groupSums[a], groupSums[b]);\n    });\n\n    // Sort subgroups…\n    if (sortSubgroups) subgroupIndex.forEach(function(d, i) {\n      d.sort(function(a, b) {\n        return sortSubgroups(matrix[i][a], matrix[i][b]);\n      });\n    });\n\n    // Convert the sum to scaling factor for [0, 2pi].\n    // TODO Allow start and end angle to be specified?\n    // TODO Allow padding to be specified as percentage?\n    k = max(0, tau - padAngle * n) / k;\n    dx = k ? padAngle : tau / n;\n\n    // Compute the start and end angle for each group and subgroup.\n    // Note: Opera has a bug reordering object literal properties!\n    x = 0, i = -1; while (++i < n) {\n      x0 = x, j = -1; while (++j < n) {\n        var di = groupIndex[i],\n            dj = subgroupIndex[di][j],\n            v = matrix[di][dj],\n            a0 = x,\n            a1 = x += v * k;\n        subgroups[dj * n + di] = {\n          index: di,\n          subindex: dj,\n          startAngle: a0,\n          endAngle: a1,\n          value: v\n        };\n      }\n      groups[di] = {\n        index: di,\n        startAngle: x0,\n        endAngle: x,\n        value: groupSums[di]\n      };\n      x += dx;\n    }\n\n    // Generate chords for each (non-empty) subgroup-subgroup link.\n    i = -1; while (++i < n) {\n      j = i - 1; while (++j < n) {\n        var source = subgroups[j * n + i],\n            target = subgroups[i * n + j];\n        if (source.value || target.value) {\n          chords.push(source.value < target.value\n              ? {source: target, target: source}\n              : {source: source, target: target});\n        }\n      }\n    }\n\n    return sortChords ? chords.sort(sortChords) : chords;\n  }\n\n  chord.padAngle = function(_) {\n    return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n  };\n\n  chord.sortGroups = function(_) {\n    return arguments.length ? (sortGroups = _, chord) : sortGroups;\n  };\n\n  chord.sortSubgroups = function(_) {\n    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n  };\n\n  chord.sortChords = function(_) {\n    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n  };\n\n  return chord;\n}\n","var pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","export var prefix = \"$\";\n\nfunction Map() {}\n\nMap.prototype = map.prototype = {\n  constructor: Map,\n  has: function(key) {\n    return (prefix + key) in this;\n  },\n  get: function(key) {\n    return this[prefix + key];\n  },\n  set: function(key, value) {\n    this[prefix + key] = value;\n    return this;\n  },\n  remove: function(key) {\n    var property = prefix + key;\n    return property in this && delete this[property];\n  },\n  clear: function() {\n    for (var property in this) if (property[0] === prefix) delete this[property];\n  },\n  keys: function() {\n    var keys = [];\n    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));\n    return keys;\n  },\n  values: function() {\n    var values = [];\n    for (var property in this) if (property[0] === prefix) values.push(this[property]);\n    return values;\n  },\n  entries: function() {\n    var entries = [];\n    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});\n    return entries;\n  },\n  size: function() {\n    var size = 0;\n    for (var property in this) if (property[0] === prefix) ++size;\n    return size;\n  },\n  empty: function() {\n    for (var property in this) if (property[0] === prefix) return false;\n    return true;\n  },\n  each: function(f) {\n    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);\n  }\n};\n\nfunction map(object, f) {\n  var map = new Map;\n\n  // Copy constructor.\n  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });\n\n  // Index array by numeric index or specified key function.\n  else if (Array.isArray(object)) {\n    var i = -1,\n        n = object.length,\n        o;\n\n    if (f == null) while (++i < n) map.set(i, object[i]);\n    else while (++i < n) map.set(f(o = object[i], i, object), o);\n  }\n\n  // Convert object to map.\n  else if (object) for (var key in object) map.set(key, object[key]);\n\n  return map;\n}\n\nexport default map;\n","import {default as map, prefix} from \"./map\";\n\nfunction Set() {}\n\nvar proto = map.prototype;\n\nSet.prototype = set.prototype = {\n  constructor: Set,\n  has: proto.has,\n  add: function(value) {\n    value += \"\";\n    this[prefix + value] = value;\n    return this;\n  },\n  remove: proto.remove,\n  clear: proto.clear,\n  values: proto.keys,\n  size: proto.size,\n  empty: proto.empty,\n  each: proto.each\n};\n\nfunction set(object, f) {\n  var set = new Set;\n\n  // Copy constructor.\n  if (object instanceof Set) object.each(function(value) { set.add(value); });\n\n  // Otherwise, assume it’s an array.\n  else if (object) {\n    var i = -1, n = object.length;\n    if (f == null) while (++i < n) set.add(object[i]);\n    else while (++i < n) set.add(f(object[i], i, object));\n  }\n\n  return set;\n}\n\nexport default set;\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n  return d[0];\n}\n\nfunction defaultY(d) {\n  return d[1];\n}\n\nfunction defaultWeight() {\n  return 1;\n}\n\nexport default function() {\n  var x = defaultX,\n      y = defaultY,\n      weight = defaultWeight,\n      dx = 960,\n      dy = 500,\n      r = 20, // blur radius\n      k = 2, // log2(grid cell size)\n      o = r * 3, // grid offset, to pad for blur\n      n = (dx + o * 2) >> k, // grid width\n      m = (dy + o * 2) >> k, // grid height\n      threshold = constant(20);\n\n  function density(data) {\n    var values0 = new Float32Array(n * m),\n        values1 = new Float32Array(n * m);\n\n    data.forEach(function(d, i, data) {\n      var xi = (+x(d, i, data) + o) >> k,\n          yi = (+y(d, i, data) + o) >> k,\n          wi = +weight(d, i, data);\n      if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n        values0[xi + yi * n] += wi;\n      }\n    });\n\n    // TODO Optimize.\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n    var tz = threshold(values0);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      var stop = max(values0);\n      tz = tickStep(0, stop, tz);\n      tz = range(0, Math.floor(stop / tz) * tz, tz);\n      tz.shift();\n    }\n\n    return contours()\n        .thresholds(tz)\n        .size([n, m])\n      (values0)\n        .map(transform);\n  }\n\n  function transform(geometry) {\n    geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n    geometry.coordinates.forEach(transformPolygon);\n    return geometry;\n  }\n\n  function transformPolygon(coordinates) {\n    coordinates.forEach(transformRing);\n  }\n\n  function transformRing(coordinates) {\n    coordinates.forEach(transformPoint);\n  }\n\n  // TODO Optimize.\n  function transformPoint(coordinates) {\n    coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n    coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n  }\n\n  function resize() {\n    o = r * 3;\n    n = (dx + o * 2) >> k;\n    m = (dy + o * 2) >> k;\n    return density;\n  }\n\n  density.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n  };\n\n  density.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n  };\n\n  density.weight = function(_) {\n    return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n  };\n\n  density.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n    if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, resize();\n  };\n\n  density.cellSize = function(_) {\n    if (!arguments.length) return 1 << k;\n    if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n    return k = Math.floor(Math.log(_) / Math.LN2), resize();\n  };\n\n  density.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n  };\n\n  density.bandwidth = function(_) {\n    if (!arguments.length) return Math.sqrt(r * (r + 1));\n    if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n    return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n  };\n\n  return density;\n}\n","var EOL = {},\n    EOF = {},\n    QUOTE = 34,\n    NEWLINE = 10,\n    RETURN = 13;\n\nfunction objectConverter(columns) {\n  return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n    return JSON.stringify(name) + \": d[\" + i + \"]\";\n  }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n  var object = objectConverter(columns);\n  return function(row, i) {\n    return f(object(row), i, columns);\n  };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n  var columnSet = Object.create(null),\n      columns = [];\n\n  rows.forEach(function(row) {\n    for (var column in row) {\n      if (!(column in columnSet)) {\n        columns.push(columnSet[column] = column);\n      }\n    }\n  });\n\n  return columns;\n}\n\nfunction pad(value, width) {\n  var s = value + \"\", length = s.length;\n  return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n  return year < 0 ? \"-\" + pad(-year, 6)\n    : year > 9999 ? \"+\" + pad(year, 6)\n    : pad(year, 4);\n}\n\nfunction formatDate(date) {\n  var hours = date.getUTCHours(),\n      minutes = date.getUTCMinutes(),\n      seconds = date.getUTCSeconds(),\n      milliseconds = date.getUTCMilliseconds();\n  return isNaN(date) ? \"Invalid Date\"\n      : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n      + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n      : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n      : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n      : \"\");\n}\n\nexport default function(delimiter) {\n  var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n      DELIMITER = delimiter.charCodeAt(0);\n\n  function parse(text, f) {\n    var convert, columns, rows = parseRows(text, function(row, i) {\n      if (convert) return convert(row, i - 1);\n      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n    });\n    rows.columns = columns || [];\n    return rows;\n  }\n\n  function parseRows(text, f) {\n    var rows = [], // output rows\n        N = text.length,\n        I = 0, // current character index\n        n = 0, // current line number\n        t, // current token\n        eof = N <= 0, // current token followed by EOF?\n        eol = false; // current token followed by EOL?\n\n    // Strip the trailing newline.\n    if (text.charCodeAt(N - 1) === NEWLINE) --N;\n    if (text.charCodeAt(N - 1) === RETURN) --N;\n\n    function token() {\n      if (eof) return EOF;\n      if (eol) return eol = false, EOL;\n\n      // Unescape quotes.\n      var i, j = I, c;\n      if (text.charCodeAt(j) === QUOTE) {\n        while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n        if ((i = I) >= N) eof = true;\n        else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n      }\n\n      // Find next delimiter or newline.\n      while (I < N) {\n        if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n        else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n        else if (c !== DELIMITER) continue;\n        return text.slice(j, i);\n      }\n\n      // Return last token before EOF.\n      return eof = true, text.slice(j, N);\n    }\n\n    while ((t = token()) !== EOF) {\n      var row = [];\n      while (t !== EOL && t !== EOF) row.push(t), t = token();\n      if (f && (row = f(row, n++)) == null) continue;\n      rows.push(row);\n    }\n\n    return rows;\n  }\n\n  function preformatBody(rows, columns) {\n    return rows.map(function(row) {\n      return columns.map(function(column) {\n        return formatValue(row[column]);\n      }).join(delimiter);\n    });\n  }\n\n  function format(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n  }\n\n  function formatBody(rows, columns) {\n    if (columns == null) columns = inferColumns(rows);\n    return preformatBody(rows, columns).join(\"\\n\");\n  }\n\n  function formatRows(rows) {\n    return rows.map(formatRow).join(\"\\n\");\n  }\n\n  function formatRow(row) {\n    return row.map(formatValue).join(delimiter);\n  }\n\n  function formatValue(value) {\n    return value == null ? \"\"\n        : value instanceof Date ? formatDate(value)\n        : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n        : value;\n  }\n\n  return {\n    parse: parse,\n    parseRows: parseRows,\n    format: format,\n    formatBody: formatBody,\n    formatRows: formatRows\n  };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\n","function responseText(response) {\n  if (!response.ok) throw new Error(response.status + \" \" + response.statusText);\n  return response.text();\n}\n\nexport default function(input, init) {\n  return fetch(input, init).then(responseText);\n}\n","import {csvParse, dsvFormat, tsvParse} from \"d3-dsv\";\nimport text from \"./text\";\n\nfunction dsvParse(parse) {\n  return function(input, init, row) {\n    if (arguments.length === 2 && typeof init === \"function\") row = init, init = undefined;\n    return text(input, init).then(function(response) {\n      return parse(response, row);\n    });\n  };\n}\n\nexport default function dsv(delimiter, input, init, row) {\n  if (arguments.length === 3 && typeof init === \"function\") row = init, init = undefined;\n  var format = dsvFormat(delimiter);\n  return text(input, init).then(function(response) {\n    return format.parse(response, row);\n  });\n}\n\nexport var csv = dsvParse(csvParse);\nexport var tsv = dsvParse(tsvParse);\n","import text from \"./text\";\n\nfunction parser(type) {\n  return function(input, init)  {\n    return text(input, init).then(function(text) {\n      return (new DOMParser).parseFromString(text, type);\n    });\n  };\n}\n\nexport default parser(\"application/xml\");\n\nexport var html = parser(\"text/html\");\n\nexport var svg = parser(\"image/svg+xml\");\n","export default function(d) {\n  var x = +this._x.call(null, d),\n      y = +this._y.call(null, d);\n  return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n  var parent,\n      node = tree._root,\n      leaf = {data: d},\n      x0 = tree._x0,\n      y0 = tree._y0,\n      x1 = tree._x1,\n      y1 = tree._y1,\n      xm,\n      ym,\n      xp,\n      yp,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return tree._root = leaf, tree;\n\n  // Find the existing leaf for the new point, or add it.\n  while (node.length) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n  }\n\n  // Is the new point is exactly coincident with the existing point?\n  xp = +tree._x.call(null, node.data);\n  yp = +tree._y.call(null, node.data);\n  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n  // Otherwise, split the leaf node until the old and new point are separated.\n  do {\n    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n  return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n  var d, i, n = data.length,\n      x,\n      y,\n      xz = new Array(n),\n      yz = new Array(n),\n      x0 = Infinity,\n      y0 = Infinity,\n      x1 = -Infinity,\n      y1 = -Infinity;\n\n  // Compute the points and their extent.\n  for (i = 0; i < n; ++i) {\n    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n    xz[i] = x;\n    yz[i] = y;\n    if (x < x0) x0 = x;\n    if (x > x1) x1 = x;\n    if (y < y0) y0 = y;\n    if (y > y1) y1 = y;\n  }\n\n  // If there were no (valid) points, abort.\n  if (x0 > x1 || y0 > y1) return this;\n\n  // Expand the tree to cover the new points.\n  this.cover(x0, y0).cover(x1, y1);\n\n  // Add the new points.\n  for (i = 0; i < n; ++i) {\n    add(this, xz[i], yz[i], data[i]);\n  }\n\n  return this;\n}\n","export default function(x, y) {\n  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n  var x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1;\n\n  // If the quadtree has no extent, initialize them.\n  // Integer extent are necessary so that if we later double the extent,\n  // the existing quadrant boundaries don’t change due to floating point error!\n  if (isNaN(x0)) {\n    x1 = (x0 = Math.floor(x)) + 1;\n    y1 = (y0 = Math.floor(y)) + 1;\n  }\n\n  // Otherwise, double repeatedly to cover.\n  else {\n    var z = x1 - x0,\n        node = this._root,\n        parent,\n        i;\n\n    while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n      i = (y < y0) << 1 | (x < x0);\n      parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n      switch (i) {\n        case 0: x1 = x0 + z, y1 = y0 + z; break;\n        case 1: x0 = x1 - z, y1 = y0 + z; break;\n        case 2: x1 = x0 + z, y0 = y1 - z; break;\n        case 3: x0 = x1 - z, y0 = y1 - z; break;\n      }\n    }\n\n    if (this._root && this._root.length) this._root = node;\n  }\n\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n  this.node = node;\n  this.x0 = x0;\n  this.y0 = y0;\n  this.x1 = x1;\n  this.y1 = y1;\n}\n","export function defaultX(d) {\n  return d[0];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n  return d[1];\n}\n\nexport default function(_) {\n  return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\nimport tree_y, {defaultY} from \"./y\";\n\nexport default function quadtree(nodes, x, y) {\n  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n  return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n  this._x = x;\n  this._y = y;\n  this._x0 = x0;\n  this._y0 = y0;\n  this._x1 = x1;\n  this._y1 = y1;\n  this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n  var copy = {data: leaf.data}, next = copy;\n  while (leaf = leaf.next) next = next.next = {data: leaf.data};\n  return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n      node = this._root,\n      nodes,\n      child;\n\n  if (!node) return copy;\n\n  if (!node.length) return copy._root = leaf_copy(node), copy;\n\n  nodes = [{source: node, target: copy._root = new Array(4)}];\n  while (node = nodes.pop()) {\n    for (var i = 0; i < 4; ++i) {\n      if (child = node.source[i]) {\n        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n        else node.target[i] = leaf_copy(child);\n      }\n    }\n  }\n\n  return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function() {\n  var data = [];\n  this.visit(function(node) {\n    if (!node.length) do data.push(node.data); while (node = node.next)\n  });\n  return data;\n}\n","export default function(_) {\n  return arguments.length\n      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad\";\n\nexport default function(x, y, radius) {\n  var data,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1,\n      y1,\n      x2,\n      y2,\n      x3 = this._x1,\n      y3 = this._y1,\n      quads = [],\n      node = this._root,\n      q,\n      i;\n\n  if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n  if (radius == null) radius = Infinity;\n  else {\n    x0 = x - radius, y0 = y - radius;\n    x3 = x + radius, y3 = y + radius;\n    radius *= radius;\n  }\n\n  while (q = quads.pop()) {\n\n    // Stop searching if this quadrant can’t contain a closer node.\n    if (!(node = q.node)\n        || (x1 = q.x0) > x3\n        || (y1 = q.y0) > y3\n        || (x2 = q.x1) < x0\n        || (y2 = q.y1) < y0) continue;\n\n    // Bisect the current quadrant.\n    if (node.length) {\n      var xm = (x1 + x2) / 2,\n          ym = (y1 + y2) / 2;\n\n      quads.push(\n        new Quad(node[3], xm, ym, x2, y2),\n        new Quad(node[2], x1, ym, xm, y2),\n        new Quad(node[1], xm, y1, x2, ym),\n        new Quad(node[0], x1, y1, xm, ym)\n      );\n\n      // Visit the closest quadrant first.\n      if (i = (y >= ym) << 1 | (x >= xm)) {\n        q = quads[quads.length - 1];\n        quads[quads.length - 1] = quads[quads.length - 1 - i];\n        quads[quads.length - 1 - i] = q;\n      }\n    }\n\n    // Visit this point. (Visiting coincident points isn’t necessary!)\n    else {\n      var dx = x - +this._x.call(null, node.data),\n          dy = y - +this._y.call(null, node.data),\n          d2 = dx * dx + dy * dy;\n      if (d2 < radius) {\n        var d = Math.sqrt(radius = d2);\n        x0 = x - d, y0 = y - d;\n        x3 = x + d, y3 = y + d;\n        data = node.data;\n      }\n    }\n  }\n\n  return data;\n}\n","export default function(d) {\n  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n  var parent,\n      node = this._root,\n      retainer,\n      previous,\n      next,\n      x0 = this._x0,\n      y0 = this._y0,\n      x1 = this._x1,\n      y1 = this._y1,\n      x,\n      y,\n      xm,\n      ym,\n      right,\n      bottom,\n      i,\n      j;\n\n  // If the tree is empty, initialize the root as a leaf.\n  if (!node) return this;\n\n  // Find the leaf node for the point.\n  // While descending, also retain the deepest parent with a non-removed sibling.\n  if (node.length) while (true) {\n    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n    if (!node.length) break;\n    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n  }\n\n  // Find the point to remove.\n  while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n  if (next = node.next) delete node.next;\n\n  // If there are multiple coincident points, remove just the point.\n  if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n  // If this is the root point, remove it.\n  if (!parent) return this._root = next, this;\n\n  // Remove this leaf.\n  next ? parent[i] = next : delete parent[i];\n\n  // If the parent now contains exactly one leaf, collapse superfluous parents.\n  if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n      && node === (parent[3] || parent[2] || parent[1] || parent[0])\n      && !node.length) {\n    if (retainer) retainer[j] = node;\n    else this._root = node;\n  }\n\n  return this;\n}\n\nexport function removeAll(data) {\n  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n  return this;\n}\n","export default function() {\n  return this._root;\n}\n","export default function() {\n  var size = 0;\n  this.visit(function(node) {\n    if (!node.length) do ++size; while (node = node.next)\n  });\n  return size;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n  var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n    }\n  }\n  return this;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n  var quads = [], next = [], q;\n  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n  while (q = quads.pop()) {\n    var node = q.node;\n    if (node.length) {\n      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n    }\n    next.push(q);\n  }\n  while (q = next.pop()) {\n    callback(q.node, q.x0, q.y0, q.x1, q.y1);\n  }\n  return this;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {map} from \"d3-collection\";\nimport {timer} from \"d3-timer\";\n\nexport function x(d) {\n  return d.x;\n}\n\nexport function y(d) {\n  return d.y;\n}\n\nvar initialRadius = 10,\n    initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n  var simulation,\n      alpha = 1,\n      alphaMin = 0.001,\n      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n      alphaTarget = 0,\n      velocityDecay = 0.6,\n      forces = map(),\n      stepper = timer(step),\n      event = dispatch(\"tick\", \"end\");\n\n  if (nodes == null) nodes = [];\n\n  function step() {\n    tick();\n    event.call(\"tick\", simulation);\n    if (alpha < alphaMin) {\n      stepper.stop();\n      event.call(\"end\", simulation);\n    }\n  }\n\n  function tick(iterations) {\n    var i, n = nodes.length, node;\n\n    if (iterations === undefined) iterations = 1;\n\n    for (var k = 0; k < iterations; ++k) {\n      alpha += (alphaTarget - alpha) * alphaDecay;\n\n      forces.each(function (force) {\n        force(alpha);\n      });\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        if (node.fx == null) node.x += node.vx *= velocityDecay;\n        else node.x = node.fx, node.vx = 0;\n        if (node.fy == null) node.y += node.vy *= velocityDecay;\n        else node.y = node.fy, node.vy = 0;\n      }\n    }\n\n    return simulation;\n  }\n\n  function initializeNodes() {\n    for (var i = 0, n = nodes.length, node; i < n; ++i) {\n      node = nodes[i], node.index = i;\n      if (node.fx != null) node.x = node.fx;\n      if (node.fy != null) node.y = node.fy;\n      if (isNaN(node.x) || isNaN(node.y)) {\n        var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n        node.x = radius * Math.cos(angle);\n        node.y = radius * Math.sin(angle);\n      }\n      if (isNaN(node.vx) || isNaN(node.vy)) {\n        node.vx = node.vy = 0;\n      }\n    }\n  }\n\n  function initializeForce(force) {\n    if (force.initialize) force.initialize(nodes);\n    return force;\n  }\n\n  initializeNodes();\n\n  return simulation = {\n    tick: tick,\n\n    restart: function() {\n      return stepper.restart(step), simulation;\n    },\n\n    stop: function() {\n      return stepper.stop(), simulation;\n    },\n\n    nodes: function(_) {\n      return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;\n    },\n\n    alpha: function(_) {\n      return arguments.length ? (alpha = +_, simulation) : alpha;\n    },\n\n    alphaMin: function(_) {\n      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n    },\n\n    alphaDecay: function(_) {\n      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n    },\n\n    alphaTarget: function(_) {\n      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n    },\n\n    velocityDecay: function(_) {\n      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n    },\n\n    force: function(name, _) {\n      return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n    },\n\n    find: function(x, y, radius) {\n      var i = 0,\n          n = nodes.length,\n          dx,\n          dy,\n          d2,\n          node,\n          closest;\n\n      if (radius == null) radius = Infinity;\n      else radius *= radius;\n\n      for (i = 0; i < n; ++i) {\n        node = nodes[i];\n        dx = x - node.x;\n        dy = y - node.y;\n        d2 = dx * dx + dy * dy;\n        if (d2 < radius) closest = node, radius = d2;\n      }\n\n      return closest;\n    },\n\n    on: function(name, _) {\n      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n    }\n  };\n}\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n  var i, coefficient = x.slice(0, i);\n\n  // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n  // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n  return [\n    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n    +x.slice(i + 1)\n  ];\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n  return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n  return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n  if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n  var match;\n  this.fill = match[1] || \" \";\n  this.align = match[2] || \">\";\n  this.sign = match[3] || \"-\";\n  this.symbol = match[4] || \"\";\n  this.zero = !!match[5];\n  this.width = match[6] && +match[6];\n  this.comma = !!match[7];\n  this.precision = match[8] && +match[8].slice(1);\n  this.trim = !!match[9];\n  this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n  return this.fill\n      + this.align\n      + this.sign\n      + this.symbol\n      + (this.zero ? \"0\" : \"\")\n      + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n      + (this.comma ? \",\" : \"\")\n      + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n      + (this.trim ? \"~\" : \"\")\n      + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n    switch (s[i]) {\n      case \".\": i0 = i1 = i; break;\n      case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n      default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n    }\n  }\n  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n  var d = formatDecimal(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1],\n      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n      n = coefficient.length;\n  return i === n ? coefficient\n      : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n      : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n      : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n  decimal: \".\",\n  thousands: \",\",\n  grouping: [3],\n  currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  format = locale.format;\n  formatPrefix = locale.formatPrefix;\n  return locale;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n  var d = formatDecimal(x, p);\n  if (!d) return x + \"\";\n  var coefficient = d[0],\n      exponent = d[1];\n  return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n      : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n  \"%\": function(x, p) { return (x * 100).toFixed(p); },\n  \"b\": function(x) { return Math.round(x).toString(2); },\n  \"c\": function(x) { return x + \"\"; },\n  \"d\": function(x) { return Math.round(x).toString(10); },\n  \"e\": function(x, p) { return x.toExponential(p); },\n  \"f\": function(x, p) { return x.toFixed(p); },\n  \"g\": function(x, p) { return x.toPrecision(p); },\n  \"o\": function(x) { return Math.round(x).toString(8); },\n  \"p\": function(x, p) { return formatRounded(x * 100, p); },\n  \"r\": formatRounded,\n  \"s\": formatPrefixAuto,\n  \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n  \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n  return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n  var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n      currency = locale.currency,\n      decimal = locale.decimal,\n      numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n      percent = locale.percent || \"%\";\n\n  function newFormat(specifier) {\n    specifier = formatSpecifier(specifier);\n\n    var fill = specifier.fill,\n        align = specifier.align,\n        sign = specifier.sign,\n        symbol = specifier.symbol,\n        zero = specifier.zero,\n        width = specifier.width,\n        comma = specifier.comma,\n        precision = specifier.precision,\n        trim = specifier.trim,\n        type = specifier.type;\n\n    // The \"n\" type is an alias for \",g\".\n    if (type === \"n\") comma = true, type = \"g\";\n\n    // The \"\" type, and any invalid type, is an alias for \".12~g\".\n    else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n    // If zero fill is specified, padding goes after sign and before digits.\n    if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n    // Compute the prefix and suffix.\n    // For SI-prefix, the suffix is lazily computed.\n    var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n        suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n    // What format function should we use?\n    // Is this an integer type?\n    // Can this type generate exponential notation?\n    var formatType = formatTypes[type],\n        maybeSuffix = /[defgprs%]/.test(type);\n\n    // Set the default precision if not specified,\n    // or clamp the specified precision to the supported range.\n    // For significant precision, it must be in [1, 21].\n    // For fixed precision, it must be in [0, 20].\n    precision = precision == null ? 6\n        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n        : Math.max(0, Math.min(20, precision));\n\n    function format(value) {\n      var valuePrefix = prefix,\n          valueSuffix = suffix,\n          i, n, c;\n\n      if (type === \"c\") {\n        valueSuffix = formatType(value) + valueSuffix;\n        value = \"\";\n      } else {\n        value = +value;\n\n        // Perform the initial formatting.\n        var valueNegative = value < 0;\n        value = formatType(Math.abs(value), precision);\n\n        // Trim insignificant zeros.\n        if (trim) value = formatTrim(value);\n\n        // If a negative value rounds to zero during formatting, treat as positive.\n        if (valueNegative && +value === 0) valueNegative = false;\n\n        // Compute the prefix and suffix.\n        valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n        valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n        // Break the formatted value into the integer “value” part that can be\n        // grouped, and fractional or exponential “suffix” part that is not.\n        if (maybeSuffix) {\n          i = -1, n = value.length;\n          while (++i < n) {\n            if (c = value.charCodeAt(i), 48 > c || c > 57) {\n              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n              value = value.slice(0, i);\n              break;\n            }\n          }\n        }\n      }\n\n      // If the fill character is not \"0\", grouping is applied before padding.\n      if (comma && !zero) value = group(value, Infinity);\n\n      // Compute the padding.\n      var length = valuePrefix.length + value.length + valueSuffix.length,\n          padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n      // If the fill character is \"0\", grouping is applied after padding.\n      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n      // Reconstruct the final output based on the desired alignment.\n      switch (align) {\n        case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n        case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n        case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n        default: value = padding + valuePrefix + value + valueSuffix; break;\n      }\n\n      return numerals(value);\n    }\n\n    format.toString = function() {\n      return specifier + \"\";\n    };\n\n    return format;\n  }\n\n  function formatPrefix(specifier, value) {\n    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n        k = Math.pow(10, -e),\n        prefix = prefixes[8 + e / 3];\n    return function(value) {\n      return f(k * value) + prefix;\n    };\n  }\n\n  return {\n    format: newFormat,\n    formatPrefix: formatPrefix\n  };\n}\n","export default function(grouping, thousands) {\n  return function(value, width) {\n    var i = value.length,\n        t = [],\n        j = 0,\n        g = grouping[0],\n        length = 0;\n\n    while (i > 0 && g > 0) {\n      if (length + g + 1 > width) g = Math.max(1, width - length);\n      t.push(value.substring(i -= g, i + g));\n      if ((length += g + 1) > width) break;\n      g = grouping[j = (j + 1) % grouping.length];\n    }\n\n    return t.reverse().join(thousands);\n  };\n}\n","export default function(numerals) {\n  return function(value) {\n    return value.replace(/[0-9]/g, function(i) {\n      return numerals[+i];\n    });\n  };\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n  return Math.max(0, -exponent(Math.abs(step)));\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n  return new Adder;\n}\n\nfunction Adder() {\n  this.reset();\n}\n\nAdder.prototype = {\n  constructor: Adder,\n  reset: function() {\n    this.s = // rounded value\n    this.t = 0; // exact error\n  },\n  add: function(y) {\n    add(temp, y, this.t);\n    add(this, temp.s, this.s);\n    if (this.s) this.t += temp.t;\n    else this.s = temp.t;\n  },\n  valueOf: function() {\n    return this.s;\n  }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n  var x = adder.s = a + b,\n      bv = x - a,\n      av = x - bv;\n  adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n    lambda00,\n    phi00,\n    lambda0,\n    cosPhi0,\n    sinPhi0;\n\nexport var areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaRingSum.reset();\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    var areaRing = +areaRingSum;\n    areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n    this.lineStart = this.lineEnd = this.point = noop;\n  },\n  sphere: function() {\n    areaSum.add(tau);\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n  areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n  areaStream.point = areaPoint;\n  lambda00 = lambda, phi00 = phi;\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n  // Spherical excess E for a spherical triangle with vertices: south pole,\n  // previous point, current point.  Uses a formula derived from Cagnoli’s\n  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n  var dLambda = lambda - lambda0,\n      sdLambda = dLambda >= 0 ? 1 : -1,\n      adLambda = sdLambda * dLambda,\n      cosPhi = cos(phi),\n      sinPhi = sin(phi),\n      k = sinPhi0 * sinPhi,\n      u = cosPhi0 * cosPhi + k * cos(adLambda),\n      v = k * sdLambda * sin(adLambda);\n  areaRingSum.add(atan2(v, u));\n\n  // Advance the previous points.\n  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n  areaSum.reset();\n  stream(object, areaStream);\n  return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n  return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n  var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n  return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n  a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n  return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n  var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n  d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n    lambda2, // previous lambda-coordinate\n    lambda00, phi00, // first point\n    p0, // previous 3D point\n    deltaSum = adder(),\n    ranges,\n    range;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: boundsLineStart,\n  lineEnd: boundsLineEnd,\n  polygonStart: function() {\n    boundsStream.point = boundsRingPoint;\n    boundsStream.lineStart = boundsRingStart;\n    boundsStream.lineEnd = boundsRingEnd;\n    deltaSum.reset();\n    areaStream.polygonStart();\n  },\n  polygonEnd: function() {\n    areaStream.polygonEnd();\n    boundsStream.point = boundsPoint;\n    boundsStream.lineStart = boundsLineStart;\n    boundsStream.lineEnd = boundsLineEnd;\n    if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n    else if (deltaSum > epsilon) phi1 = 90;\n    else if (deltaSum < -epsilon) phi0 = -90;\n    range[0] = lambda0, range[1] = lambda1;\n  },\n  sphere: function() {\n    lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n  }\n};\n\nfunction boundsPoint(lambda, phi) {\n  ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n  var p = cartesian([lambda * radians, phi * radians]);\n  if (p0) {\n    var normal = cartesianCross(p0, p),\n        equatorial = [normal[1], -normal[0], 0],\n        inflection = cartesianCross(equatorial, normal);\n    cartesianNormalizeInPlace(inflection);\n    inflection = spherical(inflection);\n    var delta = lambda - lambda2,\n        sign = delta > 0 ? 1 : -1,\n        lambdai = inflection[0] * degrees * sign,\n        phii,\n        antimeridian = abs(delta) > 180;\n    if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = inflection[1] * degrees;\n      if (phii > phi1) phi1 = phii;\n    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n      phii = -inflection[1] * degrees;\n      if (phii < phi0) phi0 = phii;\n    } else {\n      if (phi < phi0) phi0 = phi;\n      if (phi > phi1) phi1 = phi;\n    }\n    if (antimeridian) {\n      if (lambda < lambda2) {\n        if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n      } else {\n        if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n      }\n    } else {\n      if (lambda1 >= lambda0) {\n        if (lambda < lambda0) lambda0 = lambda;\n        if (lambda > lambda1) lambda1 = lambda;\n      } else {\n        if (lambda > lambda2) {\n          if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n        } else {\n          if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n        }\n      }\n    }\n  } else {\n    ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n  }\n  if (phi < phi0) phi0 = phi;\n  if (phi > phi1) phi1 = phi;\n  p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n  boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n  range[0] = lambda0, range[1] = lambda1;\n  boundsStream.point = boundsPoint;\n  p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n  if (p0) {\n    var delta = lambda - lambda2;\n    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n  } else {\n    lambda00 = lambda, phi00 = phi;\n  }\n  areaStream.point(lambda, phi);\n  linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n  areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n  boundsRingPoint(lambda00, phi00);\n  areaStream.lineEnd();\n  if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n  range[0] = lambda0, range[1] = lambda1;\n  p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n  return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n  var i, n, a, b, merged, deltaMax, delta;\n\n  phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n  ranges = [];\n  stream(feature, boundsStream);\n\n  // First, sort ranges by their minimum longitudes.\n  if (n = ranges.length) {\n    ranges.sort(rangeCompare);\n\n    // Then, merge any ranges that overlap.\n    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n      b = ranges[i];\n      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n      } else {\n        merged.push(a = b);\n      }\n    }\n\n    // Finally, find the largest gap between the merged ranges.\n    // The final bounding box will be the inverse of this gap.\n    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n      b = merged[i];\n      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n    }\n  }\n\n  ranges = range = null;\n\n  return lambda0 === Infinity || phi0 === Infinity\n      ? [[NaN, NaN], [NaN, NaN]]\n      : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import compose from \"./compose\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n  return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n  return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n    : rotationLambda(deltaLambda))\n    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n    : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n  return function(lambda, phi) {\n    return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n  };\n}\n\nfunction rotationLambda(deltaLambda) {\n  var rotation = forwardRotationLambda(deltaLambda);\n  rotation.invert = forwardRotationLambda(-deltaLambda);\n  return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n  var cosDeltaPhi = cos(deltaPhi),\n      sinDeltaPhi = sin(deltaPhi),\n      cosDeltaGamma = cos(deltaGamma),\n      sinDeltaGamma = sin(deltaGamma);\n\n  function rotation(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaPhi + x * sinDeltaPhi;\n    return [\n      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n      asin(k * cosDeltaGamma + y * sinDeltaGamma)\n    ];\n  }\n\n  rotation.invert = function(lambda, phi) {\n    var cosPhi = cos(phi),\n        x = cos(lambda) * cosPhi,\n        y = sin(lambda) * cosPhi,\n        z = sin(phi),\n        k = z * cosDeltaGamma - y * sinDeltaGamma;\n    return [\n      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n      asin(k * cosDeltaPhi - x * sinDeltaPhi)\n    ];\n  };\n\n  return rotation;\n}\n\nexport default function(rotate) {\n  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n  function forward(coordinates) {\n    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  }\n\n  forward.invert = function(coordinates) {\n    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n    return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n  };\n\n  return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport constant from \"./constant\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math\";\nimport {rotateRadians} from \"./rotation\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n  if (!delta) return;\n  var cosRadius = cos(radius),\n      sinRadius = sin(radius),\n      step = direction * delta;\n  if (t0 == null) {\n    t0 = radius + direction * tau;\n    t1 = radius - step / 2;\n  } else {\n    t0 = circleRadius(cosRadius, t0);\n    t1 = circleRadius(cosRadius, t1);\n    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n  }\n  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n    point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n    stream.point(point[0], point[1]);\n  }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n  point = cartesian(point), point[0] -= cosRadius;\n  cartesianNormalizeInPlace(point);\n  var radius = acos(-point[1]);\n  return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n  var center = constant([0, 0]),\n      radius = constant(90),\n      precision = constant(6),\n      ring,\n      rotate,\n      stream = {point: point};\n\n  function point(x, y) {\n    ring.push(x = rotate(x, y));\n    x[0] *= degrees, x[1] *= degrees;\n  }\n\n  function circle() {\n    var c = center.apply(this, arguments),\n        r = radius.apply(this, arguments) * radians,\n        p = precision.apply(this, arguments) * radians;\n    ring = [];\n    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n    circleStream(stream, r, p, 1);\n    c = {type: \"Polygon\", coordinates: [ring]};\n    ring = rotate = null;\n    return c;\n  }\n\n  circle.center = function(_) {\n    return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n  };\n\n  circle.radius = function(_) {\n    return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n  };\n\n  circle.precision = function(_) {\n    return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n  };\n\n  return circle;\n}\n","import noop from \"../noop\";\n\nexport default function() {\n  var lines = [],\n      line;\n  return {\n    point: function(x, y) {\n      line.push([x, y]);\n    },\n    lineStart: function() {\n      lines.push(line = []);\n    },\n    lineEnd: noop,\n    rejoin: function() {\n      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n    },\n    result: function() {\n      var result = lines;\n      lines = [];\n      line = null;\n      return result;\n    }\n  };\n}\n","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n  return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction Intersection(point, points, other, entry) {\n  this.x = point;\n  this.z = points;\n  this.o = other; // another intersection\n  this.e = entry; // is an entry?\n  this.v = false; // visited\n  this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n  var subject = [],\n      clip = [],\n      i,\n      n;\n\n  segments.forEach(function(segment) {\n    if ((n = segment.length - 1) <= 0) return;\n    var n, p0 = segment[0], p1 = segment[n], x;\n\n    // If the first and last points of a segment are coincident, then treat as a\n    // closed ring. TODO if all rings are closed, then the winding order of the\n    // exterior ring should be checked.\n    if (pointEqual(p0, p1)) {\n      stream.lineStart();\n      for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n      stream.lineEnd();\n      return;\n    }\n\n    subject.push(x = new Intersection(p0, segment, null, true));\n    clip.push(x.o = new Intersection(p0, null, x, false));\n    subject.push(x = new Intersection(p1, segment, null, false));\n    clip.push(x.o = new Intersection(p1, null, x, true));\n  });\n\n  if (!subject.length) return;\n\n  clip.sort(compareIntersection);\n  link(subject);\n  link(clip);\n\n  for (i = 0, n = clip.length; i < n; ++i) {\n    clip[i].e = startInside = !startInside;\n  }\n\n  var start = subject[0],\n      points,\n      point;\n\n  while (1) {\n    // Find first unvisited intersection.\n    var current = start,\n        isSubject = true;\n    while (current.v) if ((current = current.n) === start) return;\n    points = current.z;\n    stream.lineStart();\n    do {\n      current.v = current.o.v = true;\n      if (current.e) {\n        if (isSubject) {\n          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.n.x, 1, stream);\n        }\n        current = current.n;\n      } else {\n        if (isSubject) {\n          points = current.p.z;\n          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n        } else {\n          interpolate(current.x, current.p.x, -1, stream);\n        }\n        current = current.p;\n      }\n      current = current.o;\n      points = current.z;\n      isSubject = !isSubject;\n    } while (!current.v);\n    stream.lineEnd();\n  }\n}\n\nfunction link(array) {\n  if (!(n = array.length)) return;\n  var n,\n      i = 0,\n      a = array[0],\n      b;\n  while (++i < n) {\n    a.n = b = array[i];\n    b.p = a;\n    a = b;\n  }\n  a.n = b = array[0];\n  b.p = a;\n}\n","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {abs, asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sign, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nfunction longitude(point) {\n  if (abs(point[0]) <= pi)\n    return point[0];\n  else\n    return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n  var lambda = longitude(point),\n      phi = point[1],\n      sinPhi = sin(phi),\n      normal = [sin(lambda), -cos(lambda), 0],\n      angle = 0,\n      winding = 0;\n\n  sum.reset();\n\n  if (sinPhi === 1) phi = halfPi + epsilon;\n  else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n  for (var i = 0, n = polygon.length; i < n; ++i) {\n    if (!(m = (ring = polygon[i]).length)) continue;\n    var ring,\n        m,\n        point0 = ring[m - 1],\n        lambda0 = longitude(point0),\n        phi0 = point0[1] / 2 + quarterPi,\n        sinPhi0 = sin(phi0),\n        cosPhi0 = cos(phi0);\n\n    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n      var point1 = ring[j],\n          lambda1 = longitude(point1),\n          phi1 = point1[1] / 2 + quarterPi,\n          sinPhi1 = sin(phi1),\n          cosPhi1 = cos(phi1),\n          delta = lambda1 - lambda0,\n          sign = delta >= 0 ? 1 : -1,\n          absDelta = sign * delta,\n          antimeridian = absDelta > pi,\n          k = sinPhi0 * sinPhi1;\n\n      sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n      angle += antimeridian ? delta + sign * tau : delta;\n\n      // Are the longitudes either side of the point’s meridian (lambda),\n      // and are the latitudes smaller than the parallel (phi)?\n      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n        var arc = cartesianCross(cartesian(point0), cartesian(point1));\n        cartesianNormalizeInPlace(arc);\n        var intersection = cartesianCross(normal, arc);\n        cartesianNormalizeInPlace(intersection);\n        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n          winding += antimeridian ^ delta >= 0 ? 1 : -1;\n        }\n      }\n    }\n  }\n\n  // First, determine whether the South pole is inside or outside:\n  //\n  // It is inside if:\n  // * the polygon winds around it in a clockwise direction.\n  // * the polygon does not (cumulatively) wind around it, but has a negative\n  //   (counter-clockwise) area.\n  //\n  // Second, count the (signed) number of times a segment crosses a lambda\n  // from the point to the South pole.  If it is zero, then the point is the\n  // same side as the South pole.\n\n  return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer\";\nimport clipRejoin from \"./rejoin\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n  return function(sink) {\n    var line = clipLine(sink),\n        ringBuffer = clipBuffer(),\n        ringSink = clipLine(ringBuffer),\n        polygonStarted = false,\n        polygon,\n        segments,\n        ring;\n\n    var clip = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() {\n        clip.point = pointRing;\n        clip.lineStart = ringStart;\n        clip.lineEnd = ringEnd;\n        segments = [];\n        polygon = [];\n      },\n      polygonEnd: function() {\n        clip.point = point;\n        clip.lineStart = lineStart;\n        clip.lineEnd = lineEnd;\n        segments = merge(segments);\n        var startInside = polygonContains(polygon, start);\n        if (segments.length) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n        } else if (startInside) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          interpolate(null, null, 1, sink);\n          sink.lineEnd();\n        }\n        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n        segments = polygon = null;\n      },\n      sphere: function() {\n        sink.polygonStart();\n        sink.lineStart();\n        interpolate(null, null, 1, sink);\n        sink.lineEnd();\n        sink.polygonEnd();\n      }\n    };\n\n    function point(lambda, phi) {\n      if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n    }\n\n    function pointLine(lambda, phi) {\n      line.point(lambda, phi);\n    }\n\n    function lineStart() {\n      clip.point = pointLine;\n      line.lineStart();\n    }\n\n    function lineEnd() {\n      clip.point = point;\n      line.lineEnd();\n    }\n\n    function pointRing(lambda, phi) {\n      ring.push([lambda, phi]);\n      ringSink.point(lambda, phi);\n    }\n\n    function ringStart() {\n      ringSink.lineStart();\n      ring = [];\n    }\n\n    function ringEnd() {\n      pointRing(ring[0][0], ring[0][1]);\n      ringSink.lineEnd();\n\n      var clean = ringSink.clean(),\n          ringSegments = ringBuffer.result(),\n          i, n = ringSegments.length, m,\n          segment,\n          point;\n\n      ring.pop();\n      polygon.push(ring);\n      ring = null;\n\n      if (!n) return;\n\n      // No intersections.\n      if (clean & 1) {\n        segment = ringSegments[0];\n        if ((m = segment.length - 1) > 0) {\n          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n          sink.lineStart();\n          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n          sink.lineEnd();\n        }\n        return;\n      }\n\n      // Rejoin connected segments.\n      // TODO reuse ringBuffer.rejoin()?\n      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n      segments.push(ringSegments.filter(validSegment));\n    }\n\n    return clip;\n  };\n}\n\nfunction validSegment(segment) {\n  return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n  return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n       - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math\";\n\nexport default clip(\n  function() { return true; },\n  clipAntimeridianLine,\n  clipAntimeridianInterpolate,\n  [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n  var lambda0 = NaN,\n      phi0 = NaN,\n      sign0 = NaN,\n      clean; // no intersections\n\n  return {\n    lineStart: function() {\n      stream.lineStart();\n      clean = 1;\n    },\n    point: function(lambda1, phi1) {\n      var sign1 = lambda1 > 0 ? pi : -pi,\n          delta = abs(lambda1 - lambda0);\n      if (abs(delta - pi) < epsilon) { // line crosses a pole\n        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        stream.point(lambda1, phi0);\n        clean = 0;\n      } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n        if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n        if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n        stream.point(sign0, phi0);\n        stream.lineEnd();\n        stream.lineStart();\n        stream.point(sign1, phi0);\n        clean = 0;\n      }\n      stream.point(lambda0 = lambda1, phi0 = phi1);\n      sign0 = sign1;\n    },\n    lineEnd: function() {\n      stream.lineEnd();\n      lambda0 = phi0 = NaN;\n    },\n    clean: function() {\n      return 2 - clean; // if intersections, rejoin first and last segments\n    }\n  };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n  var cosPhi0,\n      cosPhi1,\n      sinLambda0Lambda1 = sin(lambda0 - lambda1);\n  return abs(sinLambda0Lambda1) > epsilon\n      ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n          - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n      : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n  var phi;\n  if (from == null) {\n    phi = direction * halfPi;\n    stream.point(-pi, phi);\n    stream.point(0, phi);\n    stream.point(pi, phi);\n    stream.point(pi, 0);\n    stream.point(pi, -phi);\n    stream.point(0, -phi);\n    stream.point(-pi, -phi);\n    stream.point(-pi, 0);\n    stream.point(-pi, phi);\n  } else if (abs(from[0] - to[0]) > epsilon) {\n    var lambda = from[0] < to[0] ? pi : -pi;\n    phi = direction * lambda / 2;\n    stream.point(-lambda, phi);\n    stream.point(0, phi);\n    stream.point(lambda, phi);\n  } else {\n    stream.point(to[0], to[1]);\n  }\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n    lambda0,\n    sinPhi0,\n    cosPhi0;\n\nvar lengthStream = {\n  sphere: noop,\n  point: noop,\n  lineStart: lengthLineStart,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n  lengthStream.point = lengthPointFirst;\n  lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n  lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n  lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n  lambda *= radians, phi *= radians;\n  var sinPhi = sin(phi),\n      cosPhi = cos(phi),\n      delta = abs(lambda - lambda0),\n      cosDelta = cos(delta),\n      sinDelta = sin(delta),\n      x = cosPhi * sinDelta,\n      y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n      z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n  lengthSum.add(atan2(sqrt(x * x + y * y), z));\n  lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n  lengthSum.reset();\n  stream(object, lengthStream);\n  return +lengthSum;\n}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n    areaRingSum = adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum.reset();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum.reset();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import {tau} from \"../math\";\nimport noop from \"../noop\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum.reset();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n  this._string = [];\n}\n\nPathString.prototype = {\n  _radius: 4.5,\n  _circle: circle(4.5),\n  pointRadius: function(_) {\n    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n    return this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._string.push(\"Z\");\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._string.push(\"M\", x, \",\", y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._string.push(\"L\", x, \",\", y);\n        break;\n      }\n      default: {\n        if (this._circle == null) this._circle = circle(this._radius);\n        this._string.push(\"M\", x, \",\", y, this._circle);\n        break;\n      }\n    }\n  },\n  result: function() {\n    if (this._string.length) {\n      var result = this._string.join(\"\");\n      this._string = [];\n      return result;\n    } else {\n      return null;\n    }\n  }\n};\n\nfunction circle(radius) {\n  return \"m0,\" + radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n      + \"z\";\n}\n","export default function(methods) {\n  return {\n    stream: transformer(methods)\n  };\n}\n\nexport function transformer(methods) {\n  return function(stream) {\n    var s = new TransformStream;\n    for (var key in methods) s[key] = methods[key];\n    s.stream = stream;\n    return s;\n  };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n  constructor: TransformStream,\n  point: function(x, y) { this.stream.point(x, y); },\n  sphere: function() { this.stream.sphere(); },\n  lineStart: function() { this.stream.lineStart(); },\n  lineEnd: function() { this.stream.lineEnd(); },\n  polygonStart: function() { this.stream.polygonStart(); },\n  polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n    cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n  return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n  return transformer({\n    point: function(x, y) {\n      x = project(x, y);\n      this.stream.point(x[0], x[1]);\n    }\n  });\n}\n\nfunction resample(project, delta2) {\n\n  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n    var dx = x1 - x0,\n        dy = y1 - y0,\n        d2 = dx * dx + dy * dy;\n    if (d2 > 4 * delta2 && depth--) {\n      var a = a0 + a1,\n          b = b0 + b1,\n          c = c0 + c1,\n          m = sqrt(a * a + b * b + c * c),\n          phi2 = asin(c /= m),\n          lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n          p = project(lambda2, phi2),\n          x2 = p[0],\n          y2 = p[1],\n          dx2 = x2 - x0,\n          dy2 = y2 - y0,\n          dz = dy * dx2 - dx * dy2;\n      if (dz * dz / d2 > delta2 // perpendicular projected distance\n          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n        stream.point(x2, y2);\n        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n      }\n    }\n  }\n  return function(stream) {\n    var lambda00, x00, y00, a00, b00, c00, // first point\n        lambda0, x0, y0, a0, b0, c0; // previous point\n\n    var resampleStream = {\n      point: point,\n      lineStart: lineStart,\n      lineEnd: lineEnd,\n      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n    };\n\n    function point(x, y) {\n      x = project(x, y);\n      stream.point(x[0], x[1]);\n    }\n\n    function lineStart() {\n      x0 = NaN;\n      resampleStream.point = linePoint;\n      stream.lineStart();\n    }\n\n    function linePoint(lambda, phi) {\n      var c = cartesian([lambda, phi]), p = project(lambda, phi);\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n      stream.point(x0, y0);\n    }\n\n    function lineEnd() {\n      resampleStream.point = point;\n      stream.lineEnd();\n    }\n\n    function ringStart() {\n      lineStart();\n      resampleStream.point = ringPoint;\n      resampleStream.lineEnd = ringEnd;\n    }\n\n    function ringPoint(lambda, phi) {\n      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n      resampleStream.point = linePoint;\n    }\n\n    function ringEnd() {\n      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n      resampleStream.lineEnd = lineEnd;\n      lineEnd();\n    }\n\n    return resampleStream;\n  };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport clipRectangle from \"../clip/rectangle\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n  point: function(x, y) {\n    this.stream.point(x * radians, y * radians);\n  }\n});\n\nfunction transformRotate(rotate) {\n  return transformer({\n    point: function(x, y) {\n      var r = rotate(x, y);\n      return this.stream.point(r[0], r[1]);\n    }\n  });\n}\n\nfunction scaleTranslate(k, dx, dy) {\n  function transform(x, y) {\n    return [dx + k * x, dy - k * y];\n  }\n  transform.invert = function(x, y) {\n    return [(x - dx) / k, (dy - y) / k];\n  };\n  return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, alpha) {\n  var cosAlpha = cos(alpha),\n      sinAlpha = sin(alpha),\n      a = cosAlpha * k,\n      b = sinAlpha * k,\n      ai = cosAlpha / k,\n      bi = sinAlpha / k,\n      ci = (sinAlpha * dy - cosAlpha * dx) / k,\n      fi = (sinAlpha * dx + cosAlpha * dy) / k;\n  function transform(x, y) {\n    return [a * x - b * y + dx, dy - b * x - a * y];\n  }\n  transform.invert = function(x, y) {\n    return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n  };\n  return transform;\n}\n\nexport default function projection(project) {\n  return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n  var project,\n      k = 150, // scale\n      x = 480, y = 250, // translate\n      lambda = 0, phi = 0, // center\n      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n      alpha = 0, // post-rotate\n      theta = null, preclip = clipAntimeridian, // pre-clip angle\n      x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n      delta2 = 0.5, // precision\n      projectResample,\n      projectTransform,\n      projectRotateTransform,\n      cache,\n      cacheStream;\n\n  function projection(point) {\n    return projectRotateTransform(point[0] * radians, point[1] * radians);\n  }\n\n  function invert(point) {\n    point = projectRotateTransform.invert(point[0], point[1]);\n    return point && [point[0] * degrees, point[1] * degrees];\n  }\n\n  projection.stream = function(stream) {\n    return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n  };\n\n  projection.preclip = function(_) {\n    return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n  };\n\n  projection.postclip = function(_) {\n    return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n  };\n\n  projection.clipAngle = function(_) {\n    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n  };\n\n  projection.clipExtent = function(_) {\n    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  projection.scale = function(_) {\n    return arguments.length ? (k = +_, recenter()) : k;\n  };\n\n  projection.translate = function(_) {\n    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n  };\n\n  projection.center = function(_) {\n    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n  };\n\n  projection.rotate = function(_) {\n    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n  };\n\n  projection.angle = function(_) {\n    return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n  };\n\n  projection.precision = function(_) {\n    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n  };\n\n  projection.fitExtent = function(extent, object) {\n    return fitExtent(projection, extent, object);\n  };\n\n  projection.fitSize = function(size, object) {\n    return fitSize(projection, size, object);\n  };\n\n  projection.fitWidth = function(width, object) {\n    return fitWidth(projection, width, object);\n  };\n\n  projection.fitHeight = function(height, object) {\n    return fitHeight(projection, height, object);\n  };\n\n  function recenter() {\n    var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),\n        transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n    rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n    projectTransform = compose(project, transform);\n    projectRotateTransform = compose(rotate, projectTransform);\n    projectResample = resample(projectTransform, delta2);\n    return reset();\n  }\n\n  function reset() {\n    cache = cacheStream = null;\n    return projection;\n  }\n\n  return function() {\n    project = projectAt.apply(this, arguments);\n    projection.invert = project.invert && invert;\n    return recenter();\n  };\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n  return function(x, y) {\n    var cx = cos(x),\n        cy = cos(y),\n        k = scale(cx * cy);\n    return [\n      k * cy * sin(x),\n      k * sin(y)\n    ];\n  }\n}\n\nexport function azimuthalInvert(angle) {\n  return function(x, y) {\n    var z = sqrt(x * x + y * y),\n        c = angle(z),\n        sc = sin(c),\n        cc = cos(c);\n    return [\n      atan2(x * sc, z * cc),\n      asin(z && y * sc / z)\n    ];\n  }\n}\n","import {asin, sqrt} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n  return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n  return 2 * asin(z / 2);\n});\n\nexport default function() {\n  return projection(azimuthalEqualAreaRaw)\n      .scale(124.75)\n      .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n  return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n  return z;\n});\n\nexport default function() {\n  return projection(azimuthalEquidistantRaw)\n      .scale(79.4188)\n      .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math\";\nimport rotation from \"../rotation\";\nimport projection from \"./index\";\n\nexport function mercatorRaw(lambda, phi) {\n  return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n  return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n  return mercatorProjection(mercatorRaw)\n      .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n  var m = projection(project),\n      center = m.center,\n      scale = m.scale,\n      translate = m.translate,\n      clipExtent = m.clipExtent,\n      x0 = null, y0, x1, y1; // clip extent\n\n  m.scale = function(_) {\n    return arguments.length ? (scale(_), reclip()) : scale();\n  };\n\n  m.translate = function(_) {\n    return arguments.length ? (translate(_), reclip()) : translate();\n  };\n\n  m.center = function(_) {\n    return arguments.length ? (center(_), reclip()) : center();\n  };\n\n  m.clipExtent = function(_) {\n    return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n  };\n\n  function reclip() {\n    var k = pi * scale(),\n        t = m(rotation(m.rotate()).invert([0, 0]));\n    return clipExtent(x0 == null\n        ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n        ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n        : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n  }\n\n  return reclip();\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n  return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n  return projection(equirectangularRaw)\n      .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {equirectangularRaw} from \"./equirectangular\";\n\nexport function conicEquidistantRaw(y0, y1) {\n  var cy0 = cos(y0),\n      n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n      g = cy0 / n + y0;\n\n  if (abs(n) < epsilon) return equirectangularRaw;\n\n  function project(x, y) {\n    var gy = g - y, nx = n * x;\n    return [gy * sin(nx), g - gy * cos(nx)];\n  }\n\n  project.invert = function(x, y) {\n    var gy = g - y;\n    return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n  };\n\n  return project;\n}\n\nexport default function() {\n  return conicProjection(conicEquidistantRaw)\n      .scale(131.154)\n      .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n    A2 = -0.081106,\n    A3 = 0.000893,\n    A4 = 0.003796,\n    M = sqrt(3) / 2,\n    iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n  var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n  return [\n    lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n    l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n  ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n  var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n  for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n    fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n    fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n    l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n    if (abs(delta) < epsilon2) break;\n  }\n  return [\n    M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n    asin(sin(l) / M)\n  ];\n};\n\nexport default function() {\n  return projection(equalEarthRaw)\n      .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function gnomonicRaw(x, y) {\n  var cy = cos(y), k = cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n  return projection(gnomonicRaw)\n      .scale(144.049)\n      .clipAngle(60);\n}\n","import projection from \"./index\";\nimport {abs, epsilon} from \"../math\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n  var phi2 = phi * phi, phi4 = phi2 * phi2;\n  return [\n    lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n    phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n  ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n  var phi = y, i = 25, delta;\n  do {\n    var phi2 = phi * phi, phi4 = phi2 * phi2;\n    phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n        (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n  } while (abs(delta) > epsilon && --i > 0);\n  return [\n    x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n    phi\n  ];\n};\n\nexport default function() {\n  return projection(naturalEarth1Raw)\n      .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function orthographicRaw(x, y) {\n  return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n  return projection(orthographicRaw)\n      .scale(249.5)\n      .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function stereographicRaw(x, y) {\n  var cy = cos(y), k = 1 + cos(x) * cy;\n  return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n  return 2 * atan(z);\n});\n\nexport default function() {\n  return projection(stereographicRaw)\n      .scale(250)\n      .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math\";\nimport {mercatorProjection} from \"./mercator\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n  return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n  return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n  var m = mercatorProjection(transverseMercatorRaw),\n      center = m.center,\n      rotate = m.rotate;\n\n  m.center = function(_) {\n    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n  };\n\n  m.rotate = function(_) {\n    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n  };\n\n  return rotate([0, 0, 90])\n      .scale(159.155);\n}\n","function count(node) {\n  var sum = 0,\n      children = node.children,\n      i = children && children.length;\n  if (!i) sum = 1;\n  else while (--i >= 0) sum += children[i].value;\n  node.value = sum;\n}\n\nexport default function() {\n  return this.eachAfter(count);\n}\n","import node_count from \"./count\";\nimport node_each from \"./each\";\nimport node_eachBefore from \"./eachBefore\";\nimport node_eachAfter from \"./eachAfter\";\nimport node_sum from \"./sum\";\nimport node_sort from \"./sort\";\nimport node_path from \"./path\";\nimport node_ancestors from \"./ancestors\";\nimport node_descendants from \"./descendants\";\nimport node_leaves from \"./leaves\";\nimport node_links from \"./links\";\n\nexport default function hierarchy(data, children) {\n  var root = new Node(data),\n      valued = +data.value && (root.value = data.value),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  if (children == null) children = defaultChildren;\n\n  while (node = nodes.pop()) {\n    if (valued) node.value = +node.data.value;\n    if ((childs = children(node.data)) && (n = childs.length)) {\n      node.children = new Array(n);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new Node(childs[i]));\n        child.parent = node;\n        child.depth = node.depth + 1;\n      }\n    }\n  }\n\n  return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n  return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n  return d.children;\n}\n\nfunction copyData(node) {\n  node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n  var height = 0;\n  do node.height = height;\n  while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n  this.data = data;\n  this.depth =\n  this.height = 0;\n  this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n  constructor: Node,\n  count: node_count,\n  each: node_each,\n  eachAfter: node_eachAfter,\n  eachBefore: node_eachBefore,\n  sum: node_sum,\n  sort: node_sort,\n  path: node_path,\n  ancestors: node_ancestors,\n  descendants: node_descendants,\n  leaves: node_leaves,\n  links: node_links,\n  copy: node_copy\n};\n","export default function(callback) {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      callback(node), children = node.children;\n      if (children) for (i = 0, n = children.length; i < n; ++i) {\n        next.push(children[i]);\n      }\n    }\n  } while (next.length);\n  return this;\n}\n","export default function(callback) {\n  var node = this, nodes = [node], next = [], children, i, n;\n  while (node = nodes.pop()) {\n    next.push(node), children = node.children;\n    if (children) for (i = 0, n = children.length; i < n; ++i) {\n      nodes.push(children[i]);\n    }\n  }\n  while (node = next.pop()) {\n    callback(node);\n  }\n  return this;\n}\n","export default function(callback) {\n  var node = this, nodes = [node], children, i;\n  while (node = nodes.pop()) {\n    callback(node), children = node.children;\n    if (children) for (i = children.length - 1; i >= 0; --i) {\n      nodes.push(children[i]);\n    }\n  }\n  return this;\n}\n","export default function(value) {\n  return this.eachAfter(function(node) {\n    var sum = +value(node.data) || 0,\n        children = node.children,\n        i = children && children.length;\n    while (--i >= 0) sum += children[i].value;\n    node.value = sum;\n  });\n}\n","export default function(compare) {\n  return this.eachBefore(function(node) {\n    if (node.children) {\n      node.children.sort(compare);\n    }\n  });\n}\n","export default function(end) {\n  var start = this,\n      ancestor = leastCommonAncestor(start, end),\n      nodes = [start];\n  while (start !== ancestor) {\n    start = start.parent;\n    nodes.push(start);\n  }\n  var k = nodes.length;\n  while (end !== ancestor) {\n    nodes.splice(k, 0, end);\n    end = end.parent;\n  }\n  return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n  if (a === b) return a;\n  var aNodes = a.ancestors(),\n      bNodes = b.ancestors(),\n      c = null;\n  a = aNodes.pop();\n  b = bNodes.pop();\n  while (a === b) {\n    c = a;\n    a = aNodes.pop();\n    b = bNodes.pop();\n  }\n  return c;\n}\n","export default function() {\n  var node = this, nodes = [node];\n  while (node = node.parent) {\n    nodes.push(node);\n  }\n  return nodes;\n}\n","export default function() {\n  var nodes = [];\n  this.each(function(node) {\n    nodes.push(node);\n  });\n  return nodes;\n}\n","export default function() {\n  var leaves = [];\n  this.eachBefore(function(node) {\n    if (!node.children) {\n      leaves.push(node);\n    }\n  });\n  return leaves;\n}\n","export default function() {\n  var root = this, links = [];\n  root.each(function(node) {\n    if (node !== root) { // Don’t include the root’s parent, if any.\n      links.push({source: node.parent, target: node});\n    }\n  });\n  return links;\n}\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n  var m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m];\n    array[m] = array[i];\n    array[i] = t;\n  }\n\n  return array;\n}\n","export default function(node) {\n  node.x0 = Math.round(node.x0);\n  node.y0 = Math.round(node.y0);\n  node.x1 = Math.round(node.x1);\n  node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (x1 - x0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.y0 = y0, node.y1 = y1;\n    node.x0 = x0, node.x1 = x0 += node.value * k;\n  }\n}\n","import {Node} from \"./hierarchy/index\";\n\nfunction defaultSeparation(a, b) {\n  return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n//   return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n  var children = v.children;\n  return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n  var children = v.children;\n  return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n  var change = shift / (wp.i - wm.i);\n  wp.c -= change;\n  wp.s += shift;\n  wm.c += change;\n  wp.z += shift;\n  wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n  var shift = 0,\n      change = 0,\n      children = v.children,\n      i = children.length,\n      w;\n  while (--i >= 0) {\n    w = children[i];\n    w.z += shift;\n    w.m += shift;\n    shift += w.s + (change += w.c);\n  }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n  return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n  this._ = node;\n  this.parent = null;\n  this.children = null;\n  this.A = null; // default ancestor\n  this.a = this; // ancestor\n  this.z = 0; // prelim\n  this.m = 0; // mod\n  this.c = 0; // change\n  this.s = 0; // shift\n  this.t = null; // thread\n  this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n  var tree = new TreeNode(root, 0),\n      node,\n      nodes = [tree],\n      child,\n      children,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if (children = node._.children) {\n      node.children = new Array(n = children.length);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n        child.parent = node;\n      }\n    }\n  }\n\n  (tree.parent = new TreeNode(null, 0)).children = [tree];\n  return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n  var separation = defaultSeparation,\n      dx = 1,\n      dy = 1,\n      nodeSize = null;\n\n  function tree(root) {\n    var t = treeRoot(root);\n\n    // Compute the layout using Buchheim et al.’s algorithm.\n    t.eachAfter(firstWalk), t.parent.m = -t.z;\n    t.eachBefore(secondWalk);\n\n    // If a fixed node size is specified, scale x and y.\n    if (nodeSize) root.eachBefore(sizeNode);\n\n    // If a fixed tree size is specified, scale x and y based on the extent.\n    // Compute the left-most, right-most, and depth-most nodes for extents.\n    else {\n      var left = root,\n          right = root,\n          bottom = root;\n      root.eachBefore(function(node) {\n        if (node.x < left.x) left = node;\n        if (node.x > right.x) right = node;\n        if (node.depth > bottom.depth) bottom = node;\n      });\n      var s = left === right ? 1 : separation(left, right) / 2,\n          tx = s - left.x,\n          kx = dx / (right.x + s + tx),\n          ky = dy / (bottom.depth || 1);\n      root.eachBefore(function(node) {\n        node.x = (node.x + tx) * kx;\n        node.y = node.depth * ky;\n      });\n    }\n\n    return root;\n  }\n\n  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n  // applied recursively to the children of v, as well as the function\n  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n  // node v is placed to the midpoint of its outermost children.\n  function firstWalk(v) {\n    var children = v.children,\n        siblings = v.parent.children,\n        w = v.i ? siblings[v.i - 1] : null;\n    if (children) {\n      executeShifts(v);\n      var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n      if (w) {\n        v.z = w.z + separation(v._, w._);\n        v.m = v.z - midpoint;\n      } else {\n        v.z = midpoint;\n      }\n    } else if (w) {\n      v.z = w.z + separation(v._, w._);\n    }\n    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n  }\n\n  // Computes all real x-coordinates by summing up the modifiers recursively.\n  function secondWalk(v) {\n    v._.x = v.z + v.parent.m;\n    v.m += v.parent.m;\n  }\n\n  // The core of the algorithm. Here, a new subtree is combined with the\n  // previous subtrees. Threads are used to traverse the inside and outside\n  // contours of the left and right subtree up to the highest common level. The\n  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n  // superscript o means outside and i means inside, the subscript - means left\n  // subtree and + means right subtree. For summing up the modifiers along the\n  // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n  // nodes of the inside contours conflict, we compute the left one of the\n  // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n  // Finally, we add a new thread (if necessary).\n  function apportion(v, w, ancestor) {\n    if (w) {\n      var vip = v,\n          vop = v,\n          vim = w,\n          vom = vip.parent.children[0],\n          sip = vip.m,\n          sop = vop.m,\n          sim = vim.m,\n          som = vom.m,\n          shift;\n      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n        vom = nextLeft(vom);\n        vop = nextRight(vop);\n        vop.a = v;\n        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n        if (shift > 0) {\n          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n          sip += shift;\n          sop += shift;\n        }\n        sim += vim.m;\n        sip += vip.m;\n        som += vom.m;\n        sop += vop.m;\n      }\n      if (vim && !nextRight(vop)) {\n        vop.t = vim;\n        vop.m += sim - sop;\n      }\n      if (vip && !nextLeft(vom)) {\n        vom.t = vip;\n        vom.m += sip - som;\n        ancestor = v;\n      }\n    }\n    return ancestor;\n  }\n\n  function sizeNode(node) {\n    node.x *= dx;\n    node.y = node.depth * dy;\n  }\n\n  tree.separation = function(x) {\n    return arguments.length ? (separation = x, tree) : separation;\n  };\n\n  tree.size = function(x) {\n    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n  };\n\n  tree.nodeSize = function(x) {\n    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n  };\n\n  return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n  var nodes = parent.children,\n      node,\n      i = -1,\n      n = nodes.length,\n      k = parent.value && (y1 - y0) / parent.value;\n\n  while (++i < n) {\n    node = nodes[i], node.x0 = x0, node.x1 = x1;\n    node.y0 = y0, node.y1 = y0 += node.value * k;\n  }\n}\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n  var rows = [],\n      nodes = parent.children,\n      row,\n      nodeValue,\n      i0 = 0,\n      i1 = 0,\n      n = nodes.length,\n      dx, dy,\n      value = parent.value,\n      sumValue,\n      minValue,\n      maxValue,\n      newRatio,\n      minRatio,\n      alpha,\n      beta;\n\n  while (i0 < n) {\n    dx = x1 - x0, dy = y1 - y0;\n\n    // Find the next non-empty node.\n    do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n    minValue = maxValue = sumValue;\n    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n    beta = sumValue * sumValue * alpha;\n    minRatio = Math.max(maxValue / beta, beta / minValue);\n\n    // Keep adding nodes while the aspect ratio maintains or improves.\n    for (; i1 < n; ++i1) {\n      sumValue += nodeValue = nodes[i1].value;\n      if (nodeValue < minValue) minValue = nodeValue;\n      if (nodeValue > maxValue) maxValue = nodeValue;\n      beta = sumValue * sumValue * alpha;\n      newRatio = Math.max(maxValue / beta, beta / minValue);\n      if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n      minRatio = newRatio;\n    }\n\n    // Position and record the row orientation.\n    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n    value -= sumValue, i0 = i1;\n  }\n\n  return rows;\n}\n\nexport default (function custom(ratio) {\n\n  function squarify(parent, x0, y0, x1, y1) {\n    squarifyRatio(ratio, parent, x0, y0, x1, y1);\n  }\n\n  squarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return squarify;\n})(phi);\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\nimport {phi, squarifyRatio} from \"./squarify\";\n\nexport default (function custom(ratio) {\n\n  function resquarify(parent, x0, y0, x1, y1) {\n    if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n      var rows,\n          row,\n          nodes,\n          i,\n          j = -1,\n          n,\n          m = rows.length,\n          value = parent.value;\n\n      while (++j < m) {\n        row = rows[j], nodes = row.children;\n        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n        if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n        else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n        value -= row.value;\n      }\n    } else {\n      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n      rows.ratio = ratio;\n    }\n  }\n\n  resquarify.ratio = function(x) {\n    return custom((x = +x) > 1 ? x : 1);\n  };\n\n  return resquarify;\n})(phi);\n","import cross from \"./cross\";\n\nfunction lexicographicOrder(a, b) {\n  return a[0] - b[0] || a[1] - b[1];\n}\n\n// Computes the upper convex hull per the monotone chain algorithm.\n// Assumes points.length >= 3, is sorted by x, unique in y.\n// Returns an array of indices into points in left-to-right order.\nfunction computeUpperHullIndexes(points) {\n  var n = points.length,\n      indexes = [0, 1],\n      size = 2;\n\n  for (var i = 2; i < n; ++i) {\n    while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;\n    indexes[size++] = i;\n  }\n\n  return indexes.slice(0, size); // remove popped points\n}\n\nexport default function(points) {\n  if ((n = points.length) < 3) return null;\n\n  var i,\n      n,\n      sortedPoints = new Array(n),\n      flippedPoints = new Array(n);\n\n  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];\n  sortedPoints.sort(lexicographicOrder);\n  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];\n\n  var upperIndexes = computeUpperHullIndexes(sortedPoints),\n      lowerIndexes = computeUpperHullIndexes(flippedPoints);\n\n  // Construct the hull polygon, removing possible duplicate endpoints.\n  var skipLeft = lowerIndexes[0] === upperIndexes[0],\n      skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],\n      hull = [];\n\n  // Add upper hull in right-to-l order.\n  // Then add lower hull in left-to-right order.\n  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);\n  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);\n\n  return hull;\n}\n","export default function() {\n  return Math.random();\n}\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomNormal(source) {\n  function randomNormal(mu, sigma) {\n    var x, r;\n    mu = mu == null ? 0 : +mu;\n    sigma = sigma == null ? 1 : +sigma;\n    return function() {\n      var y;\n\n      // If available, use the second previously-generated uniform random.\n      if (x != null) y = x, x = null;\n\n      // Otherwise, generate a new x and y.\n      else do {\n        x = source() * 2 - 1;\n        y = source() * 2 - 1;\n        r = x * x + y * y;\n      } while (!r || r > 1);\n\n      return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n    };\n  }\n\n  randomNormal.source = sourceRandomNormal;\n\n  return randomNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomUniform(source) {\n  function randomUniform(min, max) {\n    min = min == null ? 0 : +min;\n    max = max == null ? 1 : +max;\n    if (arguments.length === 1) max = min, min = 0;\n    else max -= min;\n    return function() {\n      return source() * max + min;\n    };\n  }\n\n  randomUniform.source = sourceRandomUniform;\n\n  return randomUniform;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomIrwinHall(source) {\n  function randomIrwinHall(n) {\n    return function() {\n      for (var sum = 0, i = 0; i < n; ++i) sum += source();\n      return sum;\n    };\n  }\n\n  randomIrwinHall.source = sourceRandomIrwinHall;\n\n  return randomIrwinHall;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport normal from \"./normal\";\n\nexport default (function sourceRandomLogNormal(source) {\n  function randomLogNormal() {\n    var randomNormal = normal.source(source).apply(this, arguments);\n    return function() {\n      return Math.exp(randomNormal());\n    };\n  }\n\n  randomLogNormal.source = sourceRandomLogNormal;\n\n  return randomLogNormal;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\nimport irwinHall from \"./irwinHall\";\n\nexport default (function sourceRandomBates(source) {\n  function randomBates(n) {\n    var randomIrwinHall = irwinHall.source(source)(n);\n    return function() {\n      return randomIrwinHall() / n;\n    };\n  }\n\n  randomBates.source = sourceRandomBates;\n\n  return randomBates;\n})(defaultSource);\n","import defaultSource from \"./defaultSource\";\n\nexport default (function sourceRandomExponential(source) {\n  function randomExponential(lambda) {\n    return function() {\n      return -Math.log(1 - source()) / lambda;\n    };\n  }\n\n  randomExponential.source = sourceRandomExponential;\n\n  return randomExponential;\n})(defaultSource);\n","var array = Array.prototype;\n\nexport var map = array.map;\nexport var slice = array.slice;\n","var t0 = new Date,\n    t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n  function interval(date) {\n    return floori(date = new Date(+date)), date;\n  }\n\n  interval.floor = interval;\n\n  interval.ceil = function(date) {\n    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n  };\n\n  interval.round = function(date) {\n    var d0 = interval(date),\n        d1 = interval.ceil(date);\n    return date - d0 < d1 - date ? d0 : d1;\n  };\n\n  interval.offset = function(date, step) {\n    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n  };\n\n  interval.range = function(start, stop, step) {\n    var range = [], previous;\n    start = interval.ceil(start);\n    step = step == null ? 1 : Math.floor(step);\n    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n    while (previous < start && start < stop);\n    return range;\n  };\n\n  interval.filter = function(test) {\n    return newInterval(function(date) {\n      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n    }, function(date, step) {\n      if (date >= date) {\n        if (step < 0) while (++step <= 0) {\n          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n        } else while (--step >= 0) {\n          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n        }\n      }\n    });\n  };\n\n  if (count) {\n    interval.count = function(start, end) {\n      t0.setTime(+start), t1.setTime(+end);\n      floori(t0), floori(t1);\n      return Math.floor(count(t0, t1));\n    };\n\n    interval.every = function(step) {\n      step = Math.floor(step);\n      return !isFinite(step) || !(step > 0) ? null\n          : !(step > 1) ? interval\n          : interval.filter(field\n              ? function(d) { return field(d) % step === 0; }\n              : function(d) { return interval.count(0, d) % step === 0; });\n    };\n  }\n\n  return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n  // noop\n}, function(date, step) {\n  date.setTime(+date + step);\n}, function(start, end) {\n  return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n  k = Math.floor(k);\n  if (!isFinite(k) || !(k > 0)) return null;\n  if (!(k > 1)) return millisecond;\n  return interval(function(date) {\n    date.setTime(Math.floor(date / k) * k);\n  }, function(date, step) {\n    date.setTime(+date + step * k);\n  }, function(start, end) {\n    return (end - start) / k;\n  });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n  date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n  date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n  return (end - start) / durationSecond;\n}, function(date) {\n  return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setDate(date.getDate() + step);\n}, function(start, end) {\n  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n  return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n  return interval(function(date) {\n    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setDate(date.getDate() + step * 7);\n  }, function(start, end) {\n    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n  });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n  date.setDate(1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n  return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n  date.setMonth(0, 1);\n  date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n  return end.getFullYear() - start.getFullYear();\n}, function(date) {\n  return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n    date.setMonth(0, 1);\n    date.setHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setFullYear(date.getFullYear() + step * k);\n  });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n  date.setUTCSeconds(0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n  return (end - start) / durationMinute;\n}, function(date) {\n  return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n  date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n  date.setTime(+date + step * durationHour);\n}, function(start, end) {\n  return (end - start) / durationHour;\n}, function(date) {\n  return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n  return (end - start) / durationDay;\n}, function(date) {\n  return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n  return interval(function(date) {\n    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCDate(date.getUTCDate() + step * 7);\n  }, function(start, end) {\n    return (end - start) / durationWeek;\n  });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n  date.setUTCDate(1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n  return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n  date.setUTCMonth(0, 1);\n  date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n  date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n  return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n  return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n    date.setUTCMonth(0, 1);\n    date.setUTCHours(0, 0, 0, 0);\n  }, function(date, step) {\n    date.setUTCFullYear(date.getUTCFullYear() + step * k);\n  });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n  timeDay,\n  timeSunday,\n  timeMonday,\n  timeThursday,\n  timeYear,\n  utcDay,\n  utcSunday,\n  utcMonday,\n  utcThursday,\n  utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n    date.setFullYear(d.y);\n    return date;\n  }\n  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n  if (0 <= d.y && d.y < 100) {\n    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n    date.setUTCFullYear(d.y);\n    return date;\n  }\n  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n  return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n  var locale_dateTime = locale.dateTime,\n      locale_date = locale.date,\n      locale_time = locale.time,\n      locale_periods = locale.periods,\n      locale_weekdays = locale.days,\n      locale_shortWeekdays = locale.shortDays,\n      locale_months = locale.months,\n      locale_shortMonths = locale.shortMonths;\n\n  var periodRe = formatRe(locale_periods),\n      periodLookup = formatLookup(locale_periods),\n      weekdayRe = formatRe(locale_weekdays),\n      weekdayLookup = formatLookup(locale_weekdays),\n      shortWeekdayRe = formatRe(locale_shortWeekdays),\n      shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n      monthRe = formatRe(locale_months),\n      monthLookup = formatLookup(locale_months),\n      shortMonthRe = formatRe(locale_shortMonths),\n      shortMonthLookup = formatLookup(locale_shortMonths);\n\n  var formats = {\n    \"a\": formatShortWeekday,\n    \"A\": formatWeekday,\n    \"b\": formatShortMonth,\n    \"B\": formatMonth,\n    \"c\": null,\n    \"d\": formatDayOfMonth,\n    \"e\": formatDayOfMonth,\n    \"f\": formatMicroseconds,\n    \"H\": formatHour24,\n    \"I\": formatHour12,\n    \"j\": formatDayOfYear,\n    \"L\": formatMilliseconds,\n    \"m\": formatMonthNumber,\n    \"M\": formatMinutes,\n    \"p\": formatPeriod,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatSeconds,\n    \"u\": formatWeekdayNumberMonday,\n    \"U\": formatWeekNumberSunday,\n    \"V\": formatWeekNumberISO,\n    \"w\": formatWeekdayNumberSunday,\n    \"W\": formatWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatYear,\n    \"Y\": formatFullYear,\n    \"Z\": formatZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var utcFormats = {\n    \"a\": formatUTCShortWeekday,\n    \"A\": formatUTCWeekday,\n    \"b\": formatUTCShortMonth,\n    \"B\": formatUTCMonth,\n    \"c\": null,\n    \"d\": formatUTCDayOfMonth,\n    \"e\": formatUTCDayOfMonth,\n    \"f\": formatUTCMicroseconds,\n    \"H\": formatUTCHour24,\n    \"I\": formatUTCHour12,\n    \"j\": formatUTCDayOfYear,\n    \"L\": formatUTCMilliseconds,\n    \"m\": formatUTCMonthNumber,\n    \"M\": formatUTCMinutes,\n    \"p\": formatUTCPeriod,\n    \"Q\": formatUnixTimestamp,\n    \"s\": formatUnixTimestampSeconds,\n    \"S\": formatUTCSeconds,\n    \"u\": formatUTCWeekdayNumberMonday,\n    \"U\": formatUTCWeekNumberSunday,\n    \"V\": formatUTCWeekNumberISO,\n    \"w\": formatUTCWeekdayNumberSunday,\n    \"W\": formatUTCWeekNumberMonday,\n    \"x\": null,\n    \"X\": null,\n    \"y\": formatUTCYear,\n    \"Y\": formatUTCFullYear,\n    \"Z\": formatUTCZone,\n    \"%\": formatLiteralPercent\n  };\n\n  var parses = {\n    \"a\": parseShortWeekday,\n    \"A\": parseWeekday,\n    \"b\": parseShortMonth,\n    \"B\": parseMonth,\n    \"c\": parseLocaleDateTime,\n    \"d\": parseDayOfMonth,\n    \"e\": parseDayOfMonth,\n    \"f\": parseMicroseconds,\n    \"H\": parseHour24,\n    \"I\": parseHour24,\n    \"j\": parseDayOfYear,\n    \"L\": parseMilliseconds,\n    \"m\": parseMonthNumber,\n    \"M\": parseMinutes,\n    \"p\": parsePeriod,\n    \"Q\": parseUnixTimestamp,\n    \"s\": parseUnixTimestampSeconds,\n    \"S\": parseSeconds,\n    \"u\": parseWeekdayNumberMonday,\n    \"U\": parseWeekNumberSunday,\n    \"V\": parseWeekNumberISO,\n    \"w\": parseWeekdayNumberSunday,\n    \"W\": parseWeekNumberMonday,\n    \"x\": parseLocaleDate,\n    \"X\": parseLocaleTime,\n    \"y\": parseYear,\n    \"Y\": parseFullYear,\n    \"Z\": parseZone,\n    \"%\": parseLiteralPercent\n  };\n\n  // These recursive directive definitions must be deferred.\n  formats.x = newFormat(locale_date, formats);\n  formats.X = newFormat(locale_time, formats);\n  formats.c = newFormat(locale_dateTime, formats);\n  utcFormats.x = newFormat(locale_date, utcFormats);\n  utcFormats.X = newFormat(locale_time, utcFormats);\n  utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n  function newFormat(specifier, formats) {\n    return function(date) {\n      var string = [],\n          i = -1,\n          j = 0,\n          n = specifier.length,\n          c,\n          pad,\n          format;\n\n      if (!(date instanceof Date)) date = new Date(+date);\n\n      while (++i < n) {\n        if (specifier.charCodeAt(i) === 37) {\n          string.push(specifier.slice(j, i));\n          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n          else pad = c === \"e\" ? \" \" : \"0\";\n          if (format = formats[c]) c = format(date, pad);\n          string.push(c);\n          j = i + 1;\n        }\n      }\n\n      string.push(specifier.slice(j, i));\n      return string.join(\"\");\n    };\n  }\n\n  function newParse(specifier, newDate) {\n    return function(string) {\n      var d = newYear(1900),\n          i = parseSpecifier(d, specifier, string += \"\", 0),\n          week, day;\n      if (i != string.length) return null;\n\n      // If a UNIX timestamp is specified, return it.\n      if (\"Q\" in d) return new Date(d.Q);\n\n      // The am-pm flag is 0 for AM, and 1 for PM.\n      if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n      // Convert day-of-week and week-of-year to day-of-year.\n      if (\"V\" in d) {\n        if (d.V < 1 || d.V > 53) return null;\n        if (!(\"w\" in d)) d.w = 1;\n        if (\"Z\" in d) {\n          week = utcDate(newYear(d.y)), day = week.getUTCDay();\n          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n          week = utcDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getUTCFullYear();\n          d.m = week.getUTCMonth();\n          d.d = week.getUTCDate() + (d.w + 6) % 7;\n        } else {\n          week = newDate(newYear(d.y)), day = week.getDay();\n          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n          week = timeDay.offset(week, (d.V - 1) * 7);\n          d.y = week.getFullYear();\n          d.m = week.getMonth();\n          d.d = week.getDate() + (d.w + 6) % 7;\n        }\n      } else if (\"W\" in d || \"U\" in d) {\n        if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n        day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n        d.m = 0;\n        d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n      }\n\n      // If a time zone is specified, all fields are interpreted as UTC and then\n      // offset according to the specified time zone.\n      if (\"Z\" in d) {\n        d.H += d.Z / 100 | 0;\n        d.M += d.Z % 100;\n        return utcDate(d);\n      }\n\n      // Otherwise, all fields are in local time.\n      return newDate(d);\n    };\n  }\n\n  function parseSpecifier(d, specifier, string, j) {\n    var i = 0,\n        n = specifier.length,\n        m = string.length,\n        c,\n        parse;\n\n    while (i < n) {\n      if (j >= m) return -1;\n      c = specifier.charCodeAt(i++);\n      if (c === 37) {\n        c = specifier.charAt(i++);\n        parse = parses[c in pads ? specifier.charAt(i++) : c];\n        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n      } else if (c != string.charCodeAt(j++)) {\n        return -1;\n      }\n    }\n\n    return j;\n  }\n\n  function parsePeriod(d, string, i) {\n    var n = periodRe.exec(string.slice(i));\n    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortWeekday(d, string, i) {\n    var n = shortWeekdayRe.exec(string.slice(i));\n    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseWeekday(d, string, i) {\n    var n = weekdayRe.exec(string.slice(i));\n    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseShortMonth(d, string, i) {\n    var n = shortMonthRe.exec(string.slice(i));\n    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseMonth(d, string, i) {\n    var n = monthRe.exec(string.slice(i));\n    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n  }\n\n  function parseLocaleDateTime(d, string, i) {\n    return parseSpecifier(d, locale_dateTime, string, i);\n  }\n\n  function parseLocaleDate(d, string, i) {\n    return parseSpecifier(d, locale_date, string, i);\n  }\n\n  function parseLocaleTime(d, string, i) {\n    return parseSpecifier(d, locale_time, string, i);\n  }\n\n  function formatShortWeekday(d) {\n    return locale_shortWeekdays[d.getDay()];\n  }\n\n  function formatWeekday(d) {\n    return locale_weekdays[d.getDay()];\n  }\n\n  function formatShortMonth(d) {\n    return locale_shortMonths[d.getMonth()];\n  }\n\n  function formatMonth(d) {\n    return locale_months[d.getMonth()];\n  }\n\n  function formatPeriod(d) {\n    return locale_periods[+(d.getHours() >= 12)];\n  }\n\n  function formatUTCShortWeekday(d) {\n    return locale_shortWeekdays[d.getUTCDay()];\n  }\n\n  function formatUTCWeekday(d) {\n    return locale_weekdays[d.getUTCDay()];\n  }\n\n  function formatUTCShortMonth(d) {\n    return locale_shortMonths[d.getUTCMonth()];\n  }\n\n  function formatUTCMonth(d) {\n    return locale_months[d.getUTCMonth()];\n  }\n\n  function formatUTCPeriod(d) {\n    return locale_periods[+(d.getUTCHours() >= 12)];\n  }\n\n  return {\n    format: function(specifier) {\n      var f = newFormat(specifier += \"\", formats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    parse: function(specifier) {\n      var p = newParse(specifier += \"\", localDate);\n      p.toString = function() { return specifier; };\n      return p;\n    },\n    utcFormat: function(specifier) {\n      var f = newFormat(specifier += \"\", utcFormats);\n      f.toString = function() { return specifier; };\n      return f;\n    },\n    utcParse: function(specifier) {\n      var p = newParse(specifier, utcDate);\n      p.toString = function() { return specifier; };\n      return p;\n    }\n  };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n    numberRe = /^\\s*\\d+/, // note: ignores next directive\n    percentRe = /^%/,\n    requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n  var sign = value < 0 ? \"-\" : \"\",\n      string = (sign ? -value : value) + \"\",\n      length = string.length;\n  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n  return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n  return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n  var map = {}, i = -1, n = names.length;\n  while (++i < n) map[names[i].toLowerCase()] = i;\n  return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 1));\n  return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 4));\n  return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n  var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 2));\n  return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 3));\n  return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i, i + 6));\n  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n  var n = percentRe.exec(string.slice(i, i + 1));\n  return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n  var n = numberRe.exec(string.slice(i));\n  return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n  return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n  return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n  return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n  return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n  return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n  return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n  return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n  return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n  return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n  var day = d.getDay();\n  return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n  return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n  var day = d.getDay();\n  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n  return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n  return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n  return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n  return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n  var z = d.getTimezoneOffset();\n  return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n      + pad(z / 60 | 0, \"0\", 2)\n      + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n  return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n  return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n  return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n  return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n  return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n  return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n  return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n  return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n  return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n  var dow = d.getUTCDay();\n  return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n  return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n  var day = d.getUTCDay();\n  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n  return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n  return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n  return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n  return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n  return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n  return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n  return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n  return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n  dateTime: \"%x, %X\",\n  date: \"%-m/%-d/%Y\",\n  time: \"%-I:%M:%S %p\",\n  periods: [\"AM\", \"PM\"],\n  days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n  shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n  months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n  shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n  locale = formatLocale(definition);\n  timeFormat = locale.format;\n  timeParse = locale.parse;\n  utcFormat = locale.utcFormat;\n  utcParse = locale.utcParse;\n  return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n  return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n    ? formatIsoNative\n    : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n  var date = new Date(string);\n  return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n    ? parseIsoNative\n    : utcParse(isoSpecifier);\n\nexport default parseIso;\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n  this._curve = curve;\n}\n\nRadial.prototype = {\n  areaStart: function() {\n    this._curve.areaStart();\n  },\n  areaEnd: function() {\n    this._curve.areaEnd();\n  },\n  lineStart: function() {\n    this._curve.lineStart();\n  },\n  lineEnd: function() {\n    this._curve.lineEnd();\n  },\n  point: function(a, r) {\n    this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n  }\n};\n\nexport default function curveRadial(curve) {\n\n  function radial(context) {\n    return new Radial(curve(context));\n  }\n\n  radial._curve = curve;\n\n  return radial;\n}\n","export var slice = Array.prototype.slice;\n","var tan30 = Math.sqrt(1 / 3),\n    tan30_2 = tan30 * 2;\n\nexport default {\n  draw: function(context, size) {\n    var y = Math.sqrt(size / tan30_2),\n        x = y * tan30;\n    context.moveTo(0, -y);\n    context.lineTo(x, 0);\n    context.lineTo(0, y);\n    context.lineTo(-x, 0);\n    context.closePath();\n  }\n};\n","import {pi, tau} from \"../math\";\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n    kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n    kx = Math.sin(tau / 10) * kr,\n    ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size * ka),\n        x = kx * r,\n        y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (var i = 1; i < 5; ++i) {\n      var a = tau * i / 5,\n          c = Math.cos(a),\n          s = Math.sin(a);\n      context.lineTo(s * r, -c * r);\n      context.lineTo(c * x - s * y, s * x + c * y);\n    }\n    context.closePath();\n  }\n};\n","export default function() {}\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n  draw: function(context, size) {\n    var y = -Math.sqrt(size / (sqrt3 * 3));\n    context.moveTo(0, y * 2);\n    context.lineTo(-sqrt3 * y, -y);\n    context.lineTo(sqrt3 * y, -y);\n    context.closePath();\n  }\n};\n","var c = -0.5,\n    s = Math.sqrt(3) / 2,\n    k = 1 / Math.sqrt(12),\n    a = (k / 2 + 1) * 3;\n\nexport default {\n  draw: function(context, size) {\n    var r = Math.sqrt(size / a),\n        x0 = r / 2,\n        y0 = r * k,\n        x1 = x0,\n        y1 = r * k + r,\n        x2 = -x1,\n        y2 = y1;\n    context.moveTo(x0, y0);\n    context.lineTo(x1, y1);\n    context.lineTo(x2, y2);\n    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n    context.closePath();\n  }\n};\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // proceed\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n  this._context = context;\n}\n\nBasisClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x2, this._y2);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x2, this._y2);\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n  this._context = context;\n}\n\nBasisOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n  this._basis = new Basis(context);\n  this._beta = beta;\n}\n\nBundle.prototype = {\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n    this._basis.lineStart();\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        j = x.length - 1;\n\n    if (j > 0) {\n      var x0 = x[0],\n          y0 = y[0],\n          dx = x[j] - x0,\n          dy = y[j] - y0,\n          i = -1,\n          t;\n\n      while (++i <= j) {\n        t = i / j;\n        this._basis.point(\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n        );\n      }\n    }\n\n    this._x = this._y = null;\n    this._basis.lineEnd();\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\nexport default (function custom(beta) {\n\n  function bundle(context) {\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n  }\n\n  bundle.beta = function(beta) {\n    return custom(+beta);\n  };\n\n  return bundle;\n})(0.85);\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    that._x1 + that._k * (that._x2 - that._x0),\n    that._y1 + that._k * (that._y2 - that._y0),\n    that._x2 + that._k * (that._x1 - x),\n    that._y2 + that._k * (that._y1 - y),\n    that._x2,\n    that._y2\n  );\n}\n\nexport function Cardinal(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: point(this, this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new Cardinal(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalClosed(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalOpen(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n  var x1 = that._x1,\n      y1 = that._y1,\n      x2 = that._x2,\n      y2 = that._y2;\n\n  if (that._l01_a > epsilon) {\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n  }\n\n  if (that._l23_a > epsilon) {\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n  }\n\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: this.point(this._x2, this._y2); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n  this._context = context;\n}\n\nLinearClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._point) this._context.closePath();\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    if (this._point) this._context.lineTo(x, y);\n    else this._point = 1, this._context.moveTo(x, y);\n  }\n};\n\nexport default function(context) {\n  return new LinearClosed(context);\n}\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","function Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nexport default function(context) {\n  return new Natural(context);\n}\n","function Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nexport default function(context) {\n  return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n  return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n  return new Step(context, 1);\n}\n","function RedBlackTree() {\n  this._ = null; // root node\n}\n\nexport function RedBlackNode(node) {\n  node.U = // parent node\n  node.C = // color - true for red, false for black\n  node.L = // left node\n  node.R = // right node\n  node.P = // previous node\n  node.N = null; // next node\n}\n\nRedBlackTree.prototype = {\n  constructor: RedBlackTree,\n\n  insert: function(after, node) {\n    var parent, grandpa, uncle;\n\n    if (after) {\n      node.P = after;\n      node.N = after.N;\n      if (after.N) after.N.P = node;\n      after.N = node;\n      if (after.R) {\n        after = after.R;\n        while (after.L) after = after.L;\n        after.L = node;\n      } else {\n        after.R = node;\n      }\n      parent = after;\n    } else if (this._) {\n      after = RedBlackFirst(this._);\n      node.P = null;\n      node.N = after;\n      after.P = after.L = node;\n      parent = after;\n    } else {\n      node.P = node.N = null;\n      this._ = node;\n      parent = null;\n    }\n    node.L = node.R = null;\n    node.U = parent;\n    node.C = true;\n\n    after = node;\n    while (parent && parent.C) {\n      grandpa = parent.U;\n      if (parent === grandpa.L) {\n        uncle = grandpa.R;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.R) {\n            RedBlackRotateLeft(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateRight(this, grandpa);\n        }\n      } else {\n        uncle = grandpa.L;\n        if (uncle && uncle.C) {\n          parent.C = uncle.C = false;\n          grandpa.C = true;\n          after = grandpa;\n        } else {\n          if (after === parent.L) {\n            RedBlackRotateRight(this, parent);\n            after = parent;\n            parent = after.U;\n          }\n          parent.C = false;\n          grandpa.C = true;\n          RedBlackRotateLeft(this, grandpa);\n        }\n      }\n      parent = after.U;\n    }\n    this._.C = false;\n  },\n\n  remove: function(node) {\n    if (node.N) node.N.P = node.P;\n    if (node.P) node.P.N = node.N;\n    node.N = node.P = null;\n\n    var parent = node.U,\n        sibling,\n        left = node.L,\n        right = node.R,\n        next,\n        red;\n\n    if (!left) next = right;\n    else if (!right) next = left;\n    else next = RedBlackFirst(right);\n\n    if (parent) {\n      if (parent.L === node) parent.L = next;\n      else parent.R = next;\n    } else {\n      this._ = next;\n    }\n\n    if (left && right) {\n      red = next.C;\n      next.C = node.C;\n      next.L = left;\n      left.U = next;\n      if (next !== right) {\n        parent = next.U;\n        next.U = node.U;\n        node = next.R;\n        parent.L = node;\n        next.R = right;\n        right.U = next;\n      } else {\n        next.U = parent;\n        parent = next;\n        node = next.R;\n      }\n    } else {\n      red = node.C;\n      node = next;\n    }\n\n    if (node) node.U = parent;\n    if (red) return;\n    if (node && node.C) { node.C = false; return; }\n\n    do {\n      if (node === this._) break;\n      if (node === parent.L) {\n        sibling = parent.R;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateLeft(this, parent);\n          sibling = parent.R;\n        }\n        if ((sibling.L && sibling.L.C)\n            || (sibling.R && sibling.R.C)) {\n          if (!sibling.R || !sibling.R.C) {\n            sibling.L.C = false;\n            sibling.C = true;\n            RedBlackRotateRight(this, sibling);\n            sibling = parent.R;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.R.C = false;\n          RedBlackRotateLeft(this, parent);\n          node = this._;\n          break;\n        }\n      } else {\n        sibling = parent.L;\n        if (sibling.C) {\n          sibling.C = false;\n          parent.C = true;\n          RedBlackRotateRight(this, parent);\n          sibling = parent.L;\n        }\n        if ((sibling.L && sibling.L.C)\n          || (sibling.R && sibling.R.C)) {\n          if (!sibling.L || !sibling.L.C) {\n            sibling.R.C = false;\n            sibling.C = true;\n            RedBlackRotateLeft(this, sibling);\n            sibling = parent.L;\n          }\n          sibling.C = parent.C;\n          parent.C = sibling.L.C = false;\n          RedBlackRotateRight(this, parent);\n          node = this._;\n          break;\n        }\n      }\n      sibling.C = true;\n      node = parent;\n      parent = parent.U;\n    } while (!node.C);\n\n    if (node) node.C = false;\n  }\n};\n\nfunction RedBlackRotateLeft(tree, node) {\n  var p = node,\n      q = node.R,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.R = q.L;\n  if (p.R) p.R.U = p;\n  q.L = p;\n}\n\nfunction RedBlackRotateRight(tree, node) {\n  var p = node,\n      q = node.L,\n      parent = p.U;\n\n  if (parent) {\n    if (parent.L === p) parent.L = q;\n    else parent.R = q;\n  } else {\n    tree._ = q;\n  }\n\n  q.U = parent;\n  p.U = q;\n  p.L = q.R;\n  if (p.L) p.L.U = p;\n  q.R = p;\n}\n\nfunction RedBlackFirst(node) {\n  while (node.L) node = node.L;\n  return node;\n}\n\nexport default RedBlackTree;\n","import {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createEdge(left, right, v0, v1) {\n  var edge = [null, null],\n      index = edges.push(edge) - 1;\n  edge.left = left;\n  edge.right = right;\n  if (v0) setEdgeEnd(edge, left, right, v0);\n  if (v1) setEdgeEnd(edge, right, left, v1);\n  cells[left.index].halfedges.push(index);\n  cells[right.index].halfedges.push(index);\n  return edge;\n}\n\nexport function createBorderEdge(left, v0, v1) {\n  var edge = [v0, v1];\n  edge.left = left;\n  return edge;\n}\n\nexport function setEdgeEnd(edge, left, right, vertex) {\n  if (!edge[0] && !edge[1]) {\n    edge[0] = vertex;\n    edge.left = left;\n    edge.right = right;\n  } else if (edge.left === right) {\n    edge[1] = vertex;\n  } else {\n    edge[0] = vertex;\n  }\n}\n\n// Liang–Barsky line clipping.\nfunction clipEdge(edge, x0, y0, x1, y1) {\n  var a = edge[0],\n      b = edge[1],\n      ax = a[0],\n      ay = a[1],\n      bx = b[0],\n      by = b[1],\n      t0 = 0,\n      t1 = 1,\n      dx = bx - ax,\n      dy = by - ay,\n      r;\n\n  r = x0 - ax;\n  if (!dx && r > 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dx > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = x1 - ax;\n  if (!dx && r < 0) return;\n  r /= dx;\n  if (dx < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dx > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  r = y0 - ay;\n  if (!dy && r > 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  } else if (dy > 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  }\n\n  r = y1 - ay;\n  if (!dy && r < 0) return;\n  r /= dy;\n  if (dy < 0) {\n    if (r > t1) return;\n    if (r > t0) t0 = r;\n  } else if (dy > 0) {\n    if (r < t0) return;\n    if (r < t1) t1 = r;\n  }\n\n  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n  return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n  var v1 = edge[1];\n  if (v1) return true;\n\n  var v0 = edge[0],\n      left = edge.left,\n      right = edge.right,\n      lx = left[0],\n      ly = left[1],\n      rx = right[0],\n      ry = right[1],\n      fx = (lx + rx) / 2,\n      fy = (ly + ry) / 2,\n      fm,\n      fb;\n\n  if (ry === ly) {\n    if (fx < x0 || fx >= x1) return;\n    if (lx > rx) {\n      if (!v0) v0 = [fx, y0];\n      else if (v0[1] >= y1) return;\n      v1 = [fx, y1];\n    } else {\n      if (!v0) v0 = [fx, y1];\n      else if (v0[1] < y0) return;\n      v1 = [fx, y0];\n    }\n  } else {\n    fm = (lx - rx) / (ry - ly);\n    fb = fy - fm * fx;\n    if (fm < -1 || fm > 1) {\n      if (lx > rx) {\n        if (!v0) v0 = [(y0 - fb) / fm, y0];\n        else if (v0[1] >= y1) return;\n        v1 = [(y1 - fb) / fm, y1];\n      } else {\n        if (!v0) v0 = [(y1 - fb) / fm, y1];\n        else if (v0[1] < y0) return;\n        v1 = [(y0 - fb) / fm, y0];\n      }\n    } else {\n      if (ly < ry) {\n        if (!v0) v0 = [x0, fm * x0 + fb];\n        else if (v0[0] >= x1) return;\n        v1 = [x1, fm * x1 + fb];\n      } else {\n        if (!v0) v0 = [x1, fm * x1 + fb];\n        else if (v0[0] < x0) return;\n        v1 = [x0, fm * x0 + fb];\n      }\n    }\n  }\n\n  edge[0] = v0;\n  edge[1] = v1;\n  return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n  var i = edges.length,\n      edge;\n\n  while (i--) {\n    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n        || !clipEdge(edge, x0, y0, x1, y1)\n        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n            || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n      delete edges[i];\n    }\n  }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n  return cells[site.index] = {\n    site: site,\n    halfedges: []\n  };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n  var site = cell.site,\n      va = edge.left,\n      vb = edge.right;\n  if (site === vb) vb = va, va = site;\n  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n  if (site === va) va = edge[1], vb = edge[0];\n  else va = edge[0], vb = edge[1];\n  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n  return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n  return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n      var index = new Array(m),\n          array = new Array(m);\n      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n      index.sort(function(i, j) { return array[j] - array[i]; });\n      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n      for (j = 0; j < m; ++j) halfedges[j] = array[j];\n    }\n  }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n  var nCells = cells.length,\n      iCell,\n      cell,\n      site,\n      iHalfedge,\n      halfedges,\n      nHalfedges,\n      start,\n      startX,\n      startY,\n      end,\n      endX,\n      endY,\n      cover = true;\n\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      site = cell.site;\n      halfedges = cell.halfedges;\n      iHalfedge = halfedges.length;\n\n      // Remove any dangling clipped edges.\n      while (iHalfedge--) {\n        if (!edges[halfedges[iHalfedge]]) {\n          halfedges.splice(iHalfedge, 1);\n        }\n      }\n\n      // Insert any border edges as necessary.\n      iHalfedge = 0, nHalfedges = halfedges.length;\n      while (iHalfedge < nHalfedges) {\n        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n        if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n              Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n              : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n              : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n              : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n              : null)) - 1);\n          ++nHalfedges;\n        }\n      }\n\n      if (nHalfedges) cover = false;\n    }\n  }\n\n  // If there weren’t any edges, have the closest site cover the extent.\n  // It doesn’t matter which corner of the extent we measure!\n  if (cover) {\n    var dx, dy, d2, dc = Infinity;\n\n    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n      if (cell = cells[iCell]) {\n        site = cell.site;\n        dx = site[0] - x0;\n        dy = site[1] - y0;\n        d2 = dx * dx + dy * dy;\n        if (d2 < dc) dc = d2, cover = cell;\n      }\n    }\n\n    if (cover) {\n      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n      cover.halfedges.push(\n        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n        edges.push(createBorderEdge(site, v01, v11)) - 1,\n        edges.push(createBorderEdge(site, v11, v10)) - 1,\n        edges.push(createBorderEdge(site, v10, v00)) - 1\n      );\n    }\n  }\n\n  // Lastly delete any cells with no edges; these were entirely clipped.\n  for (iCell = 0; iCell < nCells; ++iCell) {\n    if (cell = cells[iCell]) {\n      if (!cell.halfedges.length) {\n        delete cells[iCell];\n      }\n    }\n  }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n  RedBlackNode(this);\n  this.x =\n  this.y =\n  this.arc =\n  this.site =\n  this.cy = null;\n}\n\nexport function attachCircle(arc) {\n  var lArc = arc.P,\n      rArc = arc.N;\n\n  if (!lArc || !rArc) return;\n\n  var lSite = lArc.site,\n      cSite = arc.site,\n      rSite = rArc.site;\n\n  if (lSite === rSite) return;\n\n  var bx = cSite[0],\n      by = cSite[1],\n      ax = lSite[0] - bx,\n      ay = lSite[1] - by,\n      cx = rSite[0] - bx,\n      cy = rSite[1] - by;\n\n  var d = 2 * (ax * cy - ay * cx);\n  if (d >= -epsilon2) return;\n\n  var ha = ax * ax + ay * ay,\n      hc = cx * cx + cy * cy,\n      x = (cy * ha - ay * hc) / d,\n      y = (ax * hc - cx * ha) / d;\n\n  var circle = circlePool.pop() || new Circle;\n  circle.arc = arc;\n  circle.site = cSite;\n  circle.x = x + bx;\n  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n  arc.circle = circle;\n\n  var before = null,\n      node = circles._;\n\n  while (node) {\n    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n      if (node.L) node = node.L;\n      else { before = node.P; break; }\n    } else {\n      if (node.R) node = node.R;\n      else { before = node; break; }\n    }\n  }\n\n  circles.insert(before, circle);\n  if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n  var circle = arc.circle;\n  if (circle) {\n    if (!circle.P) firstCircle = circle.N;\n    circles.remove(circle);\n    circlePool.push(circle);\n    RedBlackNode(circle);\n    arc.circle = null;\n  }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n  RedBlackNode(this);\n  this.edge =\n  this.site =\n  this.circle = null;\n}\n\nfunction createBeach(site) {\n  var beach = beachPool.pop() || new Beach;\n  beach.site = site;\n  return beach;\n}\n\nfunction detachBeach(beach) {\n  detachCircle(beach);\n  beaches.remove(beach);\n  beachPool.push(beach);\n  RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n  var circle = beach.circle,\n      x = circle.x,\n      y = circle.cy,\n      vertex = [x, y],\n      previous = beach.P,\n      next = beach.N,\n      disappearing = [beach];\n\n  detachBeach(beach);\n\n  var lArc = previous;\n  while (lArc.circle\n      && Math.abs(x - lArc.circle.x) < epsilon\n      && Math.abs(y - lArc.circle.cy) < epsilon) {\n    previous = lArc.P;\n    disappearing.unshift(lArc);\n    detachBeach(lArc);\n    lArc = previous;\n  }\n\n  disappearing.unshift(lArc);\n  detachCircle(lArc);\n\n  var rArc = next;\n  while (rArc.circle\n      && Math.abs(x - rArc.circle.x) < epsilon\n      && Math.abs(y - rArc.circle.cy) < epsilon) {\n    next = rArc.N;\n    disappearing.push(rArc);\n    detachBeach(rArc);\n    rArc = next;\n  }\n\n  disappearing.push(rArc);\n  detachCircle(rArc);\n\n  var nArcs = disappearing.length,\n      iArc;\n  for (iArc = 1; iArc < nArcs; ++iArc) {\n    rArc = disappearing[iArc];\n    lArc = disappearing[iArc - 1];\n    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n  }\n\n  lArc = disappearing[0];\n  rArc = disappearing[nArcs - 1];\n  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n  var x = site[0],\n      directrix = site[1],\n      lArc,\n      rArc,\n      dxl,\n      dxr,\n      node = beaches._;\n\n  while (node) {\n    dxl = leftBreakPoint(node, directrix) - x;\n    if (dxl > epsilon) node = node.L; else {\n      dxr = x - rightBreakPoint(node, directrix);\n      if (dxr > epsilon) {\n        if (!node.R) {\n          lArc = node;\n          break;\n        }\n        node = node.R;\n      } else {\n        if (dxl > -epsilon) {\n          lArc = node.P;\n          rArc = node;\n        } else if (dxr > -epsilon) {\n          lArc = node;\n          rArc = node.N;\n        } else {\n          lArc = rArc = node;\n        }\n        break;\n      }\n    }\n  }\n\n  createCell(site);\n  var newArc = createBeach(site);\n  beaches.insert(lArc, newArc);\n\n  if (!lArc && !rArc) return;\n\n  if (lArc === rArc) {\n    detachCircle(lArc);\n    rArc = createBeach(lArc.site);\n    beaches.insert(newArc, rArc);\n    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n    attachCircle(lArc);\n    attachCircle(rArc);\n    return;\n  }\n\n  if (!rArc) { // && lArc\n    newArc.edge = createEdge(lArc.site, newArc.site);\n    return;\n  }\n\n  // else lArc !== rArc\n  detachCircle(lArc);\n  detachCircle(rArc);\n\n  var lSite = lArc.site,\n      ax = lSite[0],\n      ay = lSite[1],\n      bx = site[0] - ax,\n      by = site[1] - ay,\n      rSite = rArc.site,\n      cx = rSite[0] - ax,\n      cy = rSite[1] - ay,\n      d = 2 * (bx * cy - by * cx),\n      hb = bx * bx + by * by,\n      hc = cx * cx + cy * cy,\n      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n  setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n  newArc.edge = createEdge(lSite, site, null, vertex);\n  rArc.edge = createEdge(site, rSite, null, vertex);\n  attachCircle(lArc);\n  attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n  var site = arc.site,\n      rfocx = site[0],\n      rfocy = site[1],\n      pby2 = rfocy - directrix;\n\n  if (!pby2) return rfocx;\n\n  var lArc = arc.P;\n  if (!lArc) return -Infinity;\n\n  site = lArc.site;\n  var lfocx = site[0],\n      lfocy = site[1],\n      plby2 = lfocy - directrix;\n\n  if (!plby2) return lfocx;\n\n  var hl = lfocx - rfocx,\n      aby2 = 1 / pby2 - 1 / plby2,\n      b = hl / plby2;\n\n  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n  return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n  var rArc = arc.N;\n  if (rArc) return leftBreakPoint(rArc, directrix);\n  var site = arc.site;\n  return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n  return b[1] - a[1]\n      || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n  var site = sites.sort(lexicographic).pop(),\n      x,\n      y,\n      circle;\n\n  edges = [];\n  cells = new Array(sites.length);\n  beaches = new RedBlackTree;\n  circles = new RedBlackTree;\n\n  while (true) {\n    circle = firstCircle;\n    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n      if (site[0] !== x || site[1] !== y) {\n        addBeach(site);\n        x = site[0], y = site[1];\n      }\n      site = sites.pop();\n    } else if (circle) {\n      removeBeach(circle.arc);\n    } else {\n      break;\n    }\n  }\n\n  sortCellHalfedges();\n\n  if (extent) {\n    var x0 = +extent[0][0],\n        y0 = +extent[0][1],\n        x1 = +extent[1][0],\n        y1 = +extent[1][1];\n    clipEdges(x0, y0, x1, y1);\n    clipCells(x0, y0, x1, y1);\n  }\n\n  this.edges = edges;\n  this.cells = cells;\n\n  beaches =\n  circles =\n  edges =\n  cells = null;\n}\n\nDiagram.prototype = {\n  constructor: Diagram,\n\n  polygons: function() {\n    var edges = this.edges;\n\n    return this.cells.map(function(cell) {\n      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n      polygon.data = cell.site.data;\n      return polygon;\n    });\n  },\n\n  triangles: function() {\n    var triangles = [],\n        edges = this.edges;\n\n    this.cells.forEach(function(cell, i) {\n      if (!(m = (halfedges = cell.halfedges).length)) return;\n      var site = cell.site,\n          halfedges,\n          j = -1,\n          m,\n          s0,\n          e1 = edges[halfedges[m - 1]],\n          s1 = e1.left === site ? e1.right : e1.left;\n\n      while (++j < m) {\n        s0 = s1;\n        e1 = edges[halfedges[j]];\n        s1 = e1.left === site ? e1.right : e1.left;\n        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n          triangles.push([site.data, s0.data, s1.data]);\n        }\n      }\n    });\n\n    return triangles;\n  },\n\n  links: function() {\n    return this.edges.filter(function(edge) {\n      return edge.right;\n    }).map(function(edge) {\n      return {\n        source: edge.left.data,\n        target: edge.right.data\n      };\n    });\n  },\n\n  find: function(x, y, radius) {\n    var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n    // Use the previously-found cell, or start with an arbitrary one.\n    while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n    var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n    // Traverse the half-edges to find a closer cell, if any.\n    do {\n      cell = that.cells[i0 = i1], i1 = null;\n      cell.halfedges.forEach(function(e) {\n        var edge = that.edges[e], v = edge.left;\n        if ((v === cell.site || !v) && !(v = edge.right)) return;\n        var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n        if (v2 < d2) d2 = v2, i1 = v.index;\n      });\n    } while (i1 !== null);\n\n    that._found = i0;\n\n    return radius == null || d2 <= radius * radius ? cell.site : null;\n  }\n}\n","export function Transform(k, x, y) {\n  this.k = k;\n  this.x = x;\n  this.y = y;\n}\n\nTransform.prototype = {\n  constructor: Transform,\n  scale: function(k) {\n    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n  },\n  translate: function(x, y) {\n    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n  },\n  apply: function(point) {\n    return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n  },\n  applyX: function(x) {\n    return x * this.k + this.x;\n  },\n  applyY: function(y) {\n    return y * this.k + this.y;\n  },\n  invert: function(location) {\n    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n  },\n  invertX: function(x) {\n    return (x - this.x) / this.k;\n  },\n  invertY: function(y) {\n    return (y - this.y) / this.k;\n  },\n  rescaleX: function(x) {\n    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n  },\n  rescaleY: function(y) {\n    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n  },\n  toString: function() {\n    return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n  }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n  while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n  return node.__zoom;\n}\n","import { bindable } from 'aurelia-templating';\nimport { autoinject } from 'aurelia-framework';\nimport * as d3 from 'd3';\nimport \"./css/insight-cv-page.css\";\n\n@autoinject\nexport class InsightCvPage {\n\n  @bindable first: HTMLElement;\n  @bindable second: HTMLElement;\n\n  constructor() {\n    window.scrollTo(0, 0);\n  }\n\n  attached() {\n    //this.dochart();\n    this.dochart_1();\n    //this.dochart_2();\n    //doChart1(this.second);\n  }\n\n  public dochart_1() {\n    var data = [30, 86, 168, 281, 303, 365];\n    d3.select(this.first)\n      //d3.select(\"#chart3\")\n      .selectAll(\"div\")\n      .data(data)\n      .enter()\n      .append(\"div\")\n      .style(\"width\", function (d) { return d + \"px\"; })\n      .style(\"background\", \"black\")\n      .classed(\"m-1 text-white\", true)\n      .text(function (d) { return d; });\n  }\n\n  public dochart_2() {\n    /*\n    const svg = d3.select(DOM.svg(width, height));\n\n    const x = d3.scaleLinear()\n      .domain([0, m - 1])\n      .range([0, width]);\n\n    const y = d3.scaleLinear()\n      .range([height, 0]);\n\n    const z = d3.interpolateCool;\n\n    const area = d3.area()\n      .x((d, i) => x(i))\n      .y0(d => y(d[0]))\n      .y1(d => y(d[1]));\n\n    function randomize() {\n      const layers = stack(d3.transpose(Array.from({ length: n }, () => bumps(m, k))));\n      y.domain([\n        d3.min(layers, l => d3.min(l, d => d[0])),\n        d3.max(layers, l => d3.max(l, d => d[1]))\n      ]);\n      return layers;\n    }\n\n    const path = svg.selectAll(\"path\")\n      .data(randomize)\n      .enter().append(\"path\")\n      .attr(\"d\", area)\n      .attr(\"fill\", () => z(Math.random()));\n\n    const interval = d3.interval(() => {\n      path\n        .data(randomize)\n        .transition()\n        .duration(1500)\n        .attr(\"d\", area);\n    }, 2500);\n\n    invalidation.then(() => interval.stop());\n\n    return svg.node();\n    */\n  }\n\n}\n","module.exports = \"<template> <require from=common/loading/LoadingComponent></require> <div class=\\\"container insight-cv-page au-animate\\\"> <div class=row> <div ref=first class=col-12></div> <div ref=second class=col-12></div> </div> </div> </template>\";","import { PLATFORM } from 'aurelia-pal';\nimport { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router, RouterConfiguration } from 'aurelia-router';\n\nimport \"./css/protection-cv-page.css\"\n\n@autoinject\nexport class ProtectionCvPage {\n  constructor(public router: Router) {\n    window.scrollTo(0, 0);\n  }\n\n  configureRouter(config: RouterConfiguration, router: Router) {\n    config.map([\n      {\n        route: ['', 'single'], name: 'protection/single',\n        moduleId: PLATFORM.moduleName('pages/CvSubpages/ProtectionCvSubpages/SingleCodePage'), nav: true, title: 'Single Code'\n      },\n      {\n        route: ['multiple'], name: 'protection/multiple',\n        moduleId: PLATFORM.moduleName('pages/CvSubpages/ProtectionCvSubpages/MultipleCodePage'), nav: true, title: 'Multiple Code'\n      }\n    ]);\n    this.router = router;\n  }\n\n  bind() { }\n\n}\n","module.exports = \"<template> <require from=./EditCvComponents/CurriculumComponent></require> <require from=common/loading/LoadingComponent></require> <div class=\\\"container protection-cv-page au-animate\\\"> <div class=row> <div class=\\\"col-12 col-md-3\\\"> <ul class=\\\"list-group mb-3\\\"> <li class=\\\"list-group-item py-2\\\"><strong>Protections</strong></li> <a repeat.for=\\\"r of router.navigation\\\" href.bind=r.href save.call=saveChanges() class=\\\"list-group-item list-group-item-action py-2 ${r.isActive ? 'active' : ''}\\\">${r.title}</a> </ul> <button type=button class=\\\"btn btn-link btn-sm small col-12 col-md-auto\\\" click.delegate=reset()>Reset default</button> </div> <div class=\\\"col-12 col-md-8\\\"> <router-view></router-view> </div> </div> </div> </template> \";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { LocalResources, iconPack } from 'services/storage';\nimport { CurriculumStyle, Category, Element as Elem, Functions } from 'definitions';\n\nimport \"./css/multiple-code-page.css\";\n\n@autoinject\nexport class MultipleCodePage {\n\n  constructor(public element: Element) { }\n\n  bind() { }\n\n}\n","module.exports = \"<template> <p>format section: todo</p> </template>\";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { LocalResources, iconPack } from 'services/storage';\nimport { CurriculumStyle, Category, Element as Elem, Functions } from 'definitions';\n\nimport \"./css/single-code-page.css\";\n\n@autoinject\nexport class SingleCodePage {\n\n  constructor(public element: Element) { }\n\n  bind() { }\n\n}\n","module.exports = \"<template> <div class=\\\"container single-code-page au-animate\\\"> <div class=row> <div class=col-12> <form> <div class=form-row> <div class=\\\"form-group col-12\\\"> <div class=\\\"custom-control custom-switch\\\"> <input type=checkbox class=custom-control-input id=enableProtection ref=enableProtection> <label class=custom-control-label for=enableProtection>Hide sensible information<br><small>You can set a password to show sensible information only to users that have a password</small></label> </div> <hr> </div> <div class=\\\"form-group col-12\\\"> <fieldset disabled.bind=!enableProtection.checked> <div class=\\\"input-group input-group-sm\\\"> <input type=text class=form-control placeholder=Codice> </div> <p class=small>Inserisci il codice che vuoi utilizzare per sbloccare le informazioni personali</p> <p class=small>Inserisci qualsiasi testo nel Curriculum tra i tag <kbd>{private}</kbd> e <kbd>{/private}</kbd> per renderlo privato </p> </fieldset> </div> </div> </form> </div> </div> </div> </template>\";","import { PLATFORM } from 'aurelia-pal';\nimport { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router, RouterConfiguration } from 'aurelia-router';\n\nimport \"./css/setting-cv-page.css\";\n\n@autoinject\nexport class SettingCvPage {\n  constructor(public router: Router) {\n    window.scrollTo(0, 0);\n  }\n\n  configureRouter(config: RouterConfiguration, router: Router) {\n    //NOTE: il parametro `save` e `reset` servono per bindare le funzioni tra questa pagina e la route-view figlia\n    config.map([\n      {\n        route: ['', 'style'], name: 'setting/style',\n        moduleId: PLATFORM.moduleName('pages/CvSubpages/SettingCvSubpages/StylePage'), nav: true, title: 'Style',\n        reset: () => { }\n      },\n      {\n        route: ['format'], name: 'setting/format',\n        moduleId: PLATFORM.moduleName('pages/CvSubpages/SettingCvSubpages/FormatPage'), nav: true, title: 'Format',\n        reset: () => { }\n      }\n    ]);\n    this.router = router;\n  }\n\n  bind() { }\n\n  //DOC: chiama la funzione `save()` della route-view attiva\n  public save() {\n    this.router.currentInstruction.config.save();\n  }\n\n  //DOC: chiama la funzione `reset()` della route-view attiva\n  public reset() {\n    this.router.currentInstruction.config.reset();\n  }\n\n  /*scrollToSection(section: string) {\n    if (this.element)\n      this.element.querySelector(section).scrollIntoView({ block: 'center', behavior: 'smooth' });\n  }*/\n\n}\n","module.exports = \"<template> <require from=./EditCvComponents/CurriculumComponent></require> <require from=common/loading/LoadingComponent></require> <require from=common/attributes/tooltip></require> <require from=common/attributes/popover></require> <div class=\\\"container setting-cv-page au-animate\\\"> <div class=row> <div class=\\\"col-12 col-md-3\\\"> <ul class=\\\"list-group mb-3\\\"> <li class=\\\"list-group-item py-2\\\"><strong>Curriculum Settings</strong></li> <a repeat.for=\\\"r of router.navigation\\\" href.bind=r.href save.call=saveChanges() class=\\\"list-group-item list-group-item-action py-2 ${r.isActive ? 'active' : ''}\\\">${r.title}</a> </ul> <button type=button class=\\\"btn btn-link btn-sm small col-12 col-md-auto\\\" click.delegate=reset()>Reset default</button> </div> <div class=\\\"col-12 col-md-8\\\"> <router-view></router-view> </div> </div> </div> </template> \";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { LocalResources, iconPack } from 'services/storage';\nimport { CurriculumStyle, Category, Element as Elem, Functions } from 'definitions';\n\nimport \"./css/format-page.css\";\n\n@autoinject\nexport class FormatPage {\n\n  constructor(public element: Element) { }\n\n  bind() { }\n\n}\n","module.exports = \"<template> <p>format section: todo</p> </template> \";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { NavigationInstruction, RouteConfig, Router } from 'aurelia-router';\nimport { BindingEngine, Disposable } from 'aurelia-binding';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\nimport { CurriculumStyle, Category, Element as Elem, Functions, defaultCurriculumStyle } from 'definitions';\nimport { LocalResources, iconPack } from 'services/storage';\nimport { Database, Query, Path, Action } from 'services/database';\nimport { setToDefaultValues, cloneObject } from 'helpers/utils';\n\nimport \"./css/style-page.css\";\n\n@autoinject\nexport class StylePage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: oggetto che contiene tutte le proprietà di stile\n  @bindable cvStyle: CurriculumStyle = null;\n  //DOC: array di pack di icone\n  @bindable iconsPacks: iconPack[] = [];\n  //DOC: font family temporaneo\n  @bindable localFontFamily: string;\n  //DOC: icon pack temporaneo\n  @bindable localIconPack: iconPack;\n  //DOC: funzione match per i radio per la scelta dell'icon pack\n  iconsPackMatcher = (a: iconPack, b: iconPack) => a.name == b.name;\n\n  //DOC: //TODO:\n  @bindable categories: string[] = [];\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  //DOC: id del curriculum (ottenuto dall'url)\n  private idCv: string;\n\n  //DOC: array di sottoscrizioni degli observer\n  private propObserverSubscription: Disposable[] = [];\n\n  constructor(public element: Element, private db: Database, public router: Router, private be: BindingEngine) { }\n\n  bind() {\n    //associo i parametri alle funzioni per essere richiamate dal componente padre\n    this.router.currentInstruction.config.reset = () => { this.resetDefault() };\n\n    //this.categories = Functions.getTagCategories(({ tags: \"[HTML5]{.tag .cat} [CSS3]{.tag .cat} [Bootstrap]{.tag .cat} [JavaScript]{.tag .cat}\" }) as Elem);\\\n\n    this.queries = [this.db.query(Path.curricula + this.idCv + \"/\" + Path.curriculumStyle)];\n    this.queries[0].on(Action.onValue, (data: any) => this.onCurriculumStyleRead.call(this, data.val()));\n  }\n\n  activate(params: any, routeConfig: RouteConfig, navigationInstruction: NavigationInstruction) {\n    if (params.id === null) {\n      return alert(\"id cv non presente\");\n    }\n    this.idCv = params.id;\n    this.changeFontFamily();\n  }\n\n  unbind() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n\n    //DOC: disinscrivo tutte gli observer su cvStyle\n    this.propObserverSubscription.forEach(s => s.dispose());\n  }\n\n\n  //DOC: callback richiamata quando ottengo i dati dello stile del curriculum\n  public onCurriculumStyleRead(data: any) {\n    console.log(\"Dati dell'utente letti o aggiornati\");\n    //console.log(data);\n    //imposto i valori di default all'ottenimento della prima lettura dello stile\n    if (!this.cvStyle) {\n      //cvStyle è il join di valori tra quelli di default e quelli ottenuti dal db\n      this.cvStyle = { ...defaultCurriculumStyle, ...data };\n      this.iconsPacks = LocalResources.icons;\n      this.changeFontFamily();\n      this.localIconPack = { name: defaultCurriculumStyle.iconsPack, icons: [] }\n\n      //DOC: creo le sottoscrizioni agli observer su cvStyle (che ha sicuramente tutti i campi settati)\n      console.log(\"creo sottoscrizioni agli observer su cvStyle:\", this.cvStyle);\n      for (let o in this.cvStyle) {\n        this.propObserverSubscription.push(this.be.propertyObserver(this.cvStyle, o).subscribe((_new, _old) => {\n          //console.log(o, \":\", _old, \"-->\", _new)\n          let obj = {}; obj[o] = _new;\n          this.db.updateCurriculumStyle(this.idCv, obj);\n        }))\n      }\n    }\n    setToDefaultValues(this.cvStyle, data);\n  }\n\n  localIconPackChanged(_new, _old) {\n    //console.log(_old, \"-->\", _new);\n    this.db.updateCurriculumStyle(this.idCv, { iconsPack: this.localIconPack });\n  }\n\n  //DOC: imposta il font secondo selezione alla pagina corrente\n  changeFontFamily() {\n    if (!document) return;\n    let linktag = document.querySelector('#googlefont') as HTMLLinkElement;\n    let fontFamily = this.cvStyle ? this.cvStyle.textFamily : defaultCurriculumStyle.textFamily; //NOTE: deve essere del formato: 'Permanent Marker', cursive;\n    let fontLink = fontFamily.split(',')[0].replace(/'/g, '').replace(/ /g, '+');\n    linktag.href = `https://fonts.googleapis.com/css?family=${fontLink}`;\n    //console.log(linktag.href);\n    this.localFontFamily = fontFamily;\n  }\n\n  //DOC: spostamento della finestra all'elemento passato TODO: non usato!! controllare\n  scrollToSection(section: string) {\n    if (this.element)\n      this.element.querySelector(section).scrollIntoView({ block: 'center', behavior: 'smooth' });\n  }\n\n  //DOC: resetta i valori di tutto lo stile ai valori di default\n  public resetDefault() {\n    if (confirm(\"You are going to reset the default values, are you sure?\")) {\n      this.cvStyle = defaultCurriculumStyle;\n      this.db.updateCurriculumStyle(this.idCv, this.cvStyle);\n    }\n  }\n\n  //DOC: eventi hovering/unhovering mouse sul layout\n  onHovering(e: Event) {\n    e.stopPropagation();\n    (e.target as Element).classList.add(\"border-dark\");\n  }\n  onUnHovering(e: Event) {\n    e.stopPropagation();\n    (e.target as Element).classList.remove(\"border-dark\");\n  }\n}\n","module.exports = \"<template> <require from=common/colorPicker/colorPicker></require> <require from=common/attributes/tooltip></require> <require from=common/loading/LoadingComponent></require> <div class=style-page> <loading-component is-loading.bind=!cvStyle></loading-component> <div if.bind=cvStyle class=container-fluid> <form> <div id=text class=row> <div class=col-12> <p class=\\\"form-group-title mb-1\\\" data-spy=scroll data-target=#list-setting data-offset=0 for=setting-family>Font of the text</p> <div class=\\\"form-group ml-2 ml-md-4\\\"> <div class=\\\"form-row mb-1\\\"> <div class=col-6> <div class=\\\"input-group input-group-sm\\\"> <div class=input-group-prepend> <span class=input-group-text id=basic-addon1>font-family:</span> </div> <input type=text class=form-control id=setting-family placeholder=\\\"Font of the text\\\" value.bind=\\\"cvStyle.textFamily & debounce:1000\\\" required> </div> </div> <div class=col-auto> <button class=\\\"btn btn-outline-secondary btn-sm\\\" type=button click.trigger=changeFontFamily()>Apply font</button> </div> <div class=col-auto> <label class=col-form-label-sm> <a data-toggle=collapse href=#howtodo-description role=button aria-expanded=false aria-controls=howtodo-description> How to do? </a></label> </div> </div> </div> <p> </p> <div class=collapse id=howtodo-description> <div class=\\\"card card-body mb-4\\\"> <p class=small>Visit the <a href=http://fonts.google.com>fonts.google.com</a> to find more fonts. Once you choosed, copy and paste the text after the font-style css specification and paste above.<br> For example, when you see <code>font-family: 'Literata', serif;</code> you need to paste only <code>'Literata', serif</code> without the semicolon at the end. </p> </div> </div> </div> </div> <div class=row> <div class=col-12> <p class=\\\"form-group-title mb-1\\\" data-spy=scroll data-target=#list-setting data-offset=0 for=setting-family>Colors</p> <div class=\\\"form-group ml-2 ml-md-4\\\"> <div class=\\\"form-row mb-1\\\"> <label for=header-1 class=\\\"col-2 col-form-label col-form-label-sm\\\">Primary</label> <div class=col-1> <button type=button class=\\\"btn btn-sm rounded-pill mb-1\\\" css=\\\"background-color: ${cvStyle.textColorPrimary}; width: ${cpPrimary.pickerVisible?'150%':'100%'};\\\" click.trigger=\\\"cpPrimary.pickerVisible=!cpPrimary.pickerVisible\\\">&nbsp;</button> <color-picker view-model.ref=cpPrimary color.bind=cvStyle.textColorPrimary></color-picker> </div> <div class=\\\"col offset-1\\\"> <h5 css=\\\"color: ${cvStyle.textColorPrimary}; font-family: ${localFontFamily};\\\">No, non c'è nulla più degno di pianto dell'uomo,</h5> </div> </div> <div class=\\\"form-row mb-1\\\"> <label for=header-1 class=\\\"col-2 col-form-label col-form-label-sm\\\">Secondary</label> <div class=col-1> <button type=button class=\\\"btn btn-sm rounded-pill mb-1\\\" css=\\\"background-color: ${cvStyle.textColorSecondary}; width: ${cpSecondary.pickerVisible?'150%':'100%'};\\\" click.trigger=\\\"cpSecondary.pickerVisible=!cpSecondary.pickerVisible\\\">&nbsp;</button> <color-picker view-model.ref=cpSecondary color.bind=cvStyle.textColorSecondary></color-picker> </div> <div class=\\\"col offset-1\\\"> <h5 css=\\\"color: ${cvStyle.textColorSecondary}; font-family: ${localFontFamily};\\\">fra tutto ciò che respira</h5> </div> </div> <div class=\\\"form-row mb-1\\\"> <label for=header-1 class=\\\"col-2 col-form-label col-form-label-sm\\\">More</label> <div class=col-1> <button type=button class=\\\"btn btn-sm rounded-pill mb-1\\\" css=\\\"background-color: ${cvStyle.textColorMore}; width: ${cpMore.pickerVisible?'150%':'100%'};\\\" click.trigger=\\\"cpMore.pickerVisible=!cpMore.pickerVisible\\\">&nbsp;</button> <color-picker view-model.ref=cpMore color.bind=cvStyle.textColorMore></color-picker> </div> <div class=\\\"col offset-1\\\"> <h5 css=\\\"color: ${cvStyle.textColorMore}; font-family: ${localFontFamily};\\\">e cammina sopra la terra. <small class=font-italic>{Omero}</small></h5> </div> </div> </div> </div> </div> <div class=row> <div class=col-12> <p class=\\\"form-group-title mb-1\\\" data-spy=scroll data-target=#list-setting data-offset=0>Sizes</p> <div class=\\\"form-group ml-2 ml-md-4\\\"> <div class=\\\"form-row mb-3\\\"> <label for=sizeRatio>${cvStyle.textSizeRatio*100}%</label> <input id=sizeRatio type=range class=custom-range value.bind=cvStyle.textSizeRatio min=0.5 max=1.5 step=0.1> </div> <div class=\\\"form-row mb-1\\\"> <label for=header-1 class=\\\"col-auto col-md-2 col-form-label col-form-label-sm\\\"># header</label> <div class=\\\"col offset-1\\\"> <h1 css=\\\"font-size:${2.5*cvStyle.textSizeRatio}rem; font-family: ${localFontFamily}\\\">Cantami, o Diva</h1> </div> </div> <div class=\\\"form-row mb-1\\\"> <label for=header-2 class=\\\"col-auto col-md-2 col-form-label col-form-label-sm\\\">## header</label> <div class=\\\"col offset-1 offset-1\\\"> <h2 css=\\\"font-size:${2*cvStyle.textSizeRatio}rem; font-family: ${localFontFamily}\\\">del pelide Achille</h2> </div> </div> <div class=\\\"form-row mb-1\\\"> <label for=header-3 class=\\\"col-auto col-md-2 col-form-label col-form-label-sm\\\">### header</label> <div class=\\\"col offset-1\\\"> <h3 css=\\\"font-size:${1.75*cvStyle.textSizeRatio}rem; font-family: ${localFontFamily}\\\">l'ira funesta che</h3> </div> </div> <div class=\\\"form-row mb-1\\\"> <label for=header-4 class=\\\"col-auto col-md-2 col-form-label col-form-label-sm\\\">#### header</label> <div class=\\\"col offset-1\\\"> <h4 css=\\\"font-size:${1.5*cvStyle.textSizeRatio}rem; font-family: ${localFontFamily}\\\">infiniti addusse lutti agli Achei,</h4> </div> </div> <div class=\\\"form-row mb-1\\\"> <label for=header-5 class=\\\"col-auto col-md-2 col-form-label col-form-label-sm\\\">##### header</label> <div class=\\\"col offset-1\\\"> <h5 css=\\\"font-size:${1.25*cvStyle.textSizeRatio}rem; font-family: ${localFontFamily}\\\">molte anzi tempo all'Orco</h5> </div> </div> <div class=\\\"form-row mb-1\\\"> <label for=header-6 class=\\\"col-auto col-md-2 col-form-label col-form-label-sm\\\">###### header</label> <div class=\\\"col offset-1\\\"> <h6 css=\\\"font-size:${1*cvStyle.textSizeRatio}rem; font-family: ${localFontFamily}\\\">generose travolse alme d'eroi.</h6> </div> </div> <div class=\\\"form-row mb-1\\\"> <label for=header-0 class=\\\"col-auto col-md-2 col-form-label col-form-label-sm\\\">Normal</label> <div class=\\\"col offset-1\\\"> <p css=\\\"font-size:${1*cvStyle.textSizeRatio}rem; font-family: ${localFontFamily}\\\">e di cani e d'augelli orrido pasto lor salme abbandonò . . .</p> </div> </div> </div> </div> </div> <div class=row if.bind=false> <div class=col-12> <p class=\\\"form-group-title mb-1\\\" for=setting-family>Lists</p> <div class=\\\"form-group ml-2 ml-md-4\\\"> <div class=\\\"form-row mb-1\\\"> <div class=\\\"custom-control custom-radio custom-control-inline\\\"> <input type=radio id=customRadioInline1 name=customRadioInline1 class=custom-control-input> <label class=custom-control-label for=customRadioInline1>Use this</label> </div> <div class=\\\"custom-control custom-radio custom-control-inline\\\"> <input type=radio id=customRadioInline2 name=customRadioInline1 class=custom-control-input> <label class=custom-control-label for=customRadioInline2>Use that</label> </div> </div> </div> </div> </div> <hr> <div id=tags class=row> <div class=col-12> <p class=\\\"form-group-title mb-1\\\" for=setting-family>Tags</p> <div class=\\\"form-group ml-2 ml-md-4\\\"> <div class=\\\"form-row mb-1\\\"> <div class=\\\"d-flex flex-wrap list-categories\\\"> <div repeat.for=\\\"t of cvStyle.tagsStyle\\\" class=\\\"d-flex flex-row ml-4 mb-2\\\"> <span class=\\\"badge badge-pill mr-1\\\" css=\\\"background-color: ${t.color}; font-family: ${localFontFamily};\\\" click.trigger=\\\"cpTag.pickerVisible=!cpTag.pickerVisible\\\">${t.category}</span> <color-picker view-model.ref=cpTag color.bind=t.color></color-picker> </div> </div> <small>To edit the category names go in the Edit Cv tab and modify or remove there the categories in the tag fields </small> </div> </div> </div> </div> <hr> <div id=icons class=row> <div class=col-12> <p class=\\\"form-group-title mb-1\\\" for=setting-family>Icons</p> <div class=\\\"form-group ml-2 ml-md-4\\\"> <div class=\\\"form-row mb-1 pl-3 icons-packs\\\"> <div class=\\\"custom-control custom-checkbox col-12 mb-2\\\"> <input id=enableIcons type=checkbox class=custom-control-input checked.bind=cvStyle.iconsEnabled> <label class=custom-control-label for=enableIcons>Enable icons</label> </div> <div class=\\\"list-group col-12\\\"> <a repeat.for=\\\"p of iconsPacks\\\" class=\\\"list-group-item list-group-item-action d-flex p-2 p-md-3\\\" click.trigger=\\\"cvStyle.iconsEnabled ? localIconPack = {name: p.name, icons: p.icons} : null\\\"> <div class=\\\"col-auto custom-control custom-radio\\\"> <input type=radio class=custom-control-input id=\\\"${'iconPack'+$index}\\\" model.bind=\\\"{ id: $index, name: p.name, icons: p.icons }\\\" matcher.bind=iconsPackMatcher checked.bind=localIconPack disabled.bind=!cvStyle.iconsEnabled style=cursor:pointer> <label class=\\\"custom-control-label mr-3\\\" for=\\\"${'iconPack'+$index}\\\" style=cursor:pointer>${p.name}</label> </div> <div class=\\\"col text-right\\\"> <img repeat.for=\\\"i of p.icons\\\" src.bind=i alt=\\\"\\\" class=p-1> </div> </a> </div> </div> </div> </div> </div> <hr> <div id=layout class=row> <div class=col-12> <p class=\\\"form-group-title mb-1\\\" for=setting-family>Layout</p> <div class=\\\"form-group ml-2 ml-md-4\\\"> <div class=\\\"form-row mb-1 pl-3\\\"> <div class=\\\"custom-control custom-checkbox col-12 mb-2\\\"> <input id=layoutWithBorder type=checkbox class=custom-control-input checked.bind=cvStyle.layourBorder> <label class=custom-control-label for=layoutWithBorder>use border <small>(not in mobile)</small></label> </div> </div> <div class=\\\"form-row mb-1 pl-3\\\"> <div class=col-12> <div class=row> <div tooltip class=\\\"col-12 border rounded-lg layout ${cvStyle.layourBorder ? 'with-border' : ''}\\\" data-toggle=tooltip data-placement=top data-title=Page mouseover.delegate=onHovering($event) mouseout.delegate=onUnHovering($event)> <div class=row> <div tooltip class=\\\"col-4 border rounded-lg layout-col\\\" data-toggle=tooltip data-placement=top data-title=\\\"Category title\\\" mouseover.delegate=onHovering($event) mouseout.delegate=onUnHovering($event)> </div> <div class=\\\"col-8 border rounded-lg layout-col\\\"> <div class=row> <div tooltip class=\\\"col-3 mr-2 border rounded-lg layout-col\\\" data-toggle=tooltip data-placement=left data-title=\\\"Experience Date\\\" mouseover.delegate=onHovering($event) mouseout.delegate=onUnHovering($event)> </div> <div tooltip class=\\\"col-8 border rounded-lg layout-col\\\" data-toggle=tooltip data-placement=right data-title=\\\"Experience Body\\\" mouseover.delegate=onHovering($event) mouseout.delegate=onUnHovering($event)> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <hr> </form> </div> </div> </template>\";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router, RouteConfig, NavigationInstruction } from 'aurelia-router';\nimport { HttpClient, json } from 'aurelia-fetch-client';\n\nimport { Curriculum, User } from 'definitions';\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\nimport * as Utils from 'helpers/utils';\n\n@autoinject\nexport class ViewCvPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = (new Logger()).setStyle(Logger.colors.orange, Logger.colors.white).setDefaultPrefix(\"EditorCVPage\");\n\n  //DOC: oggetto curriculum del modello DB\n  @bindable curriculum: Curriculum = null;\n  //DOC: id del cv nel DB\n  @bindable idCurriculum: string = \"\";\n\n  //DOC: indica se l'elemento è nello stato di EDIT, se false è in stato di VIEW\n  @bindable canEdit: boolean = false;\n  //DOC: indica se in stato di EDIT si sta modificando\n  @bindable isEditing: boolean = false;\n\n  //DOC: indica se il curriculum è stato completamente caricato\n  @bindable isLoadingCompleted: boolean = false;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  constructor(private db: Database, private router: Router) {\n    window.scrollTo(0, 0);\n  }\n\n  bind() {\n    //DOC: sottoscrivo eventi: ON sul curriculum\n    this.queries = [this.db.query(Path.curricula).orderByKey().equalTo(this.idCurriculum)];\n    this.queries[0].once(Action.onValue, (data: any) => this.onCurriculumReading.call(this, data));\n    //this.queries.forEach(q => console.log(q.toString()));\n  }\n  unbind() { }\n\n  activate(params: any, routeConfig: RouteConfig, navigationInstruction: NavigationInstruction) {\n    //NOTE: se l'id passato non corrisponde a nessun cv dell'utente allora ritorno alla dashboard\n    if (params.id == null)\n      this.router.navigateToRoute('dashboard');\n    else\n      this.idCurriculum = params.id;\n  }\n  \n  deactivate() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n\n  //DOC: callback richiamata al caricamento del Curriculum\n  public onCurriculumReading(data: any) {\n    if (!data.exists()) {\n      this.logger.warning(\"Cercato un curriculum che non esiste (\" + this.idCurriculum + \"), reindirizzo alla dashboard\");\n      this.router.navigateToRoute('dashboard');\n      return;\n    }\n    this.curriculum = Utils.toArrayOfObjects(data.val())[0] as Curriculum;\n  }\n\n}\n","module.exports = \"<template> <require from=./EditCvComponents/CurriculumComponent></require> <require from=common/loading/LoadingComponent></require> <div class=\\\"container-fluid editor-cv-page au-animate p-0\\\"> <loading-component view-model.ref=loading is-loading.bind=!isLoadingCompleted></loading-component> <curriculum-component if.bind=curriculum show.bind=isLoadingCompleted curriculum.bind=curriculum can-edit.bind=canEdit is-editing.bind=isEditing on-loading-completed.call=\\\"isLoadingCompleted=true\\\"></curriculum-component> </div> </template> \";","import { bindable, autoinject } from \"aurelia-framework\";\nimport { Router } from 'aurelia-router';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport './css/dashboard-curriculum-component.css'\n\n@autoinject\nexport class DashboardCurriculumComponent {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: oggetto curriculum da visualizzare\n  @bindable curriculumData: any;\n\n  //DOC: evento sollevato alla apertura del cv\n  @bindable public onOpening: (id: any) => void;\n  //DOC: evento sollevato alla cancellazione del cv\n  @bindable public onDelete: (cv: any) => void;\n\n  constructor() { }\n\n  public deleteCurriculum(o: any, event: any) {\n    event.stopImmediatePropagation();\n    if (!window.confirm('Do you really want to delete the curriculum?')) return;\n    this.onDelete(o);\n  }\n\n}\n","module.exports = \"<template> <require from=converters/dateRelative></require> <div class=\\\"dashboard-curriculum-component ${css}\\\"> <div click.trigger=\\\"onOpening({id: curriculumData.id})\\\" class=\\\"card my-3\\\"> <div class=card-body> <h4 class=card-title innerhtml.bind=curriculumData.title> </h4> <p class=card-text innerhtml.bind=curriculumData.description></p> <p class=card-text><small class=text-muted>Last edit: ${curriculumData.lastUpdate | dateRelative}</small></p> <a click.trigger=\\\"deleteCurriculum({id: curriculumData.id}, $event)\\\" class=\\\"card-link text-primary\\\" role=button>Delete</a> </div> </div> </div> </template> \";","import { observable, computedFrom, bindable, autoinject, DOM } from 'aurelia-framework';\nimport { Router } from 'aurelia-router';\n\nimport { Logger } from 'helpers/logger';\nimport * as Utils from 'helpers/utils';\nimport { ErrorManager } from 'helpers/errorManager';\n\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { Authentication } from 'services/authentication';\n\nimport { Curriculum, User, defaultCurriculum } from 'definitions';\n\n@autoinject\nexport class DashboardPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: oggetto che contiene la lista dei curricula\n  @bindable curricula: Curriculum[] = [];\n\n  //DOC: indica se sta caricando i curricula\n  @bindable isLoadingData: boolean = true;\n\n  @bindable name: string = \"\";\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  constructor(private db: Database, private auth: Authentication, private router: Router) { }\n\n  bind() {\n    //DOC: sottoscrivo eventi: ON sui curricula, ON sull'utente\n    this.queries = [\n      this.db.query(Path.curricula).orderByChild(ChildPath.idUser).equalTo(this.auth.getCurrentUser().uid),\n      this.db.query(Path.users).orderByKey().equalTo(this.auth.getCurrentUser().uid)\n    ];\n    this.queries[0].on(Action.onValue, (data: any) => this.onCurriculumReading.call(this, data));\n    this.queries[0].on('value', function (snapshot) {\n      //console.log(\"modificato\", snapshot);\n    });\n    //this.queries[0].on(Action.onAdded, (data: any) => this.onCurriculumAdded.call(this, data));\n    //this.queries[0].on(Action.onRemoved, (data: any) => this.onCurriculumRemoved.call(this, data));\n\n    this.queries[1].once(Action.onValue, (data: any) => this.onUserRead.call(this, Utils.toArrayOfObjects(data.val())[0])); //NOTE: prendo il primo elemento dell'array (ma ce ne è solo uno)\n    //this.queries.forEach(q => console.log(q.toString()));\n\n    console.log(\"subscribed\");\n    window.scrollTo(0, 0);\n  }\n\n  unbind() {\n    //DOC: disinscrivo tutti gli eventi\n    console.log(\"unscribed\");\n  }\n\n  //DOC: callback alla lettura dei curricula\n  public onCurriculumReading(data: any) {\n    this.logger.log(\"Curriculum letto\");\n    //NOTE: trasformo data in array di oggetti e aggiorno i cvs\n    this.curricula = Utils.toArrayOfObjects(data.val());\n    this.isLoadingData = false;\n  }\n  /*\n    //DOC: callback alla lettura dei curricula\n    public onCurriculumAdded(data: any) {\n      this.logger.log(\"Curriculum effettivamente aggiunto al DB\");\n      var e = data.val() as Curriculum;\n      e.id = data.key;\n      // aggiungo il cv alla lista dei curricula\n      if (this.curricula.some(_ => _.id == e.id))\n        throw new Error(\"Il curriculum che si vuole aggiungere è già presente\");\n      this.curricula.push(e);\n      this.isLoadingData = false;\n    }\n    //DOC: callback alla lettura dei curricula\n    public onCurriculumRemoved(data: any) {\n      this.logger.log(\"Curriculum effettivamente rimosso dal DB\");\n      // elimino il curriculum dalla lista dei curricula\n      var index = this.curricula.findIndex(c => c.id == data.key);\n      if (index == -1)\n        throw new Error(\"Il curriculum che si vuole eliminare non è stato trovato\");\n      this.curricula.splice(index, 1);\n    }\n    */\n  //DOC: callback richiamata quando ottengo i dati dell'utente\n  public onUserRead(data: any) {\n    data = data as User;\n    this.name = data.name || this.name;\n  }\n\n  //DOC: elimina un curriculum\n  openCurriculum(id: string) {\n    this.router.navigateToRoute(\"cv\", { id: id });\n  }\n\n  //DOC: elimina un curriculum\n  deleteCurriculum(c: Curriculum) {\n    this.logger.log(\"Cancello il curriculum \", c.id);\n    this.db.deleteCurriculum(c.title, c.id, this.auth.getCurrentUser().uid);\n  }\n\n  //DOC: crea un nuovo curriculum\n  createCurriculum() {\n    this.logger.log(\"Creo un nuovo curriculum \");\n    let c: Curriculum = { ...defaultCurriculum, uid: this.auth.getCurrentUser().uid, lastUpdate: (new Date()).getTime() };\n    this.db.appendCurriculum(c);\n  }\n\n  //DOC: restituisce true se ci sono curricula, false altrimenti\n  @computedFrom(\"curricula.length\")\n  get hasCurricula() {\n    return this.curricula.length > 0;\n  }\n\n}\n","module.exports = \"<template> <require from=sections/FooterSection></require> <require from=common/loading/LoadingComponent></require> <require from=./DashboardComponents/DashboardCurriculumComponent></require> <div class=\\\"container dashboard-page au-animate pt-4\\\"> <loading-component is-loading.bind=isLoadingData></loading-component> <div if.bind=\\\"!isLoadingData && hasCurricula\\\"> <div class=row> <div class=col> <h3>Hello ${name}, here you have your cv</h3> <hr> </div> </div> <div class=row> <div class=\\\"col-12 col-md-4\\\"> <dashboard-curriculum-component repeat.for=\\\"c of curricula\\\" curriculum-data.bind=c on-delete.call=deleteCurriculum(c) on-opening.call=openCurriculum(id)></dashboard-curriculum-component> </div> </div> <div if.bind=\\\"!isLoadingData && !hasCurricula\\\" class=row> <p>You have no curricula yet</p> </div> <div class=row> <div class=col-auto> <button click.delegate=createCurriculum() class=\\\"btn btn-lg btn-outline-primary\\\" type=button>Create new curriculum</button> </div> </div> </div> </div> </template> \";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\n\nimport { Logger } from 'helpers/logger';\nimport { ErrorManager } from 'helpers/errorManager';\n\nimport './css/index-page.css';\n\n@autoinject\nexport class IndexPage {\n    //DOC: gestore degli errori\n    private errorManager: ErrorManager = new ErrorManager();\n    //DOC: gestore della console\n    private logger: Logger = new Logger();\n\n    constructor() { }\n\n    bind() {\n        window.scrollTo(0, 0);\n    }\n\n    @computedFrom('body.offsetHeight')\n    get offsetHeight(): number {\n        //console.log(document.body.offsetHeight);\n        return document.body.offsetHeight - 100;\n    }\n}","module.exports = \"<template> <require from=sections/FooterSection></require> <div class=\\\"index-page container pt-4 h-100\\\"> <div class=\\\"row justify-content-center\\\" css=\\\"height: ${offsetHeight}px;\\\"> <div class=\\\"col text-center m-1 h-100\\\"> <div class=\\\"d-flex flex-column justify-content-around align-items-center mb-3 h-100\\\"> <h2 class=\\\"font-weight-normal m-0\\\"> Looking for a job is a <strong>serious</strong> stuff.<br> Use a <strong>serious</strong> curriculum!</h2> <h4 class=\\\"font-weight-normal font-italic m-0\\\">Skills. Abilities. Reputation.</h4> <a class=\\\"btn btn-primary rounded-pill px-3 m-0\\\" style=font-size:20px href=#>Take a tour</a> </div> </div> <div class=\\\"h-75 m-auto\\\" style=width:1px;background:#d3d3d3></div> <div class=\\\"col text-center m-1 h-100\\\"> <div class=\\\"d-flex flex-column justify-content-center align-items-center mb-3 h-100\\\"> <i class=\\\"fas fa-file-signature fa-10x\\\"></i> </div> </div> </div> <div class=\\\"row justify-content-center\\\"> <a class=\\\"btn rounded-circle border\\\" style=margin-top:-20px;background-color:#fff;z-index:1000> <i class=\\\"fas fa-arrow-down\\\"></i> </a> </div> <div id=more-content> <div class=\\\"row justify-content-center mt-5\\\"> \\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\\" </div> <div class=\\\"row justify-content-center mt-5\\\"> \\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\\" </div> <div class=\\\"row justify-content-center mt-5\\\"> \\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\\" </div> </div> </div> </template>\";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router } from 'aurelia-router';\n\nimport { Database } from 'services/database';\nimport { Logger } from 'helpers/logger';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Authentication } from 'services/authentication';\n\nimport { Log } from 'definitions';\n\n@autoinject\nexport class LoginPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  @bindable email: string = \"jacopofederici@ymail.com\";\n  @bindable password: string = \"casamia1993\";\n\n  timeout: number = 5000;\n  ms: number = 500;\n  @bindable attempts: number = 0;\n\n  @bindable resetPasswordEmailSent: boolean = false;\n\n  constructor(private router: Router, private auth: Authentication) { }\n\n  bind() {\n    window.scrollTo(0, 0);\n    if (this.auth.isLogged)\n      this.router.navigateToRoute('dashboard');\n  }\n\n  //DOC: metodo per il login con email e password\n  public login() {\n    this.attempts = 0;\n    if (this.email != \"\" && this.password != \"\") {\n      console.log(\"logging in...\");\n      //NOTE: l'intervallo incrementa gli attempts e l'intervallo esegue l'alert al timeout\n      let intervalFun = setInterval(() => this.attempts++, this.ms);\n      let timeoutFun = setTimeout(() => {\n        alert(\"Something went wrong. Check your internet or reload the page. It solve almost everything, maybe even this.\");\n        clearInterval(intervalFun);\n        //this.errorManager.error(\"Timeout Login Error\");\n      }, this.timeout);\n      this.auth.loginWithUsernameAndPassword(this.email, this.password)\n        .then(() => {\n          clearInterval(intervalFun);\n          clearTimeout(timeoutFun);\n          this.router.navigateToRoute('dashboard');\n        });\n    }\n  }\n\n  //DOC: invia la mail per resettare la password\n  public sendEmailToResetPassword() {\n    if (this.email != \"\") {\n      this.auth.sendPasswordResetEmail(this.email);\n      this.resetPasswordEmailSent = true;\n    }\n  }\n\n}\n","module.exports = \"<template> <require from=sections/FooterSection></require> <require from=common/loading/LoadingComponent></require> <div class=\\\"container-fluid login-page au-animate pt-4\\\"> <loading-component is-loading.bind=false></loading-component> <div class=container> <div class=row> <div class=\\\"col-4 offset-4\\\"> <form> <div class=form-group> <label for=exampleInputEmail>Email address</label> <input type=email class=form-control id=exampleInputEmail aria-describedby=emailHelp placeholder=\\\"Enter email\\\" value.bind=email> </div> <div class=form-group> <label for=exampleInputPassword>Password</label> <input type=password class=form-control id=exampleInputPassword placeholder=Password value.bind=password> </div> <button class=\\\"btn btn-light\\\" click.delegate=login()>Login <span repeat.for=\\\"i of attempts\\\"> .</span></button> <button click.delegate=sendEmailToResetPassword() type=button class=\\\"btn btn-link\\\">I forgot my password</button> <div if.bind=resetPasswordEmailSent class=\\\"p-3 mb-2 bg-success text-white\\\"> We've sent and email to your main security email address (${email}) to reset the password. </div> </form> </div> </div> </div> </div> </template>\";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router } from 'aurelia-router';\n\nimport { Database } from 'services/database';\nimport { Logger } from 'helpers/logger';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Authentication } from 'services/authentication';\n\nimport { Log } from 'definitions';\n\n@autoinject\nexport class LogoutPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  constructor(private router: Router, private auth: Authentication) { }\n\n  bind() {\n    window.scrollTo(0, 0);\n    if (!this.auth.isLogged) {\n      this.router.navigateToRoute('index');\n    }\n    else {\n      console.log(\"logging out...\");\n      setTimeout(\n        () => this.auth.logout().then(() => this.router.navigateToRoute('index')),\n        1000);\n    }\n  }\n\n}\n","module.exports = \"<template> <require from=sections/FooterSection></require> <require from=common/loading/LoadingComponent></require> <div class=\\\"container-fluid logout-page au-animate pt-4\\\"> <loading-component is-loading.bind=true></loading-component> <div class=container> <div class=row> <div class=\\\"col text-center\\\"> Logging out . . . </div> </div> </div> </div> </template>\";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router } from 'aurelia-router';\n\nimport { Database } from 'services/database';\nimport { Authentication } from 'services/authentication';\nimport { User } from 'definitions';\n\nimport { Logger } from 'helpers/logger';\nimport { ErrorManager } from 'helpers/errorManager';\n\n@autoinject\nexport class RegistrationPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  @bindable name: string = \"\";\n  @bindable lastname: string = \"\";\n  @bindable email: string = \"\";\n  @bindable password: string = \"\";\n\n  constructor(private router: Router, private auth: Authentication, private database: Database) { }\n\n  bind() {\n    window.scrollTo(0, 0);\n    if (this.auth.isLogged)\n      this.router.navigateToRoute('dashboard');\n  }\n\n  //DOC: metodo per la registrazione dell'utente\n  public registerUser() {\n    this.logger.info(\"Registration page\", this.name, this.lastname, this.email, this.password);\n    this.auth.registration(this.email, this.password)\n      .then(_ => {\n        //NOTE: se tutto ok invio email di verifica\n        this.auth.sendEmailVerification();\n        //NOTE: e aggiungo l'utente al database\n        let t = new Date();\n        this.database.appendUser(\n          {\n            id: this.auth.getCurrentUser().uid,\n            name: this.name,\n            lastname: this.lastname,\n            lastLogin: t.getTime(),\n            dor: t.getTime(),\n            enabled: false\n          } as User);\n      })\n      .then(() => this.router.navigateToRoute('dashboard'))\n      .catch();\n  }\n\n}\n","module.exports = \"<template> <require from=sections/FooterSection></require> <require from=common/loading/LoadingComponent></require> <div class=\\\"container-fluid registration-page au-animate\\\"> <loading-component is-loading.bind=false></loading-component> <div class=\\\"container pt-4\\\"> <div class=row> <div class=\\\"col-4 offset-4\\\"> <form> <div class=form-group> <div class=form-group> <label for=inputName>Name</label> <input type=text class=form-control id=inputName placeholder=\\\"Your name\\\" value.bind=name> </div> <div class=form-group> <label for=inputLstname>Last name</label> <input type=text class=form-control id=inputLastName placeholder=\\\"Your last name\\\" value.bind=lastname> </div> <label for=inputEmail>Email address</label> <input type=email class=form-control id=inputEmail aria-describedby=emailHelp placeholder=\\\"Enter email address\\\" value.bind=email> <small id=emailHelp class=\\\"form-text text-muted\\\">We'll never share your email with anyone else.</small> </div> <div class=form-group> <label for=inputPassword>Password</label> <input type=password class=form-control id=inputPassword placeholder=Password value.bind=password> </div> <button type=submit class=\\\"btn btn-light\\\" click.delegate=registerUser()>Registrazione</button> </form> </div> </div> </div> </div> </template>\";","import { PLATFORM } from 'aurelia-pal';\nimport { bindable, autoinject } from 'aurelia-framework';\nimport { Router, RouterConfiguration } from 'aurelia-router';\n\nimport { Logger } from 'helpers/logger';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Authentication } from 'services/authentication';\n\n@autoinject\nexport class UserPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  constructor(private router: Router) { }\n\n  configureRouter(config: RouterConfiguration, router: Router) {\n    config.map([\n      { route: ['', 'profile'], name: 'user/profile', moduleId: PLATFORM.moduleName('pages/UserSubpages/ProfilePage'), nav: true, title: 'Profile' },\n      { route: 'account', name: 'user/account', moduleId: PLATFORM.moduleName('pages/UserSubpages/AccountPage'), nav: true, title: 'Account' },\n      { route: 'email', name: 'user/email', moduleId: PLATFORM.moduleName('pages/UserSubpages/EmailPage'), nav: true, title: 'Email' },\n      { route: 'notifications', name: 'user/notifications', moduleId: PLATFORM.moduleName('pages/UserSubpages/NotificationsPage'), nav: true, title: 'Notifications' },\n      { route: 'security', name: 'user/security', moduleId: PLATFORM.moduleName('pages/UserSubpages/SecurityPage'), nav: true, title: 'Security' }\n    ]);\n    this.router = router;\n  }\n\n  bind() {\n    window.scrollTo(0, 0);\n  }\n}\n","module.exports = \"<template> <require from=sections/FooterSection></require> <div class=\\\"container pt-4\\\"> <div class=row> <div class=\\\"col-12 col-md-3\\\"> <ul class=\\\"list-group mb-5 d-none d-md-block\\\"> <li class=\\\"list-group-item py-2\\\"><strong>Personal settings</strong></li> <a repeat.for=\\\"r of router.navigation\\\" href.bind=r.href class=\\\"list-group-item list-group-item-action py-2 ${r.isActive ? 'active' : ''}\\\">${r.title} <span if.bind=r.isActive class=sr-only>(current) </span> </a> </ul> <div class=\\\"dropdown pb-3 d-md-none d-lg-none\\\"> <button class=\\\"btn btn-secondary dropdown-toggle btn-block\\\" type=button id=userPagesNav data-toggle=dropdown aria-haspopup=true aria-expanded=false> Personal settings </button> <div class=\\\"dropdown-menu w-100\\\" aria-labelledby=userPagesNav> <a repeat.for=\\\"r of router.navigation\\\" href.bind=r.href class=\\\"dropdown-item ${r.isActive ? 'active' : ''}\\\">${r.title} </a> </div> </div> </div> <div class=\\\"col-12 col-md-8\\\"> <router-view></router-view> </div> </div> </div> </template> \";","import { Database } from 'services/database';\nimport { Authentication } from 'services/authentication';\nimport { autoinject, computedFrom, bindable } from 'aurelia-framework';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\nimport * as zxcvbn from 'zxcvbn';\n\n@autoinject\nexport class AccountPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: dati account\n  @bindable email: string = \"\";\n  @bindable oldPassword: string = \"\";\n  @bindable newPassword1: string = \"\";\n  @bindable newPassword2: string = \"\";\n\n  //DOC: indica se l'utente ha inserito correttamente la password corrente per poi settare la nuova\n  @bindable reauthenticated: boolean = false;\n\n  //DOC: indica la forza della password ottenuta da zxcvbn\n  @bindable passwordStrength: any = null;\n\n  constructor(private auth: Authentication, private db: Database) { }\n\n  bind() {\n    this.email = this.auth.getCurrentUser().email;\n    window.scrollTo(0, 0);\n  }\n\n  public newPassword1Changed(_new: string, _old: string) {\n    //NOTE: calcolo la forza della password con il plugin zxcvbn\n    this.passwordStrength = zxcvbn(_new);\n  }\n\n  //DOC: metodo che verifica la password corrente prima di importare la nuova\n  public reAuthenticate() {\n    this.auth.reAuthenticateUser(this.email, this.oldPassword)\n      .then(_ => { console.log(\"reauthenticated with success\"); this.reauthenticated = true; })\n      .catch(_ => console.log(\"got some trouble\"));\n  }\n\n  //DOC: metodo per aggiornare la password\n  public updatePassword() {\n    if (this.newPassword1 != this.newPassword2) return;\n    if (zxcvbn(this.newPassword1).score >= 3) {\n      console.log(\"Aggiornamento password di \", this.email, \" di \", this.oldPassword, \" con \", this.newPassword2);\n      this.auth.updatePassword(this.email, this.oldPassword, this.newPassword2)\n        .then(_ => {\n          alert(\"Password correctly changed!\");\n          this.reauthenticated = false;\n        });\n    }\n    else {\n      alert(\"The password is not enough strong\");\n      console.log(\"password not enough strong\");\n    }\n  }\n\n  //DOC: metodo per inviare la mail per il reset della password\n  public sendEmailToResetPassword() {\n    this.auth.sendPasswordResetEmail(this.email);\n    alert(`We've sent and email to your main email address (${this.email}) to reset the password.`);\n  }\n\n  //DOC: metodo eliminare completamente un account\n  public deleteAccount() {\n    alert(\"This function is currently not implemented. Contact the support to perform this operation\");\n  }\n\n  //DOC: restituisce le classi css in base alla forza della password inserita\n  @computedFrom('passwordStrength.score')\n  get passwordStrengthCss() {\n    if (!this.passwordStrength) return \"bg-danger\";\n    switch (this.passwordStrength.score) {\n      case 0:\n      case 1: return \"bg-danger\";\n      case 2: return \"bg-warning\";\n      case 3: return \"bg-warning\";\n      case 4: return \"bg-success\";\n    }\n    return \"bg-danger\";\n  }\n  //DOC: restituisce la percentuale della forza della password inserita\n  @computedFrom('passwordStrength.score')\n  get passwordStrengthPercentage() {\n    let p = 100 / 3;\n    if (!this.passwordStrength) return p;\n    return this.passwordStrength.score * p + p;\n  }\n  //DOC: restituisce la stringa con gli warning e suggestions sulla password inserita\n  @computedFrom('passwordStrength.feedback.warning', 'passwordStrength.feedback.suggestions')\n  get suggestions(): string {\n    //codice brutto!\n    if (!this.passwordStrength) return \"\";\n    let warn = this.passwordStrength.feedback.warning.trim();\n    warn = warn == \"\" || warn[warn.length - 1] == \".\" ? warn : warn + \". \";\n    let sugg = this.passwordStrength.feedback.suggestions.join(\"\").trim();\n    if (this.passwordStrength.feedback.suggestions.length > 1)\n      sugg = this.passwordStrength.feedback.suggestions.join(\". \").trim();\n    sugg = sugg == \"\" || sugg[sugg.length - 1] == \".\" ? sugg : sugg + \".\";\n    let fin = (warn + sugg).replace(\".,\", \". \");\n    return (fin != \"\" ? fin : \"Perfect\");\n  }\n}\n","module.exports = \"<template> <require from=common/loading/LoadingComponent></require> <div class=container-fluid> <div class=row> <div class=\\\"col-12 pb-3\\\"> <div class=row> <div class=col> <h4 class=mb-0>Change password</h4> </div> <div class=\\\"col-auto d-flex\\\"> <small class=\\\"text-right align-self-end\\\"></small> </div> </div> <hr class=mt-2> <div class=row> <div class=col-12> <template if.bind=!reauthenticated> <p>Insert you current password before to setup the new one.</p> <form> <div class=\\\"row no-gutters\\\"> <div class=\\\"form-group col-12 col-md-6\\\"> <label for=oldPassword>Current password</label> <input value.bind=oldPassword type=password class=form-control id=oldPassword> </div> </div> <div class=\\\"row no-gutters\\\"> <button click.delegate=reAuthenticate() class=\\\"btn btn-light col-6 col-md-3\\\" type=submit>Re authenticate</button> <button click.delegate=sendEmailToResetPassword() type=button class=\\\"btn btn-link btn-sm col-6 col-md-3\\\">I forgot my password</button> </div> </form> </template> <template if.bind=reauthenticated> <p>Now insert your new password. Use a strong one to reduce the risk to get hacked.</p> <form> <div class=\\\"row no-gutters align-items-center\\\"> <div class=\\\"form-group col-12 col-md-6\\\"> <label for=newPasswordInput>New password</label> <input value.bind=\\\"newPassword1 & debounce:300\\\" type=password class=form-control id=newPasswordInput ref=newPasswordInput> <div if.bind=\\\"newPasswordInput.value.length != 0\\\" class=\\\"progress mt-2\\\" style=height:5px> <div class=\\\"progress-bar ${passwordStrengthCss}\\\" role=progressbar css=\\\"width: ${passwordStrength.score*20 + 20}%\\\" aria-valuenow.bind=\\\"passwordStrength.score*20 + 20\\\" aria-valuemin=0 aria-valuemax=100></div> </div> </div> <div class=\\\"form-group col ml-md-3\\\"> <p class=\\\"m-0 p-0\\\"><small innerhtml.bind=suggestions></small></p> </div> </div> <div class=\\\"row no-gutters align-items-center\\\"> <div class=\\\"form-group col-12 col-md-6\\\"> <label for=confirmNewPassword>Confirm new password</label> <input value.bind=newPassword2 type=password class=form-control id=confirmNewPassword> </div> <div class=\\\"form-group col ml-md-3\\\"> <p show.bind=\\\"newPassword1!=newPassword2\\\" class=\\\"m-0 p-0\\\"><small>The two passwords are not equal</small></p> </div> </div> <div class=\\\"row no-gutters\\\"> <button click.delegate=updatePassword() disabled.bind=\\\"newPassword1!=newPassword2\\\" class=\\\"btn btn-light col-12 col-md-3\\\" type=submit>Update password</button> </div> </form> </template> </div> </div> </div> </div> <div class=row> <div class=\\\"col-12 pb-3 mt-4\\\"> <div class=row> <div class=col> <h4 class=mb-0>Delete account</h4> </div> <div class=\\\"col-auto d-flex\\\"> <small class=\\\"text-right align-self-end\\\"></small> </div> </div> <hr class=mt-2> <div class=row> <div class=col-12> <p>This action will irreversibly delete all your data, including your curricula, your personal settings and your credentials (mail and password) you use to login.<br> After the deletion you will be able, if you like, to registrate again with the same credential.</p> <button class=\\\"btn btn-danger col-6 col-md-3\\\" type=button click.delegate=deleteAccount()>Delete account</button> </div> </div> </div> </div> </div> </template> \";","import { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { Authentication } from 'services/authentication';\nimport { autoinject, computedFrom, bindable } from 'aurelia-framework';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\nimport * as Utils from 'helpers/utils';\n\nimport { Storage_ } from 'services/storage';\nimport { User } from 'definitions';\n\n@autoinject\nexport class EmailPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: dati utente: id, mail primaria e altre mail\n  private idUser: string;\n  @bindable email: string = \"\";\n  @bindable password: string = \"\";\n  @bindable otherEmails: string[] = [];\n\n  //DOC: nuova mail che si vuole aggiungere a otherEmails\n  @bindable newEmail: string = \"\";\n\n  //DOC: indica se l'utente ha inserito correttamente la password corrente per cambiare la mail\n  @bindable reauthenticated: boolean = false;\n\n\n  //DOC: indica se si stanno caricando i dati\n  @bindable isLoadingData: boolean = true;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  constructor(private db: Database, private auth: Authentication) { }\n\n  bind() {\n    this.email = this.auth.getCurrentUser().email;\n    //DOC: sottoscrivo eventi: ON sui curricula, ON sull'utente\n    this.queries = [this.db.query(Path.users).orderByKey().equalTo(this.auth.getCurrentUser().uid)];\n    this.queries[0].on(Action.onValue, (data: any) => this.onUserRead.call(this, Utils.toArrayOfObjects(data.val())[0]));//NOTE: prendo il primo elemento dell'array (ma ce ne è solo uno)\n    //this.queries.forEach(q => console.log(q.toString()));\n    //TODO: aggiungere on modified perchè se cancello tutto il blocco delle mail lui non se ne accorge (da verificare di nuovo)\n    window.scrollTo(0, 0);\n  }\n  unbind() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n\n  //DOC: callback richiamata quando ottengo i dati dell'utente\n  public onUserRead(data: any) {\n    this.logger.log(\"Dati dell'utente letti o aggiornati\");\n    data = data as User;\n    //console.log(data);\n    this.idUser = data.id || this.idUser;\n    this.otherEmails = data.otherEmails || this.otherEmails;\n    this.isLoadingData = false;\n  }\n\n  //DOC: metodo che verifica la password corrente prima di importare la nuova\n  public reAuthenticate() {\n    this.auth.reAuthenticateUser(this.email, this.password)\n      .then(_ => { console.log(\"reauthenticated with success\"); this.reauthenticated = true; })\n      .catch(_ => console.log(\"got some trouble\"));\n  }\n\n  //DOC: metodo per aggiornare la password\n  public updateEmail() {\n    if (this.newEmail == \"\") return;\n    if (true/*TODO: check email with regex*/ /*&& this.email != this.newEmail*/) {\n      console.log(\"Aggiornamento email da \", this.email, \" a \", this.newEmail);\n      this.auth.updateEmail(this.password, this.email, this.newEmail)\n        .then(_ => {\n          alert(\"Email address correctly changed!\\nWe've sent an email to the new address to verify it\");\n          this.reauthenticated = false;\n        });\n    }\n    else {\n      alert(\"The email address is not valid\");\n      console.log(\"Email address is not valid\");\n    }\n  }\n\n  //TODO: aggiunge una mail all'account\n  public addEmail() {\n    this.logger.log(\"Aggiornamento dati dell'utente\");\n    if (!true/*TODO: check email with regex*/) {\n      this.logger.error(\"mail non valida\");\n      return;\n    }\n    this.otherEmails.splice(this.otherEmails.length - 1, 0, this.newEmail);\n    this.db.updateUser(this.idUser,\n      {\n        uid: this.auth.getCurrentUser().uid,\n        otherEmails: this.otherEmails\n      });\n    this.newEmail = \"\";\n  }\n\n}\n","module.exports = \"<template> <require from=common/loading/LoadingComponent></require> <div class=container-fluid> <div class=row> <div class=\\\"col-12 pb-3\\\"> <div class=row> <div class=col> <h4 class=mb-0>Email</h4> </div> <div class=\\\"col-auto d-flex\\\"> <small show.bind=\\\"email!=''\\\" class=\\\"text-right align-self-end\\\">Your current email is <strong>${email}</strong></small> </div> </div> <hr class=mt-2> <loading-component is-loading.bind=isLoadingData></loading-component> <div show.bind=!isLoadingData class=row> <div class=col-12> <template if.bind=!reauthenticated> <p>Insert your password before to change your email.</p> <form> <div class=\\\"row no-gutters\\\"> <div class=\\\"form-group col-12 col-md-6\\\"> <label for=password>Your password</label> <input value.bind=password type=password class=form-control id=password> </div> </div> <div class=\\\"row no-gutters\\\"> <button click.delegate=reAuthenticate() class=\\\"btn btn-light\\\" type=submit>Re authenticate</button> </div> </form> </template> <template if.bind=reauthenticated> <p>Now insert your new email address. We will send you an mail to let you verify it.</p> <form> <div class=\\\"row no-gutters align-items-center\\\"> <div class=\\\"form-group col-12 col-md-6\\\"> <label for=newEmail>New email</label> <input value.bind=\\\"newEmail & debounce:300\\\" type=email class=form-control id=newEmail> </div> </div> <div class=\\\"row no-gutters\\\"> <button click.delegate=updateEmail() class=\\\"btn btn-light\\\" type=submit>Update email</button> </div> </form> </template> </div> </div> </div> </div> </div> </template> \";","export class NotificationsPage{\n\n  bind(){\n    window.scrollTo(0, 0);\n  }\n  \n}\n","module.exports = \"<template> <require from=common/loading/LoadingComponent></require> <div class=container-fluid> <div class=row> <div class=\\\"col-12 pb-3\\\"> <div class=row> <div class=col> <h4 class=mb-0>Notifications</h4> </div> <div class=\\\"col-auto d-flex\\\"> <small class=\\\"text-right align-self-end\\\"></small> </div> </div> <hr class=mt-2> <div class=row> <div class=col-12> <p>Right now all the notifications are sent to the email you have used to registrate here. In the future you will be able to change it accordingly with the type of email.</p> <hr> </div> </div> </div> </div> </div> </template> \";","import { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { Authentication } from 'services/authentication';\nimport { autoinject, computedFrom, bindable } from 'aurelia-framework';\nimport { ValidationController, ValidationControllerFactory, ValidationRules } from 'aurelia-validation';\nimport { BootstrapFormRenderer } from 'helpers/validationFormRender';\n\nimport { Storage_, LocalResources } from 'services/storage';\nimport { User } from 'definitions';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\nimport * as Utils from 'helpers/utils';\n\nimport { DateFormatValueConverter } from 'converters/dateFormat';\n\n@autoinject\nexport class ProfilePage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: dati dell'utente ottenuti dal database\n  @bindable name: string = \"\";\n  @bindable lastname: string = \"\";\n  @bindable dob: number = 0;\n  @bindable dor: number = 0;\n  @bindable gender: string = \"\";\n  @bindable address: string = \"\";\n  @bindable photoURL: string = \"\";\n  //DOC: nuova immagine del profilo che si sta caricando\n  @bindable newProfileImage: any = [];\n  //DOC: progresso nel caricamento della nuova immagine del profilo\n  @bindable uploadProgress: number = -1;\n  //DOC: indica se si stanno caricando i dati\n  @bindable isLoadingData: boolean = true;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  //DOC: oggetto controller della validazione di forms\n  public validationController: ValidationController;\n\n  constructor(private storage: Storage_, private auth: Authentication, private db: Database,\n    private controllerFactory: ValidationControllerFactory) {\n    this.validationController = controllerFactory.createForCurrentScope();\n    this.validationController.addRenderer(new BootstrapFormRenderer());\n  }\n\n  bind() {\n    if (this.auth.getCurrentUser().photoURL != \"\" && this.auth.getCurrentUser().photoURL != null)\n      this.photoURL = this.auth.getCurrentUser().photoURL;\n    else\n      this.photoURL = LocalResources.profile.default;\n\n    this.queries = [this.db.query(Path.users).orderByKey().equalTo(this.auth.getCurrentUser().uid)];\n    this.queries[0].on(Action.onValue, (data: any) => this.onUserRead.call(this, Utils.toArrayOfObjects(data.val())[0]));//NOTE: prendo il primo elemento dell'array (ma ce ne è solo uno)\n    window.scrollTo(0, 0);\n  }\n\n  unbind() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n\n  //DOC: metodo richiamato quando newProfileImage ha il valore della nuova immagine\n  public newProfileImageChanged(_old, _new) {\n    if (this.newProfileImage.length == 0) return;\n    //FIXME: non faccio il controllo dell'estensione (che dovrei fare soprattutto in backend)\n    this.storage.uploadProfilePicture(this.auth.getCurrentUser().uid, this.newProfileImage[0], this.onProgress, this.onCompleted, this);\n\n  }\n  //DOC: callback richiamata al progresso del caricamento\n  onProgress(snapshot: any) {\n    var progress = snapshot.bytesTransferred / snapshot.totalBytes * 100;\n    this.uploadProgress = progress;\n  }\n  //DOC: callback richiamata al completamento del caricamento dell'immagine\n  onCompleted(link: any) {\n    this.photoURL = link;\n    this.uploadProgress = -1;\n    this.auth.updateProfile({ photoURL: this.photoURL });\n  }\n\n  //DOC: callback richiamata quando ottengo i dati dell'utente\n  public onUserRead(data: any) {\n    this.logger.log(\"Dati dell'utente letti o aggiornati\");\n    data = data as User;\n    this.name = data.name || this.name;\n    this.lastname = data.lastname || this.lastname;\n    this.dob = data.dob || this.dob;\n    this.dor = data.dor || this.dor;\n    this.gender = data.gender || this.gender;\n    this.address = data.address || this.address;\n    this.isLoadingData = false;\n  }\n\n  //DOC: restituisce i millisecondi in formato unix della data passata e 0 se non è valida  \n  public toMillisecond(date: string): number {\n    if (!date || date == \"\") return 0;\n    return parseInt((new DateFormatValueConverter()).toView(date, \"x\"), 10);\n  }\n\n  //DOC: al submit della form valido i campi ed aggiorno il profilo\n  submit() {\n    let d = {\n      name: this.name,\n      lastname: this.lastname,\n      dob: this.dob,\n      dor: this.dor,\n      gender: this.gender,\n      address: this.address\n    };\n    this.validationController\n      .validate()\n      .then(r => {\n        if (r.valid) {\n          this.logger.log(\"Aggiornamento dati dell'utente\");\n          console.log(d);\n          //NOTE: mantengo aggiornato il displayName in Auth come name + <space> + lastname\n          this.auth.updateProfile({ displayName: d.name + \" \" + d.lastname });\n          this.db.updateUser(this.auth.getCurrentUser().uid, d);\n        }\n      });\n  }\n}\n\nValidationRules\n  .ensure('name').required()\n  .ensure('lastname').required()\n  .ensure('dob').required()\n  .ensure('gender').required()\n  .ensure('address').required()\n  .on(ProfilePage);\n\n\n","module.exports = \"<template> <require from=converters/dateFormat></require> <require from=common/loading/LoadingComponent></require> <div class=container-fluid> <div class=row> <div class=col-12> <div class=row> <div class=col> <h4 class=mb-0>Profile</h4> </div> <div class=\\\"col-auto d-flex\\\"> <small show.bind=\\\"dor!=0\\\" class=\\\"text-right align-self-end\\\">Account registered on <strong>${dor | dateFormat:'LLLL'}</strong></small> </div> </div> <hr class=mt-2> <loading-component is-loading.bind=isLoadingData></loading-component> <div show.bind=!isLoadingData class=row> <div class=\\\"col-12 col-md-4 order-md-last\\\"> <form> <div class=form-group> <label for=inputphotoURL>Profile picture</label> <img src.bind=photoURL alt=\\\"Your profile picture\\\" class=\\\"img-fluid rounded\\\"> <div if.bind=\\\"uploadProgress>=0\\\" class=\\\"progress mt-2\\\" style=height:5px> <div class=progress-bar role=progressbar css=\\\"width: ${uploadProgress < 10 ? 10 : uploadProgress}%\\\" aria-valuenow.bind=\\\"uploadProgress < 10 ? 10 : uploadProgress\\\" aria-valuemin=0 aria-valuemax=100></div> </div> <input ref=inputPhotoURL files.bind=newProfileImage id=inputPhotoURL accept=image/* type=file hidden/> <button type=submit click.delegate=inputPhotoURL.click() class=\\\"btn btn-light btn-light btn-block mt-3\\\" type=button>New image profile</button> </div> </form> </div> <div class=\\\"col-12 col-md-8\\\"> <form submit.delegate=submit()> <div class=row> <div class=col> <div class=form-group> <label for=inputName>Name</label> <input type=text class=form-control id=inputName value.bind=\\\"name & validate\\\" required> </div> </div> <div class=col> <div class=form-group> <label for=inputLastname>Last name</label> <input type=text class=form-control id=inputLastname value.bind=\\\"lastname & validate\\\"> </div> </div> </div> <div class=row> <div class=col> <div class=form-group> <label for=inputDOB>Date of Born</label> <input type=date ref=abc class=form-control id=inputDOB max.one-time=\\\"[] | dateFormat:'YYYY-MM-DD'\\\" min=1900-01-01 value.to-view=\\\"dob | dateFormat:'YYYY-MM-DD' & validate\\\"> </div> </div> </div> <div class=row> <div class=col> <div class=form-group> <label for=inputGender>Gender</label> <input type=text class=form-control id=inputGender value.bind=\\\"gender & validate\\\"> </div> </div> </div> <div class=row> <div class=col> <div class=form-group> <label for=inputAddress>Address</label> <input type=text class=form-control id=inputAddress value.bind=\\\"address & validate\\\"> </div> </div> </div> <div class=\\\"row mt-3\\\"> <div class=\\\"col-12 col-md-4\\\"> <button type=submit class=\\\"btn btn-light btn-light w-100\\\" type=button>Save</button> </div> </div> </form> </div> </div> </div> </div> </div> </template> \";","import { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { Authentication } from 'services/authentication';\nimport { autoinject, computedFrom, bindable } from 'aurelia-framework';\n\nimport { Log } from 'definitions';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\nimport * as Utils from 'helpers/utils';\n\n@autoinject\nexport class SecurityPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: elenco dei logs\n  @bindable logs: Log[] = [];\n  //DOC: numero della pagina visualizzata \n  @bindable currentPage: number = 0; //NOTE: partendo da 0\n  //DOC: numero di logs per pagina\n  @bindable logsPerPage: number = 20;\n  //DOC: checkbox per visualizzare solo log riguardanti la sicurezza\n  @bindable onlySecurity: boolean = false;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  constructor(private db: Database, private auth: Authentication) { }\n\n  bind() {\n    //DOC: sottoscrivo eventi: ON sui logs\n    this.queries = [this.db.query(Path.logs).orderByChild(ChildPath.idUser).equalTo(this.auth.getCurrentUser().uid)];\n    this.queries[0].on(Action.onValue, (data: any) => this.onLogsRead.call(this, data));\n    //this.queries.forEach(q => console.log(q.toString()));\n    window.scrollTo(0, 0);\n  }\n  unbind() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n\n  //DOC: callback richiamata quando ottengo i logs dell'utente\n  public onLogsRead(data: any) {\n    this.logger.log(\"Dati dei logs dell'utente letti o aggiornati\");\n    if (data.val() != null) {\n      this.logs = Utils.toArrayOfObjects(data.val());\n      //console.log(this.logs.sort(v => (v as Log).dateTime).map((v, i) => i + \" - \" + (v as Log).dateTime).join(\"\\n\"));\n      this.currentPage = 0;\n    }\n  }\n  //DOC: se setto la visualizzazione su onlySecurity resetto la pagina corrente a 0 \n  public onlySecurityChanged(_new, _old) {\n    if (_new) this.currentPage = 0;\n  }\n\n  //DOC: restituisce il numero di pagine che variano in fz del numero di log \n  @computedFrom('logs.length', 'onlySecurity')\n  get numberOfPages() {\n    if (this.onlySecurity) return Math.ceil(this.logs.filter(v => v.security == true).length / this.logsPerPage);\n    return Math.ceil(this.logs.length / this.logsPerPage);\n  }\n\n  //DOC: restituisce l'array dei log filtrato se onlySecurity, ordinato cronologicamente desc e log fromLog toLog\n  @computedFrom('logs.length', 'currentPage', 'onlySecurity')\n  get listOfLogs() {\n    return this.logs\n      .filter(v => this.onlySecurity ? v.security : 1)\n      .sort((v1, v2) => v2.dateTime - v1.dateTime)\n      .slice(this.currentPage * this.logsPerPage, (this.currentPage + 1) * this.logsPerPage);\n  }\n}\n","module.exports = \"<template> <require from=converters/dateRelative></require> <require from=converters/dateFormat></require> <require from=converters/sortElement></require> <require from=converters/takeElements></require> <require from=converters/filterElements></require> <require from=common/loading/LoadingComponent></require> <require from=common/attributes/tooltip></require> <div class=container-fluid> <div class=row> <div class=\\\"col-12 pb-3\\\"> <div class=row> <div class=col> <h4 class=mb-0>Security history</h4> </div> <div class=\\\"col-auto d-flex\\\"> <small class=\\\"text-right align-self-end\\\"></small> </div> </div> <hr class=mt-2> <div class=row> <div class=col-12> <p>This is a security log of important events involving your account.</p> <loading-component is-loading.bind=\\\"logs.length == 0\\\"></loading-component> <div show.bind=\\\"logs.length > 0\\\"> <div class=\\\"custom-control custom-checkbox my-3\\\"> <input type=checkbox class=custom-control-input id=onlySecurityCheckbox checked.bind=onlySecurity> <label class=custom-control-label for=onlySecurityCheckbox>Only security logs <i class=\\\"fas fa-shield-alt\\\"></i></label> </div> <div class=\\\"list-group mb-4\\\"> <a repeat.for=\\\"l of listOfLogs\\\" class=\\\"list-group-item list-group-item-action d-flex px-1 py-1\\\"> <div class=col> <p class=my-0> <strong>${l.subject}</strong> <small> - ${l.operation} <i if.bind=l.security tooltip data-toggle=tooltip data-placement=top data-title=\\\"It's an operation regarding security\\\" class=\\\"fas fa-shield-alt\\\"></i> </small> </p> </div> <div class=col-auto> <small innerhtml.bind=\\\"l.dateTime | dateRelative\\\" tooltip data-toggle=tooltip data-placement=top data-title=\\\"${l.dateTime | dateFormat:'LLLL'}\\\" class=\\\"text-right text-md-left\\\"></small> </div> </a> <a if.bind=\\\"currentPage+1 == numberOfPages && !onlySecurity\\\" class=\\\"list-group-item list-group-item-action d-flex py-1\\\"> <div class=\\\"d-flex w-100 justify-content-center\\\"> <p class=my-0>Here is when everything has began <i class=\\\"far fa-grin-hearts\\\"></i></p> </div> </a> </div> <nav aria-label=\\\"Page navigation example\\\"> <ul class=\\\"pagination justify-content-center\\\"> <template if.bind=\\\"currentPage>1\\\"> <li class=\\\"page-item ${currentPage == 0 ? 'active': ''}\\\"> <a click.delegate=\\\"currentPage = 0\\\" class=page-link href=#>1</a> </li> <li if.bind=\\\"currentPage > 2\\\" class=page-item> <a class=page-link>...</a> </li> </template> <template if.bind=true> <li if.bind=\\\"currentPage>0\\\" class=page-item> <a click.delegate=\\\"currentPage = currentPage -1\\\" class=page-link href=#>${(currentPage)}</a> </li> <li if.bind=\\\"currentPage>=0 && currentPage<=numberOfPages-1\\\" class=\\\"page-item active\\\"> <a click.delegate=\\\"currentPage = currentPage\\\" class=page-link href=#>${(currentPage +1)}</a> </li> <li if.bind=\\\"currentPage<numberOfPages-1\\\" class=page-item> <a click.delegate=\\\"currentPage = currentPage +1\\\" class=page-link href=#>${(currentPage +2)}</a> </li> </template> <template if.bind=\\\"currentPage<numberOfPages-2\\\"> <li if.bind=\\\"currentPage < numberOfPages-1\\\" class=page-item> <a class=page-link>...</a> </li> <li class=\\\"page-item ${currentPage == numberOfPages-1 ? 'active': ''}\\\"> <a click.delegate=\\\"currentPage = numberOfPages-1\\\" class=page-link href=#>${numberOfPages}</a> </li> </template> </ul> </nav> </div> </div> </div> </div> </div> </div> </template> \";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router, RouteConfig, NavigationInstruction } from 'aurelia-router';\nimport { HttpClient, json } from 'aurelia-fetch-client';\n\nimport { Curriculum, User } from 'definitions';\nimport { Database, Path, ChildPath, Action, Query } from 'services/database';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\nimport * as Utils from 'helpers/utils';\n\n\n@autoinject\nexport class ViewPage {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = (new Logger()).setStyle(Logger.colors.green, Logger.colors.white).setDefaultPrefix(\"ViewCV\");\n\n  //DOC: oggetto curriculum del modello DB\n  @bindable curriculum: Curriculum = null;\n  //DOC: id del cv nel DB\n  @bindable idCurriculum: string = \"\";\n\n  //DOC: indica se l'elemento è nello stato di EDIT, se false è in stato di VIEW\n  @bindable canEdit: boolean = false;\n  //DOC: indica se in stato di EDIT si sta modificando\n  @bindable isEditing: boolean = false;\n\n  //DOC: indica se il curriculum è stato completamente caricato\n  @bindable isLoadingCompleted: boolean = false;\n\n  //DOC: array di query firebase che si utilizzano nel modello\n  public queries: Query[] = [];\n\n  constructor(private db: Database, private router: Router) {\n    window.scrollTo(0, 0);\n  }\n\n  bind() {\n    //DOC: sottoscrivo eventi: ON sul curriculum\n    this.queries = [this.db.query(Path.curricula).orderByKey().equalTo(this.idCurriculum)];\n    this.queries[0].once(Action.onValue, (data: any) => this.onCurriculumReading.call(this, data));\n    //this.queries.forEach(q => console.log(q.toString()));\n  }\n  unbind() { }\n\n  activate(params: any, routeConfig: RouteConfig, navigationInstruction: NavigationInstruction) {\n    //NOTE: se l'id passato non corrisponde a nessun cv dell'utente allora ritorno alla dashboard\n    if (params.id == null)\n      console.error(\"non c'è id\"); //TODO: da gestire\n    else\n      this.idCurriculum = params.id;\n  }\n\n  deactivate() {\n    //DOC: disinscrivo tutti gli eventi\n    this.queries.forEach(q => q.off());\n  }\n\n  //DOC: callback richiamata al caricamento del Curriculum\n  public onCurriculumReading(data: any) {\n    if (!data.exists()) {\n      this.logger.warning(\"Cercato un curriculum che non esiste (\" + this.idCurriculum + \"), reindirizzo alla dashboard\");\n      console.error(\"non c'è id\"); //TODO: da gestire\n      return;\n    }\n    this.curriculum = Utils.toArrayOfObjects(data.val())[0] as Curriculum;\n  }\n\n  public isLoadingCompletedChanged(_new, _old) {\n    if (_new)\n      this.router.currentInstruction.config.onLoadingCompleted();\n  }\n}","module.exports = \"<template> <require from=sections/FooterSection></require> <require from=common/loading/LoadingComponent></require> <require from=./CvSubpages/EditCvComponents/CurriculumComponent></require> <div class=\\\"container-fluid logout-page au-animate pt-4\\\"> <loading-component is-loading.bind=!isLoadingCompleted></loading-component> <curriculum-component if.bind=curriculum show.bind=isLoadingCompleted can-edit.bind=false is-editing.bind=false curriculum.bind=curriculum on-loading-completed.call=\\\"isLoadingCompleted=true\\\"></curriculum-component> </div> </template> \";","import { observable, computedFrom, bindable, autoinject } from 'aurelia-framework';\nimport { Router } from 'aurelia-router';\n\nimport { Database } from 'services/database';\n\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Logger } from 'helpers/logger';\n\n@autoinject\nexport class _404Page {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  router: Router;\n\n  constructor() {\n    window.scrollTo(0, 0);\n  }\n\n  bind() {}\n\n}\n","module.exports = \"<template> <require from=common/loading/LoadingComponent></require> <div class=\\\"container-fluid _404-page au-animate\\\"> <loading-component is-loading.bind=false></loading-component> <p>This is the 404 page</p> <img class=center-block src=https://media.giphy.com/media/20k1punZ5bpmM/giphy.gif alt=xxx> </div> </template>\";","import { computedFrom, bindable, autoinject } from 'aurelia-framework';\n\nimport './css/footer-section.css'\n\n@autoinject\nexport class FooterSection {\n  @bindable icons: string[] = [\"heart\", \"coffee\", \"mug-hot\", \"brain\",\n    \"ice-cream\", \"pizza-slice\", \"hotdog\", \"bacon\", \"hand-peace\", \"handshake\", \"praying-hands\",\n    \"dog\", \"hippo\", \"dragon\", \"frog\"];\n  @bindable iconPos: number = 0;\n\n  //DOC: indica se il page-content (cv) è in modalità focus (con navbar e footer ridotti)\n  @bindable focusMode: boolean = false;\n\n  constructor() { }\n\n  bind() {\n    setInterval(\n      () => {\n        this.iconPos = Math.floor(Math.random() * this.icons.length);\n      }, 2000);\n  }\n\n  //DOC: evento al cambiamento di focusMode per scrollare al bottom della pagina\n  public focusModeChanged(_new, _old) {\n    if (!_new)\n      setTimeout(() => {\n        document.querySelector('footer-section').scrollIntoView({ behavior: \"smooth\", block: \"end\" });\n      }, 250);\n  }\n\n  //DOC: restituisce l'icona formattata font-awesome\n  @computedFrom('iconPos')\n  get iconString(): string {\n    return \"fas fa-\" + this.icons[this.iconPos];\n  }\n  //DOC: restituisce il nome dell'icona per il tooltip\n  @computedFrom('iconPos')\n  get iconName(): string {\n    return this.icons[this.iconPos];\n  }\n}\n","module.exports = \"<template> <template if.bind=focusMode> <footer class=\\\"page-footer-focus-on font-small\\\"> <div class=\\\"d-flex justify-content-center\\\"> <p class=logo click.delegate=\\\"focusMode=false\\\">more</p> </div> </footer> </template> <template if.bind=!focusMode> <footer class=\\\"page-footer-focus-off font-small\\\"> <div class=\\\"container-fluid text-center text-md-left border-top pt-2\\\"> <div class=row> <div class=\\\"col-12 col-md-5 small\\\"> <ul class=\\\"list-inline text-center text-md-right\\\"> <li class=list-inline-item><a href=/ >© 2018 Profile</a></li> <li class=list-inline-item>Terms</li> <li class=list-inline-item>Privacy</li> <li class=list-inline-item> <a href=https://profile.statuspal.io/ target=_blank router-ignore>Status</a> </li> <li class=list-inline-item>Help</li> <li class=list-inline-item>Contacts</li> <li class=list-inline-item><a href=https://profileblog.herokuapp.com/ >Blog</a></li> </ul> </div> <div class=\\\"col-12 col-md-2 text-center\\\"> <p class=logo>Profile</p> </div> <div class=\\\"col-12 col-md-5 small\\\"> <ul class=\\\"list-inline text-center text-md-left\\\"> <li class=list-inline-item>Features</li> <li class=list-inline-item>Pricing</li> <li class=list-inline-item>Companies & Institutions</li> <li class=list-inline-item>API</li> <li class=list-inline-item>Help</li> </ul> </div> </div> </div> <div class=\\\"footer-copyright text-center py-3\\\"> <p class=text-center>Made with <i class.bind=iconString></i> </p> </div> </footer> </template> </template>\";","import { Router, NavModel } from 'aurelia-router';\nimport { bindable, autoinject, computedFrom } from \"aurelia-framework\";\nimport { Route } from 'definitions';\n\nimport { Logger } from 'helpers/logger';\nimport { ErrorManager } from 'helpers/errorManager';\nimport { Authentication } from 'services/authentication';\nimport { Storage_, LocalResources } from 'services/storage';\n\nimport \"./css/navbar-section.css\";\n\n@autoinject\nexport class NavbarSection {\n  //DOC: gestore degli errori\n  private errorManager: ErrorManager = new ErrorManager();\n  //DOC: gestore della console\n  private logger: Logger = new Logger();\n\n  //DOC: indica se il page-content (cv) è in modalità focus (con navbar e footer ridotti)\n  @bindable focusMode: boolean = false;\n  \n  constructor(private router: Router, private auth: Authentication, private storage: Storage_) {\n    this.auth.onAuthStateChanged(this.onUserLogged, this);\n  }\n\n  //DOC: callback chiamata quando l'utente si logga o si slogga\n  public onUserLogged(user: any) { }\n\n  //DOC: restituisce il displayName dell'utente loggato\n  @computedFrom('auth.isCurrentUserChanged')\n  get displayName() {\n    if (this.auth.isLogged)\n      return this.auth.getCurrentUser().displayName;\n    else\n      return null;\n  }\n\n  //DOC: restituisce la photoURL dell'utente loggato\n  @computedFrom('auth.isCurrentUserChanged')\n  get photoURL() {\n    if (this.auth.getCurrentUser().photoURL != \"\" && this.auth.getCurrentUser().photoURL != null)\n      return this.auth.getCurrentUser().photoURL;\n    //NOTE: se photoURL è vuoto oppure null restituisco immagine di default\n    return LocalResources.profile.default;\n  }\n\n  //DOC: restituisce i routes in funzione dello stato di login ed in posizione left sulla nav\n  @computedFrom(\"auth.isLogged\")\n  get getLeftRoutes() {\n    return this.router.navigation.filter(r => {\n      let R = r.config as Route;\n      return (R.visibility == 'always' || ((R.visibility == 'logged') == this.auth.isLogged))\n        && R.nav\n        && R.navPosition == 'left'\n    });\n  }\n\n  //DOC: restituisce i routes per logged=true in posizione right sulla nav\n  @computedFrom(\"auth.isLogged\")\n  get getRightRoutes() {\n    return this.router.navigation.filter(r => {\n      let R = r.config as Route;\n      return (R.visibility == 'always' || ((R.visibility == 'logged') == this.auth.isLogged))\n        && R.nav\n        && R.navPosition == 'right'\n    });\n  }\n\n  //DOC: indica se l'utente è loggato\n  //NOTE: (wrapper perchè auth è private)\n  @computedFrom(\"auth.isLogged\")\n  get isLogged(): boolean {\n    return this.auth.isLogged;\n  }\n}\n","module.exports = \"<template> <nav if.bind=!focusMode class=\\\"navbar-section navbar navbar-expand-lg fixed-top navbar-dark bg-dark\\\" role=navigation> <a class=navbar-brand href=index>Profile</a> <button class=navbar-toggler type=button data-toggle=collapse data-target=#navbar aria-controls=navbar aria-expanded=false aria-label=\\\"Toggle navigation\\\"> <span class=navbar-toggler-icon></span> </button> <div id=navbar class=\\\"collapse navbar-collapse\\\"> <ul class=\\\"navbar-nav mr-auto\\\"> <li repeat.for=\\\"row of getLeftRoutes\\\" class=\\\"nav-item ${row.isActive ? 'active' : ''}\\\"> <a href.bind=row.href class=nav-link data-toggle=collapse data-target=.navbar-collapse.show>${row.title} <span if.bind=row.isActive class=sr-only>(current)</span> </a> </li> </ul> <ul class=\\\"navbar-nav justify-content-end\\\"> <li repeat.for=\\\"row of getRightRoutes\\\" class=\\\"nav-item ${row.isActive ? 'active' : ''}\\\"> <a href.bind=row.href class=nav-link data-toggle=collapse data-target=.navbar-collapse.show>${row.title} <span if.bind=row.isActive class=sr-only>(current)</span> </a> </li> <li if.bind=\\\"isLogged && false\\\" class=nav-item> <a class=nav-link router-ignore> <img if.bind=\\\"photoURL != ''\\\" src.bind=photoURL class=\\\"img-circle profile-image\\\"> <i else class=\\\"fas fa-user-astronaut\\\"></i> </a> </li> </ul> </div> </nav> </template>\";"],"sourceRoot":""}