{"version":3,"sources":["node_modules/browserify/node_modules/browser-pack/_prelude.js","node_modules/babel-polyfill/lib/index.js","node_modules/babel-polyfill/node_modules/babel-regenerator-runtime/runtime.js","node_modules/babel-polyfill/node_modules/core-js/fn/regexp/escape.js","node_modules/babel-polyfill/node_modules/core-js/modules/_a-function.js","node_modules/babel-polyfill/node_modules/core-js/modules/_a-number-value.js","node_modules/babel-polyfill/node_modules/core-js/modules/_add-to-unscopables.js","node_modules/babel-polyfill/node_modules/core-js/modules/_an-instance.js","node_modules/babel-polyfill/node_modules/core-js/modules/_an-object.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-copy-within.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-fill.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-from-iterable.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-includes.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-methods.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-reduce.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/_array-species-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_bind.js","node_modules/babel-polyfill/node_modules/core-js/modules/_classof.js","node_modules/babel-polyfill/node_modules/core-js/modules/_cof.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection-strong.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection-to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection-weak.js","node_modules/babel-polyfill/node_modules/core-js/modules/_collection.js","node_modules/babel-polyfill/node_modules/core-js/modules/_core.js","node_modules/babel-polyfill/node_modules/core-js/modules/_create-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/_ctx.js","node_modules/babel-polyfill/node_modules/core-js/modules/_date-to-primitive.js","node_modules/babel-polyfill/node_modules/core-js/modules/_defined.js","node_modules/babel-polyfill/node_modules/core-js/modules/_descriptors.js","node_modules/babel-polyfill/node_modules/core-js/modules/_dom-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_enum-bug-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_enum-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_export.js","node_modules/babel-polyfill/node_modules/core-js/modules/_fails-is-regexp.js","node_modules/babel-polyfill/node_modules/core-js/modules/_fails.js","node_modules/babel-polyfill/node_modules/core-js/modules/_fix-re-wks.js","node_modules/babel-polyfill/node_modules/core-js/modules/_flags.js","node_modules/babel-polyfill/node_modules/core-js/modules/_for-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/_global.js","node_modules/babel-polyfill/node_modules/core-js/modules/_has.js","node_modules/babel-polyfill/node_modules/core-js/modules/_hide.js","node_modules/babel-polyfill/node_modules/core-js/modules/_html.js","node_modules/babel-polyfill/node_modules/core-js/modules/_ie8-dom-define.js","node_modules/babel-polyfill/node_modules/core-js/modules/_inherit-if-required.js","node_modules/babel-polyfill/node_modules/core-js/modules/_invoke.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iobject.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-array-iter.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-object.js","node_modules/babel-polyfill/node_modules/core-js/modules/_is-regexp.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-call.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-define.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-detect.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iter-step.js","node_modules/babel-polyfill/node_modules/core-js/modules/_iterators.js","node_modules/babel-polyfill/node_modules/core-js/modules/_keyof.js","node_modules/babel-polyfill/node_modules/core-js/modules/_library.js","node_modules/babel-polyfill/node_modules/core-js/modules/_math-expm1.js","node_modules/babel-polyfill/node_modules/core-js/modules/_math-log1p.js","node_modules/babel-polyfill/node_modules/core-js/modules/_math-sign.js","node_modules/babel-polyfill/node_modules/core-js/modules/_meta.js","node_modules/babel-polyfill/node_modules/core-js/modules/_metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/_microtask.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-assign.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-create.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-dp.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-dps.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-forced-pam.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopd.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn-ext.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gopn.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gops.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-gpo.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys-internal.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-pie.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-sap.js","node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/_own-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/_parse-float.js","node_modules/babel-polyfill/node_modules/core-js/modules/_parse-int.js","node_modules/babel-polyfill/node_modules/core-js/modules/_partial.js","node_modules/babel-polyfill/node_modules/core-js/modules/_path.js","node_modules/babel-polyfill/node_modules/core-js/modules/_property-desc.js","node_modules/babel-polyfill/node_modules/core-js/modules/_redefine-all.js","node_modules/babel-polyfill/node_modules/core-js/modules/_redefine.js","node_modules/babel-polyfill/node_modules/core-js/modules/_replacer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_same-value.js","node_modules/babel-polyfill/node_modules/core-js/modules/_set-proto.js","node_modules/babel-polyfill/node_modules/core-js/modules/_set-species.js","node_modules/babel-polyfill/node_modules/core-js/modules/_set-to-string-tag.js","node_modules/babel-polyfill/node_modules/core-js/modules/_shared-key.js","node_modules/babel-polyfill/node_modules/core-js/modules/_shared.js","node_modules/babel-polyfill/node_modules/core-js/modules/_species-constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/_strict-method.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-at.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-context.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-html.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-pad.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-repeat.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-trim.js","node_modules/babel-polyfill/node_modules/core-js/modules/_string-ws.js","node_modules/babel-polyfill/node_modules/core-js/modules/_task.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-index.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-iobject.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-length.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-object.js","node_modules/babel-polyfill/node_modules/core-js/modules/_to-primitive.js","node_modules/babel-polyfill/node_modules/core-js/modules/_typed-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/_typed-buffer.js","node_modules/babel-polyfill/node_modules/core-js/modules/_typed.js","node_modules/babel-polyfill/node_modules/core-js/modules/_uid.js","node_modules/babel-polyfill/node_modules/core-js/modules/_wks-define.js","node_modules/babel-polyfill/node_modules/core-js/modules/_wks-ext.js","node_modules/babel-polyfill/node_modules/core-js/modules/_wks.js","node_modules/babel-polyfill/node_modules/core-js/modules/core.get-iterator-method.js","node_modules/babel-polyfill/node_modules/core-js/modules/core.is-iterable.js","node_modules/babel-polyfill/node_modules/core-js/modules/core.regexp.escape.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.copy-within.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.every.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.fill.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.filter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find-index.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.find.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.for-each.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.from.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.index-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.is-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.iterator.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.join.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.last-index-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.map.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce-right.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.reduce.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.slice.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.some.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.sort.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.array.species.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.now.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-iso-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-primitive.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.date.to-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.bind.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.has-instance.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.function.name.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.map.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.acosh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.asinh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.atanh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cbrt.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.clz32.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.cosh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.expm1.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.fround.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.hypot.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.imul.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log10.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log1p.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.log2.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sign.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.sinh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.tanh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.math.trunc.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.epsilon.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-finite.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-nan.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-float.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.parse-int.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-fixed.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.number.to-precision.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.assign.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.create.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-properties.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.define-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.freeze.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.is.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.seal.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.set-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.object.to-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-float.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.parse-int.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.promise.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.apply.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.construct.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.enumerate.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.get.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.has.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.reflect.set.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.constructor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.flags.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.match.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.replace.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.search.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.split.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.regexp.to-string.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.set.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.anchor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.big.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.blink.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.bold.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.ends-with.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fixed.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontcolor.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.fontsize.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.includes.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.italics.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.iterator.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.link.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.raw.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.repeat.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.small.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.starts-with.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.strike.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sub.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.sup.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.string.trim.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.symbol.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.data-view.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-map.js","node_modules/babel-polyfill/node_modules/core-js/modules/es6.weak-set.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.array.includes.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.asap.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.error.is-error.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.map.to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.iaddh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.imulh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.isubh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.math.umulh.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-getter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.define-setter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.entries.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-getter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.lookup-setter.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.observable.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.define-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.delete-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.get-own-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.has-own-metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.reflect.metadata.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.set.to-json.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.at.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.match-all.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-end.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.pad-start.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-left.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.string.trim-right.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.async-iterator.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.symbol.observable.js","node_modules/babel-polyfill/node_modules/core-js/modules/es7.system.global.js","node_modules/babel-polyfill/node_modules/core-js/modules/web.dom.iterable.js","node_modules/babel-polyfill/node_modules/core-js/modules/web.immediate.js","node_modules/babel-polyfill/node_modules/core-js/modules/web.timers.js","node_modules/babel-polyfill/node_modules/core-js/shim.js","node_modules/browserify/node_modules/buffer/index.js","node_modules/browserify/node_modules/buffer/node_modules/base64-js/lib/b64.js","node_modules/browserify/node_modules/buffer/node_modules/ieee754/index.js","node_modules/browserify/node_modules/buffer/node_modules/isarray/index.js","node_modules/browserify/node_modules/process/browser.js","node_modules/chai/index.js","node_modules/chai/lib/chai.js","node_modules/chai/lib/chai/assertion.js","node_modules/chai/lib/chai/config.js","node_modules/chai/lib/chai/core/assertions.js","node_modules/chai/lib/chai/interface/assert.js","node_modules/chai/lib/chai/interface/expect.js","node_modules/chai/lib/chai/interface/should.js","node_modules/chai/lib/chai/utils/addChainableMethod.js","node_modules/chai/lib/chai/utils/addMethod.js","node_modules/chai/lib/chai/utils/addProperty.js","node_modules/chai/lib/chai/utils/expectTypes.js","node_modules/chai/lib/chai/utils/flag.js","node_modules/chai/lib/chai/utils/getActual.js","node_modules/chai/lib/chai/utils/getEnumerableProperties.js","node_modules/chai/lib/chai/utils/getMessage.js","node_modules/chai/lib/chai/utils/getName.js","node_modules/chai/lib/chai/utils/getPathInfo.js","node_modules/chai/lib/chai/utils/getPathValue.js","node_modules/chai/lib/chai/utils/getProperties.js","node_modules/chai/lib/chai/utils/hasProperty.js","node_modules/chai/lib/chai/utils/index.js","node_modules/chai/lib/chai/utils/inspect.js","node_modules/chai/lib/chai/utils/objDisplay.js","node_modules/chai/lib/chai/utils/overwriteChainableMethod.js","node_modules/chai/lib/chai/utils/overwriteMethod.js","node_modules/chai/lib/chai/utils/overwriteProperty.js","node_modules/chai/lib/chai/utils/test.js","node_modules/chai/lib/chai/utils/transferFlags.js","node_modules/chai/node_modules/assertion-error/index.js","node_modules/chai/node_modules/deep-eql/index.js","node_modules/chai/node_modules/deep-eql/lib/eql.js","node_modules/chai/node_modules/deep-eql/node_modules/type-detect/index.js","node_modules/chai/node_modules/deep-eql/node_modules/type-detect/lib/type.js","node_modules/chai/node_modules/type-detect/lib/type.js","node_modules/jquery/dist/jquery.js","src/collections/ItsLayerCollection.js","src/collections/LayerLegend.js","src/src/jquery.js","src/layers/LayerBase.js","src/layers/LayerBaseVector.js","src/layers/LayerBaseVectorEsri.js","src/layers/LayerBaseVectorGeoJson.js","src/layers/LayerEsriMapServer.js","src/layers/LayerItsInventory.js","src/olHelpers/esriToOlStyle.js","src/olHelpers/mapInteractionBase.js","src/olHelpers/mapMove.js","src/olHelpers/mapMoveCls.js","src/olHelpers/mapPopup.js","src/olHelpers/mapPopupCls.js","src/olHelpers/propertiesZoomStyle.js","src/olHelpers/quickMap.js","src/olHelpers/quickMapBase.js","src/olHelpers/zoomResolutionConvert.js","src/ol/ol-build.js","src/ol/ol.js","src/util/checkDefined.js","src/util/colors.js","src/util/makeGuid.js","src/util/provide.js","test/legend-test.js","test/urlConfig2.spec.js","test/urlConfig3.spec.js"],"names":[],"mappings":"AAAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjpBA;AACA;;ACDA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;;ACAA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;;ACFA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACheA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;;ACAA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;;ACHA;AACA;AACA;;ACFA;AACA;AACA;;ACFA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;;ACFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;;ACAA;;ACAA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC/qDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpFA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9FA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACp0DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7mDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChHA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjQA;AACA;;ACDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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","file":"test-bundle.js","sourceRoot":"/source/","sourcesContent":["(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})","/*istanbul ignore next*/\"use strict\";\n\n/*istanbul ignore next*/require(\"core-js/shim\");\n\n/*istanbul ignore next*/require(\"babel-regenerator-runtime\");\n\n/*istanbul ignore next*/require(\"core-js/fn/regexp/escape\");\n\n/* eslint max-len: 0 */\n\nif (global._babelPolyfill) {\n  throw new Error(\"only one instance of babel-polyfill is allowed\");\n}\nglobal._babelPolyfill = true;\n\n// Should be removed in the next major release:\n\nvar DEFINE_PROPERTY = \"defineProperty\";\nfunction define(O, key, value) {\n  O[key] || Object[DEFINE_PROPERTY](O, key, {\n    writable: true,\n    configurable: true,\n    value: value\n  });\n}\n\ndefine(String.prototype, \"padLeft\", \"\".padStart);\ndefine(String.prototype, \"padRight\", \"\".padEnd);\n\n\"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill\".split(\",\").forEach(function (key) {\n  [][key] && define(Array, key, Function.call.bind([][key]));\n});","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var hasOwn = Object.prototype.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var iteratorSymbol =\n    typeof Symbol === \"function\" && Symbol.iterator || \"@@iterator\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided, then outerFn.prototype instanceof Generator.\n    var generator = Object.create((outerFn || Generator).prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `value instanceof AwaitArgument` to determine if the yielded value is\n  // meant to be awaited. Some may consider the name of this method too\n  // cutesy, but they are curmudgeons.\n  runtime.awrap = function(arg) {\n    return new AwaitArgument(arg);\n  };\n\n  function AwaitArgument(arg) {\n    this.arg = arg;\n  }\n\n  function AsyncIterator(generator) {\n    // This invoke function is written in a style that assumes some\n    // calling function (or Promise) will handle exceptions.\n    function invoke(method, arg) {\n      var result = generator[method](arg);\n      var value = result.value;\n      return value instanceof AwaitArgument\n        ? Promise.resolve(value.arg).then(invokeNext, invokeThrow)\n        : Promise.resolve(value).then(function(unwrapped) {\n            // When a yielded Promise is resolved, its final value becomes\n            // the .value of the Promise<{value,done}> result for the\n            // current iteration. If the Promise is rejected, however, the\n            // result for this iteration will be rejected with the same\n            // reason. Note that rejections of yielded Promises are not\n            // thrown back into the generator function, as is the case\n            // when an awaited Promise is rejected. This difference in\n            // behavior between yield and await is important, because it\n            // allows the consumer to decide what to do with the yielded\n            // rejection (swallow it and continue, manually .throw it back\n            // into the generator, abandon iteration, whatever). With\n            // await, by contrast, there is no opportunity to examine the\n            // rejection reason outside the generator function, so the\n            // only option is to throw it from the await expression, and\n            // let the generator function handle the exception.\n            result.value = unwrapped;\n            return result;\n          });\n    }\n\n    if (typeof process === \"object\" && process.domain) {\n      invoke = process.domain.bind(invoke);\n    }\n\n    var invokeNext = invoke.bind(generator, \"next\");\n    var invokeThrow = invoke.bind(generator, \"throw\");\n    var invokeReturn = invoke.bind(generator, \"return\");\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return invoke(method, arg);\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : new Promise(function (resolve) {\n          resolve(callInvokeWithMethodAndArg());\n        });\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          if (method === \"return\" ||\n              (method === \"throw\" && delegate.iterator[method] === undefined)) {\n            // A return or throw (when the delegate iterator has no throw\n            // method) always terminates the yield* loop.\n            context.delegate = null;\n\n            // If the delegate iterator has a return method, give it a\n            // chance to clean up.\n            var returnMethod = delegate.iterator[\"return\"];\n            if (returnMethod) {\n              var record = tryCatch(returnMethod, delegate.iterator, arg);\n              if (record.type === \"throw\") {\n                // If the return method threw an exception, let that\n                // exception prevail over the original return or throw.\n                method = \"throw\";\n                arg = record.arg;\n                continue;\n              }\n            }\n\n            if (method === \"return\") {\n              // Continue with the outer return, now that the delegate\n              // iterator has been terminated.\n              continue;\n            }\n          }\n\n          var record = tryCatch(\n            delegate.iterator[method],\n            delegate.iterator,\n            arg\n          );\n\n          if (record.type === \"throw\") {\n            context.delegate = null;\n\n            // Like returning generator.throw(uncaught), but without the\n            // overhead of an extra function call.\n            method = \"throw\";\n            arg = record.arg;\n            continue;\n          }\n\n          // Delegate generator ran and handled its own exceptions so\n          // regardless of what the method was, we continue as if it is\n          // \"next\" with an undefined arg.\n          method = \"next\";\n          arg = undefined;\n\n          var info = record.arg;\n          if (info.done) {\n            context[delegate.resultName] = info.value;\n            context.next = delegate.nextLoc;\n          } else {\n            state = GenStateSuspendedYield;\n            return info;\n          }\n\n          context.delegate = null;\n        }\n\n        if (method === \"next\") {\n          context._sent = arg;\n\n          if (state === GenStateSuspendedYield) {\n            context.sent = arg;\n          } else {\n            context.sent = undefined;\n          }\n        } else if (method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw arg;\n          }\n\n          if (context.dispatchException(arg)) {\n            // If the dispatched exception was caught by a catch block,\n            // then let that catch block handle the exception normally.\n            method = \"next\";\n            arg = undefined;\n          }\n\n        } else if (method === \"return\") {\n          context.abrupt(\"return\", arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          var info = {\n            value: record.arg,\n            done: context.done\n          };\n\n          if (record.arg === ContinueSentinel) {\n            if (context.delegate && method === \"next\") {\n              // Deliberately forget the last sent value so that we don't\n              // accidentally pass it on to the delegate.\n              arg = undefined;\n            }\n          } else {\n            return info;\n          }\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(arg) call above.\n          method = \"throw\";\n          arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      this.sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n        return !!caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.next = finallyEntry.finallyLoc;\n      } else {\n        this.complete(record);\n      }\n\n      return ContinueSentinel;\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = record.arg;\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // Among the various tricks for obtaining a reference to the global\n  // object, this seems to be the most reliable technique that does not\n  // use indirect eval (which violates Content Security Policy).\n  typeof global === \"object\" ? global :\n  typeof window === \"object\" ? window :\n  typeof self === \"object\" ? self : this\n);\n","require('../../modules/core.regexp.escape');\nmodule.exports = require('../../modules/_core').RegExp.escape;","module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};","var cof = require('./_cof');\r\nmodule.exports = function(it, msg){\r\n  if(typeof it != 'number' && cof(it) != 'Number')throw TypeError(msg);\r\n  return +it;\r\n};","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables')\n  , ArrayProto  = Array.prototype;\nif(ArrayProto[UNSCOPABLES] == undefined)require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function(key){\n  ArrayProto[UNSCOPABLES][key] = true;\n};","module.exports = function(it, Constructor, name, forbiddenField){\n  if(!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)){\n    throw TypeError(name + ': incorrect invocation!');\n  } return it;\n};","var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object')\n  , toIndex  = require('./_to-index')\n  , toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){\n  var O     = toObject(this)\n    , len   = toLength(O.length)\n    , to    = toIndex(target, len)\n    , from  = toIndex(start, len)\n    , end   = arguments.length > 2 ? arguments[2] : undefined\n    , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)\n    , inc   = 1;\n  if(from < to && to < from + count){\n    inc  = -1;\n    from += count - 1;\n    to   += count - 1;\n  }\n  while(count-- > 0){\n    if(from in O)O[to] = O[from];\n    else delete O[to];\n    to   += inc;\n    from += inc;\n  } return O;\n};","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object')\n  , toIndex  = require('./_to-index')\n  , toLength = require('./_to-length');\nmodule.exports = function fill(value /*, start = 0, end = @length */){\n  var O      = toObject(this)\n    , length = toLength(O.length)\n    , aLen   = arguments.length\n    , index  = toIndex(aLen > 1 ? arguments[1] : undefined, length)\n    , end    = aLen > 2 ? arguments[2] : undefined\n    , endPos = end === undefined ? length : toIndex(end, length);\n  while(endPos > index)O[index++] = value;\n  return O;\n};","var forOf = require('./_for-of');\n\nmodule.exports = function(iter, ITERATOR){\n  var result = [];\n  forOf(iter, false, result.push, result, ITERATOR);\n  return result;\n};\n","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex 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};","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx      = require('./_ctx')\n  , IObject  = require('./_iobject')\n  , toObject = require('./_to-object')\n  , toLength = require('./_to-length')\n  , asc      = require('./_array-species-create');\nmodule.exports = function(TYPE, $create){\n  var IS_MAP        = TYPE == 1\n    , IS_FILTER     = TYPE == 2\n    , IS_SOME       = TYPE == 3\n    , IS_EVERY      = TYPE == 4\n    , IS_FIND_INDEX = TYPE == 6\n    , NO_HOLES      = TYPE == 5 || IS_FIND_INDEX\n    , create        = $create || asc;\n  return function($this, callbackfn, that){\n    var O      = toObject($this)\n      , self   = IObject(O)\n      , f      = ctx(callbackfn, that, 3)\n      , length = toLength(self.length)\n      , index  = 0\n      , result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined\n      , val, res;\n    for(;length > index; index++)if(NO_HOLES || index in self){\n      val = self[index];\n      res = f(val, index, O);\n      if(TYPE){\n        if(IS_MAP)result[index] = res;            // map\n        else if(res)switch(TYPE){\n          case 3: return true;                    // some\n          case 5: return val;                     // find\n          case 6: return index;                   // findIndex\n          case 2: result.push(val);               // filter\n        } else if(IS_EVERY)return false;          // every\n      }\n    }\n    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n  };\n};","var aFunction = require('./_a-function')\r\n  , toObject  = require('./_to-object')\r\n  , IObject   = require('./_iobject')\r\n  , toLength  = require('./_to-length');\r\n\r\nmodule.exports = function(that, callbackfn, aLen, memo, isRight){\r\n  aFunction(callbackfn);\r\n  var O      = toObject(that)\r\n    , self   = IObject(O)\r\n    , length = toLength(O.length)\r\n    , index  = isRight ? length - 1 : 0\r\n    , i      = isRight ? -1 : 1;\r\n  if(aLen < 2)for(;;){\r\n    if(index in self){\r\n      memo = self[index];\r\n      index += i;\r\n      break;\r\n    }\r\n    index += i;\r\n    if(isRight ? index < 0 : length <= index){\r\n      throw TypeError('Reduce of empty array with no initial value');\r\n    }\r\n  }\r\n  for(;isRight ? index >= 0 : length > index; index += i)if(index in self){\r\n    memo = callbackfn(memo, self[index], index, O);\r\n  }\r\n  return memo;\r\n};","var isObject = require('./_is-object')\r\n  , isArray  = require('./_is-array')\r\n  , SPECIES  = require('./_wks')('species');\r\n\r\nmodule.exports = function(original){\r\n  var C;\r\n  if(isArray(original)){\r\n    C = original.constructor;\r\n    // cross-realm fallback\r\n    if(typeof C == 'function' && (C === Array || isArray(C.prototype)))C = undefined;\r\n    if(isObject(C)){\r\n      C = C[SPECIES];\r\n      if(C === null)C = undefined;\r\n    }\r\n  } return C === undefined ? Array : C;\r\n};","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function(original, length){\n  return new (speciesConstructor(original))(length);\n};","'use strict';\nvar aFunction  = require('./_a-function')\n  , isObject   = require('./_is-object')\n  , invoke     = require('./_invoke')\n  , arraySlice = [].slice\n  , factories  = {};\n\nvar construct = function(F, len, args){\n  if(!(len in factories)){\n    for(var n = [], i = 0; i < len; i++)n[i] = 'a[' + i + ']';\n    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n  } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /*, args... */){\n  var fn       = aFunction(this)\n    , partArgs = arraySlice.call(arguments, 1);\n  var bound = function(/* args... */){\n    var args = partArgs.concat(arraySlice.call(arguments));\n    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n  };\n  if(isObject(fn.prototype))bound.prototype = fn.prototype;\n  return bound;\n};","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof')\n  , TAG = require('./_wks')('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(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(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};","var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};","'use strict';\nvar dP          = require('./_object-dp').f\n  , create      = require('./_object-create')\n  , hide        = require('./_hide')\n  , redefineAll = require('./_redefine-all')\n  , ctx         = require('./_ctx')\n  , anInstance  = require('./_an-instance')\n  , defined     = require('./_defined')\n  , forOf       = require('./_for-of')\n  , $iterDefine = require('./_iter-define')\n  , step        = require('./_iter-step')\n  , setSpecies  = require('./_set-species')\n  , DESCRIPTORS = require('./_descriptors')\n  , fastKey     = require('./_meta').fastKey\n  , SIZE        = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function(that, key){\n  // fast case\n  var index = fastKey(key), entry;\n  if(index !== 'F')return that._i[index];\n  // frozen object case\n  for(entry = that._f; entry; entry = entry.n){\n    if(entry.k == key)return entry;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n    var C = wrapper(function(that, iterable){\n      anInstance(that, C, NAME, '_i');\n      that._i = create(null); // index\n      that._f = undefined;    // first entry\n      that._l = undefined;    // last entry\n      that[SIZE] = 0;         // size\n      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.1.3.1 Map.prototype.clear()\n      // 23.2.3.2 Set.prototype.clear()\n      clear: function clear(){\n        for(var that = this, data = that._i, entry = that._f; entry; entry = entry.n){\n          entry.r = true;\n          if(entry.p)entry.p = entry.p.n = undefined;\n          delete data[entry.i];\n        }\n        that._f = that._l = undefined;\n        that[SIZE] = 0;\n      },\n      // 23.1.3.3 Map.prototype.delete(key)\n      // 23.2.3.4 Set.prototype.delete(value)\n      'delete': function(key){\n        var that  = this\n          , entry = getEntry(that, key);\n        if(entry){\n          var next = entry.n\n            , prev = entry.p;\n          delete that._i[entry.i];\n          entry.r = true;\n          if(prev)prev.n = next;\n          if(next)next.p = prev;\n          if(that._f == entry)that._f = next;\n          if(that._l == entry)that._l = prev;\n          that[SIZE]--;\n        } return !!entry;\n      },\n      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n      forEach: function forEach(callbackfn /*, that = undefined */){\n        anInstance(this, C, 'forEach');\n        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3)\n          , entry;\n        while(entry = entry ? entry.n : this._f){\n          f(entry.v, entry.k, this);\n          // revert to the last existing entry\n          while(entry && entry.r)entry = entry.p;\n        }\n      },\n      // 23.1.3.7 Map.prototype.has(key)\n      // 23.2.3.7 Set.prototype.has(value)\n      has: function has(key){\n        return !!getEntry(this, key);\n      }\n    });\n    if(DESCRIPTORS)dP(C.prototype, 'size', {\n      get: function(){\n        return defined(this[SIZE]);\n      }\n    });\n    return C;\n  },\n  def: function(that, key, value){\n    var entry = getEntry(that, key)\n      , prev, index;\n    // change existing entry\n    if(entry){\n      entry.v = value;\n    // create new entry\n    } else {\n      that._l = entry = {\n        i: index = fastKey(key, true), // <- index\n        k: key,                        // <- key\n        v: value,                      // <- value\n        p: prev = that._l,             // <- previous entry\n        n: undefined,                  // <- next entry\n        r: false                       // <- removed\n      };\n      if(!that._f)that._f = entry;\n      if(prev)prev.n = entry;\n      that[SIZE]++;\n      // add to index\n      if(index !== 'F')that._i[index] = entry;\n    } return that;\n  },\n  getEntry: getEntry,\n  setStrong: function(C, NAME, IS_MAP){\n    // add .keys, .values, .entries, [@@iterator]\n    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n    $iterDefine(C, NAME, function(iterated, kind){\n      this._t = iterated;  // target\n      this._k = kind;      // kind\n      this._l = undefined; // previous\n    }, function(){\n      var that  = this\n        , kind  = that._k\n        , entry = that._l;\n      // revert to the last existing entry\n      while(entry && entry.r)entry = entry.p;\n      // get next entry\n      if(!that._t || !(that._l = entry = entry ? entry.n : that._t._f)){\n        // or finish the iteration\n        that._t = undefined;\n        return step(1);\n      }\n      // return step by kind\n      if(kind == 'keys'  )return step(0, entry.k);\n      if(kind == 'values')return step(0, entry.v);\n      return step(0, [entry.k, entry.v]);\n    }, IS_MAP ? 'entries' : 'values' , !IS_MAP, true);\n\n    // add [@@species], 23.1.2.2, 23.2.2.2\n    setSpecies(NAME);\n  }\n};","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar classof = require('./_classof')\n  , from    = require('./_array-from-iterable');\nmodule.exports = function(NAME){\n  return function toJSON(){\n    if(classof(this) != NAME)throw TypeError(NAME + \"#toJSON isn't generic\");\n    return from(this);\n  };\n};","'use strict';\nvar redefineAll       = require('./_redefine-all')\n  , getWeak           = require('./_meta').getWeak\n  , anObject          = require('./_an-object')\n  , isObject          = require('./_is-object')\n  , anInstance        = require('./_an-instance')\n  , forOf             = require('./_for-of')\n  , createArrayMethod = require('./_array-methods')\n  , $has              = require('./_has')\n  , arrayFind         = createArrayMethod(5)\n  , arrayFindIndex    = createArrayMethod(6)\n  , id                = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function(that){\n  return that._l || (that._l = new UncaughtFrozenStore);\n};\nvar UncaughtFrozenStore = function(){\n  this.a = [];\n};\nvar findUncaughtFrozen = function(store, key){\n  return arrayFind(store.a, function(it){\n    return it[0] === key;\n  });\n};\nUncaughtFrozenStore.prototype = {\n  get: function(key){\n    var entry = findUncaughtFrozen(this, key);\n    if(entry)return entry[1];\n  },\n  has: function(key){\n    return !!findUncaughtFrozen(this, key);\n  },\n  set: function(key, value){\n    var entry = findUncaughtFrozen(this, key);\n    if(entry)entry[1] = value;\n    else this.a.push([key, value]);\n  },\n  'delete': function(key){\n    var index = arrayFindIndex(this.a, function(it){\n      return it[0] === key;\n    });\n    if(~index)this.a.splice(index, 1);\n    return !!~index;\n  }\n};\n\nmodule.exports = {\n  getConstructor: function(wrapper, NAME, IS_MAP, ADDER){\n    var C = wrapper(function(that, iterable){\n      anInstance(that, C, NAME, '_i');\n      that._i = id++;      // collection id\n      that._l = undefined; // leak store for uncaught frozen objects\n      if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n    });\n    redefineAll(C.prototype, {\n      // 23.3.3.2 WeakMap.prototype.delete(key)\n      // 23.4.3.3 WeakSet.prototype.delete(value)\n      'delete': function(key){\n        if(!isObject(key))return false;\n        var data = getWeak(key);\n        if(data === true)return uncaughtFrozenStore(this)['delete'](key);\n        return data && $has(data, this._i) && delete data[this._i];\n      },\n      // 23.3.3.4 WeakMap.prototype.has(key)\n      // 23.4.3.4 WeakSet.prototype.has(value)\n      has: function has(key){\n        if(!isObject(key))return false;\n        var data = getWeak(key);\n        if(data === true)return uncaughtFrozenStore(this).has(key);\n        return data && $has(data, this._i);\n      }\n    });\n    return C;\n  },\n  def: function(that, key, value){\n    var data = getWeak(anObject(key), true);\n    if(data === true)uncaughtFrozenStore(that).set(key, value);\n    else data[that._i] = value;\n    return that;\n  },\n  ufstore: uncaughtFrozenStore\n};","'use strict';\nvar global            = require('./_global')\n  , $export           = require('./_export')\n  , redefine          = require('./_redefine')\n  , redefineAll       = require('./_redefine-all')\n  , meta              = require('./_meta')\n  , forOf             = require('./_for-of')\n  , anInstance        = require('./_an-instance')\n  , isObject          = require('./_is-object')\n  , fails             = require('./_fails')\n  , $iterDetect       = require('./_iter-detect')\n  , setToStringTag    = require('./_set-to-string-tag')\n  , inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function(NAME, wrapper, methods, common, IS_MAP, IS_WEAK){\n  var Base  = global[NAME]\n    , C     = Base\n    , ADDER = IS_MAP ? 'set' : 'add'\n    , proto = C && C.prototype\n    , O     = {};\n  var fixMethod = function(KEY){\n    var fn = proto[KEY];\n    redefine(proto, KEY,\n      KEY == 'delete' ? function(a){\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'has' ? function has(a){\n        return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'get' ? function get(a){\n        return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n      } : KEY == 'add' ? function add(a){ fn.call(this, a === 0 ? 0 : a); return this; }\n        : function set(a, b){ fn.call(this, a === 0 ? 0 : a, b); return this; }\n    );\n  };\n  if(typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function(){\n    new C().entries().next();\n  }))){\n    // create collection constructor\n    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n    redefineAll(C.prototype, methods);\n    meta.NEED = true;\n  } else {\n    var instance             = new C\n      // early implementations not supports chaining\n      , HASNT_CHAINING       = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance\n      // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false\n      , THROWS_ON_PRIMITIVES = fails(function(){ instance.has(1); })\n      // most early implementations doesn't supports iterables, most modern - not close it correctly\n      , ACCEPT_ITERABLES     = $iterDetect(function(iter){ new C(iter); }) // eslint-disable-line no-new\n      // for early implementations -0 and +0 not the same\n      , BUGGY_ZERO = !IS_WEAK && fails(function(){\n        // V8 ~ Chromium 42- fails only with 5+ elements\n        var $instance = new C()\n          , index     = 5;\n        while(index--)$instance[ADDER](index, index);\n        return !$instance.has(-0);\n      });\n    if(!ACCEPT_ITERABLES){ \n      C = wrapper(function(target, iterable){\n        anInstance(target, C, NAME);\n        var that = inheritIfRequired(new Base, target, C);\n        if(iterable != undefined)forOf(iterable, IS_MAP, that[ADDER], that);\n        return that;\n      });\n      C.prototype = proto;\n      proto.constructor = C;\n    }\n    if(THROWS_ON_PRIMITIVES || BUGGY_ZERO){\n      fixMethod('delete');\n      fixMethod('has');\n      IS_MAP && fixMethod('get');\n    }\n    if(BUGGY_ZERO || HASNT_CHAINING)fixMethod(ADDER);\n    // weak collections should not contains .clear method\n    if(IS_WEAK && proto.clear)delete proto.clear;\n  }\n\n  setToStringTag(C, NAME);\n\n  O[NAME] = C;\n  $export($export.G + $export.W + $export.F * (C != Base), O);\n\n  if(!IS_WEAK)common.setStrong(C, NAME, IS_MAP);\n\n  return C;\n};","var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef","'use strict';\r\nvar $defineProperty = require('./_object-dp')\r\n  , createDesc      = require('./_property-desc');\r\n\r\nmodule.exports = function(object, index, value){\r\n  if(index in object)$defineProperty.f(object, index, createDesc(0, value));\r\n  else object[index] = value;\r\n};","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\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};","'use strict';\r\nvar anObject    = require('./_an-object')\r\n  , toPrimitive = require('./_to-primitive')\r\n  , NUMBER      = 'number';\r\n\r\nmodule.exports = function(hint){\r\n  if(hint !== 'string' && hint !== NUMBER && hint !== 'default')throw TypeError('Incorrect hint');\r\n  return toPrimitive(anObject(this), hint != NUMBER);\r\n};","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});","var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};","// IE 8- don't enum bug keys\r\nmodule.exports = (\r\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\r\n).split(',');","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys')\n  , gOPS    = require('./_object-gops')\n  , pIE     = require('./_object-pie');\nmodule.exports = function(it){\n  var result     = getKeys(it)\n    , getSymbols = gOPS.f;\n  if(getSymbols){\n    var symbols = getSymbols(it)\n      , isEnum  = pIE.f\n      , i       = 0\n      , key;\n    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);\n  } return result;\n};","var global    = require('./_global')\n  , core      = require('./_core')\n  , hide      = require('./_hide')\n  , redefine  = require('./_redefine')\n  , ctx       = require('./_ctx')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE] || (exports[PROTOTYPE] = {})\n    , key, own, out, exp;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    // export native or passed\n    out = (own ? target : source)[key];\n    // bind timers to global for call from export context\n    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // extend global\n    if(target)redefine(target, key, out, type & $export.U);\n    // export\n    if(exports[key] != out)hide(exports, key, exp);\n    if(IS_PROTO && expProto[key] != out)expProto[key] = out;\n  }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;","var MATCH = require('./_wks')('match');\nmodule.exports = function(KEY){\n  var re = /./;\n  try {\n    '/./'[KEY](re);\n  } catch(e){\n    try {\n      re[MATCH] = false;\n      return !'/./'[KEY](re);\n    } catch(f){ /* empty */ }\n  } return true;\n};","module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};","'use strict';\nvar hide     = require('./_hide')\n  , redefine = require('./_redefine')\n  , fails    = require('./_fails')\n  , defined  = require('./_defined')\n  , wks      = require('./_wks');\n\nmodule.exports = function(KEY, length, exec){\n  var SYMBOL   = wks(KEY)\n    , fns      = exec(defined, SYMBOL, ''[KEY])\n    , strfn    = fns[0]\n    , rxfn     = fns[1];\n  if(fails(function(){\n    var O = {};\n    O[SYMBOL] = function(){ return 7; };\n    return ''[KEY](O) != 7;\n  })){\n    redefine(String.prototype, KEY, strfn);\n    hide(RegExp.prototype, SYMBOL, length == 2\n      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n      // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n      ? function(string, arg){ return rxfn.call(string, this, arg); }\n      // 21.2.5.6 RegExp.prototype[@@match](string)\n      // 21.2.5.9 RegExp.prototype[@@search](string)\n      : function(string){ return rxfn.call(string, this); }\n    );\n  }\n};","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function(){\n  var that   = anObject(this)\n    , result = '';\n  if(that.global)     result += 'g';\n  if(that.ignoreCase) result += 'i';\n  if(that.multiline)  result += 'm';\n  if(that.unicode)    result += 'u';\n  if(that.sticky)     result += 'y';\n  return result;\n};","var ctx         = require('./_ctx')\n  , call        = require('./_iter-call')\n  , isArrayIter = require('./_is-array-iter')\n  , anObject    = require('./_an-object')\n  , toLength    = require('./_to-length')\n  , getIterFn   = require('./core.get-iterator-method')\n  , BREAK       = {}\n  , RETURN      = {};\nvar exports = module.exports = function(iterable, entries, fn, that, ITERATOR){\n  var iterFn = ITERATOR ? function(){ return iterable; } : getIterFn(iterable)\n    , f      = ctx(fn, that, entries ? 2 : 1)\n    , index  = 0\n    , length, step, iterator, result;\n  if(typeof iterFn != 'function')throw TypeError(iterable + ' is not iterable!');\n  // fast case for arrays with default iterator\n  if(isArrayIter(iterFn))for(length = toLength(iterable.length); length > index; index++){\n    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n    if(result === BREAK || result === RETURN)return result;\n  } else for(iterator = iterFn.call(iterable); !(step = iterator.next()).done; ){\n    result = call(iterator, f, step.value, entries);\n    if(result === BREAK || result === RETURN)return result;\n  }\n};\nexports.BREAK  = BREAK;\nexports.RETURN = RETURN;","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};","var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};","module.exports = require('./_global').document && document.documentElement;","module.exports = !require('./_descriptors') && !require('./_fails')(function(){\r\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\r\n});","var isObject       = require('./_is-object')\r\n  , setPrototypeOf = require('./_set-proto').set;\r\nmodule.exports = function(that, target, C){\r\n  var P, S = target.constructor;\r\n  if(S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf){\r\n    setPrototypeOf(that, P);\r\n  } return that;\r\n};","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function(fn, args, that){\n  var un = that === undefined;\n  switch(args.length){\n    case 0: return un ? fn()\n                      : fn.call(that);\n    case 1: return un ? fn(args[0])\n                      : fn.call(that, args[0]);\n    case 2: return un ? fn(args[0], args[1])\n                      : fn.call(that, args[0], args[1]);\n    case 3: return un ? fn(args[0], args[1], args[2])\n                      : fn.call(that, args[0], args[1], args[2]);\n    case 4: return un ? fn(args[0], args[1], args[2], args[3])\n                      : fn.call(that, args[0], args[1], args[2], args[3]);\n  } return              fn.apply(that, args);\n};","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};","// check on default Array iterator\nvar Iterators  = require('./_iterators')\n  , ITERATOR   = require('./_wks')('iterator')\n  , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg){\n  return cof(arg) == 'Array';\n};","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object')\n  , floor    = Math.floor;\nmodule.exports = function isInteger(it){\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};","module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object')\n  , cof      = require('./_cof')\n  , MATCH    = require('./_wks')('match');\nmodule.exports = function(it){\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function(iterator, fn, value, entries){\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch(e){\n    var ret = iterator['return'];\n    if(ret !== undefined)anObject(ret.call(iterator));\n    throw e;\n  }\n};","'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};","'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};","var ITERATOR     = require('./_wks')('iterator')\n  , SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function(){ SAFE_CLOSING = true; };\n  Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n  if(!skipClosing && !SAFE_CLOSING)return false;\n  var safe = false;\n  try {\n    var arr  = [7]\n      , iter = arr[ITERATOR]();\n    iter.next = function(){ return {done: safe = true}; };\n    arr[ITERATOR] = function(){ return iter; };\n    exec(arr);\n  } catch(e){ /* empty */ }\n  return safe;\n};","module.exports = function(done, value){\n  return {value: value, done: !!done};\n};","module.exports = {};","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject');\nmodule.exports = function(object, el){\n  var O      = toIObject(object)\n    , keys   = getKeys(O)\n    , length = keys.length\n    , index  = 0\n    , key;\n  while(length > index)if(O[key = keys[index++]] === el)return key;\n};","module.exports = false;","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n  // Old FF bug\n  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n  // Tor Browser bug\n  || $expm1(-2e-17) != -2e-17\n) ? function expm1(x){\n  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x){\n  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x){\n  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};","var META     = require('./_uid')('meta')\n  , isObject = require('./_is-object')\n  , has      = require('./_has')\n  , setDesc  = require('./_object-dp').f\n  , id       = 0;\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\nvar FREEZE = !require('./_fails')(function(){\n  return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function(it){\n  setDesc(it, META, {value: {\n    i: 'O' + ++id, // object ID\n    w: {}          // weak collections IDs\n  }});\n};\nvar fastKey = function(it, create){\n  // return primitive with prefix\n  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return 'F';\n    // not necessary to add metadata\n    if(!create)return 'E';\n    // add missing metadata\n    setMeta(it);\n  // return object ID\n  } return it[META].i;\n};\nvar getWeak = function(it, create){\n  if(!has(it, META)){\n    // can't set metadata to uncaught frozen object\n    if(!isExtensible(it))return true;\n    // not necessary to add metadata\n    if(!create)return false;\n    // add missing metadata\n    setMeta(it);\n  // return hash weak collections IDs\n  } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function(it){\n  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);\n  return it;\n};\nvar meta = module.exports = {\n  KEY:      META,\n  NEED:     false,\n  fastKey:  fastKey,\n  getWeak:  getWeak,\n  onFreeze: onFreeze\n};","var Map     = require('./es6.map')\n  , $export = require('./_export')\n  , shared  = require('./_shared')('metadata')\n  , store   = shared.store || (shared.store = new (require('./es6.weak-map')));\n\nvar getOrCreateMetadataMap = function(target, targetKey, create){\n  var targetMetadata = store.get(target);\n  if(!targetMetadata){\n    if(!create)return undefined;\n    store.set(target, targetMetadata = new Map);\n  }\n  var keyMetadata = targetMetadata.get(targetKey);\n  if(!keyMetadata){\n    if(!create)return undefined;\n    targetMetadata.set(targetKey, keyMetadata = new Map);\n  } return keyMetadata;\n};\nvar ordinaryHasOwnMetadata = function(MetadataKey, O, P){\n  var metadataMap = getOrCreateMetadataMap(O, P, false);\n  return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\nvar ordinaryGetOwnMetadata = function(MetadataKey, O, P){\n  var metadataMap = getOrCreateMetadataMap(O, P, false);\n  return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\nvar ordinaryDefineOwnMetadata = function(MetadataKey, MetadataValue, O, P){\n  getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\nvar ordinaryOwnMetadataKeys = function(target, targetKey){\n  var metadataMap = getOrCreateMetadataMap(target, targetKey, false)\n    , keys        = [];\n  if(metadataMap)metadataMap.forEach(function(_, key){ keys.push(key); });\n  return keys;\n};\nvar toMetaKey = function(it){\n  return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\nvar exp = function(O){\n  $export($export.S, 'Reflect', O);\n};\n\nmodule.exports = {\n  store: store,\n  map: getOrCreateMetadataMap,\n  has: ordinaryHasOwnMetadata,\n  get: ordinaryGetOwnMetadata,\n  set: ordinaryDefineOwnMetadata,\n  keys: ordinaryOwnMetadataKeys,\n  key: toMetaKey,\n  exp: exp\n};","var global    = require('./_global')\n  , macrotask = require('./_task').set\n  , Observer  = global.MutationObserver || global.WebKitMutationObserver\n  , process   = global.process\n  , Promise   = global.Promise\n  , isNode    = require('./_cof')(process) == 'process';\n\nmodule.exports = function(){\n  var head, last, notify;\n\n  var flush = function(){\n    var parent, fn;\n    if(isNode && (parent = process.domain))parent.exit();\n    while(head){\n      fn   = head.fn;\n      head = head.next;\n      try {\n        fn();\n      } catch(e){\n        if(head)notify();\n        else last = undefined;\n        throw e;\n      }\n    } last = undefined;\n    if(parent)parent.enter();\n  };\n\n  // Node.js\n  if(isNode){\n    notify = function(){\n      process.nextTick(flush);\n    };\n  // browsers with MutationObserver\n  } else if(Observer){\n    var toggle = true\n      , node   = document.createTextNode('');\n    new Observer(flush).observe(node, {characterData: true}); // eslint-disable-line no-new\n    notify = function(){\n      node.data = toggle = !toggle;\n    };\n  // environments with maybe non-completely correct, but existent Promise\n  } else if(Promise && Promise.resolve){\n    var promise = Promise.resolve();\n    notify = function(){\n      promise.then(flush);\n    };\n  // for other environments - macrotask based on:\n  // - setImmediate\n  // - MessageChannel\n  // - window.postMessag\n  // - onreadystatechange\n  // - setTimeout\n  } else {\n    notify = function(){\n      // strange IE + webpack dev server bug - use .call(global)\n      macrotask.call(global, flush);\n    };\n  }\n\n  return function(fn){\n    var task = {fn: fn, next: undefined};\n    if(last)last.next = task;\n    if(!head){\n      head = task;\n      notify();\n    } last = task;\n  };\n};","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys  = require('./_object-keys')\n  , gOPS     = require('./_object-gops')\n  , pIE      = require('./_object-pie')\n  , toObject = require('./_to-object')\n  , IObject  = require('./_iobject')\n  , $assign  = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function(){\n  var A = {}\n    , B = {}\n    , S = Symbol()\n    , K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function(k){ B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n  var T     = toObject(target)\n    , aLen  = arguments.length\n    , index = 1\n    , getSymbols = gOPS.f\n    , isEnum     = pIE.f;\n  while(aLen > index){\n    var S      = IObject(arguments[index++])\n      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n      , length = keys.length\n      , j      = 0\n      , key;\n    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n  } return T;\n} : $assign;","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\r\nvar anObject    = require('./_an-object')\r\n  , dPs         = require('./_object-dps')\r\n  , enumBugKeys = require('./_enum-bug-keys')\r\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\r\n  , Empty       = function(){ /* empty */ }\r\n  , PROTOTYPE   = 'prototype';\r\n\r\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\r\nvar createDict = function(){\r\n  // Thrash, waste and sodomy: IE GC bug\r\n  var iframe = require('./_dom-create')('iframe')\r\n    , i      = enumBugKeys.length\r\n    , gt     = '>'\r\n    , iframeDocument;\r\n  iframe.style.display = 'none';\r\n  require('./_html').appendChild(iframe);\r\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\r\n  // createDict = iframe.contentWindow.Object;\r\n  // html.removeChild(iframe);\r\n  iframeDocument = iframe.contentWindow.document;\r\n  iframeDocument.open();\r\n  iframeDocument.write('<script>document.F=Object</script' + gt);\r\n  iframeDocument.close();\r\n  createDict = iframeDocument.F;\r\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\r\n  return createDict();\r\n};\r\n\r\nmodule.exports = Object.create || function create(O, Properties){\r\n  var result;\r\n  if(O !== null){\r\n    Empty[PROTOTYPE] = anObject(O);\r\n    result = new Empty;\r\n    Empty[PROTOTYPE] = null;\r\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\r\n    result[IE_PROTO] = O;\r\n  } else result = createDict();\r\n  return Properties === undefined ? result : dPs(result, Properties);\r\n};","var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* 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};","var dP       = require('./_object-dp')\r\n  , anObject = require('./_an-object')\r\n  , getKeys  = require('./_object-keys');\r\n\r\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\r\n  anObject(O);\r\n  var keys   = getKeys(Properties)\r\n    , length = keys.length\r\n    , i = 0\r\n    , P;\r\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\r\n  return O;\r\n};","// Forced replacement prototype accessors methods\r\nmodule.exports = require('./_library')|| !require('./_fails')(function(){\r\n  var K = Math.random();\r\n  // In FF throws only define methods\r\n  __defineSetter__.call(null, K, function(){ /* empty */});\r\n  delete require('./_global')[K];\r\n});","var pIE            = require('./_object-pie')\r\n  , createDesc     = require('./_property-desc')\r\n  , toIObject      = require('./_to-iobject')\r\n  , toPrimitive    = require('./_to-primitive')\r\n  , has            = require('./_has')\r\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\r\n  , gOPD           = Object.getOwnPropertyDescriptor;\r\n\r\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P){\r\n  O = toIObject(O);\r\n  P = toPrimitive(P, true);\r\n  if(IE8_DOM_DEFINE)try {\r\n    return gOPD(O, P);\r\n  } catch(e){ /* empty */ }\r\n  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);\r\n};","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject')\n  , gOPN      = require('./_object-gopn').f\n  , toString  = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n  ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function(it){\n  try {\n    return gOPN(it);\n  } catch(e){\n    return windowNames.slice();\n  }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it){\n  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\r\nvar $keys      = require('./_object-keys-internal')\r\n  , hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\r\n\r\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){\r\n  return $keys(O, hiddenKeys);\r\n};","exports.f = Object.getOwnPropertySymbols;","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\r\nvar has         = require('./_has')\r\n  , toObject    = require('./_to-object')\r\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\r\n  , ObjectProto = Object.prototype;\r\n\r\nmodule.exports = Object.getPrototypeOf || function(O){\r\n  O = toObject(O);\r\n  if(has(O, IE_PROTO))return O[IE_PROTO];\r\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\r\n    return O.constructor.prototype;\r\n  } return O instanceof Object ? ObjectProto : null;\r\n};","var has          = require('./_has')\r\n  , toIObject    = require('./_to-iobject')\r\n  , arrayIndexOf = require('./_array-includes')(false)\r\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\r\n\r\nmodule.exports = function(object, names){\r\n  var O      = toIObject(object)\r\n    , i      = 0\r\n    , result = []\r\n    , key;\r\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\r\n  // Don't enum bug & hidden keys\r\n  while(names.length > i)if(has(O, key = names[i++])){\r\n    ~arrayIndexOf(result, key) || result.push(key);\r\n  }\r\n  return result;\r\n};","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\r\nvar $keys       = require('./_object-keys-internal')\r\n  , enumBugKeys = require('./_enum-bug-keys');\r\n\r\nmodule.exports = Object.keys || function keys(O){\r\n  return $keys(O, enumBugKeys);\r\n};","exports.f = {}.propertyIsEnumerable;","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export')\n  , core    = require('./_core')\n  , fails   = require('./_fails');\nmodule.exports = function(KEY, exec){\n  var fn  = (core.Object || {})[KEY] || Object[KEY]\n    , exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject')\n  , isEnum    = require('./_object-pie').f;\nmodule.exports = function(isEntries){\n  return function(it){\n    var O      = toIObject(it)\n      , keys   = getKeys(O)\n      , length = keys.length\n      , i      = 0\n      , result = []\n      , key;\n    while(length > i)if(isEnum.call(O, key = keys[i++])){\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};","// all object keys, includes non-enumerable and symbols\nvar gOPN     = require('./_object-gopn')\n  , gOPS     = require('./_object-gops')\n  , anObject = require('./_an-object')\n  , Reflect  = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it){\n  var keys       = gOPN.f(anObject(it))\n    , getSymbols = gOPS.f;\n  return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};","var $parseFloat = require('./_global').parseFloat\n  , $trim       = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str){\n  var string = $trim(String(str), 3)\n    , result = $parseFloat(string);\n  return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;","var $parseInt = require('./_global').parseInt\n  , $trim     = require('./_string-trim').trim\n  , ws        = require('./_string-ws')\n  , hex       = /^[\\-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix){\n  var string = $trim(String(str), 3);\n  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;","'use strict';\nvar path      = require('./_path')\n  , invoke    = require('./_invoke')\n  , aFunction = require('./_a-function');\nmodule.exports = function(/* ...pargs */){\n  var fn     = aFunction(this)\n    , length = arguments.length\n    , pargs  = Array(length)\n    , i      = 0\n    , _      = path._\n    , holder = false;\n  while(length > i)if((pargs[i] = arguments[i++]) === _)holder = true;\n  return function(/* ...args */){\n    var that = this\n      , aLen = arguments.length\n      , j = 0, k = 0, args;\n    if(!holder && !aLen)return invoke(fn, pargs, that);\n    args = pargs.slice();\n    if(holder)for(;length > j; j++)if(args[j] === _)args[j] = arguments[k++];\n    while(aLen > k)args.push(arguments[k++]);\n    return invoke(fn, args, that);\n  };\n};","module.exports = require('./_global');","module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};","var redefine = require('./_redefine');\nmodule.exports = function(target, src, safe){\n  for(var key in src)redefine(target, key, src[key], safe);\n  return target;\n};","var global    = require('./_global')\n  , hide      = require('./_hide')\n  , has       = require('./_has')\n  , SRC       = require('./_uid')('src')\n  , TO_STRING = 'toString'\n  , $toString = Function[TO_STRING]\n  , TPL       = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function(it){\n  return $toString.call(it);\n};\n\n(module.exports = function(O, key, val, safe){\n  var isFunction = typeof val == 'function';\n  if(isFunction)has(val, 'name') || hide(val, 'name', key);\n  if(O[key] === val)return;\n  if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n  if(O === global){\n    O[key] = val;\n  } else {\n    if(!safe){\n      delete O[key];\n      hide(O, key, val);\n    } else {\n      if(O[key])O[key] = val;\n      else hide(O, key, val);\n    }\n  }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString(){\n  return typeof this == 'function' && this[SRC] || $toString.call(this);\n});","module.exports = function(regExp, replace){\n  var replacer = replace === Object(replace) ? function(part){\n    return replace[part];\n  } : replace;\n  return function(it){\n    return String(it).replace(regExp, replacer);\n  };\n};","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y){\n  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object')\n  , anObject = require('./_an-object');\nvar check = function(O, proto){\n  anObject(O);\n  if(!isObject(proto) && proto !== null)throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n    function(test, buggy, set){\n      try {\n        set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n        set(test, []);\n        buggy = !(test instanceof Array);\n      } catch(e){ buggy = true; }\n      return function setPrototypeOf(O, proto){\n        check(O, proto);\n        if(buggy)O.__proto__ = proto;\n        else set(O, proto);\n        return O;\n      };\n    }({}, false) : undefined),\n  check: check\n};","'use strict';\nvar global      = require('./_global')\n  , dP          = require('./_object-dp')\n  , DESCRIPTORS = require('./_descriptors')\n  , SPECIES     = require('./_wks')('species');\n\nmodule.exports = function(KEY){\n  var C = global[KEY];\n  if(DESCRIPTORS && C && !C[SPECIES])dP.f(C, SPECIES, {\n    configurable: true,\n    get: function(){ return this; }\n  });\n};","var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};","var shared = require('./_shared')('keys')\r\n  , uid    = require('./_uid');\r\nmodule.exports = function(key){\r\n  return shared[key] || (shared[key] = uid(key));\r\n};","var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject  = require('./_an-object')\n  , aFunction = require('./_a-function')\n  , SPECIES   = require('./_wks')('species');\nmodule.exports = function(O, D){\n  var C = anObject(O).constructor, S;\n  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};","var fails = require('./_fails');\r\n\r\nmodule.exports = function(method, arg){\r\n  return !!method && fails(function(){\r\n    arg ? method.call(null, function(){}, 1) : method.call(null);\r\n  });\r\n};","var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp')\n  , defined  = require('./_defined');\n\nmodule.exports = function(that, searchString, NAME){\n  if(isRegExp(searchString))throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n  return String(defined(that));\n};","var $export = require('./_export')\n  , fails   = require('./_fails')\n  , defined = require('./_defined')\n  , quot    = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function(string, tag, attribute, value) {\n  var S  = String(defined(string))\n    , p1 = '<' + tag;\n  if(attribute !== '')p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '&quot;') + '\"';\n  return p1 + '>' + S + '</' + tag + '>';\n};\nmodule.exports = function(NAME, exec){\n  var O = {};\n  O[NAME] = exec(createHTML);\n  $export($export.P + $export.F * fails(function(){\n    var test = ''[NAME]('\"');\n    return test !== test.toLowerCase() || test.split('\"').length > 3;\n  }), 'String', O);\n};","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length')\n  , repeat   = require('./_string-repeat')\n  , defined  = require('./_defined');\n\nmodule.exports = function(that, maxLength, fillString, left){\n  var S            = String(defined(that))\n    , stringLength = S.length\n    , fillStr      = fillString === undefined ? ' ' : String(fillString)\n    , intMaxLength = toLength(maxLength);\n  if(intMaxLength <= stringLength || fillStr == '')return S;\n  var fillLen = intMaxLength - stringLength\n    , stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n  if(stringFiller.length > fillLen)stringFiller = stringFiller.slice(0, fillLen);\n  return left ? stringFiller + S : S + stringFiller;\n};\n","'use strict';\nvar toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n\nmodule.exports = function repeat(count){\n  var str = String(defined(this))\n    , res = ''\n    , n   = toInteger(count);\n  if(n < 0 || n == Infinity)throw RangeError(\"Count can't be negative\");\n  for(;n > 0; (n >>>= 1) && (str += str))if(n & 1)res += str;\n  return res;\n};","var $export = require('./_export')\n  , defined = require('./_defined')\n  , fails   = require('./_fails')\n  , spaces  = require('./_string-ws')\n  , space   = '[' + spaces + ']'\n  , non     = '\\u200b\\u0085'\n  , ltrim   = RegExp('^' + space + space + '*')\n  , rtrim   = RegExp(space + space + '*$');\n\nvar exporter = function(KEY, exec, ALIAS){\n  var exp   = {};\n  var FORCE = fails(function(){\n    return !!spaces[KEY]() || non[KEY]() != non;\n  });\n  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n  if(ALIAS)exp[ALIAS] = fn;\n  $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function(string, TYPE){\n  string = String(defined(string));\n  if(TYPE & 1)string = string.replace(ltrim, '');\n  if(TYPE & 2)string = string.replace(rtrim, '');\n  return string;\n};\n\nmodule.exports = exporter;","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\r\n  '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';","var ctx                = require('./_ctx')\n  , invoke             = require('./_invoke')\n  , html               = require('./_html')\n  , cel                = require('./_dom-create')\n  , global             = require('./_global')\n  , process            = global.process\n  , setTask            = global.setImmediate\n  , clearTask          = global.clearImmediate\n  , MessageChannel     = global.MessageChannel\n  , counter            = 0\n  , queue              = {}\n  , ONREADYSTATECHANGE = 'onreadystatechange'\n  , defer, channel, port;\nvar run = function(){\n  var id = +this;\n  if(queue.hasOwnProperty(id)){\n    var fn = queue[id];\n    delete queue[id];\n    fn();\n  }\n};\nvar listener = function(event){\n  run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif(!setTask || !clearTask){\n  setTask = function setImmediate(fn){\n    var args = [], i = 1;\n    while(arguments.length > i)args.push(arguments[i++]);\n    queue[++counter] = function(){\n      invoke(typeof fn == 'function' ? fn : Function(fn), args);\n    };\n    defer(counter);\n    return counter;\n  };\n  clearTask = function clearImmediate(id){\n    delete queue[id];\n  };\n  // Node.js 0.8-\n  if(require('./_cof')(process) == 'process'){\n    defer = function(id){\n      process.nextTick(ctx(run, id, 1));\n    };\n  // Browsers with MessageChannel, includes WebWorkers\n  } else if(MessageChannel){\n    channel = new MessageChannel;\n    port    = channel.port2;\n    channel.port1.onmessage = listener;\n    defer = ctx(port.postMessage, port, 1);\n  // Browsers with postMessage, skip WebWorkers\n  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n  } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){\n    defer = function(id){\n      global.postMessage(id + '', '*');\n    };\n    global.addEventListener('message', listener, false);\n  // IE8-\n  } else if(ONREADYSTATECHANGE in cel('script')){\n    defer = function(id){\n      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){\n        html.removeChild(this);\n        run.call(id);\n      };\n    };\n  // Rest old browsers\n  } else {\n    defer = function(id){\n      setTimeout(ctx(run, id, 1), 0);\n    };\n  }\n}\nmodule.exports = {\n  set:   setTask,\n  clear: clearTask\n};","var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};","// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_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};","'use strict';\nif(require('./_descriptors')){\n  var LIBRARY             = require('./_library')\n    , global              = require('./_global')\n    , fails               = require('./_fails')\n    , $export             = require('./_export')\n    , $typed              = require('./_typed')\n    , $buffer             = require('./_typed-buffer')\n    , ctx                 = require('./_ctx')\n    , anInstance          = require('./_an-instance')\n    , propertyDesc        = require('./_property-desc')\n    , hide                = require('./_hide')\n    , redefineAll         = require('./_redefine-all')\n    , isInteger           = require('./_is-integer')\n    , toInteger           = require('./_to-integer')\n    , toLength            = require('./_to-length')\n    , toIndex             = require('./_to-index')\n    , toPrimitive         = require('./_to-primitive')\n    , has                 = require('./_has')\n    , same                = require('./_same-value')\n    , classof             = require('./_classof')\n    , isObject            = require('./_is-object')\n    , toObject            = require('./_to-object')\n    , isArrayIter         = require('./_is-array-iter')\n    , create              = require('./_object-create')\n    , getPrototypeOf      = require('./_object-gpo')\n    , gOPN                = require('./_object-gopn').f\n    , isIterable          = require('./core.is-iterable')\n    , getIterFn           = require('./core.get-iterator-method')\n    , uid                 = require('./_uid')\n    , wks                 = require('./_wks')\n    , createArrayMethod   = require('./_array-methods')\n    , createArrayIncludes = require('./_array-includes')\n    , speciesConstructor  = require('./_species-constructor')\n    , ArrayIterators      = require('./es6.array.iterator')\n    , Iterators           = require('./_iterators')\n    , $iterDetect         = require('./_iter-detect')\n    , setSpecies          = require('./_set-species')\n    , arrayFill           = require('./_array-fill')\n    , arrayCopyWithin     = require('./_array-copy-within')\n    , $DP                 = require('./_object-dp')\n    , $GOPD               = require('./_object-gopd')\n    , dP                  = $DP.f\n    , gOPD                = $GOPD.f\n    , RangeError          = global.RangeError\n    , TypeError           = global.TypeError\n    , Uint8Array          = global.Uint8Array\n    , ARRAY_BUFFER        = 'ArrayBuffer'\n    , SHARED_BUFFER       = 'Shared' + ARRAY_BUFFER\n    , BYTES_PER_ELEMENT   = 'BYTES_PER_ELEMENT'\n    , PROTOTYPE           = 'prototype'\n    , ArrayProto          = Array[PROTOTYPE]\n    , $ArrayBuffer        = $buffer.ArrayBuffer\n    , $DataView           = $buffer.DataView\n    , arrayForEach        = createArrayMethod(0)\n    , arrayFilter         = createArrayMethod(2)\n    , arraySome           = createArrayMethod(3)\n    , arrayEvery          = createArrayMethod(4)\n    , arrayFind           = createArrayMethod(5)\n    , arrayFindIndex      = createArrayMethod(6)\n    , arrayIncludes       = createArrayIncludes(true)\n    , arrayIndexOf        = createArrayIncludes(false)\n    , arrayValues         = ArrayIterators.values\n    , arrayKeys           = ArrayIterators.keys\n    , arrayEntries        = ArrayIterators.entries\n    , arrayLastIndexOf    = ArrayProto.lastIndexOf\n    , arrayReduce         = ArrayProto.reduce\n    , arrayReduceRight    = ArrayProto.reduceRight\n    , arrayJoin           = ArrayProto.join\n    , arraySort           = ArrayProto.sort\n    , arraySlice          = ArrayProto.slice\n    , arrayToString       = ArrayProto.toString\n    , arrayToLocaleString = ArrayProto.toLocaleString\n    , ITERATOR            = wks('iterator')\n    , TAG                 = wks('toStringTag')\n    , TYPED_CONSTRUCTOR   = uid('typed_constructor')\n    , DEF_CONSTRUCTOR     = uid('def_constructor')\n    , ALL_CONSTRUCTORS    = $typed.CONSTR\n    , TYPED_ARRAY         = $typed.TYPED\n    , VIEW                = $typed.VIEW\n    , WRONG_LENGTH        = 'Wrong length!';\n\n  var $map = createArrayMethod(1, function(O, length){\n    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n  });\n\n  var LITTLE_ENDIAN = fails(function(){\n    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n  });\n\n  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function(){\n    new Uint8Array(1).set({});\n  });\n\n  var strictToLength = function(it, SAME){\n    if(it === undefined)throw TypeError(WRONG_LENGTH);\n    var number = +it\n      , length = toLength(it);\n    if(SAME && !same(number, length))throw RangeError(WRONG_LENGTH);\n    return length;\n  };\n\n  var toOffset = function(it, BYTES){\n    var offset = toInteger(it);\n    if(offset < 0 || offset % BYTES)throw RangeError('Wrong offset!');\n    return offset;\n  };\n\n  var validate = function(it){\n    if(isObject(it) && TYPED_ARRAY in it)return it;\n    throw TypeError(it + ' is not a typed array!');\n  };\n\n  var allocate = function(C, length){\n    if(!(isObject(C) && TYPED_CONSTRUCTOR in C)){\n      throw TypeError('It is not a typed array constructor!');\n    } return new C(length);\n  };\n\n  var speciesFromList = function(O, list){\n    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n  };\n\n  var fromList = function(C, list){\n    var index  = 0\n      , length = list.length\n      , result = allocate(C, length);\n    while(length > index)result[index] = list[index++];\n    return result;\n  };\n\n  var addGetter = function(it, key, internal){\n    dP(it, key, {get: function(){ return this._d[internal]; }});\n  };\n\n  var $from = function from(source /*, mapfn, thisArg */){\n    var O       = toObject(source)\n      , aLen    = arguments.length\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\n      , mapping = mapfn !== undefined\n      , iterFn  = getIterFn(O)\n      , i, length, values, result, step, iterator;\n    if(iterFn != undefined && !isArrayIter(iterFn)){\n      for(iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++){\n        values.push(step.value);\n      } O = values;\n    }\n    if(mapping && aLen > 2)mapfn = ctx(mapfn, arguments[2], 2);\n    for(i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++){\n      result[i] = mapping ? mapfn(O[i], i) : O[i];\n    }\n    return result;\n  };\n\n  var $of = function of(/*...items*/){\n    var index  = 0\n      , length = arguments.length\n      , result = allocate(this, length);\n    while(length > index)result[index] = arguments[index++];\n    return result;\n  };\n\n  // iOS Safari 6.x fails here\n  var TO_LOCALE_BUG = !!Uint8Array && fails(function(){ arrayToLocaleString.call(new Uint8Array(1)); });\n\n  var $toLocaleString = function toLocaleString(){\n    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n  };\n\n  var proto = {\n    copyWithin: function copyWithin(target, start /*, end */){\n      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n    },\n    every: function every(callbackfn /*, thisArg */){\n      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    fill: function fill(value /*, start, end */){ // eslint-disable-line no-unused-vars\n      return arrayFill.apply(validate(this), arguments);\n    },\n    filter: function filter(callbackfn /*, thisArg */){\n      return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n        arguments.length > 1 ? arguments[1] : undefined));\n    },\n    find: function find(predicate /*, thisArg */){\n      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    findIndex: function findIndex(predicate /*, thisArg */){\n      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    forEach: function forEach(callbackfn /*, thisArg */){\n      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    indexOf: function indexOf(searchElement /*, fromIndex */){\n      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    includes: function includes(searchElement /*, fromIndex */){\n      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    join: function join(separator){ // eslint-disable-line no-unused-vars\n      return arrayJoin.apply(validate(this), arguments);\n    },\n    lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */){ // eslint-disable-line no-unused-vars\n      return arrayLastIndexOf.apply(validate(this), arguments);\n    },\n    map: function map(mapfn /*, thisArg */){\n      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    reduce: function reduce(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars\n      return arrayReduce.apply(validate(this), arguments);\n    },\n    reduceRight: function reduceRight(callbackfn /*, initialValue */){ // eslint-disable-line no-unused-vars\n      return arrayReduceRight.apply(validate(this), arguments);\n    },\n    reverse: function reverse(){\n      var that   = this\n        , length = validate(that).length\n        , middle = Math.floor(length / 2)\n        , index  = 0\n        , value;\n      while(index < middle){\n        value         = that[index];\n        that[index++] = that[--length];\n        that[length]  = value;\n      } return that;\n    },\n    some: function some(callbackfn /*, thisArg */){\n      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n    },\n    sort: function sort(comparefn){\n      return arraySort.call(validate(this), comparefn);\n    },\n    subarray: function subarray(begin, end){\n      var O      = validate(this)\n        , length = O.length\n        , $begin = toIndex(begin, length);\n      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n        O.buffer,\n        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n        toLength((end === undefined ? length : toIndex(end, length)) - $begin)\n      );\n    }\n  };\n\n  var $slice = function slice(start, end){\n    return speciesFromList(this, arraySlice.call(validate(this), start, end));\n  };\n\n  var $set = function set(arrayLike /*, offset */){\n    validate(this);\n    var offset = toOffset(arguments[1], 1)\n      , length = this.length\n      , src    = toObject(arrayLike)\n      , len    = toLength(src.length)\n      , index  = 0;\n    if(len + offset > length)throw RangeError(WRONG_LENGTH);\n    while(index < len)this[offset + index] = src[index++];\n  };\n\n  var $iterators = {\n    entries: function entries(){\n      return arrayEntries.call(validate(this));\n    },\n    keys: function keys(){\n      return arrayKeys.call(validate(this));\n    },\n    values: function values(){\n      return arrayValues.call(validate(this));\n    }\n  };\n\n  var isTAIndex = function(target, key){\n    return isObject(target)\n      && target[TYPED_ARRAY]\n      && typeof key != 'symbol'\n      && key in target\n      && String(+key) == String(key);\n  };\n  var $getDesc = function getOwnPropertyDescriptor(target, key){\n    return isTAIndex(target, key = toPrimitive(key, true))\n      ? propertyDesc(2, target[key])\n      : gOPD(target, key);\n  };\n  var $setDesc = function defineProperty(target, key, desc){\n    if(isTAIndex(target, key = toPrimitive(key, true))\n      && isObject(desc)\n      && has(desc, 'value')\n      && !has(desc, 'get')\n      && !has(desc, 'set')\n      // TODO: add validation descriptor w/o calling accessors\n      && !desc.configurable\n      && (!has(desc, 'writable') || desc.writable)\n      && (!has(desc, 'enumerable') || desc.enumerable)\n    ){\n      target[key] = desc.value;\n      return target;\n    } else return dP(target, key, desc);\n  };\n\n  if(!ALL_CONSTRUCTORS){\n    $GOPD.f = $getDesc;\n    $DP.f   = $setDesc;\n  }\n\n  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n    getOwnPropertyDescriptor: $getDesc,\n    defineProperty:           $setDesc\n  });\n\n  if(fails(function(){ arrayToString.call({}); })){\n    arrayToString = arrayToLocaleString = function toString(){\n      return arrayJoin.call(this);\n    }\n  }\n\n  var $TypedArrayPrototype$ = redefineAll({}, proto);\n  redefineAll($TypedArrayPrototype$, $iterators);\n  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n  redefineAll($TypedArrayPrototype$, {\n    slice:          $slice,\n    set:            $set,\n    constructor:    function(){ /* noop */ },\n    toString:       arrayToString,\n    toLocaleString: $toLocaleString\n  });\n  addGetter($TypedArrayPrototype$, 'buffer', 'b');\n  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n  addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n  addGetter($TypedArrayPrototype$, 'length', 'e');\n  dP($TypedArrayPrototype$, TAG, {\n    get: function(){ return this[TYPED_ARRAY]; }\n  });\n\n  module.exports = function(KEY, BYTES, wrapper, CLAMPED){\n    CLAMPED = !!CLAMPED;\n    var NAME       = KEY + (CLAMPED ? 'Clamped' : '') + 'Array'\n      , ISNT_UINT8 = NAME != 'Uint8Array'\n      , GETTER     = 'get' + KEY\n      , SETTER     = 'set' + KEY\n      , TypedArray = global[NAME]\n      , Base       = TypedArray || {}\n      , TAC        = TypedArray && getPrototypeOf(TypedArray)\n      , FORCED     = !TypedArray || !$typed.ABV\n      , O          = {}\n      , TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n    var getter = function(that, index){\n      var data = that._d;\n      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n    };\n    var setter = function(that, index, value){\n      var data = that._d;\n      if(CLAMPED)value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n    };\n    var addElement = function(that, index){\n      dP(that, index, {\n        get: function(){\n          return getter(this, index);\n        },\n        set: function(value){\n          return setter(this, index, value);\n        },\n        enumerable: true\n      });\n    };\n    if(FORCED){\n      TypedArray = wrapper(function(that, data, $offset, $length){\n        anInstance(that, TypedArray, NAME, '_d');\n        var index  = 0\n          , offset = 0\n          , buffer, byteLength, length, klass;\n        if(!isObject(data)){\n          length     = strictToLength(data, true)\n          byteLength = length * BYTES;\n          buffer     = new $ArrayBuffer(byteLength);\n        } else if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){\n          buffer = data;\n          offset = toOffset($offset, BYTES);\n          var $len = data.byteLength;\n          if($length === undefined){\n            if($len % BYTES)throw RangeError(WRONG_LENGTH);\n            byteLength = $len - offset;\n            if(byteLength < 0)throw RangeError(WRONG_LENGTH);\n          } else {\n            byteLength = toLength($length) * BYTES;\n            if(byteLength + offset > $len)throw RangeError(WRONG_LENGTH);\n          }\n          length = byteLength / BYTES;\n        } else if(TYPED_ARRAY in data){\n          return fromList(TypedArray, data);\n        } else {\n          return $from.call(TypedArray, data);\n        }\n        hide(that, '_d', {\n          b: buffer,\n          o: offset,\n          l: byteLength,\n          e: length,\n          v: new $DataView(buffer)\n        });\n        while(index < length)addElement(that, index++);\n      });\n      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n      hide(TypedArrayPrototype, 'constructor', TypedArray);\n    } else if(!$iterDetect(function(iter){\n      // V8 works with iterators, but fails in many other cases\n      // https://code.google.com/p/v8/issues/detail?id=4552\n      new TypedArray(null); // eslint-disable-line no-new\n      new TypedArray(iter); // eslint-disable-line no-new\n    }, true)){\n      TypedArray = wrapper(function(that, data, $offset, $length){\n        anInstance(that, TypedArray, NAME);\n        var klass;\n        // `ws` module bug, temporarily remove validation length for Uint8Array\n        // https://github.com/websockets/ws/pull/645\n        if(!isObject(data))return new Base(strictToLength(data, ISNT_UINT8));\n        if(data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER){\n          return $length !== undefined\n            ? new Base(data, toOffset($offset, BYTES), $length)\n            : $offset !== undefined\n              ? new Base(data, toOffset($offset, BYTES))\n              : new Base(data);\n        }\n        if(TYPED_ARRAY in data)return fromList(TypedArray, data);\n        return $from.call(TypedArray, data);\n      });\n      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function(key){\n        if(!(key in TypedArray))hide(TypedArray, key, Base[key]);\n      });\n      TypedArray[PROTOTYPE] = TypedArrayPrototype;\n      if(!LIBRARY)TypedArrayPrototype.constructor = TypedArray;\n    }\n    var $nativeIterator   = TypedArrayPrototype[ITERATOR]\n      , CORRECT_ITER_NAME = !!$nativeIterator && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined)\n      , $iterator         = $iterators.values;\n    hide(TypedArray, TYPED_CONSTRUCTOR, true);\n    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n    hide(TypedArrayPrototype, VIEW, true);\n    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n    if(CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)){\n      dP(TypedArrayPrototype, TAG, {\n        get: function(){ return NAME; }\n      });\n    }\n\n    O[NAME] = TypedArray;\n\n    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n    $export($export.S, NAME, {\n      BYTES_PER_ELEMENT: BYTES,\n      from: $from,\n      of: $of\n    });\n\n    if(!(BYTES_PER_ELEMENT in TypedArrayPrototype))hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n    $export($export.P, NAME, proto);\n\n    setSpecies(NAME);\n\n    $export($export.P + $export.F * FORCED_SET, NAME, {set: $set});\n\n    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n    $export($export.P + $export.F * (TypedArrayPrototype.toString != arrayToString), NAME, {toString: arrayToString});\n\n    $export($export.P + $export.F * fails(function(){\n      new TypedArray(1).slice();\n    }), NAME, {slice: $slice});\n\n    $export($export.P + $export.F * (fails(function(){\n      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString()\n    }) || !fails(function(){\n      TypedArrayPrototype.toLocaleString.call([1, 2]);\n    })), NAME, {toLocaleString: $toLocaleString});\n\n    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n    if(!LIBRARY && !CORRECT_ITER_NAME)hide(TypedArrayPrototype, ITERATOR, $iterator);\n  };\n} else module.exports = function(){ /* empty */ };","'use strict';\nvar global         = require('./_global')\n  , DESCRIPTORS    = require('./_descriptors')\n  , LIBRARY        = require('./_library')\n  , $typed         = require('./_typed')\n  , hide           = require('./_hide')\n  , redefineAll    = require('./_redefine-all')\n  , fails          = require('./_fails')\n  , anInstance     = require('./_an-instance')\n  , toInteger      = require('./_to-integer')\n  , toLength       = require('./_to-length')\n  , gOPN           = require('./_object-gopn').f\n  , dP             = require('./_object-dp').f\n  , arrayFill      = require('./_array-fill')\n  , setToStringTag = require('./_set-to-string-tag')\n  , ARRAY_BUFFER   = 'ArrayBuffer'\n  , DATA_VIEW      = 'DataView'\n  , PROTOTYPE      = 'prototype'\n  , WRONG_LENGTH   = 'Wrong length!'\n  , WRONG_INDEX    = 'Wrong index!'\n  , $ArrayBuffer   = global[ARRAY_BUFFER]\n  , $DataView      = global[DATA_VIEW]\n  , Math           = global.Math\n  , parseInt       = global.parseInt\n  , RangeError     = global.RangeError\n  , Infinity       = global.Infinity\n  , BaseBuffer     = $ArrayBuffer\n  , abs            = Math.abs\n  , pow            = Math.pow\n  , min            = Math.min\n  , floor          = Math.floor\n  , log            = Math.log\n  , LN2            = Math.LN2\n  , BUFFER         = 'buffer'\n  , BYTE_LENGTH    = 'byteLength'\n  , BYTE_OFFSET    = 'byteOffset'\n  , $BUFFER        = DESCRIPTORS ? '_b' : BUFFER\n  , $LENGTH        = DESCRIPTORS ? '_l' : BYTE_LENGTH\n  , $OFFSET        = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nvar packIEEE754 = function(value, mLen, nBytes){\n  var buffer = Array(nBytes)\n    , eLen   = nBytes * 8 - mLen - 1\n    , eMax   = (1 << eLen) - 1\n    , eBias  = eMax >> 1\n    , rt     = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0\n    , i      = 0\n    , s      = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0\n    , e, m, c;\n  value = abs(value)\n  if(value != value || value === Infinity){\n    m = value != value ? 1 : 0;\n    e = eMax;\n  } else {\n    e = floor(log(value) / LN2);\n    if(value * (c = pow(2, -e)) < 1){\n      e--;\n      c *= 2;\n    }\n    if(e + eBias >= 1){\n      value += rt / c;\n    } else {\n      value += rt * pow(2, 1 - eBias);\n    }\n    if(value * c >= 2){\n      e++;\n      c /= 2;\n    }\n    if(e + eBias >= eMax){\n      m = 0;\n      e = eMax;\n    } else if(e + eBias >= 1){\n      m = (value * c - 1) * pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * pow(2, eBias - 1) * pow(2, mLen);\n      e = 0;\n    }\n  }\n  for(; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n  e = e << mLen | m;\n  eLen += mLen;\n  for(; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n  buffer[--i] |= s * 128;\n  return buffer;\n};\nvar unpackIEEE754 = function(buffer, mLen, nBytes){\n  var eLen  = nBytes * 8 - mLen - 1\n    , eMax  = (1 << eLen) - 1\n    , eBias = eMax >> 1\n    , nBits = eLen - 7\n    , i     = nBytes - 1\n    , s     = buffer[i--]\n    , e     = s & 127\n    , m;\n  s >>= 7;\n  for(; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n  m = e & (1 << -nBits) - 1;\n  e >>= -nBits;\n  nBits += mLen;\n  for(; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n  if(e === 0){\n    e = 1 - eBias;\n  } else if(e === eMax){\n    return m ? NaN : s ? -Infinity : Infinity;\n  } else {\n    m = m + pow(2, mLen);\n    e = e - eBias;\n  } return (s ? -1 : 1) * m * pow(2, e - mLen);\n};\n\nvar unpackI32 = function(bytes){\n  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n};\nvar packI8 = function(it){\n  return [it & 0xff];\n};\nvar packI16 = function(it){\n  return [it & 0xff, it >> 8 & 0xff];\n};\nvar packI32 = function(it){\n  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n};\nvar packF64 = function(it){\n  return packIEEE754(it, 52, 8);\n};\nvar packF32 = function(it){\n  return packIEEE754(it, 23, 4);\n};\n\nvar addGetter = function(C, key, internal){\n  dP(C[PROTOTYPE], key, {get: function(){ return this[internal]; }});\n};\n\nvar get = function(view, bytes, index, isLittleEndian){\n  var numIndex = +index\n    , intIndex = toInteger(numIndex);\n  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b\n    , start = intIndex + view[$OFFSET]\n    , pack  = store.slice(start, start + bytes);\n  return isLittleEndian ? pack : pack.reverse();\n};\nvar set = function(view, bytes, index, conversion, value, isLittleEndian){\n  var numIndex = +index\n    , intIndex = toInteger(numIndex);\n  if(numIndex != intIndex || intIndex < 0 || intIndex + bytes > view[$LENGTH])throw RangeError(WRONG_INDEX);\n  var store = view[$BUFFER]._b\n    , start = intIndex + view[$OFFSET]\n    , pack  = conversion(+value);\n  for(var i = 0; i < bytes; i++)store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n};\n\nvar validateArrayBufferArguments = function(that, length){\n  anInstance(that, $ArrayBuffer, ARRAY_BUFFER);\n  var numberLength = +length\n    , byteLength   = toLength(numberLength);\n  if(numberLength != byteLength)throw RangeError(WRONG_LENGTH);\n  return byteLength;\n};\n\nif(!$typed.ABV){\n  $ArrayBuffer = function ArrayBuffer(length){\n    var byteLength = validateArrayBufferArguments(this, length);\n    this._b       = arrayFill.call(Array(byteLength), 0);\n    this[$LENGTH] = byteLength;\n  };\n\n  $DataView = function DataView(buffer, byteOffset, byteLength){\n    anInstance(this, $DataView, DATA_VIEW);\n    anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n    var bufferLength = buffer[$LENGTH]\n      , offset       = toInteger(byteOffset);\n    if(offset < 0 || offset > bufferLength)throw RangeError('Wrong offset!');\n    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n    if(offset + byteLength > bufferLength)throw RangeError(WRONG_LENGTH);\n    this[$BUFFER] = buffer;\n    this[$OFFSET] = offset;\n    this[$LENGTH] = byteLength;\n  };\n\n  if(DESCRIPTORS){\n    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n    addGetter($DataView, BUFFER, '_b');\n    addGetter($DataView, BYTE_LENGTH, '_l');\n    addGetter($DataView, BYTE_OFFSET, '_o');\n  }\n\n  redefineAll($DataView[PROTOTYPE], {\n    getInt8: function getInt8(byteOffset){\n      return get(this, 1, byteOffset)[0] << 24 >> 24;\n    },\n    getUint8: function getUint8(byteOffset){\n      return get(this, 1, byteOffset)[0];\n    },\n    getInt16: function getInt16(byteOffset /*, littleEndian */){\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n    },\n    getUint16: function getUint16(byteOffset /*, littleEndian */){\n      var bytes = get(this, 2, byteOffset, arguments[1]);\n      return bytes[1] << 8 | bytes[0];\n    },\n    getInt32: function getInt32(byteOffset /*, littleEndian */){\n      return unpackI32(get(this, 4, byteOffset, arguments[1]));\n    },\n    getUint32: function getUint32(byteOffset /*, littleEndian */){\n      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n    },\n    getFloat32: function getFloat32(byteOffset /*, littleEndian */){\n      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n    },\n    getFloat64: function getFloat64(byteOffset /*, littleEndian */){\n      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n    },\n    setInt8: function setInt8(byteOffset, value){\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setUint8: function setUint8(byteOffset, value){\n      set(this, 1, byteOffset, packI8, value);\n    },\n    setInt16: function setInt16(byteOffset, value /*, littleEndian */){\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setUint16: function setUint16(byteOffset, value /*, littleEndian */){\n      set(this, 2, byteOffset, packI16, value, arguments[2]);\n    },\n    setInt32: function setInt32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setUint32: function setUint32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packI32, value, arguments[2]);\n    },\n    setFloat32: function setFloat32(byteOffset, value /*, littleEndian */){\n      set(this, 4, byteOffset, packF32, value, arguments[2]);\n    },\n    setFloat64: function setFloat64(byteOffset, value /*, littleEndian */){\n      set(this, 8, byteOffset, packF64, value, arguments[2]);\n    }\n  });\n} else {\n  if(!fails(function(){\n    new $ArrayBuffer;     // eslint-disable-line no-new\n  }) || !fails(function(){\n    new $ArrayBuffer(.5); // eslint-disable-line no-new\n  })){\n    $ArrayBuffer = function ArrayBuffer(length){\n      return new BaseBuffer(validateArrayBufferArguments(this, length));\n    };\n    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n    for(var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j; ){\n      if(!((key = keys[j++]) in $ArrayBuffer))hide($ArrayBuffer, key, BaseBuffer[key]);\n    };\n    if(!LIBRARY)ArrayBufferProto.constructor = $ArrayBuffer;\n  }\n  // iOS Safari 7.x bug\n  var view = new $DataView(new $ArrayBuffer(2))\n    , $setInt8 = $DataView[PROTOTYPE].setInt8;\n  view.setInt8(0, 2147483648);\n  view.setInt8(1, 2147483649);\n  if(view.getInt8(0) || !view.getInt8(1))redefineAll($DataView[PROTOTYPE], {\n    setInt8: function setInt8(byteOffset, value){\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    },\n    setUint8: function setUint8(byteOffset, value){\n      $setInt8.call(this, byteOffset, value << 24 >> 24);\n    }\n  }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;","var global = require('./_global')\n  , hide   = require('./_hide')\n  , uid    = require('./_uid')\n  , TYPED  = uid('typed_array')\n  , VIEW   = uid('view')\n  , ABV    = !!(global.ArrayBuffer && global.DataView)\n  , CONSTR = ABV\n  , i = 0, l = 9, Typed;\n\nvar TypedArrayConstructors = (\n  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile(i < l){\n  if(Typed = global[TypedArrayConstructors[i++]]){\n    hide(Typed.prototype, TYPED, true);\n    hide(Typed.prototype, VIEW, true);\n  } else CONSTR = false;\n}\n\nmodule.exports = {\n  ABV:    ABV,\n  CONSTR: CONSTR,\n  TYPED:  TYPED,\n  VIEW:   VIEW\n};","var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};","var global         = require('./_global')\r\n  , core           = require('./_core')\r\n  , LIBRARY        = require('./_library')\r\n  , wksExt         = require('./_wks-ext')\r\n  , defineProperty = require('./_object-dp').f;\r\nmodule.exports = function(name){\r\n  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\r\n  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});\r\n};","exports.f = require('./_wks');","var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function(it){\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    || Iterators.hasOwnProperty(classof(O));\n};","// https://github.com/benjamingr/RexExp.escape\nvar $export = require('./_export')\n  , $re     = require('./_replacer')(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\n$export($export.S, 'RegExp', {escape: function escape(it){ return $re(it); }});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', {copyWithin: require('./_array-copy-within')});\n\nrequire('./_add-to-unscopables')('copyWithin');","'use strict';\r\nvar $export = require('./_export')\r\n  , $every  = require('./_array-methods')(4);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\r\n  // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\r\n  every: function every(callbackfn /* , thisArg */){\r\n    return $every(this, callbackfn, arguments[1]);\r\n  }\r\n});","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', {fill: require('./_array-fill')});\n\nrequire('./_add-to-unscopables')('fill');","'use strict';\nvar $export = require('./_export')\n  , $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n  // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n  filter: function filter(callbackfn /* , thisArg */){\n    return $filter(this, callbackfn, arguments[1]);\n  }\n});","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export')\n  , $find   = require('./_array-methods')(6)\n  , KEY     = 'findIndex'\n  , forced  = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  findIndex: function findIndex(callbackfn/*, that = undefined */){\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export')\n  , $find   = require('./_array-methods')(5)\n  , KEY     = 'find'\n  , forced  = true;\n// Shouldn't skip holes\nif(KEY in [])Array(1)[KEY](function(){ forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n  find: function find(callbackfn/*, that = undefined */){\n    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\nrequire('./_add-to-unscopables')(KEY);","'use strict';\r\nvar $export  = require('./_export')\r\n  , $forEach = require('./_array-methods')(0)\r\n  , STRICT   = require('./_strict-method')([].forEach, true);\r\n\r\n$export($export.P + $export.F * !STRICT, 'Array', {\r\n  // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\r\n  forEach: function forEach(callbackfn /* , thisArg */){\r\n    return $forEach(this, callbackfn, arguments[1]);\r\n  }\r\n});","'use strict';\nvar ctx            = require('./_ctx')\n  , $export        = require('./_export')\n  , toObject       = require('./_to-object')\n  , call           = require('./_iter-call')\n  , isArrayIter    = require('./_is-array-iter')\n  , toLength       = require('./_to-length')\n  , createProperty = require('./_create-property')\n  , getIterFn      = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n    var O       = toObject(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  = getIterFn(O)\n      , length, result, step, iterator;\n    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for(result = new C(length); length > index; index++){\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n","'use strict';\r\nvar $export       = require('./_export')\r\n  , $indexOf      = require('./_array-includes')(false)\r\n  , $native       = [].indexOf\r\n  , NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\r\n\r\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\r\n  // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\r\n  indexOf: function indexOf(searchElement /*, fromIndex = 0 */){\r\n    return NEGATIVE_ZERO\r\n      // convert -0 to +0\r\n      ? $native.apply(this, arguments) || 0\r\n      : $indexOf(this, searchElement, arguments[1]);\r\n  }\r\n});","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\r\nvar $export = require('./_export');\r\n\r\n$export($export.S, 'Array', {isArray: require('./_is-array')});","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');","'use strict';\r\n// 22.1.3.13 Array.prototype.join(separator)\r\nvar $export   = require('./_export')\r\n  , toIObject = require('./_to-iobject')\r\n  , arrayJoin = [].join;\r\n\r\n// fallback for not array-like strings\r\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\r\n  join: function join(separator){\r\n    return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\r\n  }\r\n});","'use strict';\r\nvar $export       = require('./_export')\r\n  , toIObject     = require('./_to-iobject')\r\n  , toInteger     = require('./_to-integer')\r\n  , toLength      = require('./_to-length')\r\n  , $native       = [].lastIndexOf\r\n  , NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\r\n\r\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\r\n  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\r\n  lastIndexOf: function lastIndexOf(searchElement /*, fromIndex = @[*-1] */){\r\n    // convert -0 to +0\r\n    if(NEGATIVE_ZERO)return $native.apply(this, arguments) || 0;\r\n    var O      = toIObject(this)\r\n      , length = toLength(O.length)\r\n      , index  = length - 1;\r\n    if(arguments.length > 1)index = Math.min(index, toInteger(arguments[1]));\r\n    if(index < 0)index = length + index;\r\n    for(;index >= 0; index--)if(index in O)if(O[index] === searchElement)return index || 0;\r\n    return -1;\r\n  }\r\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $map    = require('./_array-methods')(1);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\r\n  // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\r\n  map: function map(callbackfn /* , thisArg */){\r\n    return $map(this, callbackfn, arguments[1]);\r\n  }\r\n});","'use strict';\nvar $export        = require('./_export')\n  , createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function(){\n  function F(){}\n  return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n  // 22.1.2.3 Array.of( ...items)\n  of: function of(/* ...args */){\n    var index  = 0\n      , aLen   = arguments.length\n      , result = new (typeof this == 'function' ? this : Array)(aLen);\n    while(aLen > index)createProperty(result, index, arguments[index++]);\n    result.length = aLen;\n    return result;\n  }\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $reduce = require('./_array-reduce');\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\r\n  // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\r\n  reduceRight: function reduceRight(callbackfn /* , initialValue */){\r\n    return $reduce(this, callbackfn, arguments.length, arguments[1], true);\r\n  }\r\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $reduce = require('./_array-reduce');\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\r\n  // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\r\n  reduce: function reduce(callbackfn /* , initialValue */){\r\n    return $reduce(this, callbackfn, arguments.length, arguments[1], false);\r\n  }\r\n});","'use strict';\r\nvar $export    = require('./_export')\r\n  , html       = require('./_html')\r\n  , cof        = require('./_cof')\r\n  , toIndex    = require('./_to-index')\r\n  , toLength   = require('./_to-length')\r\n  , arraySlice = [].slice;\r\n\r\n// fallback for not array-like ES3 strings and DOM objects\r\n$export($export.P + $export.F * require('./_fails')(function(){\r\n  if(html)arraySlice.call(html);\r\n}), 'Array', {\r\n  slice: function slice(begin, end){\r\n    var len   = toLength(this.length)\r\n      , klass = cof(this);\r\n    end = end === undefined ? len : end;\r\n    if(klass == 'Array')return arraySlice.call(this, begin, end);\r\n    var start  = toIndex(begin, len)\r\n      , upTo   = toIndex(end, len)\r\n      , size   = toLength(upTo - start)\r\n      , cloned = Array(size)\r\n      , i      = 0;\r\n    for(; i < size; i++)cloned[i] = klass == 'String'\r\n      ? this.charAt(start + i)\r\n      : this[start + i];\r\n    return cloned;\r\n  }\r\n});","'use strict';\r\nvar $export = require('./_export')\r\n  , $some   = require('./_array-methods')(3);\r\n\r\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\r\n  // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\r\n  some: function some(callbackfn /* , thisArg */){\r\n    return $some(this, callbackfn, arguments[1]);\r\n  }\r\n});","'use strict';\r\nvar $export   = require('./_export')\r\n  , aFunction = require('./_a-function')\r\n  , toObject  = require('./_to-object')\r\n  , fails     = require('./_fails')\r\n  , $sort     = [].sort\r\n  , test      = [1, 2, 3];\r\n\r\n$export($export.P + $export.F * (fails(function(){\r\n  // IE8-\r\n  test.sort(undefined);\r\n}) || !fails(function(){\r\n  // V8 bug\r\n  test.sort(null);\r\n  // Old WebKit\r\n}) || !require('./_strict-method')($sort)), 'Array', {\r\n  // 22.1.3.25 Array.prototype.sort(comparefn)\r\n  sort: function sort(comparefn){\r\n    return comparefn === undefined\r\n      ? $sort.call(toObject(this))\r\n      : $sort.call(toObject(this), aFunction(comparefn));\r\n  }\r\n});","require('./_set-species')('Array');","// 20.3.3.1 / 15.9.4.4 Date.now()\r\nvar $export = require('./_export');\r\n\r\n$export($export.S, 'Date', {now: function(){ return new Date().getTime(); }});","'use strict';\r\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\r\nvar $export = require('./_export')\r\n  , fails   = require('./_fails')\r\n  , getTime = Date.prototype.getTime;\r\n\r\nvar lz = function(num){\r\n  return num > 9 ? num : '0' + num;\r\n};\r\n\r\n// PhantomJS / old WebKit has a broken implementations\r\n$export($export.P + $export.F * (fails(function(){\r\n  return new Date(-5e13 - 1).toISOString() != '0385-07-25T07:06:39.999Z';\r\n}) || !fails(function(){\r\n  new Date(NaN).toISOString();\r\n})), 'Date', {\r\n  toISOString: function toISOString(){\r\n    if(!isFinite(getTime.call(this)))throw RangeError('Invalid time value');\r\n    var d = this\r\n      , y = d.getUTCFullYear()\r\n      , m = d.getUTCMilliseconds()\r\n      , s = y < 0 ? '-' : y > 9999 ? '+' : '';\r\n    return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\r\n      '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\r\n      'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\r\n      ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\r\n  }\r\n});","'use strict';\nvar $export     = require('./_export')\n  , toObject    = require('./_to-object')\n  , toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function(){\n  return new Date(NaN).toJSON() !== null || Date.prototype.toJSON.call({toISOString: function(){ return 1; }}) !== 1;\n}), 'Date', {\n  toJSON: function toJSON(key){\n    var O  = toObject(this)\n      , pv = toPrimitive(O);\n    return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n  }\n});","var TO_PRIMITIVE = require('./_wks')('toPrimitive')\r\n  , proto        = Date.prototype;\r\n\r\nif(!(TO_PRIMITIVE in proto))require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));","var DateProto    = Date.prototype\n  , INVALID_DATE = 'Invalid Date'\n  , TO_STRING    = 'toString'\n  , $toString    = DateProto[TO_STRING]\n  , getTime      = DateProto.getTime;\nif(new Date(NaN) + '' != INVALID_DATE){\n  require('./_redefine')(DateProto, TO_STRING, function toString(){\n    var value = getTime.call(this);\n    return value === value ? $toString.call(this) : INVALID_DATE;\n  });\n}","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\r\nvar $export = require('./_export');\r\n\r\n$export($export.P, 'Function', {bind: require('./_bind')});","'use strict';\nvar isObject       = require('./_is-object')\n  , getPrototypeOf = require('./_object-gpo')\n  , HAS_INSTANCE   = require('./_wks')('hasInstance')\n  , FunctionProto  = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif(!(HAS_INSTANCE in FunctionProto))require('./_object-dp').f(FunctionProto, HAS_INSTANCE, {value: function(O){\n  if(typeof this != 'function' || !isObject(O))return false;\n  if(!isObject(this.prototype))return O instanceof this;\n  // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n  while(O = getPrototypeOf(O))if(this.prototype === O)return true;\n  return false;\n}});","var dP         = require('./_object-dp').f\n  , createDesc = require('./_property-desc')\n  , has        = require('./_has')\n  , FProto     = Function.prototype\n  , nameRE     = /^\\s*function ([^ (]*)/\n  , NAME       = 'name';\n\nvar isExtensible = Object.isExtensible || function(){\n  return true;\n};\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n  configurable: true,\n  get: function(){\n    try {\n      var that = this\n        , name = ('' + that).match(nameRE)[1];\n      has(that, NAME) || !isExtensible(that) || dP(that, NAME, createDesc(5, name));\n      return name;\n    } catch(e){\n      return '';\n    }\n  }\n});","'use strict';\nvar strong = require('./_collection-strong');\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')('Map', function(get){\n  return function Map(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.1.3.6 Map.prototype.get(key)\n  get: function get(key){\n    var entry = strong.getEntry(this, key);\n    return entry && entry.v;\n  },\n  // 23.1.3.9 Map.prototype.set(key, value)\n  set: function set(key, value){\n    return strong.def(this, key === 0 ? 0 : key, value);\n  }\n}, strong, true);","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export')\n  , log1p   = require('./_math-log1p')\n  , sqrt    = Math.sqrt\n  , $acosh  = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n  && Math.floor($acosh(Number.MAX_VALUE)) == 710\n  // Tor Browser bug: Math.acosh(Infinity) -> NaN \n  && $acosh(Infinity) == Infinity\n), 'Math', {\n  acosh: function acosh(x){\n    return (x = +x) < 1 ? NaN : x > 94906265.62425156\n      ? Math.log(x) + Math.LN2\n      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n  }\n});","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export')\n  , $asinh  = Math.asinh;\n\nfunction asinh(x){\n  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0 \n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', {asinh: asinh});","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export')\n  , $atanh  = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0 \n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n  atanh: function atanh(x){\n    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n  }\n});","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export')\n  , sign    = require('./_math-sign');\n\n$export($export.S, 'Math', {\n  cbrt: function cbrt(x){\n    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n  }\n});","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  clz32: function clz32(x){\n    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n  }\n});","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export')\n  , exp     = Math.exp;\n\n$export($export.S, 'Math', {\n  cosh: function cosh(x){\n    return (exp(x = +x) + exp(-x)) / 2;\n  }\n});","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export')\n  , $expm1  = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', {expm1: $expm1});","// 20.2.2.16 Math.fround(x)\nvar $export   = require('./_export')\n  , sign      = require('./_math-sign')\n  , pow       = Math.pow\n  , EPSILON   = pow(2, -52)\n  , EPSILON32 = pow(2, -23)\n  , MAX32     = pow(2, 127) * (2 - EPSILON32)\n  , MIN32     = pow(2, -126);\n\nvar roundTiesToEven = function(n){\n  return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n\n$export($export.S, 'Math', {\n  fround: function fround(x){\n    var $abs  = Math.abs(x)\n      , $sign = sign(x)\n      , a, result;\n    if($abs < MIN32)return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n    a = (1 + EPSILON32 / EPSILON) * $abs;\n    result = a - (a - $abs);\n    if(result > MAX32 || result != result)return $sign * Infinity;\n    return $sign * result;\n  }\n});","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export')\n  , abs     = Math.abs;\n\n$export($export.S, 'Math', {\n  hypot: function hypot(value1, value2){ // eslint-disable-line no-unused-vars\n    var sum  = 0\n      , i    = 0\n      , aLen = arguments.length\n      , larg = 0\n      , arg, div;\n    while(i < aLen){\n      arg = abs(arguments[i++]);\n      if(larg < arg){\n        div  = larg / arg;\n        sum  = sum * div * div + 1;\n        larg = arg;\n      } else if(arg > 0){\n        div  = arg / larg;\n        sum += div * div;\n      } else sum += arg;\n    }\n    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n  }\n});","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export')\n  , $imul   = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function(){\n  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n  imul: function imul(x, y){\n    var UINT16 = 0xffff\n      , xn = +x\n      , yn = +y\n      , xl = UINT16 & xn\n      , yl = UINT16 & yn;\n    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n  }\n});","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log10: function log10(x){\n    return Math.log(x) / Math.LN10;\n  }\n});","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {log1p: require('./_math-log1p')});","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  log2: function log2(x){\n    return Math.log(x) / Math.LN2;\n  }\n});","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {sign: require('./_math-sign')});","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export')\n  , expm1   = require('./_math-expm1')\n  , exp     = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function(){\n  return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n  sinh: function sinh(x){\n    return Math.abs(x = +x) < 1\n      ? (expm1(x) - expm1(-x)) / 2\n      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n  }\n});","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export')\n  , expm1   = require('./_math-expm1')\n  , exp     = Math.exp;\n\n$export($export.S, 'Math', {\n  tanh: function tanh(x){\n    var a = expm1(x = +x)\n      , b = expm1(-x);\n    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n  }\n});","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  trunc: function trunc(it){\n    return (it > 0 ? Math.floor : Math.ceil)(it);\n  }\n});","'use strict';\nvar global            = require('./_global')\n  , has               = require('./_has')\n  , cof               = require('./_cof')\n  , inheritIfRequired = require('./_inherit-if-required')\n  , toPrimitive       = require('./_to-primitive')\n  , fails             = require('./_fails')\n  , gOPN              = require('./_object-gopn').f\n  , gOPD              = require('./_object-gopd').f\n  , dP                = require('./_object-dp').f\n  , $trim             = require('./_string-trim').trim\n  , NUMBER            = 'Number'\n  , $Number           = global[NUMBER]\n  , Base              = $Number\n  , proto             = $Number.prototype\n  // Opera ~12 has broken Object#toString\n  , BROKEN_COF        = cof(require('./_object-create')(proto)) == NUMBER\n  , TRIM              = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function(argument){\n  var it = toPrimitive(argument, false);\n  if(typeof it == 'string' && it.length > 2){\n    it = TRIM ? it.trim() : $trim(it, 3);\n    var first = it.charCodeAt(0)\n      , third, radix, maxCode;\n    if(first === 43 || first === 45){\n      third = it.charCodeAt(2);\n      if(third === 88 || third === 120)return NaN; // Number('+0x1') should be NaN, old V8 fix\n    } else if(first === 48){\n      switch(it.charCodeAt(1)){\n        case 66 : case 98  : radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n        case 79 : case 111 : radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n        default : return +it;\n      }\n      for(var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++){\n        code = digits.charCodeAt(i);\n        // parseInt parses a string to a first unavailable symbol\n        // but ToNumber should return NaN if a string contains unavailable symbols\n        if(code < 48 || code > maxCode)return NaN;\n      } return parseInt(digits, radix);\n    }\n  } return +it;\n};\n\nif(!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')){\n  $Number = function Number(value){\n    var it = arguments.length < 1 ? 0 : value\n      , that = this;\n    return that instanceof $Number\n      // check on 1..constructor(foo) case\n      && (BROKEN_COF ? fails(function(){ proto.valueOf.call(that); }) : cof(that) != NUMBER)\n        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n  };\n  for(var keys = require('./_descriptors') ? gOPN(Base) : (\n    // ES3:\n    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n    // ES6 (in case, if modules with ES6 Number statics required before):\n    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n  ).split(','), j = 0, key; keys.length > j; j++){\n    if(has(Base, key = keys[j]) && !has($Number, key)){\n      dP($Number, key, gOPD(Base, key));\n    }\n  }\n  $Number.prototype = proto;\n  proto.constructor = $Number;\n  require('./_redefine')(global, NUMBER, $Number);\n}","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {EPSILON: Math.pow(2, -52)});","// 20.1.2.2 Number.isFinite(number)\nvar $export   = require('./_export')\n  , _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n  isFinite: function isFinite(it){\n    return typeof it == 'number' && _isFinite(it);\n  }\n});","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {isInteger: require('./_is-integer')});","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number){\n    return number != number;\n  }\n});","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export   = require('./_export')\n  , isInteger = require('./_is-integer')\n  , abs       = Math.abs;\n\n$export($export.S, 'Number', {\n  isSafeInteger: function isSafeInteger(number){\n    return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n  }\n});","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {MAX_SAFE_INTEGER: 0x1fffffffffffff});","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {MIN_SAFE_INTEGER: -0x1fffffffffffff});","var $export     = require('./_export')\n  , $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', {parseFloat: $parseFloat});","var $export   = require('./_export')\n  , $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', {parseInt: $parseInt});","'use strict';\r\nvar $export      = require('./_export')\r\n  , anInstance   = require('./_an-instance')\r\n  , toInteger    = require('./_to-integer')\r\n  , aNumberValue = require('./_a-number-value')\r\n  , repeat       = require('./_string-repeat')\r\n  , $toFixed     = 1..toFixed\r\n  , floor        = Math.floor\r\n  , data         = [0, 0, 0, 0, 0, 0]\r\n  , ERROR        = 'Number.toFixed: incorrect invocation!'\r\n  , ZERO         = '0';\r\n\r\nvar multiply = function(n, c){\r\n  var i  = -1\r\n    , c2 = c;\r\n  while(++i < 6){\r\n    c2 += n * data[i];\r\n    data[i] = c2 % 1e7;\r\n    c2 = floor(c2 / 1e7);\r\n  }\r\n};\r\nvar divide = function(n){\r\n  var i = 6\r\n    , c = 0;\r\n  while(--i >= 0){\r\n    c += data[i];\r\n    data[i] = floor(c / n);\r\n    c = (c % n) * 1e7;\r\n  }\r\n};\r\nvar numToString = function(){\r\n  var i = 6\r\n    , s = '';\r\n  while(--i >= 0){\r\n    if(s !== '' || i === 0 || data[i] !== 0){\r\n      var t = String(data[i]);\r\n      s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\r\n    }\r\n  } return s;\r\n};\r\nvar pow = function(x, n, acc){\r\n  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\r\n};\r\nvar log = function(x){\r\n  var n  = 0\r\n    , x2 = x;\r\n  while(x2 >= 4096){\r\n    n += 12;\r\n    x2 /= 4096;\r\n  }\r\n  while(x2 >= 2){\r\n    n  += 1;\r\n    x2 /= 2;\r\n  } return n;\r\n};\r\n\r\n$export($export.P + $export.F * (!!$toFixed && (\r\n  0.00008.toFixed(3) !== '0.000' ||\r\n  0.9.toFixed(0) !== '1' ||\r\n  1.255.toFixed(2) !== '1.25' ||\r\n  1000000000000000128..toFixed(0) !== '1000000000000000128'\r\n) || !require('./_fails')(function(){\r\n  // V8 ~ Android 4.3-\r\n  $toFixed.call({});\r\n})), 'Number', {\r\n  toFixed: function toFixed(fractionDigits){\r\n    var x = aNumberValue(this, ERROR)\r\n      , f = toInteger(fractionDigits)\r\n      , s = ''\r\n      , m = ZERO\r\n      , e, z, j, k;\r\n    if(f < 0 || f > 20)throw RangeError(ERROR);\r\n    if(x != x)return 'NaN';\r\n    if(x <= -1e21 || x >= 1e21)return String(x);\r\n    if(x < 0){\r\n      s = '-';\r\n      x = -x;\r\n    }\r\n    if(x > 1e-21){\r\n      e = log(x * pow(2, 69, 1)) - 69;\r\n      z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\r\n      z *= 0x10000000000000;\r\n      e = 52 - e;\r\n      if(e > 0){\r\n        multiply(0, z);\r\n        j = f;\r\n        while(j >= 7){\r\n          multiply(1e7, 0);\r\n          j -= 7;\r\n        }\r\n        multiply(pow(10, j, 1), 0);\r\n        j = e - 1;\r\n        while(j >= 23){\r\n          divide(1 << 23);\r\n          j -= 23;\r\n        }\r\n        divide(1 << j);\r\n        multiply(1, 1);\r\n        divide(2);\r\n        m = numToString();\r\n      } else {\r\n        multiply(0, z);\r\n        multiply(1 << -e, 0);\r\n        m = numToString() + repeat.call(ZERO, f);\r\n      }\r\n    }\r\n    if(f > 0){\r\n      k = m.length;\r\n      m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\r\n    } else {\r\n      m = s + m;\r\n    } return m;\r\n  }\r\n});","'use strict';\r\nvar $export      = require('./_export')\r\n  , $fails       = require('./_fails')\r\n  , aNumberValue = require('./_a-number-value')\r\n  , $toPrecision = 1..toPrecision;\r\n\r\n$export($export.P + $export.F * ($fails(function(){\r\n  // IE7-\r\n  return $toPrecision.call(1, undefined) !== '1';\r\n}) || !$fails(function(){\r\n  // V8 ~ Android 4.3-\r\n  $toPrecision.call({});\r\n})), 'Number', {\r\n  toPrecision: function toPrecision(precision){\r\n    var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\r\n    return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision); \r\n  }\r\n});","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});","var $export = require('./_export')\r\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\r\n$export($export.S, 'Object', {create: require('./_object-create')});","var $export = require('./_export');\r\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\r\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperties: require('./_object-dps')});","var $export = require('./_export');\r\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\r\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function($freeze){\n  return function freeze(it){\n    return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n  };\n});","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject                 = require('./_to-iobject')\n  , $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function(){\n  return function getOwnPropertyDescriptor(it, key){\n    return $getOwnPropertyDescriptor(toIObject(it), key);\n  };\n});","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function(){\n  return require('./_object-gopn-ext').f;\n});","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject        = require('./_to-object')\n  , $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function(){\n  return function getPrototypeOf(it){\n    return $getPrototypeOf(toObject(it));\n  };\n});","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function($isExtensible){\n  return function isExtensible(it){\n    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n  };\n});","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function($isFrozen){\n  return function isFrozen(it){\n    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n  };\n});","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function($isSealed){\n  return function isSealed(it){\n    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n  };\n});","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', {is: require('./_same-value')});","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n  , $keys    = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n  return function keys(it){\n    return $keys(toObject(it));\n  };\n});","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function($preventExtensions){\n  return function preventExtensions(it){\n    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n  };\n});","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object')\n  , meta     = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function($seal){\n  return function seal(it){\n    return $seal && isObject(it) ? $seal(meta(it)) : it;\n  };\n});","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', {setPrototypeOf: require('./_set-proto').set});","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof')\n  , test    = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif(test + '' != '[object z]'){\n  require('./_redefine')(Object.prototype, 'toString', function toString(){\n    return '[object ' + classof(this) + ']';\n  }, true);\n}","var $export     = require('./_export')\r\n  , $parseFloat = require('./_parse-float');\r\n// 18.2.4 parseFloat(string)\r\n$export($export.G + $export.F * (parseFloat != $parseFloat), {parseFloat: $parseFloat});","var $export   = require('./_export')\r\n  , $parseInt = require('./_parse-int');\r\n// 18.2.5 parseInt(string, radix)\r\n$export($export.G + $export.F * (parseInt != $parseInt), {parseInt: $parseInt});","'use strict';\nvar LIBRARY            = require('./_library')\n  , global             = require('./_global')\n  , ctx                = require('./_ctx')\n  , classof            = require('./_classof')\n  , $export            = require('./_export')\n  , isObject           = require('./_is-object')\n  , anObject           = require('./_an-object')\n  , aFunction          = require('./_a-function')\n  , anInstance         = require('./_an-instance')\n  , forOf              = require('./_for-of')\n  , setProto           = require('./_set-proto').set\n  , speciesConstructor = require('./_species-constructor')\n  , task               = require('./_task').set\n  , microtask          = require('./_microtask')()\n  , PROMISE            = 'Promise'\n  , TypeError          = global.TypeError\n  , process            = global.process\n  , $Promise           = global[PROMISE]\n  , process            = global.process\n  , isNode             = classof(process) == 'process'\n  , empty              = function(){ /* empty */ }\n  , Internal, GenericPromiseCapability, Wrapper;\n\nvar USE_NATIVE = !!function(){\n  try {\n    // correct subclassing with @@species support\n    var promise     = $Promise.resolve(1)\n      , FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function(exec){ exec(empty, empty); };\n    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n    return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n  } catch(e){ /* empty */ }\n}();\n\n// helpers\nvar sameConstructor = function(a, b){\n  // with library wrapper special case\n  return a === b || a === $Promise && b === Wrapper;\n};\nvar isThenable = function(it){\n  var then;\n  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar newPromiseCapability = function(C){\n  return sameConstructor($Promise, C)\n    ? new PromiseCapability(C)\n    : new GenericPromiseCapability(C);\n};\nvar PromiseCapability = GenericPromiseCapability = function(C){\n  var resolve, reject;\n  this.promise = new C(function($$resolve, $$reject){\n    if(resolve !== undefined || reject !== undefined)throw TypeError('Bad Promise constructor');\n    resolve = $$resolve;\n    reject  = $$reject;\n  });\n  this.resolve = aFunction(resolve);\n  this.reject  = aFunction(reject);\n};\nvar perform = function(exec){\n  try {\n    exec();\n  } catch(e){\n    return {error: e};\n  }\n};\nvar notify = function(promise, isReject){\n  if(promise._n)return;\n  promise._n = true;\n  var chain = promise._c;\n  microtask(function(){\n    var value = promise._v\n      , ok    = promise._s == 1\n      , i     = 0;\n    var run = function(reaction){\n      var handler = ok ? reaction.ok : reaction.fail\n        , resolve = reaction.resolve\n        , reject  = reaction.reject\n        , domain  = reaction.domain\n        , result, then;\n      try {\n        if(handler){\n          if(!ok){\n            if(promise._h == 2)onHandleUnhandled(promise);\n            promise._h = 1;\n          }\n          if(handler === true)result = value;\n          else {\n            if(domain)domain.enter();\n            result = handler(value);\n            if(domain)domain.exit();\n          }\n          if(result === reaction.promise){\n            reject(TypeError('Promise-chain cycle'));\n          } else if(then = isThenable(result)){\n            then.call(result, resolve, reject);\n          } else resolve(result);\n        } else reject(value);\n      } catch(e){\n        reject(e);\n      }\n    };\n    while(chain.length > i)run(chain[i++]); // variable length - can't use forEach\n    promise._c = [];\n    promise._n = false;\n    if(isReject && !promise._h)onUnhandled(promise);\n  });\n};\nvar onUnhandled = function(promise){\n  task.call(global, function(){\n    var value = promise._v\n      , abrupt, handler, console;\n    if(isUnhandled(promise)){\n      abrupt = perform(function(){\n        if(isNode){\n          process.emit('unhandledRejection', value, promise);\n        } else if(handler = global.onunhandledrejection){\n          handler({promise: promise, reason: value});\n        } else if((console = global.console) && console.error){\n          console.error('Unhandled promise rejection', value);\n        }\n      });\n      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n      promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n    } promise._a = undefined;\n    if(abrupt)throw abrupt.error;\n  });\n};\nvar isUnhandled = function(promise){\n  if(promise._h == 1)return false;\n  var chain = promise._a || promise._c\n    , i     = 0\n    , reaction;\n  while(chain.length > i){\n    reaction = chain[i++];\n    if(reaction.fail || !isUnhandled(reaction.promise))return false;\n  } return true;\n};\nvar onHandleUnhandled = function(promise){\n  task.call(global, function(){\n    var handler;\n    if(isNode){\n      process.emit('rejectionHandled', promise);\n    } else if(handler = global.onrejectionhandled){\n      handler({promise: promise, reason: promise._v});\n    }\n  });\n};\nvar $reject = function(value){\n  var promise = this;\n  if(promise._d)return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  promise._v = value;\n  promise._s = 2;\n  if(!promise._a)promise._a = promise._c.slice();\n  notify(promise, true);\n};\nvar $resolve = function(value){\n  var promise = this\n    , then;\n  if(promise._d)return;\n  promise._d = true;\n  promise = promise._w || promise; // unwrap\n  try {\n    if(promise === value)throw TypeError(\"Promise can't be resolved itself\");\n    if(then = isThenable(value)){\n      microtask(function(){\n        var wrapper = {_w: promise, _d: false}; // wrap\n        try {\n          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n        } catch(e){\n          $reject.call(wrapper, e);\n        }\n      });\n    } else {\n      promise._v = value;\n      promise._s = 1;\n      notify(promise, false);\n    }\n  } catch(e){\n    $reject.call({_w: promise, _d: false}, e); // wrap\n  }\n};\n\n// constructor polyfill\nif(!USE_NATIVE){\n  // 25.4.3.1 Promise(executor)\n  $Promise = function Promise(executor){\n    anInstance(this, $Promise, PROMISE, '_h');\n    aFunction(executor);\n    Internal.call(this);\n    try {\n      executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n    } catch(err){\n      $reject.call(this, err);\n    }\n  };\n  Internal = function Promise(executor){\n    this._c = [];             // <- awaiting reactions\n    this._a = undefined;      // <- checked in isUnhandled reactions\n    this._s = 0;              // <- state\n    this._d = false;          // <- done\n    this._v = undefined;      // <- value\n    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n    this._n = false;          // <- notify\n  };\n  Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n    then: function then(onFulfilled, onRejected){\n      var reaction    = newPromiseCapability(speciesConstructor(this, $Promise));\n      reaction.ok     = typeof onFulfilled == 'function' ? onFulfilled : true;\n      reaction.fail   = typeof onRejected == 'function' && onRejected;\n      reaction.domain = isNode ? process.domain : undefined;\n      this._c.push(reaction);\n      if(this._a)this._a.push(reaction);\n      if(this._s)notify(this, false);\n      return reaction.promise;\n    },\n    // 25.4.5.1 Promise.prototype.catch(onRejected)\n    'catch': function(onRejected){\n      return this.then(undefined, onRejected);\n    }\n  });\n  PromiseCapability = function(){\n    var promise  = new Internal;\n    this.promise = promise;\n    this.resolve = ctx($resolve, promise, 1);\n    this.reject  = ctx($reject, promise, 1);\n  };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Promise: $Promise});\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n  // 25.4.4.5 Promise.reject(r)\n  reject: function reject(r){\n    var capability = newPromiseCapability(this)\n      , $$reject   = capability.reject;\n    $$reject(r);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n  // 25.4.4.6 Promise.resolve(x)\n  resolve: function resolve(x){\n    // instanceof instead of internal slot check because we should fix it without replacement native Promise core\n    if(x instanceof $Promise && sameConstructor(x.constructor, this))return x;\n    var capability = newPromiseCapability(this)\n      , $$resolve  = capability.resolve;\n    $$resolve(x);\n    return capability.promise;\n  }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function(iter){\n  $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n  // 25.4.4.1 Promise.all(iterable)\n  all: function all(iterable){\n    var C          = this\n      , capability = newPromiseCapability(C)\n      , resolve    = capability.resolve\n      , reject     = capability.reject;\n    var abrupt = perform(function(){\n      var values    = []\n        , index     = 0\n        , remaining = 1;\n      forOf(iterable, false, function(promise){\n        var $index        = index++\n          , alreadyCalled = false;\n        values.push(undefined);\n        remaining++;\n        C.resolve(promise).then(function(value){\n          if(alreadyCalled)return;\n          alreadyCalled  = true;\n          values[$index] = value;\n          --remaining || resolve(values);\n        }, reject);\n      });\n      --remaining || resolve(values);\n    });\n    if(abrupt)reject(abrupt.error);\n    return capability.promise;\n  },\n  // 25.4.4.4 Promise.race(iterable)\n  race: function race(iterable){\n    var C          = this\n      , capability = newPromiseCapability(C)\n      , reject     = capability.reject;\n    var abrupt = perform(function(){\n      forOf(iterable, false, function(promise){\n        C.resolve(promise).then(capability.resolve, reject);\n      });\n    });\n    if(abrupt)reject(abrupt.error);\n    return capability.promise;\n  }\n});","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export   = require('./_export')\n  , aFunction = require('./_a-function')\n  , anObject  = require('./_an-object')\n  , _apply    = Function.apply;\n\n$export($export.S, 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList){\n    return _apply.call(aFunction(target), thisArgument, anObject(argumentsList));\n  }\n});","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export   = require('./_export')\n  , create    = require('./_object-create')\n  , aFunction = require('./_a-function')\n  , anObject  = require('./_an-object')\n  , isObject  = require('./_is-object')\n  , bind      = require('./_bind');\n\n// MS Edge supports only 2 arguments\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\n$export($export.S + $export.F * require('./_fails')(function(){\n  function F(){}\n  return !(Reflect.construct(function(){}, [], F) instanceof F);\n}), 'Reflect', {\n  construct: function construct(Target, args /*, newTarget*/){\n    aFunction(Target);\n    anObject(args);\n    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n    if(Target == newTarget){\n      // w/o altered newTarget, optimization for 0-4 arguments\n      switch(args.length){\n        case 0: return new Target;\n        case 1: return new Target(args[0]);\n        case 2: return new Target(args[0], args[1]);\n        case 3: return new Target(args[0], args[1], args[2]);\n        case 4: return new Target(args[0], args[1], args[2], args[3]);\n      }\n      // w/o altered newTarget, lot of arguments case\n      var $args = [null];\n      $args.push.apply($args, args);\n      return new (bind.apply(Target, $args));\n    }\n    // with altered newTarget, not support built-in constructors\n    var proto    = newTarget.prototype\n      , instance = create(isObject(proto) ? proto : Object.prototype)\n      , result   = Function.apply.call(Target, instance, args);\n    return isObject(result) ? result : instance;\n  }\n});","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP          = require('./_object-dp')\n  , $export     = require('./_export')\n  , anObject    = require('./_an-object')\n  , toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function(){\n  Reflect.defineProperty(dP.f({}, 1, {value: 1}), 1, {value: 2});\n}), 'Reflect', {\n  defineProperty: function defineProperty(target, propertyKey, attributes){\n    anObject(target);\n    propertyKey = toPrimitive(propertyKey, true);\n    anObject(attributes);\n    try {\n      dP.f(target, propertyKey, attributes);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export  = require('./_export')\n  , gOPD     = require('./_object-gopd').f\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  deleteProperty: function deleteProperty(target, propertyKey){\n    var desc = gOPD(anObject(target), propertyKey);\n    return desc && !desc.configurable ? false : delete target[propertyKey];\n  }\n});","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export  = require('./_export')\n  , anObject = require('./_an-object');\nvar Enumerate = function(iterated){\n  this._t = anObject(iterated); // target\n  this._i = 0;                  // next index\n  var keys = this._k = []       // keys\n    , key;\n  for(key in iterated)keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function(){\n  var that = this\n    , keys = that._k\n    , key;\n  do {\n    if(that._i >= keys.length)return {value: undefined, done: true};\n  } while(!((key = keys[that._i++]) in that._t));\n  return {value: key, done: false};\n});\n\n$export($export.S, 'Reflect', {\n  enumerate: function enumerate(target){\n    return new Enumerate(target);\n  }\n});","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD     = require('./_object-gopd')\n  , $export  = require('./_export')\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey){\n    return gOPD.f(anObject(target), propertyKey);\n  }\n});","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export  = require('./_export')\n  , getProto = require('./_object-gpo')\n  , anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n  getPrototypeOf: function getPrototypeOf(target){\n    return getProto(anObject(target));\n  }\n});","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD           = require('./_object-gopd')\n  , getPrototypeOf = require('./_object-gpo')\n  , has            = require('./_has')\n  , $export        = require('./_export')\n  , isObject       = require('./_is-object')\n  , anObject       = require('./_an-object');\n\nfunction get(target, propertyKey/*, receiver*/){\n  var receiver = arguments.length < 3 ? target : arguments[2]\n    , desc, proto;\n  if(anObject(target) === receiver)return target[propertyKey];\n  if(desc = gOPD.f(target, propertyKey))return has(desc, 'value')\n    ? desc.value\n    : desc.get !== undefined\n      ? desc.get.call(receiver)\n      : undefined;\n  if(isObject(proto = getPrototypeOf(target)))return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', {get: get});","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n  has: function has(target, propertyKey){\n    return propertyKey in target;\n  }\n});","// 26.1.10 Reflect.isExtensible(target)\nvar $export       = require('./_export')\n  , anObject      = require('./_an-object')\n  , $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n  isExtensible: function isExtensible(target){\n    anObject(target);\n    return $isExtensible ? $isExtensible(target) : true;\n  }\n});","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {ownKeys: require('./_own-keys')});","// 26.1.12 Reflect.preventExtensions(target)\nvar $export            = require('./_export')\n  , anObject           = require('./_an-object')\n  , $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n  preventExtensions: function preventExtensions(target){\n    anObject(target);\n    try {\n      if($preventExtensions)$preventExtensions(target);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export  = require('./_export')\n  , setProto = require('./_set-proto');\n\nif(setProto)$export($export.S, 'Reflect', {\n  setPrototypeOf: function setPrototypeOf(target, proto){\n    setProto.check(target, proto);\n    try {\n      setProto.set(target, proto);\n      return true;\n    } catch(e){\n      return false;\n    }\n  }\n});","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP             = require('./_object-dp')\n  , gOPD           = require('./_object-gopd')\n  , getPrototypeOf = require('./_object-gpo')\n  , has            = require('./_has')\n  , $export        = require('./_export')\n  , createDesc     = require('./_property-desc')\n  , anObject       = require('./_an-object')\n  , isObject       = require('./_is-object');\n\nfunction set(target, propertyKey, V/*, receiver*/){\n  var receiver = arguments.length < 4 ? target : arguments[3]\n    , ownDesc  = gOPD.f(anObject(target), propertyKey)\n    , existingDescriptor, proto;\n  if(!ownDesc){\n    if(isObject(proto = getPrototypeOf(target))){\n      return set(proto, propertyKey, V, receiver);\n    }\n    ownDesc = createDesc(0);\n  }\n  if(has(ownDesc, 'value')){\n    if(ownDesc.writable === false || !isObject(receiver))return false;\n    existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n    existingDescriptor.value = V;\n    dP.f(receiver, propertyKey, existingDescriptor);\n    return true;\n  }\n  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', {set: set});","var global            = require('./_global')\n  , inheritIfRequired = require('./_inherit-if-required')\n  , dP                = require('./_object-dp').f\n  , gOPN              = require('./_object-gopn').f\n  , isRegExp          = require('./_is-regexp')\n  , $flags            = require('./_flags')\n  , $RegExp           = global.RegExp\n  , Base              = $RegExp\n  , proto             = $RegExp.prototype\n  , re1               = /a/g\n  , re2               = /a/g\n  // \"new\" creates a new object, old webkit buggy here\n  , CORRECT_NEW       = new $RegExp(re1) !== re1;\n\nif(require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function(){\n  re2[require('./_wks')('match')] = false;\n  // RegExp constructor can alter flags and IsRegExp works correct with @@match\n  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))){\n  $RegExp = function RegExp(p, f){\n    var tiRE = this instanceof $RegExp\n      , piRE = isRegExp(p)\n      , fiU  = f === undefined;\n    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n      : inheritIfRequired(CORRECT_NEW\n        ? new Base(piRE && !fiU ? p.source : p, f)\n        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n      , tiRE ? this : proto, $RegExp);\n  };\n  var proxy = function(key){\n    key in $RegExp || dP($RegExp, key, {\n      configurable: true,\n      get: function(){ return Base[key]; },\n      set: function(it){ Base[key] = it; }\n    });\n  };\n  for(var keys = gOPN(Base), i = 0; keys.length > i; )proxy(keys[i++]);\n  proto.constructor = $RegExp;\n  $RegExp.prototype = proto;\n  require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');","// 21.2.5.3 get RegExp.prototype.flags()\nif(require('./_descriptors') && /./g.flags != 'g')require('./_object-dp').f(RegExp.prototype, 'flags', {\n  configurable: true,\n  get: require('./_flags')\n});","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function(defined, MATCH, $match){\n  // 21.1.3.11 String.prototype.match(regexp)\n  return [function match(regexp){\n    'use strict';\n    var O  = defined(this)\n      , fn = regexp == undefined ? undefined : regexp[MATCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n  }, $match];\n});","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function(defined, REPLACE, $replace){\n  // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n  return [function replace(searchValue, replaceValue){\n    'use strict';\n    var O  = defined(this)\n      , fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n    return fn !== undefined\n      ? fn.call(searchValue, O, replaceValue)\n      : $replace.call(String(O), searchValue, replaceValue);\n  }, $replace];\n});","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function(defined, SEARCH, $search){\n  // 21.1.3.15 String.prototype.search(regexp)\n  return [function search(regexp){\n    'use strict';\n    var O  = defined(this)\n      , fn = regexp == undefined ? undefined : regexp[SEARCH];\n    return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n  }, $search];\n});","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function(defined, SPLIT, $split){\n  'use strict';\n  var isRegExp   = require('./_is-regexp')\n    , _split     = $split\n    , $push      = [].push\n    , $SPLIT     = 'split'\n    , LENGTH     = 'length'\n    , LAST_INDEX = 'lastIndex';\n  if(\n    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n    ''[$SPLIT](/.?/)[LENGTH]\n  ){\n    var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n    // based on es5-shim implementation, need to rework it\n    $split = function(separator, limit){\n      var string = String(this);\n      if(separator === undefined && limit === 0)return [];\n      // If `separator` is not a regex, use native split\n      if(!isRegExp(separator))return _split.call(string, separator, limit);\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var separator2, match, lastIndex, lastLength, i;\n      // Doesn't need flags gy, but they don't hurt\n      if(!NPCG)separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n      while(match = separatorCopy.exec(string)){\n        // `separatorCopy.lastIndex` is not reliable cross-browser\n        lastIndex = match.index + match[0][LENGTH];\n        if(lastIndex > lastLastIndex){\n          output.push(string.slice(lastLastIndex, match.index));\n          // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n          if(!NPCG && match[LENGTH] > 1)match[0].replace(separator2, function(){\n            for(i = 1; i < arguments[LENGTH] - 2; i++)if(arguments[i] === undefined)match[i] = undefined;\n          });\n          if(match[LENGTH] > 1 && match.index < string[LENGTH])$push.apply(output, match.slice(1));\n          lastLength = match[0][LENGTH];\n          lastLastIndex = lastIndex;\n          if(output[LENGTH] >= splitLimit)break;\n        }\n        if(separatorCopy[LAST_INDEX] === match.index)separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n      }\n      if(lastLastIndex === string[LENGTH]){\n        if(lastLength || !separatorCopy.test(''))output.push('');\n      } else output.push(string.slice(lastLastIndex));\n      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n    };\n  // Chakra, V8\n  } else if('0'[$SPLIT](undefined, 0)[LENGTH]){\n    $split = function(separator, limit){\n      return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n    };\n  }\n  // 21.1.3.17 String.prototype.split(separator, limit)\n  return [function split(separator, limit){\n    var O  = defined(this)\n      , fn = separator == undefined ? undefined : separator[SPLIT];\n    return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n  }, $split];\n});","'use strict';\r\nrequire('./es6.regexp.flags');\r\nvar anObject    = require('./_an-object')\r\n  , $flags      = require('./_flags')\r\n  , DESCRIPTORS = require('./_descriptors')\r\n  , TO_STRING   = 'toString'\r\n  , $toString   = /./[TO_STRING];\r\n\r\nvar define = function(fn){\r\n  require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\r\n};\r\n\r\n// 21.2.5.14 RegExp.prototype.toString()\r\nif(require('./_fails')(function(){ return $toString.call({source: 'a', flags: 'b'}) != '/a/b'; })){\r\n  define(function toString(){\r\n    var R = anObject(this);\r\n    return '/'.concat(R.source, '/',\r\n      'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\r\n  });\r\n// FF44- RegExp#toString has a wrong name\r\n} else if($toString.name != TO_STRING){\r\n  define(function toString(){\r\n    return $toString.call(this);\r\n  });\r\n}","'use strict';\nvar strong = require('./_collection-strong');\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')('Set', function(get){\n  return function Set(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.2.3.1 Set.prototype.add(value)\n  add: function add(value){\n    return strong.def(this, value = value === 0 ? 0 : value, value);\n  }\n}, strong);","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function(createHTML){\n  return function anchor(name){\n    return createHTML(this, 'a', 'name', name);\n  }\n});","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function(createHTML){\n  return function big(){\n    return createHTML(this, 'big', '', '');\n  }\n});","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function(createHTML){\n  return function blink(){\n    return createHTML(this, 'blink', '', '');\n  }\n});","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function(createHTML){\n  return function bold(){\n    return createHTML(this, 'b', '', '');\n  }\n});","'use strict';\nvar $export = require('./_export')\n  , $at     = require('./_string-at')(false);\n$export($export.P, 'String', {\n  // 21.1.3.3 String.prototype.codePointAt(pos)\n  codePointAt: function codePointAt(pos){\n    return $at(this, pos);\n  }\n});","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export   = require('./_export')\n  , toLength  = require('./_to-length')\n  , context   = require('./_string-context')\n  , ENDS_WITH = 'endsWith'\n  , $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n  endsWith: function endsWith(searchString /*, endPosition = @length */){\n    var that = context(this, searchString, ENDS_WITH)\n      , endPosition = arguments.length > 1 ? arguments[1] : undefined\n      , len    = toLength(that.length)\n      , end    = endPosition === undefined ? len : Math.min(toLength(endPosition), len)\n      , search = String(searchString);\n    return $endsWith\n      ? $endsWith.call(that, search, end)\n      : that.slice(end - search.length, end) === search;\n  }\n});","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function(createHTML){\n  return function fixed(){\n    return createHTML(this, 'tt', '', '');\n  }\n});","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function(createHTML){\n  return function fontcolor(color){\n    return createHTML(this, 'font', 'color', color);\n  }\n});","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function(createHTML){\n  return function fontsize(size){\n    return createHTML(this, 'font', 'size', size);\n  }\n});","var $export        = require('./_export')\n  , toIndex        = require('./_to-index')\n  , fromCharCode   = String.fromCharCode\n  , $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n  // 21.1.2.2 String.fromCodePoint(...codePoints)\n  fromCodePoint: function fromCodePoint(x){ // eslint-disable-line no-unused-vars\n    var res  = []\n      , aLen = arguments.length\n      , i    = 0\n      , code;\n    while(aLen > i){\n      code = +arguments[i++];\n      if(toIndex(code, 0x10ffff) !== code)throw RangeError(code + ' is not a valid code point');\n      res.push(code < 0x10000\n        ? fromCharCode(code)\n        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n      );\n    } return res.join('');\n  }\n});","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export  = require('./_export')\n  , context  = require('./_string-context')\n  , INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n  includes: function includes(searchString /*, position = 0 */){\n    return !!~context(this, searchString, INCLUDES)\n      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function(createHTML){\n  return function italics(){\n    return createHTML(this, 'i', '', '');\n  }\n});","'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function(createHTML){\n  return function link(url){\n    return createHTML(this, 'a', 'href', url);\n  }\n});","var $export   = require('./_export')\n  , toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length');\n\n$export($export.S, 'String', {\n  // 21.1.2.4 String.raw(callSite, ...substitutions)\n  raw: function raw(callSite){\n    var tpl  = toIObject(callSite.raw)\n      , len  = toLength(tpl.length)\n      , aLen = arguments.length\n      , res  = []\n      , i    = 0;\n    while(len > i){\n      res.push(String(tpl[i++]));\n      if(i < aLen)res.push(String(arguments[i]));\n    } return res.join('');\n  }\n});","var $export = require('./_export');\n\n$export($export.P, 'String', {\n  // 21.1.3.13 String.prototype.repeat(count)\n  repeat: require('./_string-repeat')\n});","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function(createHTML){\n  return function small(){\n    return createHTML(this, 'small', '', '');\n  }\n});","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export     = require('./_export')\n  , toLength    = require('./_to-length')\n  , context     = require('./_string-context')\n  , STARTS_WITH = 'startsWith'\n  , $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n  startsWith: function startsWith(searchString /*, position = 0 */){\n    var that   = context(this, searchString, STARTS_WITH)\n      , index  = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length))\n      , search = String(searchString);\n    return $startsWith\n      ? $startsWith.call(that, search, index)\n      : that.slice(index, index + search.length) === search;\n  }\n});","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function(createHTML){\n  return function strike(){\n    return createHTML(this, 'strike', '', '');\n  }\n});","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function(createHTML){\n  return function sub(){\n    return createHTML(this, 'sub', '', '');\n  }\n});","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function(createHTML){\n  return function sup(){\n    return createHTML(this, 'sup', '', '');\n  }\n});","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function($trim){\n  return function trim(){\n    return $trim(this, 3);\n  };\n});","'use strict';\n// ECMAScript 6 symbols shim\nvar global         = require('./_global')\n  , has            = require('./_has')\n  , DESCRIPTORS    = require('./_descriptors')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , META           = require('./_meta').KEY\n  , $fails         = require('./_fails')\n  , shared         = require('./_shared')\n  , setToStringTag = require('./_set-to-string-tag')\n  , uid            = require('./_uid')\n  , wks            = require('./_wks')\n  , wksExt         = require('./_wks-ext')\n  , wksDefine      = require('./_wks-define')\n  , keyOf          = require('./_keyof')\n  , enumKeys       = require('./_enum-keys')\n  , isArray        = require('./_is-array')\n  , anObject       = require('./_an-object')\n  , toIObject      = require('./_to-iobject')\n  , toPrimitive    = require('./_to-primitive')\n  , createDesc     = require('./_property-desc')\n  , _create        = require('./_object-create')\n  , gOPNExt        = require('./_object-gopn-ext')\n  , $GOPD          = require('./_object-gopd')\n  , $DP            = require('./_object-dp')\n  , $keys          = require('./_object-keys')\n  , gOPD           = $GOPD.f\n  , dP             = $DP.f\n  , gOPN           = gOPNExt.f\n  , $Symbol        = global.Symbol\n  , $JSON          = global.JSON\n  , _stringify     = $JSON && $JSON.stringify\n  , PROTOTYPE      = 'prototype'\n  , HIDDEN         = wks('_hidden')\n  , TO_PRIMITIVE   = wks('toPrimitive')\n  , isEnum         = {}.propertyIsEnumerable\n  , SymbolRegistry = shared('symbol-registry')\n  , AllSymbols     = shared('symbols')\n  , OPSymbols      = shared('op-symbols')\n  , ObjectProto    = Object[PROTOTYPE]\n  , USE_NATIVE     = typeof $Symbol == 'function'\n  , QObject        = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function(){\n  return _create(dP({}, 'a', {\n    get: function(){ return dP(this, 'a', {value: 7}).a; }\n  })).a != 7;\n}) ? function(it, key, D){\n  var protoDesc = gOPD(ObjectProto, key);\n  if(protoDesc)delete ObjectProto[key];\n  dP(it, key, D);\n  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function(tag){\n  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n  sym._k = tag;\n  return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){\n  return typeof it == 'symbol';\n} : function(it){\n  return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D){\n  if(it === ObjectProto)$defineProperty(OPSymbols, 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))dP(it, HIDDEN, createDesc(1, {}));\n      it[HIDDEN][key] = true;\n    } else {\n      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;\n      D = _create(D, {enumerable: createDesc(0, false)});\n    } return setSymbolDesc(it, key, D);\n  } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P){\n  anObject(it);\n  var keys = enumKeys(P = toIObject(P))\n    , i    = 0\n    , l = keys.length\n    , key;\n  while(l > i)$defineProperty(it, key = keys[i++], P[key]);\n  return it;\n};\nvar $create = function create(it, P){\n  return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key){\n  var E = isEnum.call(this, key = toPrimitive(key, true));\n  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;\n  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){\n  it  = toIObject(it);\n  key = toPrimitive(key, true);\n  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;\n  var D = gOPD(it, key);\n  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;\n  return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it){\n  var names  = gOPN(toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);\n  } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it){\n  var IS_OP  = it === ObjectProto\n    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))\n    , result = []\n    , i      = 0\n    , key;\n  while(names.length > i){\n    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);\n  } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif(!USE_NATIVE){\n  $Symbol = function Symbol(){\n    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');\n    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n    var $set = function(value){\n      if(this === ObjectProto)$set.call(OPSymbols, value);\n      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;\n      setSymbolDesc(this, tag, createDesc(1, value));\n    };\n    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});\n    return wrap(tag);\n  };\n  redefine($Symbol[PROTOTYPE], 'toString', function toString(){\n    return this._k;\n  });\n\n  $GOPD.f = $getOwnPropertyDescriptor;\n  $DP.f   = $defineProperty;\n  require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n  require('./_object-pie').f  = $propertyIsEnumerable;\n  require('./_object-gops').f = $getOwnPropertySymbols;\n\n  if(DESCRIPTORS && !require('./_library')){\n    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n  }\n\n  wksExt.f = function(name){\n    return wrap(wks(name));\n  }\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});\n\nfor(var symbols = (\n  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);\n\nfor(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n  // 19.4.2.1 Symbol.for(key)\n  'for': function(key){\n    return has(SymbolRegistry, key += '')\n      ? SymbolRegistry[key]\n      : SymbolRegistry[key] = $Symbol(key);\n  },\n  // 19.4.2.5 Symbol.keyFor(sym)\n  keyFor: function keyFor(key){\n    if(isSymbol(key))return keyOf(SymbolRegistry, key);\n    throw TypeError(key + ' is not a symbol!');\n  },\n  useSetter: function(){ setter = true; },\n  useSimple: function(){ setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n  // 19.1.2.2 Object.create(O [, Properties])\n  create: $create,\n  // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n  defineProperty: $defineProperty,\n  // 19.1.2.3 Object.defineProperties(O, Properties)\n  defineProperties: $defineProperties,\n  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n  // 19.1.2.7 Object.getOwnPropertyNames(O)\n  getOwnPropertyNames: $getOwnPropertyNames,\n  // 19.1.2.8 Object.getOwnPropertySymbols(O)\n  getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){\n  var S = $Symbol();\n  // MS Edge converts symbol values to JSON as {}\n  // WebKit converts symbol values to JSON as null\n  // V8 throws on boxed symbols\n  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n  stringify: function stringify(it){\n    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined\n    var args = [it]\n      , i    = 1\n      , replacer, $replacer;\n    while(arguments.length > i)args.push(arguments[i++]);\n    replacer = args[1];\n    if(typeof replacer == 'function')$replacer = replacer;\n    if($replacer || !isArray(replacer))replacer = function(key, value){\n      if($replacer)value = $replacer.call(this, key, value);\n      if(!isSymbol(value))return value;\n    };\n    args[1] = replacer;\n    return _stringify.apply($JSON, args);\n  }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);","'use strict';\nvar $export      = require('./_export')\n  , $typed       = require('./_typed')\n  , buffer       = require('./_typed-buffer')\n  , anObject     = require('./_an-object')\n  , toIndex      = require('./_to-index')\n  , toLength     = require('./_to-length')\n  , isObject     = require('./_is-object')\n  , TYPED_ARRAY  = require('./_wks')('typed_array')\n  , ArrayBuffer  = require('./_global').ArrayBuffer\n  , speciesConstructor = require('./_species-constructor')\n  , $ArrayBuffer = buffer.ArrayBuffer\n  , $DataView    = buffer.DataView\n  , $isView      = $typed.ABV && ArrayBuffer.isView\n  , $slice       = $ArrayBuffer.prototype.slice\n  , VIEW         = $typed.VIEW\n  , ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), {ArrayBuffer: $ArrayBuffer});\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n  // 24.1.3.1 ArrayBuffer.isView(arg)\n  isView: function isView(it){\n    return $isView && $isView(it) || isObject(it) && VIEW in it;\n  }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function(){\n  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n  slice: function slice(start, end){\n    if($slice !== undefined && end === undefined)return $slice.call(anObject(this), start); // FF fix\n    var len    = anObject(this).byteLength\n      , first  = toIndex(start, len)\n      , final  = toIndex(end === undefined ? len : end, len)\n      , result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first))\n      , viewS  = new $DataView(this)\n      , viewT  = new $DataView(result)\n      , index  = 0;\n    while(first < final){\n      viewT.setUint8(index++, viewS.getUint8(first++));\n    } return result;\n  }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n  DataView: require('./_typed-buffer').DataView\n});","require('./_typed-array')('Float32', 4, function(init){\n  return function Float32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Float64', 8, function(init){\n  return function Float64Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Int16', 2, function(init){\n  return function Int16Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Int32', 4, function(init){\n  return function Int32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Int8', 1, function(init){\n  return function Int8Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint16', 2, function(init){\n  return function Uint16Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint32', 4, function(init){\n  return function Uint32Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint8', 1, function(init){\n  return function Uint8Array(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n});","require('./_typed-array')('Uint8', 1, function(init){\n  return function Uint8ClampedArray(data, byteOffset, length){\n    return init(this, data, byteOffset, length);\n  };\n}, true);","'use strict';\nvar each         = require('./_array-methods')(0)\n  , redefine     = require('./_redefine')\n  , meta         = require('./_meta')\n  , assign       = require('./_object-assign')\n  , weak         = require('./_collection-weak')\n  , isObject     = require('./_is-object')\n  , has          = require('./_has')\n  , getWeak      = meta.getWeak\n  , isExtensible = Object.isExtensible\n  , uncaughtFrozenStore = weak.ufstore\n  , tmp          = {}\n  , InternalMap;\n\nvar wrapper = function(get){\n  return function WeakMap(){\n    return get(this, arguments.length > 0 ? arguments[0] : undefined);\n  };\n};\n\nvar methods = {\n  // 23.3.3.3 WeakMap.prototype.get(key)\n  get: function get(key){\n    if(isObject(key)){\n      var data = getWeak(key);\n      if(data === true)return uncaughtFrozenStore(this).get(key);\n      return data ? data[this._i] : undefined;\n    }\n  },\n  // 23.3.3.5 WeakMap.prototype.set(key, value)\n  set: function set(key, value){\n    return weak.def(this, key, value);\n  }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')('WeakMap', wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif(new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7){\n  InternalMap = weak.getConstructor(wrapper);\n  assign(InternalMap.prototype, methods);\n  meta.NEED = true;\n  each(['delete', 'has', 'get', 'set'], function(key){\n    var proto  = $WeakMap.prototype\n      , method = proto[key];\n    redefine(proto, key, function(a, b){\n      // store frozen objects on internal weakmap shim\n      if(isObject(a) && !isExtensible(a)){\n        if(!this._f)this._f = new InternalMap;\n        var result = this._f[key](a, b);\n        return key == 'set' ? this : result;\n      // store all the rest on native weakmap\n      } return method.call(this, a, b);\n    });\n  });\n}","'use strict';\nvar weak = require('./_collection-weak');\n\n// 23.4 WeakSet Objects\nrequire('./_collection')('WeakSet', function(get){\n  return function WeakSet(){ return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n  // 23.4.3.1 WeakSet.prototype.add(value)\n  add: function add(value){\n    return weak.def(this, value, true);\n  }\n}, weak, false, true);","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export   = require('./_export')\n  , $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n  includes: function includes(el /*, fromIndex = 0 */){\n    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n\nrequire('./_add-to-unscopables')('includes');","// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask\r\nvar $export   = require('./_export')\r\n  , microtask = require('./_microtask')()\r\n  , process   = require('./_global').process\r\n  , isNode    = require('./_cof')(process) == 'process';\r\n\r\n$export($export.G, {\r\n  asap: function asap(fn){\r\n    var domain = isNode && process.domain;\r\n    microtask(domain ? domain.bind(fn) : fn);\r\n  }\r\n});","// https://github.com/ljharb/proposal-is-error\nvar $export = require('./_export')\n  , cof     = require('./_cof');\n\n$export($export.S, 'Error', {\n  isError: function isError(it){\n    return cof(it) === 'Error';\n  }\n});","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export  = require('./_export');\n\n$export($export.P + $export.R, 'Map', {toJSON: require('./_collection-to-json')('Map')});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  iaddh: function iaddh(x0, x1, y0, y1){\n    var $x0 = x0 >>> 0\n      , $x1 = x1 >>> 0\n      , $y0 = y0 >>> 0;\n    return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n  }\n});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  imulh: function imulh(u, v){\n    var UINT16 = 0xffff\n      , $u = +u\n      , $v = +v\n      , u0 = $u & UINT16\n      , v0 = $v & UINT16\n      , u1 = $u >> 16\n      , v1 = $v >> 16\n      , t  = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n    return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n  }\n});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  isubh: function isubh(x0, x1, y0, y1){\n    var $x0 = x0 >>> 0\n      , $x1 = x1 >>> 0\n      , $y0 = y0 >>> 0;\n    return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n  }\n});","// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n  umulh: function umulh(u, v){\n    var UINT16 = 0xffff\n      , $u = +u\n      , $v = +v\n      , u0 = $u & UINT16\n      , v0 = $v & UINT16\n      , u1 = $u >>> 16\n      , v1 = $v >>> 16\n      , t  = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n    return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n  }\n});","'use strict';\r\nvar $export         = require('./_export')\r\n  , toObject        = require('./_to-object')\r\n  , aFunction       = require('./_a-function')\r\n  , $defineProperty = require('./_object-dp');\r\n\r\n// B.2.2.2 Object.prototype.__defineGetter__(P, getter)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __defineGetter__: function __defineGetter__(P, getter){\r\n    $defineProperty.f(toObject(this), P, {get: aFunction(getter), enumerable: true, configurable: true});\r\n  }\r\n});","'use strict';\r\nvar $export         = require('./_export')\r\n  , toObject        = require('./_to-object')\r\n  , aFunction       = require('./_a-function')\r\n  , $defineProperty = require('./_object-dp');\r\n\r\n// B.2.2.3 Object.prototype.__defineSetter__(P, setter)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __defineSetter__: function __defineSetter__(P, setter){\r\n    $defineProperty.f(toObject(this), P, {set: aFunction(setter), enumerable: true, configurable: true});\r\n  }\r\n});","// https://github.com/tc39/proposal-object-values-entries\nvar $export  = require('./_export')\n  , $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it){\n    return $entries(it);\n  }\n});","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export        = require('./_export')\n  , ownKeys        = require('./_own-keys')\n  , toIObject      = require('./_to-iobject')\n  , gOPD           = require('./_object-gopd')\n  , createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object){\n    var O       = toIObject(object)\n      , getDesc = gOPD.f\n      , keys    = ownKeys(O)\n      , result  = {}\n      , i       = 0\n      , key, D;\n    while(keys.length > i)createProperty(result, key = keys[i++], getDesc(O, key));\n    return result;\n  }\n});","'use strict';\r\nvar $export                  = require('./_export')\r\n  , toObject                 = require('./_to-object')\r\n  , toPrimitive              = require('./_to-primitive')\r\n  , getPrototypeOf           = require('./_object-gpo')\r\n  , getOwnPropertyDescriptor = require('./_object-gopd').f;\r\n\r\n// B.2.2.4 Object.prototype.__lookupGetter__(P)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __lookupGetter__: function __lookupGetter__(P){\r\n    var O = toObject(this)\r\n      , K = toPrimitive(P, true)\r\n      , D;\r\n    do {\r\n      if(D = getOwnPropertyDescriptor(O, K))return D.get;\r\n    } while(O = getPrototypeOf(O));\r\n  }\r\n});","'use strict';\r\nvar $export                  = require('./_export')\r\n  , toObject                 = require('./_to-object')\r\n  , toPrimitive              = require('./_to-primitive')\r\n  , getPrototypeOf           = require('./_object-gpo')\r\n  , getOwnPropertyDescriptor = require('./_object-gopd').f;\r\n\r\n// B.2.2.5 Object.prototype.__lookupSetter__(P)\r\nrequire('./_descriptors') && $export($export.P + require('./_object-forced-pam'), 'Object', {\r\n  __lookupSetter__: function __lookupSetter__(P){\r\n    var O = toObject(this)\r\n      , K = toPrimitive(P, true)\r\n      , D;\r\n    do {\r\n      if(D = getOwnPropertyDescriptor(O, K))return D.set;\r\n    } while(O = getPrototypeOf(O));\r\n  }\r\n});","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export')\n  , $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n  values: function values(it){\n    return $values(it);\n  }\n});","'use strict';\r\n// https://github.com/zenparsing/es-observable\r\nvar $export     = require('./_export')\r\n  , global      = require('./_global')\r\n  , core        = require('./_core')\r\n  , microtask   = require('./_microtask')()\r\n  , OBSERVABLE  = require('./_wks')('observable')\r\n  , aFunction   = require('./_a-function')\r\n  , anObject    = require('./_an-object')\r\n  , anInstance  = require('./_an-instance')\r\n  , redefineAll = require('./_redefine-all')\r\n  , hide        = require('./_hide')\r\n  , forOf       = require('./_for-of')\r\n  , RETURN      = forOf.RETURN;\r\n\r\nvar getMethod = function(fn){\r\n  return fn == null ? undefined : aFunction(fn);\r\n};\r\n\r\nvar cleanupSubscription = function(subscription){\r\n  var cleanup = subscription._c;\r\n  if(cleanup){\r\n    subscription._c = undefined;\r\n    cleanup();\r\n  }\r\n};\r\n\r\nvar subscriptionClosed = function(subscription){\r\n  return subscription._o === undefined;\r\n};\r\n\r\nvar closeSubscription = function(subscription){\r\n  if(!subscriptionClosed(subscription)){\r\n    subscription._o = undefined;\r\n    cleanupSubscription(subscription);\r\n  }\r\n};\r\n\r\nvar Subscription = function(observer, subscriber){\r\n  anObject(observer);\r\n  this._c = undefined;\r\n  this._o = observer;\r\n  observer = new SubscriptionObserver(this);\r\n  try {\r\n    var cleanup      = subscriber(observer)\r\n      , subscription = cleanup;\r\n    if(cleanup != null){\r\n      if(typeof cleanup.unsubscribe === 'function')cleanup = function(){ subscription.unsubscribe(); };\r\n      else aFunction(cleanup);\r\n      this._c = cleanup;\r\n    }\r\n  } catch(e){\r\n    observer.error(e);\r\n    return;\r\n  } if(subscriptionClosed(this))cleanupSubscription(this);\r\n};\r\n\r\nSubscription.prototype = redefineAll({}, {\r\n  unsubscribe: function unsubscribe(){ closeSubscription(this); }\r\n});\r\n\r\nvar SubscriptionObserver = function(subscription){\r\n  this._s = subscription;\r\n};\r\n\r\nSubscriptionObserver.prototype = redefineAll({}, {\r\n  next: function next(value){\r\n    var subscription = this._s;\r\n    if(!subscriptionClosed(subscription)){\r\n      var observer = subscription._o;\r\n      try {\r\n        var m = getMethod(observer.next);\r\n        if(m)return m.call(observer, value);\r\n      } catch(e){\r\n        try {\r\n          closeSubscription(subscription);\r\n        } finally {\r\n          throw e;\r\n        }\r\n      }\r\n    }\r\n  },\r\n  error: function error(value){\r\n    var subscription = this._s;\r\n    if(subscriptionClosed(subscription))throw value;\r\n    var observer = subscription._o;\r\n    subscription._o = undefined;\r\n    try {\r\n      var m = getMethod(observer.error);\r\n      if(!m)throw value;\r\n      value = m.call(observer, value);\r\n    } catch(e){\r\n      try {\r\n        cleanupSubscription(subscription);\r\n      } finally {\r\n        throw e;\r\n      }\r\n    } cleanupSubscription(subscription);\r\n    return value;\r\n  },\r\n  complete: function complete(value){\r\n    var subscription = this._s;\r\n    if(!subscriptionClosed(subscription)){\r\n      var observer = subscription._o;\r\n      subscription._o = undefined;\r\n      try {\r\n        var m = getMethod(observer.complete);\r\n        value = m ? m.call(observer, value) : undefined;\r\n      } catch(e){\r\n        try {\r\n          cleanupSubscription(subscription);\r\n        } finally {\r\n          throw e;\r\n        }\r\n      } cleanupSubscription(subscription);\r\n      return value;\r\n    }\r\n  }\r\n});\r\n\r\nvar $Observable = function Observable(subscriber){\r\n  anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);\r\n};\r\n\r\nredefineAll($Observable.prototype, {\r\n  subscribe: function subscribe(observer){\r\n    return new Subscription(observer, this._f);\r\n  },\r\n  forEach: function forEach(fn){\r\n    var that = this;\r\n    return new (core.Promise || global.Promise)(function(resolve, reject){\r\n      aFunction(fn);\r\n      var subscription = that.subscribe({\r\n        next : function(value){\r\n          try {\r\n            return fn(value);\r\n          } catch(e){\r\n            reject(e);\r\n            subscription.unsubscribe();\r\n          }\r\n        },\r\n        error: reject,\r\n        complete: resolve\r\n      });\r\n    });\r\n  }\r\n});\r\n\r\nredefineAll($Observable, {\r\n  from: function from(x){\r\n    var C = typeof this === 'function' ? this : $Observable;\r\n    var method = getMethod(anObject(x)[OBSERVABLE]);\r\n    if(method){\r\n      var observable = anObject(method.call(x));\r\n      return observable.constructor === C ? observable : new C(function(observer){\r\n        return observable.subscribe(observer);\r\n      });\r\n    }\r\n    return new C(function(observer){\r\n      var done = false;\r\n      microtask(function(){\r\n        if(!done){\r\n          try {\r\n            if(forOf(x, false, function(it){\r\n              observer.next(it);\r\n              if(done)return RETURN;\r\n            }) === RETURN)return;\r\n          } catch(e){\r\n            if(done)throw e;\r\n            observer.error(e);\r\n            return;\r\n          } observer.complete();\r\n        }\r\n      });\r\n      return function(){ done = true; };\r\n    });\r\n  },\r\n  of: function of(){\r\n    for(var i = 0, l = arguments.length, items = Array(l); i < l;)items[i] = arguments[i++];\r\n    return new (typeof this === 'function' ? this : $Observable)(function(observer){\r\n      var done = false;\r\n      microtask(function(){\r\n        if(!done){\r\n          for(var i = 0; i < items.length; ++i){\r\n            observer.next(items[i]);\r\n            if(done)return;\r\n          } observer.complete();\r\n        }\r\n      });\r\n      return function(){ done = true; };\r\n    });\r\n  }\r\n});\r\n\r\nhide($Observable.prototype, OBSERVABLE, function(){ return this; });\r\n\r\n$export($export.G, {Observable: $Observable});\r\n\r\nrequire('./_set-species')('Observable');","var metadata                  = require('./_metadata')\n  , anObject                  = require('./_an-object')\n  , toMetaKey                 = metadata.key\n  , ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey){\n  ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , toMetaKey              = metadata.key\n  , getOrCreateMetadataMap = metadata.map\n  , store                  = metadata.store;\n\nmetadata.exp({deleteMetadata: function deleteMetadata(metadataKey, target /*, targetKey */){\n  var targetKey   = arguments.length < 3 ? undefined : toMetaKey(arguments[2])\n    , metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n  if(metadataMap === undefined || !metadataMap['delete'](metadataKey))return false;\n  if(metadataMap.size)return true;\n  var targetMetadata = store.get(target);\n  targetMetadata['delete'](targetKey);\n  return !!targetMetadata.size || store['delete'](target);\n}});","var Set                     = require('./es6.set')\n  , from                    = require('./_array-from-iterable')\n  , metadata                = require('./_metadata')\n  , anObject                = require('./_an-object')\n  , getPrototypeOf          = require('./_object-gpo')\n  , ordinaryOwnMetadataKeys = metadata.keys\n  , toMetaKey               = metadata.key;\n\nvar ordinaryMetadataKeys = function(O, P){\n  var oKeys  = ordinaryOwnMetadataKeys(O, P)\n    , parent = getPrototypeOf(O);\n  if(parent === null)return oKeys;\n  var pKeys  = ordinaryMetadataKeys(parent, P);\n  return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;\n};\n\nmetadata.exp({getMetadataKeys: function getMetadataKeys(target /*, targetKey */){\n  return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , getPrototypeOf         = require('./_object-gpo')\n  , ordinaryHasOwnMetadata = metadata.has\n  , ordinaryGetOwnMetadata = metadata.get\n  , toMetaKey              = metadata.key;\n\nvar ordinaryGetMetadata = function(MetadataKey, O, P){\n  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n  if(hasOwn)return ordinaryGetOwnMetadata(MetadataKey, O, P);\n  var parent = getPrototypeOf(O);\n  return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\nmetadata.exp({getMetadata: function getMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata                = require('./_metadata')\n  , anObject                = require('./_an-object')\n  , ordinaryOwnMetadataKeys = metadata.keys\n  , toMetaKey               = metadata.key;\n\nmetadata.exp({getOwnMetadataKeys: function getOwnMetadataKeys(target /*, targetKey */){\n  return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , ordinaryGetOwnMetadata = metadata.get\n  , toMetaKey              = metadata.key;\n\nmetadata.exp({getOwnMetadata: function getOwnMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryGetOwnMetadata(metadataKey, anObject(target)\n    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , getPrototypeOf         = require('./_object-gpo')\n  , ordinaryHasOwnMetadata = metadata.has\n  , toMetaKey              = metadata.key;\n\nvar ordinaryHasMetadata = function(MetadataKey, O, P){\n  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n  if(hasOwn)return true;\n  var parent = getPrototypeOf(O);\n  return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\nmetadata.exp({hasMetadata: function hasMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata               = require('./_metadata')\n  , anObject               = require('./_an-object')\n  , ordinaryHasOwnMetadata = metadata.has\n  , toMetaKey              = metadata.key;\n\nmetadata.exp({hasOwnMetadata: function hasOwnMetadata(metadataKey, target /*, targetKey */){\n  return ordinaryHasOwnMetadata(metadataKey, anObject(target)\n    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));\n}});","var metadata                  = require('./_metadata')\n  , anObject                  = require('./_an-object')\n  , aFunction                 = require('./_a-function')\n  , toMetaKey                 = metadata.key\n  , ordinaryDefineOwnMetadata = metadata.set;\n\nmetadata.exp({metadata: function metadata(metadataKey, metadataValue){\n  return function decorator(target, targetKey){\n    ordinaryDefineOwnMetadata(\n      metadataKey, metadataValue,\n      (targetKey !== undefined ? anObject : aFunction)(target),\n      toMetaKey(targetKey)\n    );\n  };\n}});","// https://github.com/DavidBruant/Map-Set.prototype.toJSON\nvar $export  = require('./_export');\n\n$export($export.P + $export.R, 'Set', {toJSON: require('./_collection-to-json')('Set')});","'use strict';\n// https://github.com/mathiasbynens/String.prototype.at\nvar $export = require('./_export')\n  , $at     = require('./_string-at')(true);\n\n$export($export.P, 'String', {\n  at: function at(pos){\n    return $at(this, pos);\n  }\n});","'use strict';\r\n// https://tc39.github.io/String.prototype.matchAll/\r\nvar $export     = require('./_export')\r\n  , defined     = require('./_defined')\r\n  , toLength    = require('./_to-length')\r\n  , isRegExp    = require('./_is-regexp')\r\n  , getFlags    = require('./_flags')\r\n  , RegExpProto = RegExp.prototype;\r\n\r\nvar $RegExpStringIterator = function(regexp, string){\r\n  this._r = regexp;\r\n  this._s = string;\r\n};\r\n\r\nrequire('./_iter-create')($RegExpStringIterator, 'RegExp String', function next(){\r\n  var match = this._r.exec(this._s);\r\n  return {value: match, done: match === null};\r\n});\r\n\r\n$export($export.P, 'String', {\r\n  matchAll: function matchAll(regexp){\r\n    defined(this);\r\n    if(!isRegExp(regexp))throw TypeError(regexp + ' is not a regexp!');\r\n    var S     = String(this)\r\n      , flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp)\r\n      , rx    = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);\r\n    rx.lastIndex = toLength(regexp.lastIndex);\r\n    return new $RegExpStringIterator(rx, S);\r\n  }\r\n});","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export')\n  , $pad    = require('./_string-pad');\n\n$export($export.P, 'String', {\n  padEnd: function padEnd(maxLength /*, fillString = ' ' */){\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n  }\n});","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export')\n  , $pad    = require('./_string-pad');\n\n$export($export.P, 'String', {\n  padStart: function padStart(maxLength /*, fillString = ' ' */){\n    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n  }\n});","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function($trim){\n  return function trimLeft(){\n    return $trim(this, 1);\n  };\n}, 'trimStart');","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function($trim){\n  return function trimRight(){\n    return $trim(this, 2);\n  };\n}, 'trimEnd');","require('./_wks-define')('asyncIterator');","require('./_wks-define')('observable');","// https://github.com/ljharb/proposal-global\nvar $export = require('./_export');\n\n$export($export.S, 'System', {global: require('./_global')});","var $iterators    = require('./es6.array.iterator')\n  , redefine      = require('./_redefine')\n  , global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , wks           = require('./_wks')\n  , ITERATOR      = wks('iterator')\n  , TO_STRING_TAG = wks('toStringTag')\n  , ArrayValues   = Iterators.Array;\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype\n    , key;\n  if(proto){\n    if(!proto[ITERATOR])hide(proto, ITERATOR, ArrayValues);\n    if(!proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n    Iterators[NAME] = ArrayValues;\n    for(key in $iterators)if(!proto[key])redefine(proto, key, $iterators[key], true);\n  }\n}","var $export = require('./_export')\n  , $task   = require('./_task');\n$export($export.G + $export.B, {\n  setImmediate:   $task.set,\n  clearImmediate: $task.clear\n});","// ie9- setTimeout & setInterval additional parameters fix\nvar global     = require('./_global')\n  , $export    = require('./_export')\n  , invoke     = require('./_invoke')\n  , partial    = require('./_partial')\n  , navigator  = global.navigator\n  , MSIE       = !!navigator && /MSIE .\\./.test(navigator.userAgent); // <- dirty ie9- check\nvar wrap = function(set){\n  return MSIE ? function(fn, time /*, ...args */){\n    return set(invoke(\n      partial,\n      [].slice.call(arguments, 2),\n      typeof fn == 'function' ? fn : Function(fn)\n    ), time);\n  } : set;\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n  setTimeout:  wrap(global.setTimeout),\n  setInterval: wrap(global.setInterval)\n});","require('./modules/es6.symbol');\nrequire('./modules/es6.object.create');\nrequire('./modules/es6.object.define-property');\nrequire('./modules/es6.object.define-properties');\nrequire('./modules/es6.object.get-own-property-descriptor');\nrequire('./modules/es6.object.get-prototype-of');\nrequire('./modules/es6.object.keys');\nrequire('./modules/es6.object.get-own-property-names');\nrequire('./modules/es6.object.freeze');\nrequire('./modules/es6.object.seal');\nrequire('./modules/es6.object.prevent-extensions');\nrequire('./modules/es6.object.is-frozen');\nrequire('./modules/es6.object.is-sealed');\nrequire('./modules/es6.object.is-extensible');\nrequire('./modules/es6.object.assign');\nrequire('./modules/es6.object.is');\nrequire('./modules/es6.object.set-prototype-of');\nrequire('./modules/es6.object.to-string');\nrequire('./modules/es6.function.bind');\nrequire('./modules/es6.function.name');\nrequire('./modules/es6.function.has-instance');\nrequire('./modules/es6.parse-int');\nrequire('./modules/es6.parse-float');\nrequire('./modules/es6.number.constructor');\nrequire('./modules/es6.number.to-fixed');\nrequire('./modules/es6.number.to-precision');\nrequire('./modules/es6.number.epsilon');\nrequire('./modules/es6.number.is-finite');\nrequire('./modules/es6.number.is-integer');\nrequire('./modules/es6.number.is-nan');\nrequire('./modules/es6.number.is-safe-integer');\nrequire('./modules/es6.number.max-safe-integer');\nrequire('./modules/es6.number.min-safe-integer');\nrequire('./modules/es6.number.parse-float');\nrequire('./modules/es6.number.parse-int');\nrequire('./modules/es6.math.acosh');\nrequire('./modules/es6.math.asinh');\nrequire('./modules/es6.math.atanh');\nrequire('./modules/es6.math.cbrt');\nrequire('./modules/es6.math.clz32');\nrequire('./modules/es6.math.cosh');\nrequire('./modules/es6.math.expm1');\nrequire('./modules/es6.math.fround');\nrequire('./modules/es6.math.hypot');\nrequire('./modules/es6.math.imul');\nrequire('./modules/es6.math.log10');\nrequire('./modules/es6.math.log1p');\nrequire('./modules/es6.math.log2');\nrequire('./modules/es6.math.sign');\nrequire('./modules/es6.math.sinh');\nrequire('./modules/es6.math.tanh');\nrequire('./modules/es6.math.trunc');\nrequire('./modules/es6.string.from-code-point');\nrequire('./modules/es6.string.raw');\nrequire('./modules/es6.string.trim');\nrequire('./modules/es6.string.iterator');\nrequire('./modules/es6.string.code-point-at');\nrequire('./modules/es6.string.ends-with');\nrequire('./modules/es6.string.includes');\nrequire('./modules/es6.string.repeat');\nrequire('./modules/es6.string.starts-with');\nrequire('./modules/es6.string.anchor');\nrequire('./modules/es6.string.big');\nrequire('./modules/es6.string.blink');\nrequire('./modules/es6.string.bold');\nrequire('./modules/es6.string.fixed');\nrequire('./modules/es6.string.fontcolor');\nrequire('./modules/es6.string.fontsize');\nrequire('./modules/es6.string.italics');\nrequire('./modules/es6.string.link');\nrequire('./modules/es6.string.small');\nrequire('./modules/es6.string.strike');\nrequire('./modules/es6.string.sub');\nrequire('./modules/es6.string.sup');\nrequire('./modules/es6.date.now');\nrequire('./modules/es6.date.to-json');\nrequire('./modules/es6.date.to-iso-string');\nrequire('./modules/es6.date.to-string');\nrequire('./modules/es6.date.to-primitive');\nrequire('./modules/es6.array.is-array');\nrequire('./modules/es6.array.from');\nrequire('./modules/es6.array.of');\nrequire('./modules/es6.array.join');\nrequire('./modules/es6.array.slice');\nrequire('./modules/es6.array.sort');\nrequire('./modules/es6.array.for-each');\nrequire('./modules/es6.array.map');\nrequire('./modules/es6.array.filter');\nrequire('./modules/es6.array.some');\nrequire('./modules/es6.array.every');\nrequire('./modules/es6.array.reduce');\nrequire('./modules/es6.array.reduce-right');\nrequire('./modules/es6.array.index-of');\nrequire('./modules/es6.array.last-index-of');\nrequire('./modules/es6.array.copy-within');\nrequire('./modules/es6.array.fill');\nrequire('./modules/es6.array.find');\nrequire('./modules/es6.array.find-index');\nrequire('./modules/es6.array.species');\nrequire('./modules/es6.array.iterator');\nrequire('./modules/es6.regexp.constructor');\nrequire('./modules/es6.regexp.to-string');\nrequire('./modules/es6.regexp.flags');\nrequire('./modules/es6.regexp.match');\nrequire('./modules/es6.regexp.replace');\nrequire('./modules/es6.regexp.search');\nrequire('./modules/es6.regexp.split');\nrequire('./modules/es6.promise');\nrequire('./modules/es6.map');\nrequire('./modules/es6.set');\nrequire('./modules/es6.weak-map');\nrequire('./modules/es6.weak-set');\nrequire('./modules/es6.typed.array-buffer');\nrequire('./modules/es6.typed.data-view');\nrequire('./modules/es6.typed.int8-array');\nrequire('./modules/es6.typed.uint8-array');\nrequire('./modules/es6.typed.uint8-clamped-array');\nrequire('./modules/es6.typed.int16-array');\nrequire('./modules/es6.typed.uint16-array');\nrequire('./modules/es6.typed.int32-array');\nrequire('./modules/es6.typed.uint32-array');\nrequire('./modules/es6.typed.float32-array');\nrequire('./modules/es6.typed.float64-array');\nrequire('./modules/es6.reflect.apply');\nrequire('./modules/es6.reflect.construct');\nrequire('./modules/es6.reflect.define-property');\nrequire('./modules/es6.reflect.delete-property');\nrequire('./modules/es6.reflect.enumerate');\nrequire('./modules/es6.reflect.get');\nrequire('./modules/es6.reflect.get-own-property-descriptor');\nrequire('./modules/es6.reflect.get-prototype-of');\nrequire('./modules/es6.reflect.has');\nrequire('./modules/es6.reflect.is-extensible');\nrequire('./modules/es6.reflect.own-keys');\nrequire('./modules/es6.reflect.prevent-extensions');\nrequire('./modules/es6.reflect.set');\nrequire('./modules/es6.reflect.set-prototype-of');\nrequire('./modules/es7.array.includes');\nrequire('./modules/es7.string.at');\nrequire('./modules/es7.string.pad-start');\nrequire('./modules/es7.string.pad-end');\nrequire('./modules/es7.string.trim-left');\nrequire('./modules/es7.string.trim-right');\nrequire('./modules/es7.string.match-all');\nrequire('./modules/es7.symbol.async-iterator');\nrequire('./modules/es7.symbol.observable');\nrequire('./modules/es7.object.get-own-property-descriptors');\nrequire('./modules/es7.object.values');\nrequire('./modules/es7.object.entries');\nrequire('./modules/es7.object.define-getter');\nrequire('./modules/es7.object.define-setter');\nrequire('./modules/es7.object.lookup-getter');\nrequire('./modules/es7.object.lookup-setter');\nrequire('./modules/es7.map.to-json');\nrequire('./modules/es7.set.to-json');\nrequire('./modules/es7.system.global');\nrequire('./modules/es7.error.is-error');\nrequire('./modules/es7.math.iaddh');\nrequire('./modules/es7.math.isubh');\nrequire('./modules/es7.math.imulh');\nrequire('./modules/es7.math.umulh');\nrequire('./modules/es7.reflect.define-metadata');\nrequire('./modules/es7.reflect.delete-metadata');\nrequire('./modules/es7.reflect.get-metadata');\nrequire('./modules/es7.reflect.get-metadata-keys');\nrequire('./modules/es7.reflect.get-own-metadata');\nrequire('./modules/es7.reflect.get-own-metadata-keys');\nrequire('./modules/es7.reflect.has-metadata');\nrequire('./modules/es7.reflect.has-own-metadata');\nrequire('./modules/es7.reflect.metadata');\nrequire('./modules/es7.asap');\nrequire('./modules/es7.observable');\nrequire('./modules/web.timers');\nrequire('./modules/web.immediate');\nrequire('./modules/web.dom.iterable');\nmodule.exports = require('./modules/_core');","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.foo = function () { return 42 }\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; i++) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  that.write(string, encoding)\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'binary':\n    case 'base64':\n    case 'raw':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; i++) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; i++) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'binary':\n      // Deprecated\n      case 'raw':\n      case 'raws':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'binary':\n        return binarySlice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var foundIndex = -1\n  for (var i = 0; byteOffset + i < arrLength; i++) {\n    if (read(arr, byteOffset + i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n      if (foundIndex === -1) foundIndex = i\n      if (i - foundIndex + 1 === valLength) return (byteOffset + foundIndex) * indexSize\n    } else {\n      if (foundIndex !== -1) i -= i - foundIndex\n      foundIndex = -1\n    }\n  }\n  return -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset >>= 0\n\n  if (this.length === 0) return -1\n  if (byteOffset >= this.length) return -1\n\n  // Negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)\n\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  if (Buffer.isBuffer(val)) {\n    // special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(this, val, byteOffset, encoding)\n  }\n  if (typeof val === 'number') {\n    if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {\n      return Uint8Array.prototype.indexOf.call(this, val, byteOffset)\n    }\n    return arrayIndexOf(this, [ val ], byteOffset, encoding)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new Error('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; i++) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction binaryWrite (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'binary':\n        return binaryWrite(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction binarySlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; i++) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; i++) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; i++) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; i--) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; i++) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; i++) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; i++) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; i++) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; i++) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; i++) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict'\n\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nfunction init () {\n  var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n  for (var i = 0, len = code.length; i < len; ++i) {\n    lookup[i] = code[i]\n    revLookup[code.charCodeAt(i)] = i\n  }\n\n  revLookup['-'.charCodeAt(0)] = 62\n  revLookup['_'.charCodeAt(0)] = 63\n}\n\ninit()\n\nfunction toByteArray (b64) {\n  var i, j, l, tmp, placeHolders, arr\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n  // base64 is 4/3 + up to two characters of the original data\n  arr = new Arr(len * 3 / 4 - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","// shim for using process in browser\n\nvar process = module.exports = {};\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 = setTimeout(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    clearTimeout(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        setTimeout(drainQueue, 0);\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;\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","module.exports = require('./lib/chai');\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar used = []\n  , exports = module.exports = {};\n\n/*!\n * Chai version\n */\n\nexports.version = '3.5.0';\n\n/*!\n * Assertion Error\n */\n\nexports.AssertionError = require('assertion-error');\n\n/*!\n * Utils for plugins (not exported)\n */\n\nvar util = require('./chai/utils');\n\n/**\n * # .use(function)\n *\n * Provides a way to extend the internals of Chai\n *\n * @param {Function}\n * @returns {this} for chaining\n * @api public\n */\n\nexports.use = function (fn) {\n  if (!~used.indexOf(fn)) {\n    fn(this, util);\n    used.push(fn);\n  }\n\n  return this;\n};\n\n/*!\n * Utility Functions\n */\n\nexports.util = util;\n\n/*!\n * Configuration\n */\n\nvar config = require('./chai/config');\nexports.config = config;\n\n/*!\n * Primary `Assertion` prototype\n */\n\nvar assertion = require('./chai/assertion');\nexports.use(assertion);\n\n/*!\n * Core Assertions\n */\n\nvar core = require('./chai/core/assertions');\nexports.use(core);\n\n/*!\n * Expect interface\n */\n\nvar expect = require('./chai/interface/expect');\nexports.use(expect);\n\n/*!\n * Should interface\n */\n\nvar should = require('./chai/interface/should');\nexports.use(should);\n\n/*!\n * Assert interface\n */\n\nvar assert = require('./chai/interface/assert');\nexports.use(assert);\n","/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar config = require('./config');\n\nmodule.exports = function (_chai, util) {\n  /*!\n   * Module dependencies.\n   */\n\n  var AssertionError = _chai.AssertionError\n    , flag = util.flag;\n\n  /*!\n   * Module export.\n   */\n\n  _chai.Assertion = Assertion;\n\n  /*!\n   * Assertion Constructor\n   *\n   * Creates object for chaining.\n   *\n   * @api private\n   */\n\n  function Assertion (obj, msg, stack) {\n    flag(this, 'ssfi', stack || arguments.callee);\n    flag(this, 'object', obj);\n    flag(this, 'message', msg);\n  }\n\n  Object.defineProperty(Assertion, 'includeStack', {\n    get: function() {\n      console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n      return config.includeStack;\n    },\n    set: function(value) {\n      console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');\n      config.includeStack = value;\n    }\n  });\n\n  Object.defineProperty(Assertion, 'showDiff', {\n    get: function() {\n      console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n      return config.showDiff;\n    },\n    set: function(value) {\n      console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');\n      config.showDiff = value;\n    }\n  });\n\n  Assertion.addProperty = function (name, fn) {\n    util.addProperty(this.prototype, name, fn);\n  };\n\n  Assertion.addMethod = function (name, fn) {\n    util.addMethod(this.prototype, name, fn);\n  };\n\n  Assertion.addChainableMethod = function (name, fn, chainingBehavior) {\n    util.addChainableMethod(this.prototype, name, fn, chainingBehavior);\n  };\n\n  Assertion.overwriteProperty = function (name, fn) {\n    util.overwriteProperty(this.prototype, name, fn);\n  };\n\n  Assertion.overwriteMethod = function (name, fn) {\n    util.overwriteMethod(this.prototype, name, fn);\n  };\n\n  Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {\n    util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);\n  };\n\n  /**\n   * ### .assert(expression, message, negateMessage, expected, actual, showDiff)\n   *\n   * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.\n   *\n   * @name assert\n   * @param {Philosophical} expression to be tested\n   * @param {String|Function} message or function that returns message to display if expression fails\n   * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails\n   * @param {Mixed} expected value (remember to check for negation)\n   * @param {Mixed} actual (optional) will default to `this.obj`\n   * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails\n   * @api private\n   */\n\n  Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {\n    var ok = util.test(this, arguments);\n    if (true !== showDiff) showDiff = false;\n    if (true !== config.showDiff) showDiff = false;\n\n    if (!ok) {\n      var msg = util.getMessage(this, arguments)\n        , actual = util.getActual(this, arguments);\n      throw new AssertionError(msg, {\n          actual: actual\n        , expected: expected\n        , showDiff: showDiff\n      }, (config.includeStack) ? this.assert : flag(this, 'ssfi'));\n    }\n  };\n\n  /*!\n   * ### ._obj\n   *\n   * Quick reference to stored `actual` value for plugin developers.\n   *\n   * @api private\n   */\n\n  Object.defineProperty(Assertion.prototype, '_obj',\n    { get: function () {\n        return flag(this, 'object');\n      }\n    , set: function (val) {\n        flag(this, 'object', val);\n      }\n  });\n};\n","module.exports = {\n\n  /**\n   * ### config.includeStack\n   *\n   * User configurable property, influences whether stack trace\n   * is included in Assertion error message. Default of false\n   * suppresses stack trace in the error message.\n   *\n   *     chai.config.includeStack = true;  // enable stack on error\n   *\n   * @param {Boolean}\n   * @api public\n   */\n\n   includeStack: false,\n\n  /**\n   * ### config.showDiff\n   *\n   * User configurable property, influences whether or not\n   * the `showDiff` flag should be included in the thrown\n   * AssertionErrors. `false` will always be `false`; `true`\n   * will be true when the assertion has requested a diff\n   * be shown.\n   *\n   * @param {Boolean}\n   * @api public\n   */\n\n  showDiff: true,\n\n  /**\n   * ### config.truncateThreshold\n   *\n   * User configurable property, sets length threshold for actual and\n   * expected values in assertion errors. If this threshold is exceeded, for\n   * example for large data structures, the value is replaced with something\n   * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`.\n   *\n   * Set it to zero if you want to disable truncating altogether.\n   *\n   * This is especially userful when doing assertions on arrays: having this\n   * set to a reasonable large value makes the failure messages readily\n   * inspectable.\n   *\n   *     chai.config.truncateThreshold = 0;  // disable truncating\n   *\n   * @param {Number}\n   * @api public\n   */\n\n  truncateThreshold: 40\n\n};\n","/*!\n * chai\n * http://chaijs.com\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, _) {\n  var Assertion = chai.Assertion\n    , toString = Object.prototype.toString\n    , flag = _.flag;\n\n  /**\n   * ### Language Chains\n   *\n   * The following are provided as chainable getters to\n   * improve the readability of your assertions. They\n   * do not provide testing capabilities unless they\n   * have been overwritten by a plugin.\n   *\n   * **Chains**\n   *\n   * - to\n   * - be\n   * - been\n   * - is\n   * - that\n   * - which\n   * - and\n   * - has\n   * - have\n   * - with\n   * - at\n   * - of\n   * - same\n   *\n   * @name language chains\n   * @namespace BDD\n   * @api public\n   */\n\n  [ 'to', 'be', 'been'\n  , 'is', 'and', 'has', 'have'\n  , 'with', 'that', 'which', 'at'\n  , 'of', 'same' ].forEach(function (chain) {\n    Assertion.addProperty(chain, function () {\n      return this;\n    });\n  });\n\n  /**\n   * ### .not\n   *\n   * Negates any of assertions following in the chain.\n   *\n   *     expect(foo).to.not.equal('bar');\n   *     expect(goodFn).to.not.throw(Error);\n   *     expect({ foo: 'baz' }).to.have.property('foo')\n   *       .and.not.equal('bar');\n   *\n   * @name not\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('not', function () {\n    flag(this, 'negate', true);\n  });\n\n  /**\n   * ### .deep\n   *\n   * Sets the `deep` flag, later used by the `equal` and\n   * `property` assertions.\n   *\n   *     expect(foo).to.deep.equal({ bar: 'baz' });\n   *     expect({ foo: { bar: { baz: 'quux' } } })\n   *       .to.have.deep.property('foo.bar.baz', 'quux');\n   *\n   * `.deep.property` special characters can be escaped\n   * by adding two slashes before the `.` or `[]`.\n   *\n   *     var deepCss = { '.link': { '[target]': 42 }};\n   *     expect(deepCss).to.have.deep.property('\\\\.link.\\\\[target\\\\]', 42);\n   *\n   * @name deep\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('deep', function () {\n    flag(this, 'deep', true);\n  });\n\n  /**\n   * ### .any\n   *\n   * Sets the `any` flag, (opposite of the `all` flag)\n   * later used in the `keys` assertion.\n   *\n   *     expect(foo).to.have.any.keys('bar', 'baz');\n   *\n   * @name any\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('any', function () {\n    flag(this, 'any', true);\n    flag(this, 'all', false)\n  });\n\n\n  /**\n   * ### .all\n   *\n   * Sets the `all` flag (opposite of the `any` flag)\n   * later used by the `keys` assertion.\n   *\n   *     expect(foo).to.have.all.keys('bar', 'baz');\n   *\n   * @name all\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('all', function () {\n    flag(this, 'all', true);\n    flag(this, 'any', false);\n  });\n\n  /**\n   * ### .a(type)\n   *\n   * The `a` and `an` assertions are aliases that can be\n   * used either as language chains or to assert a value's\n   * type.\n   *\n   *     // typeof\n   *     expect('test').to.be.a('string');\n   *     expect({ foo: 'bar' }).to.be.an('object');\n   *     expect(null).to.be.a('null');\n   *     expect(undefined).to.be.an('undefined');\n   *     expect(new Error).to.be.an('error');\n   *     expect(new Promise).to.be.a('promise');\n   *     expect(new Float32Array()).to.be.a('float32array');\n   *     expect(Symbol()).to.be.a('symbol');\n   *\n   *     // es6 overrides\n   *     expect({[Symbol.toStringTag]:()=>'foo'}).to.be.a('foo');\n   *\n   *     // language chain\n   *     expect(foo).to.be.an.instanceof(Foo);\n   *\n   * @name a\n   * @alias an\n   * @param {String} type\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function an (type, msg) {\n    if (msg) flag(this, 'message', msg);\n    type = type.toLowerCase();\n    var obj = flag(this, 'object')\n      , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';\n\n    this.assert(\n        type === _.type(obj)\n      , 'expected #{this} to be ' + article + type\n      , 'expected #{this} not to be ' + article + type\n    );\n  }\n\n  Assertion.addChainableMethod('an', an);\n  Assertion.addChainableMethod('a', an);\n\n  /**\n   * ### .include(value)\n   *\n   * The `include` and `contain` assertions can be used as either property\n   * based language chains or as methods to assert the inclusion of an object\n   * in an array or a substring in a string. When used as language chains,\n   * they toggle the `contains` flag for the `keys` assertion.\n   *\n   *     expect([1,2,3]).to.include(2);\n   *     expect('foobar').to.contain('foo');\n   *     expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');\n   *\n   * @name include\n   * @alias contain\n   * @alias includes\n   * @alias contains\n   * @param {Object|String|Number} obj\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function includeChainingBehavior () {\n    flag(this, 'contains', true);\n  }\n\n  function include (val, msg) {\n    _.expectTypes(this, ['array', 'object', 'string']);\n\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    var expected = false;\n\n    if (_.type(obj) === 'array' && _.type(val) === 'object') {\n      for (var i in obj) {\n        if (_.eql(obj[i], val)) {\n          expected = true;\n          break;\n        }\n      }\n    } else if (_.type(val) === 'object') {\n      if (!flag(this, 'negate')) {\n        for (var k in val) new Assertion(obj).property(k, val[k]);\n        return;\n      }\n      var subset = {};\n      for (var k in val) subset[k] = obj[k];\n      expected = _.eql(subset, val);\n    } else {\n      expected = (obj != undefined) && ~obj.indexOf(val);\n    }\n    this.assert(\n        expected\n      , 'expected #{this} to include ' + _.inspect(val)\n      , 'expected #{this} to not include ' + _.inspect(val));\n  }\n\n  Assertion.addChainableMethod('include', include, includeChainingBehavior);\n  Assertion.addChainableMethod('contain', include, includeChainingBehavior);\n  Assertion.addChainableMethod('contains', include, includeChainingBehavior);\n  Assertion.addChainableMethod('includes', include, includeChainingBehavior);\n\n  /**\n   * ### .ok\n   *\n   * Asserts that the target is truthy.\n   *\n   *     expect('everything').to.be.ok;\n   *     expect(1).to.be.ok;\n   *     expect(false).to.not.be.ok;\n   *     expect(undefined).to.not.be.ok;\n   *     expect(null).to.not.be.ok;\n   *\n   * @name ok\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('ok', function () {\n    this.assert(\n        flag(this, 'object')\n      , 'expected #{this} to be truthy'\n      , 'expected #{this} to be falsy');\n  });\n\n  /**\n   * ### .true\n   *\n   * Asserts that the target is `true`.\n   *\n   *     expect(true).to.be.true;\n   *     expect(1).to.not.be.true;\n   *\n   * @name true\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('true', function () {\n    this.assert(\n        true === flag(this, 'object')\n      , 'expected #{this} to be true'\n      , 'expected #{this} to be false'\n      , this.negate ? false : true\n    );\n  });\n\n  /**\n   * ### .false\n   *\n   * Asserts that the target is `false`.\n   *\n   *     expect(false).to.be.false;\n   *     expect(0).to.not.be.false;\n   *\n   * @name false\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('false', function () {\n    this.assert(\n        false === flag(this, 'object')\n      , 'expected #{this} to be false'\n      , 'expected #{this} to be true'\n      , this.negate ? true : false\n    );\n  });\n\n  /**\n   * ### .null\n   *\n   * Asserts that the target is `null`.\n   *\n   *     expect(null).to.be.null;\n   *     expect(undefined).to.not.be.null;\n   *\n   * @name null\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('null', function () {\n    this.assert(\n        null === flag(this, 'object')\n      , 'expected #{this} to be null'\n      , 'expected #{this} not to be null'\n    );\n  });\n\n  /**\n   * ### .undefined\n   *\n   * Asserts that the target is `undefined`.\n   *\n   *     expect(undefined).to.be.undefined;\n   *     expect(null).to.not.be.undefined;\n   *\n   * @name undefined\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('undefined', function () {\n    this.assert(\n        undefined === flag(this, 'object')\n      , 'expected #{this} to be undefined'\n      , 'expected #{this} not to be undefined'\n    );\n  });\n\n  /**\n   * ### .NaN\n   * Asserts that the target is `NaN`.\n   *\n   *     expect('foo').to.be.NaN;\n   *     expect(4).not.to.be.NaN;\n   *\n   * @name NaN\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('NaN', function () {\n    this.assert(\n        isNaN(flag(this, 'object'))\n        , 'expected #{this} to be NaN'\n        , 'expected #{this} not to be NaN'\n    );\n  });\n\n  /**\n   * ### .exist\n   *\n   * Asserts that the target is neither `null` nor `undefined`.\n   *\n   *     var foo = 'hi'\n   *       , bar = null\n   *       , baz;\n   *\n   *     expect(foo).to.exist;\n   *     expect(bar).to.not.exist;\n   *     expect(baz).to.not.exist;\n   *\n   * @name exist\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('exist', function () {\n    this.assert(\n        null != flag(this, 'object')\n      , 'expected #{this} to exist'\n      , 'expected #{this} to not exist'\n    );\n  });\n\n\n  /**\n   * ### .empty\n   *\n   * Asserts that the target's length is `0`. For arrays and strings, it checks\n   * the `length` property. For objects, it gets the count of\n   * enumerable keys.\n   *\n   *     expect([]).to.be.empty;\n   *     expect('').to.be.empty;\n   *     expect({}).to.be.empty;\n   *\n   * @name empty\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('empty', function () {\n    var obj = flag(this, 'object')\n      , expected = obj;\n\n    if (Array.isArray(obj) || 'string' === typeof object) {\n      expected = obj.length;\n    } else if (typeof obj === 'object') {\n      expected = Object.keys(obj).length;\n    }\n\n    this.assert(\n        !expected\n      , 'expected #{this} to be empty'\n      , 'expected #{this} not to be empty'\n    );\n  });\n\n  /**\n   * ### .arguments\n   *\n   * Asserts that the target is an arguments object.\n   *\n   *     function test () {\n   *       expect(arguments).to.be.arguments;\n   *     }\n   *\n   * @name arguments\n   * @alias Arguments\n   * @namespace BDD\n   * @api public\n   */\n\n  function checkArguments () {\n    var obj = flag(this, 'object')\n      , type = Object.prototype.toString.call(obj);\n    this.assert(\n        '[object Arguments]' === type\n      , 'expected #{this} to be arguments but got ' + type\n      , 'expected #{this} to not be arguments'\n    );\n  }\n\n  Assertion.addProperty('arguments', checkArguments);\n  Assertion.addProperty('Arguments', checkArguments);\n\n  /**\n   * ### .equal(value)\n   *\n   * Asserts that the target is strictly equal (`===`) to `value`.\n   * Alternately, if the `deep` flag is set, asserts that\n   * the target is deeply equal to `value`.\n   *\n   *     expect('hello').to.equal('hello');\n   *     expect(42).to.equal(42);\n   *     expect(1).to.not.equal(true);\n   *     expect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });\n   *     expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });\n   *\n   * @name equal\n   * @alias equals\n   * @alias eq\n   * @alias deep.equal\n   * @param {Mixed} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertEqual (val, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    if (flag(this, 'deep')) {\n      return this.eql(val);\n    } else {\n      this.assert(\n          val === obj\n        , 'expected #{this} to equal #{exp}'\n        , 'expected #{this} to not equal #{exp}'\n        , val\n        , this._obj\n        , true\n      );\n    }\n  }\n\n  Assertion.addMethod('equal', assertEqual);\n  Assertion.addMethod('equals', assertEqual);\n  Assertion.addMethod('eq', assertEqual);\n\n  /**\n   * ### .eql(value)\n   *\n   * Asserts that the target is deeply equal to `value`.\n   *\n   *     expect({ foo: 'bar' }).to.eql({ foo: 'bar' });\n   *     expect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);\n   *\n   * @name eql\n   * @alias eqls\n   * @param {Mixed} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertEql(obj, msg) {\n    if (msg) flag(this, 'message', msg);\n    this.assert(\n        _.eql(obj, flag(this, 'object'))\n      , 'expected #{this} to deeply equal #{exp}'\n      , 'expected #{this} to not deeply equal #{exp}'\n      , obj\n      , this._obj\n      , true\n    );\n  }\n\n  Assertion.addMethod('eql', assertEql);\n  Assertion.addMethod('eqls', assertEql);\n\n  /**\n   * ### .above(value)\n   *\n   * Asserts that the target is greater than `value`.\n   *\n   *     expect(10).to.be.above(5);\n   *\n   * Can also be used in conjunction with `length` to\n   * assert a minimum length. The benefit being a\n   * more informative error message than if the length\n   * was supplied directly.\n   *\n   *     expect('foo').to.have.length.above(2);\n   *     expect([ 1, 2, 3 ]).to.have.length.above(2);\n   *\n   * @name above\n   * @alias gt\n   * @alias greaterThan\n   * @param {Number} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertAbove (n, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    if (flag(this, 'doLength')) {\n      new Assertion(obj, msg).to.have.property('length');\n      var len = obj.length;\n      this.assert(\n          len > n\n        , 'expected #{this} to have a length above #{exp} but got #{act}'\n        , 'expected #{this} to not have a length above #{exp}'\n        , n\n        , len\n      );\n    } else {\n      this.assert(\n          obj > n\n        , 'expected #{this} to be above ' + n\n        , 'expected #{this} to be at most ' + n\n      );\n    }\n  }\n\n  Assertion.addMethod('above', assertAbove);\n  Assertion.addMethod('gt', assertAbove);\n  Assertion.addMethod('greaterThan', assertAbove);\n\n  /**\n   * ### .least(value)\n   *\n   * Asserts that the target is greater than or equal to `value`.\n   *\n   *     expect(10).to.be.at.least(10);\n   *\n   * Can also be used in conjunction with `length` to\n   * assert a minimum length. The benefit being a\n   * more informative error message than if the length\n   * was supplied directly.\n   *\n   *     expect('foo').to.have.length.of.at.least(2);\n   *     expect([ 1, 2, 3 ]).to.have.length.of.at.least(3);\n   *\n   * @name least\n   * @alias gte\n   * @param {Number} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertLeast (n, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    if (flag(this, 'doLength')) {\n      new Assertion(obj, msg).to.have.property('length');\n      var len = obj.length;\n      this.assert(\n          len >= n\n        , 'expected #{this} to have a length at least #{exp} but got #{act}'\n        , 'expected #{this} to have a length below #{exp}'\n        , n\n        , len\n      );\n    } else {\n      this.assert(\n          obj >= n\n        , 'expected #{this} to be at least ' + n\n        , 'expected #{this} to be below ' + n\n      );\n    }\n  }\n\n  Assertion.addMethod('least', assertLeast);\n  Assertion.addMethod('gte', assertLeast);\n\n  /**\n   * ### .below(value)\n   *\n   * Asserts that the target is less than `value`.\n   *\n   *     expect(5).to.be.below(10);\n   *\n   * Can also be used in conjunction with `length` to\n   * assert a maximum length. The benefit being a\n   * more informative error message than if the length\n   * was supplied directly.\n   *\n   *     expect('foo').to.have.length.below(4);\n   *     expect([ 1, 2, 3 ]).to.have.length.below(4);\n   *\n   * @name below\n   * @alias lt\n   * @alias lessThan\n   * @param {Number} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertBelow (n, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    if (flag(this, 'doLength')) {\n      new Assertion(obj, msg).to.have.property('length');\n      var len = obj.length;\n      this.assert(\n          len < n\n        , 'expected #{this} to have a length below #{exp} but got #{act}'\n        , 'expected #{this} to not have a length below #{exp}'\n        , n\n        , len\n      );\n    } else {\n      this.assert(\n          obj < n\n        , 'expected #{this} to be below ' + n\n        , 'expected #{this} to be at least ' + n\n      );\n    }\n  }\n\n  Assertion.addMethod('below', assertBelow);\n  Assertion.addMethod('lt', assertBelow);\n  Assertion.addMethod('lessThan', assertBelow);\n\n  /**\n   * ### .most(value)\n   *\n   * Asserts that the target is less than or equal to `value`.\n   *\n   *     expect(5).to.be.at.most(5);\n   *\n   * Can also be used in conjunction with `length` to\n   * assert a maximum length. The benefit being a\n   * more informative error message than if the length\n   * was supplied directly.\n   *\n   *     expect('foo').to.have.length.of.at.most(4);\n   *     expect([ 1, 2, 3 ]).to.have.length.of.at.most(3);\n   *\n   * @name most\n   * @alias lte\n   * @param {Number} value\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertMost (n, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    if (flag(this, 'doLength')) {\n      new Assertion(obj, msg).to.have.property('length');\n      var len = obj.length;\n      this.assert(\n          len <= n\n        , 'expected #{this} to have a length at most #{exp} but got #{act}'\n        , 'expected #{this} to have a length above #{exp}'\n        , n\n        , len\n      );\n    } else {\n      this.assert(\n          obj <= n\n        , 'expected #{this} to be at most ' + n\n        , 'expected #{this} to be above ' + n\n      );\n    }\n  }\n\n  Assertion.addMethod('most', assertMost);\n  Assertion.addMethod('lte', assertMost);\n\n  /**\n   * ### .within(start, finish)\n   *\n   * Asserts that the target is within a range.\n   *\n   *     expect(7).to.be.within(5,10);\n   *\n   * Can also be used in conjunction with `length` to\n   * assert a length range. The benefit being a\n   * more informative error message than if the length\n   * was supplied directly.\n   *\n   *     expect('foo').to.have.length.within(2,4);\n   *     expect([ 1, 2, 3 ]).to.have.length.within(2,4);\n   *\n   * @name within\n   * @param {Number} start lowerbound inclusive\n   * @param {Number} finish upperbound inclusive\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addMethod('within', function (start, finish, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object')\n      , range = start + '..' + finish;\n    if (flag(this, 'doLength')) {\n      new Assertion(obj, msg).to.have.property('length');\n      var len = obj.length;\n      this.assert(\n          len >= start && len <= finish\n        , 'expected #{this} to have a length within ' + range\n        , 'expected #{this} to not have a length within ' + range\n      );\n    } else {\n      this.assert(\n          obj >= start && obj <= finish\n        , 'expected #{this} to be within ' + range\n        , 'expected #{this} to not be within ' + range\n      );\n    }\n  });\n\n  /**\n   * ### .instanceof(constructor)\n   *\n   * Asserts that the target is an instance of `constructor`.\n   *\n   *     var Tea = function (name) { this.name = name; }\n   *       , Chai = new Tea('chai');\n   *\n   *     expect(Chai).to.be.an.instanceof(Tea);\n   *     expect([ 1, 2, 3 ]).to.be.instanceof(Array);\n   *\n   * @name instanceof\n   * @param {Constructor} constructor\n   * @param {String} message _optional_\n   * @alias instanceOf\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertInstanceOf (constructor, msg) {\n    if (msg) flag(this, 'message', msg);\n    var name = _.getName(constructor);\n    this.assert(\n        flag(this, 'object') instanceof constructor\n      , 'expected #{this} to be an instance of ' + name\n      , 'expected #{this} to not be an instance of ' + name\n    );\n  };\n\n  Assertion.addMethod('instanceof', assertInstanceOf);\n  Assertion.addMethod('instanceOf', assertInstanceOf);\n\n  /**\n   * ### .property(name, [value])\n   *\n   * Asserts that the target has a property `name`, optionally asserting that\n   * the value of that property is strictly equal to  `value`.\n   * If the `deep` flag is set, you can use dot- and bracket-notation for deep\n   * references into objects and arrays.\n   *\n   *     // simple referencing\n   *     var obj = { foo: 'bar' };\n   *     expect(obj).to.have.property('foo');\n   *     expect(obj).to.have.property('foo', 'bar');\n   *\n   *     // deep referencing\n   *     var deepObj = {\n   *         green: { tea: 'matcha' }\n   *       , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]\n   *     };\n   *\n   *     expect(deepObj).to.have.deep.property('green.tea', 'matcha');\n   *     expect(deepObj).to.have.deep.property('teas[1]', 'matcha');\n   *     expect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');\n   *\n   * You can also use an array as the starting point of a `deep.property`\n   * assertion, or traverse nested arrays.\n   *\n   *     var arr = [\n   *         [ 'chai', 'matcha', 'konacha' ]\n   *       , [ { tea: 'chai' }\n   *         , { tea: 'matcha' }\n   *         , { tea: 'konacha' } ]\n   *     ];\n   *\n   *     expect(arr).to.have.deep.property('[0][1]', 'matcha');\n   *     expect(arr).to.have.deep.property('[1][2].tea', 'konacha');\n   *\n   * Furthermore, `property` changes the subject of the assertion\n   * to be the value of that property from the original object. This\n   * permits for further chainable assertions on that property.\n   *\n   *     expect(obj).to.have.property('foo')\n   *       .that.is.a('string');\n   *     expect(deepObj).to.have.property('green')\n   *       .that.is.an('object')\n   *       .that.deep.equals({ tea: 'matcha' });\n   *     expect(deepObj).to.have.property('teas')\n   *       .that.is.an('array')\n   *       .with.deep.property('[2]')\n   *         .that.deep.equals({ tea: 'konacha' });\n   *\n   * Note that dots and bracket in `name` must be backslash-escaped when\n   * the `deep` flag is set, while they must NOT be escaped when the `deep`\n   * flag is not set.\n   *\n   *     // simple referencing\n   *     var css = { '.link[target]': 42 };\n   *     expect(css).to.have.property('.link[target]', 42);\n   *\n   *     // deep referencing\n   *     var deepCss = { '.link': { '[target]': 42 }};\n   *     expect(deepCss).to.have.deep.property('\\\\.link.\\\\[target\\\\]', 42);\n   *\n   * @name property\n   * @alias deep.property\n   * @param {String} name\n   * @param {Mixed} value (optional)\n   * @param {String} message _optional_\n   * @returns value of property for chaining\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addMethod('property', function (name, val, msg) {\n    if (msg) flag(this, 'message', msg);\n\n    var isDeep = !!flag(this, 'deep')\n      , descriptor = isDeep ? 'deep property ' : 'property '\n      , negate = flag(this, 'negate')\n      , obj = flag(this, 'object')\n      , pathInfo = isDeep ? _.getPathInfo(name, obj) : null\n      , hasProperty = isDeep\n        ? pathInfo.exists\n        : _.hasProperty(name, obj)\n      , value = isDeep\n        ? pathInfo.value\n        : obj[name];\n\n    if (negate && arguments.length > 1) {\n      if (undefined === value) {\n        msg = (msg != null) ? msg + ': ' : '';\n        throw new Error(msg + _.inspect(obj) + ' has no ' + descriptor + _.inspect(name));\n      }\n    } else {\n      this.assert(\n          hasProperty\n        , 'expected #{this} to have a ' + descriptor + _.inspect(name)\n        , 'expected #{this} to not have ' + descriptor + _.inspect(name));\n    }\n\n    if (arguments.length > 1) {\n      this.assert(\n          val === value\n        , 'expected #{this} to have a ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'\n        , 'expected #{this} to not have a ' + descriptor + _.inspect(name) + ' of #{act}'\n        , val\n        , value\n      );\n    }\n\n    flag(this, 'object', value);\n  });\n\n\n  /**\n   * ### .ownProperty(name)\n   *\n   * Asserts that the target has an own property `name`.\n   *\n   *     expect('test').to.have.ownProperty('length');\n   *\n   * @name ownProperty\n   * @alias haveOwnProperty\n   * @param {String} name\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertOwnProperty (name, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    this.assert(\n        obj.hasOwnProperty(name)\n      , 'expected #{this} to have own property ' + _.inspect(name)\n      , 'expected #{this} to not have own property ' + _.inspect(name)\n    );\n  }\n\n  Assertion.addMethod('ownProperty', assertOwnProperty);\n  Assertion.addMethod('haveOwnProperty', assertOwnProperty);\n\n  /**\n   * ### .ownPropertyDescriptor(name[, descriptor[, message]])\n   *\n   * Asserts that the target has an own property descriptor `name`, that optionally matches `descriptor`.\n   *\n   *     expect('test').to.have.ownPropertyDescriptor('length');\n   *     expect('test').to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 4 });\n   *     expect('test').not.to.have.ownPropertyDescriptor('length', { enumerable: false, configurable: false, writable: false, value: 3 });\n   *     expect('test').ownPropertyDescriptor('length').to.have.property('enumerable', false);\n   *     expect('test').ownPropertyDescriptor('length').to.have.keys('value');\n   *\n   * @name ownPropertyDescriptor\n   * @alias haveOwnPropertyDescriptor\n   * @param {String} name\n   * @param {Object} descriptor _optional_\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertOwnPropertyDescriptor (name, descriptor, msg) {\n    if (typeof descriptor === 'string') {\n      msg = descriptor;\n      descriptor = null;\n    }\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name);\n    if (actualDescriptor && descriptor) {\n      this.assert(\n          _.eql(descriptor, actualDescriptor)\n        , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor)\n        , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor)\n        , descriptor\n        , actualDescriptor\n        , true\n      );\n    } else {\n      this.assert(\n          actualDescriptor\n        , 'expected #{this} to have an own property descriptor for ' + _.inspect(name)\n        , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name)\n      );\n    }\n    flag(this, 'object', actualDescriptor);\n  }\n\n  Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor);\n  Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor);\n\n  /**\n   * ### .length\n   *\n   * Sets the `doLength` flag later used as a chain precursor to a value\n   * comparison for the `length` property.\n   *\n   *     expect('foo').to.have.length.above(2);\n   *     expect([ 1, 2, 3 ]).to.have.length.above(2);\n   *     expect('foo').to.have.length.below(4);\n   *     expect([ 1, 2, 3 ]).to.have.length.below(4);\n   *     expect('foo').to.have.length.within(2,4);\n   *     expect([ 1, 2, 3 ]).to.have.length.within(2,4);\n   *\n   * *Deprecation notice:* Using `length` as an assertion will be deprecated\n   * in version 2.4.0 and removed in 3.0.0. Code using the old style of\n   * asserting for `length` property value using `length(value)` should be\n   * switched to use `lengthOf(value)` instead.\n   *\n   * @name length\n   * @namespace BDD\n   * @api public\n   */\n\n  /**\n   * ### .lengthOf(value[, message])\n   *\n   * Asserts that the target's `length` property has\n   * the expected value.\n   *\n   *     expect([ 1, 2, 3]).to.have.lengthOf(3);\n   *     expect('foobar').to.have.lengthOf(6);\n   *\n   * @name lengthOf\n   * @param {Number} length\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertLengthChain () {\n    flag(this, 'doLength', true);\n  }\n\n  function assertLength (n, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    new Assertion(obj, msg).to.have.property('length');\n    var len = obj.length;\n\n    this.assert(\n        len == n\n      , 'expected #{this} to have a length of #{exp} but got #{act}'\n      , 'expected #{this} to not have a length of #{act}'\n      , n\n      , len\n    );\n  }\n\n  Assertion.addChainableMethod('length', assertLength, assertLengthChain);\n  Assertion.addMethod('lengthOf', assertLength);\n\n  /**\n   * ### .match(regexp)\n   *\n   * Asserts that the target matches a regular expression.\n   *\n   *     expect('foobar').to.match(/^foo/);\n   *\n   * @name match\n   * @alias matches\n   * @param {RegExp} RegularExpression\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n  function assertMatch(re, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    this.assert(\n        re.exec(obj)\n      , 'expected #{this} to match ' + re\n      , 'expected #{this} not to match ' + re\n    );\n  }\n\n  Assertion.addMethod('match', assertMatch);\n  Assertion.addMethod('matches', assertMatch);\n\n  /**\n   * ### .string(string)\n   *\n   * Asserts that the string target contains another string.\n   *\n   *     expect('foobar').to.have.string('bar');\n   *\n   * @name string\n   * @param {String} string\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addMethod('string', function (str, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    new Assertion(obj, msg).is.a('string');\n\n    this.assert(\n        ~obj.indexOf(str)\n      , 'expected #{this} to contain ' + _.inspect(str)\n      , 'expected #{this} to not contain ' + _.inspect(str)\n    );\n  });\n\n\n  /**\n   * ### .keys(key1, [key2], [...])\n   *\n   * Asserts that the target contains any or all of the passed-in keys.\n   * Use in combination with `any`, `all`, `contains`, or `have` will affect\n   * what will pass.\n   *\n   * When used in conjunction with `any`, at least one key that is passed\n   * in must exist in the target object. This is regardless whether or not\n   * the `have` or `contain` qualifiers are used. Note, either `any` or `all`\n   * should be used in the assertion. If neither are used, the assertion is\n   * defaulted to `all`.\n   *\n   * When both `all` and `contain` are used, the target object must have at\n   * least all of the passed-in keys but may have more keys not listed.\n   *\n   * When both `all` and `have` are used, the target object must both contain\n   * all of the passed-in keys AND the number of keys in the target object must\n   * match the number of keys passed in (in other words, a target object must\n   * have all and only all of the passed-in keys).\n   *\n   *     expect({ foo: 1, bar: 2 }).to.have.any.keys('foo', 'baz');\n   *     expect({ foo: 1, bar: 2 }).to.have.any.keys('foo');\n   *     expect({ foo: 1, bar: 2 }).to.contain.any.keys('bar', 'baz');\n   *     expect({ foo: 1, bar: 2 }).to.contain.any.keys(['foo']);\n   *     expect({ foo: 1, bar: 2 }).to.contain.any.keys({'foo': 6});\n   *     expect({ foo: 1, bar: 2 }).to.have.all.keys(['bar', 'foo']);\n   *     expect({ foo: 1, bar: 2 }).to.have.all.keys({'bar': 6, 'foo': 7});\n   *     expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys(['bar', 'foo']);\n   *     expect({ foo: 1, bar: 2, baz: 3 }).to.contain.all.keys({'bar': 6});\n   *\n   *\n   * @name keys\n   * @alias key\n   * @param {...String|Array|Object} keys\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertKeys (keys) {\n    var obj = flag(this, 'object')\n      , str\n      , ok = true\n      , mixedArgsMsg = 'keys must be given single argument of Array|Object|String, or multiple String arguments';\n\n    switch (_.type(keys)) {\n      case \"array\":\n        if (arguments.length > 1) throw (new Error(mixedArgsMsg));\n        break;\n      case \"object\":\n        if (arguments.length > 1) throw (new Error(mixedArgsMsg));\n        keys = Object.keys(keys);\n        break;\n      default:\n        keys = Array.prototype.slice.call(arguments);\n    }\n\n    if (!keys.length) throw new Error('keys required');\n\n    var actual = Object.keys(obj)\n      , expected = keys\n      , len = keys.length\n      , any = flag(this, 'any')\n      , all = flag(this, 'all');\n\n    if (!any && !all) {\n      all = true;\n    }\n\n    // Has any\n    if (any) {\n      var intersection = expected.filter(function(key) {\n        return ~actual.indexOf(key);\n      });\n      ok = intersection.length > 0;\n    }\n\n    // Has all\n    if (all) {\n      ok = keys.every(function(key){\n        return ~actual.indexOf(key);\n      });\n      if (!flag(this, 'negate') && !flag(this, 'contains')) {\n        ok = ok && keys.length == actual.length;\n      }\n    }\n\n    // Key string\n    if (len > 1) {\n      keys = keys.map(function(key){\n        return _.inspect(key);\n      });\n      var last = keys.pop();\n      if (all) {\n        str = keys.join(', ') + ', and ' + last;\n      }\n      if (any) {\n        str = keys.join(', ') + ', or ' + last;\n      }\n    } else {\n      str = _.inspect(keys[0]);\n    }\n\n    // Form\n    str = (len > 1 ? 'keys ' : 'key ') + str;\n\n    // Have / include\n    str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;\n\n    // Assertion\n    this.assert(\n        ok\n      , 'expected #{this} to ' + str\n      , 'expected #{this} to not ' + str\n      , expected.slice(0).sort()\n      , actual.sort()\n      , true\n    );\n  }\n\n  Assertion.addMethod('keys', assertKeys);\n  Assertion.addMethod('key', assertKeys);\n\n  /**\n   * ### .throw(constructor)\n   *\n   * Asserts that the function target will throw a specific error, or specific type of error\n   * (as determined using `instanceof`), optionally with a RegExp or string inclusion test\n   * for the error's message.\n   *\n   *     var err = new ReferenceError('This is a bad function.');\n   *     var fn = function () { throw err; }\n   *     expect(fn).to.throw(ReferenceError);\n   *     expect(fn).to.throw(Error);\n   *     expect(fn).to.throw(/bad function/);\n   *     expect(fn).to.not.throw('good function');\n   *     expect(fn).to.throw(ReferenceError, /bad function/);\n   *     expect(fn).to.throw(err);\n   *\n   * Please note that when a throw expectation is negated, it will check each\n   * parameter independently, starting with error constructor type. The appropriate way\n   * to check for the existence of a type of error but for a message that does not match\n   * is to use `and`.\n   *\n   *     expect(fn).to.throw(ReferenceError)\n   *        .and.not.throw(/good function/);\n   *\n   * @name throw\n   * @alias throws\n   * @alias Throw\n   * @param {ErrorConstructor} constructor\n   * @param {String|RegExp} expected error message\n   * @param {String} message _optional_\n   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n   * @returns error for chaining (null if no error)\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertThrows (constructor, errMsg, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    new Assertion(obj, msg).is.a('function');\n\n    var thrown = false\n      , desiredError = null\n      , name = null\n      , thrownError = null;\n\n    if (arguments.length === 0) {\n      errMsg = null;\n      constructor = null;\n    } else if (constructor && (constructor instanceof RegExp || 'string' === typeof constructor)) {\n      errMsg = constructor;\n      constructor = null;\n    } else if (constructor && constructor instanceof Error) {\n      desiredError = constructor;\n      constructor = null;\n      errMsg = null;\n    } else if (typeof constructor === 'function') {\n      name = constructor.prototype.name;\n      if (!name || (name === 'Error' && constructor !== Error)) {\n        name = constructor.name || (new constructor()).name;\n      }\n    } else {\n      constructor = null;\n    }\n\n    try {\n      obj();\n    } catch (err) {\n      // first, check desired error\n      if (desiredError) {\n        this.assert(\n            err === desiredError\n          , 'expected #{this} to throw #{exp} but #{act} was thrown'\n          , 'expected #{this} to not throw #{exp}'\n          , (desiredError instanceof Error ? desiredError.toString() : desiredError)\n          , (err instanceof Error ? err.toString() : err)\n        );\n\n        flag(this, 'object', err);\n        return this;\n      }\n\n      // next, check constructor\n      if (constructor) {\n        this.assert(\n            err instanceof constructor\n          , 'expected #{this} to throw #{exp} but #{act} was thrown'\n          , 'expected #{this} to not throw #{exp} but #{act} was thrown'\n          , name\n          , (err instanceof Error ? err.toString() : err)\n        );\n\n        if (!errMsg) {\n          flag(this, 'object', err);\n          return this;\n        }\n      }\n\n      // next, check message\n      var message = 'error' === _.type(err) && \"message\" in err\n        ? err.message\n        : '' + err;\n\n      if ((message != null) && errMsg && errMsg instanceof RegExp) {\n        this.assert(\n            errMsg.exec(message)\n          , 'expected #{this} to throw error matching #{exp} but got #{act}'\n          , 'expected #{this} to throw error not matching #{exp}'\n          , errMsg\n          , message\n        );\n\n        flag(this, 'object', err);\n        return this;\n      } else if ((message != null) && errMsg && 'string' === typeof errMsg) {\n        this.assert(\n            ~message.indexOf(errMsg)\n          , 'expected #{this} to throw error including #{exp} but got #{act}'\n          , 'expected #{this} to throw error not including #{act}'\n          , errMsg\n          , message\n        );\n\n        flag(this, 'object', err);\n        return this;\n      } else {\n        thrown = true;\n        thrownError = err;\n      }\n    }\n\n    var actuallyGot = ''\n      , expectedThrown = name !== null\n        ? name\n        : desiredError\n          ? '#{exp}' //_.inspect(desiredError)\n          : 'an error';\n\n    if (thrown) {\n      actuallyGot = ' but #{act} was thrown'\n    }\n\n    this.assert(\n        thrown === true\n      , 'expected #{this} to throw ' + expectedThrown + actuallyGot\n      , 'expected #{this} to not throw ' + expectedThrown + actuallyGot\n      , (desiredError instanceof Error ? desiredError.toString() : desiredError)\n      , (thrownError instanceof Error ? thrownError.toString() : thrownError)\n    );\n\n    flag(this, 'object', thrownError);\n  };\n\n  Assertion.addMethod('throw', assertThrows);\n  Assertion.addMethod('throws', assertThrows);\n  Assertion.addMethod('Throw', assertThrows);\n\n  /**\n   * ### .respondTo(method)\n   *\n   * Asserts that the object or class target will respond to a method.\n   *\n   *     Klass.prototype.bar = function(){};\n   *     expect(Klass).to.respondTo('bar');\n   *     expect(obj).to.respondTo('bar');\n   *\n   * To check if a constructor will respond to a static function,\n   * set the `itself` flag.\n   *\n   *     Klass.baz = function(){};\n   *     expect(Klass).itself.to.respondTo('baz');\n   *\n   * @name respondTo\n   * @alias respondsTo\n   * @param {String} method\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function respondTo (method, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object')\n      , itself = flag(this, 'itself')\n      , context = ('function' === _.type(obj) && !itself)\n        ? obj.prototype[method]\n        : obj[method];\n\n    this.assert(\n        'function' === typeof context\n      , 'expected #{this} to respond to ' + _.inspect(method)\n      , 'expected #{this} to not respond to ' + _.inspect(method)\n    );\n  }\n\n  Assertion.addMethod('respondTo', respondTo);\n  Assertion.addMethod('respondsTo', respondTo);\n\n  /**\n   * ### .itself\n   *\n   * Sets the `itself` flag, later used by the `respondTo` assertion.\n   *\n   *     function Foo() {}\n   *     Foo.bar = function() {}\n   *     Foo.prototype.baz = function() {}\n   *\n   *     expect(Foo).itself.to.respondTo('bar');\n   *     expect(Foo).itself.not.to.respondTo('baz');\n   *\n   * @name itself\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('itself', function () {\n    flag(this, 'itself', true);\n  });\n\n  /**\n   * ### .satisfy(method)\n   *\n   * Asserts that the target passes a given truth test.\n   *\n   *     expect(1).to.satisfy(function(num) { return num > 0; });\n   *\n   * @name satisfy\n   * @alias satisfies\n   * @param {Function} matcher\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function satisfy (matcher, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n    var result = matcher(obj);\n    this.assert(\n        result\n      , 'expected #{this} to satisfy ' + _.objDisplay(matcher)\n      , 'expected #{this} to not satisfy' + _.objDisplay(matcher)\n      , this.negate ? false : true\n      , result\n    );\n  }\n\n  Assertion.addMethod('satisfy', satisfy);\n  Assertion.addMethod('satisfies', satisfy);\n\n  /**\n   * ### .closeTo(expected, delta)\n   *\n   * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n   *\n   *     expect(1.5).to.be.closeTo(1, 0.5);\n   *\n   * @name closeTo\n   * @alias approximately\n   * @param {Number} expected\n   * @param {Number} delta\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function closeTo(expected, delta, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n\n    new Assertion(obj, msg).is.a('number');\n    if (_.type(expected) !== 'number' || _.type(delta) !== 'number') {\n      throw new Error('the arguments to closeTo or approximately must be numbers');\n    }\n\n    this.assert(\n        Math.abs(obj - expected) <= delta\n      , 'expected #{this} to be close to ' + expected + ' +/- ' + delta\n      , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta\n    );\n  }\n\n  Assertion.addMethod('closeTo', closeTo);\n  Assertion.addMethod('approximately', closeTo);\n\n  function isSubsetOf(subset, superset, cmp) {\n    return subset.every(function(elem) {\n      if (!cmp) return superset.indexOf(elem) !== -1;\n\n      return superset.some(function(elem2) {\n        return cmp(elem, elem2);\n      });\n    })\n  }\n\n  /**\n   * ### .members(set)\n   *\n   * Asserts that the target is a superset of `set`,\n   * or that the target and `set` have the same strictly-equal (===) members.\n   * Alternately, if the `deep` flag is set, set members are compared for deep\n   * equality.\n   *\n   *     expect([1, 2, 3]).to.include.members([3, 2]);\n   *     expect([1, 2, 3]).to.not.include.members([3, 2, 8]);\n   *\n   *     expect([4, 2]).to.have.members([2, 4]);\n   *     expect([5, 2]).to.not.have.members([5, 2, 1]);\n   *\n   *     expect([{ id: 1 }]).to.deep.include.members([{ id: 1 }]);\n   *\n   * @name members\n   * @param {Array} set\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addMethod('members', function (subset, msg) {\n    if (msg) flag(this, 'message', msg);\n    var obj = flag(this, 'object');\n\n    new Assertion(obj).to.be.an('array');\n    new Assertion(subset).to.be.an('array');\n\n    var cmp = flag(this, 'deep') ? _.eql : undefined;\n\n    if (flag(this, 'contains')) {\n      return this.assert(\n          isSubsetOf(subset, obj, cmp)\n        , 'expected #{this} to be a superset of #{act}'\n        , 'expected #{this} to not be a superset of #{act}'\n        , obj\n        , subset\n      );\n    }\n\n    this.assert(\n        isSubsetOf(obj, subset, cmp) && isSubsetOf(subset, obj, cmp)\n        , 'expected #{this} to have the same members as #{act}'\n        , 'expected #{this} to not have the same members as #{act}'\n        , obj\n        , subset\n    );\n  });\n\n  /**\n   * ### .oneOf(list)\n   *\n   * Assert that a value appears somewhere in the top level of array `list`.\n   *\n   *     expect('a').to.be.oneOf(['a', 'b', 'c']);\n   *     expect(9).to.not.be.oneOf(['z']);\n   *     expect([3]).to.not.be.oneOf([1, 2, [3]]);\n   *\n   *     var three = [3];\n   *     // for object-types, contents are not compared\n   *     expect(three).to.not.be.oneOf([1, 2, [3]]);\n   *     // comparing references works\n   *     expect(three).to.be.oneOf([1, 2, three]);\n   *\n   * @name oneOf\n   * @param {Array<*>} list\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function oneOf (list, msg) {\n    if (msg) flag(this, 'message', msg);\n    var expected = flag(this, 'object');\n    new Assertion(list).to.be.an('array');\n\n    this.assert(\n        list.indexOf(expected) > -1\n      , 'expected #{this} to be one of #{exp}'\n      , 'expected #{this} to not be one of #{exp}'\n      , list\n      , expected\n    );\n  }\n\n  Assertion.addMethod('oneOf', oneOf);\n\n\n  /**\n   * ### .change(function)\n   *\n   * Asserts that a function changes an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val += 3 };\n   *     var noChangeFn = function() { return 'foo' + 'bar'; }\n   *     expect(fn).to.change(obj, 'val');\n   *     expect(noChangeFn).to.not.change(obj, 'val')\n   *\n   * @name change\n   * @alias changes\n   * @alias Change\n   * @param {String} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertChanges (object, prop, msg) {\n    if (msg) flag(this, 'message', msg);\n    var fn = flag(this, 'object');\n    new Assertion(object, msg).to.have.property(prop);\n    new Assertion(fn).is.a('function');\n\n    var initial = object[prop];\n    fn();\n\n    this.assert(\n      initial !== object[prop]\n      , 'expected .' + prop + ' to change'\n      , 'expected .' + prop + ' to not change'\n    );\n  }\n\n  Assertion.addChainableMethod('change', assertChanges);\n  Assertion.addChainableMethod('changes', assertChanges);\n\n  /**\n   * ### .increase(function)\n   *\n   * Asserts that a function increases an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 15 };\n   *     expect(fn).to.increase(obj, 'val');\n   *\n   * @name increase\n   * @alias increases\n   * @alias Increase\n   * @param {String} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertIncreases (object, prop, msg) {\n    if (msg) flag(this, 'message', msg);\n    var fn = flag(this, 'object');\n    new Assertion(object, msg).to.have.property(prop);\n    new Assertion(fn).is.a('function');\n\n    var initial = object[prop];\n    fn();\n\n    this.assert(\n      object[prop] - initial > 0\n      , 'expected .' + prop + ' to increase'\n      , 'expected .' + prop + ' to not increase'\n    );\n  }\n\n  Assertion.addChainableMethod('increase', assertIncreases);\n  Assertion.addChainableMethod('increases', assertIncreases);\n\n  /**\n   * ### .decrease(function)\n   *\n   * Asserts that a function decreases an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 5 };\n   *     expect(fn).to.decrease(obj, 'val');\n   *\n   * @name decrease\n   * @alias decreases\n   * @alias Decrease\n   * @param {String} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace BDD\n   * @api public\n   */\n\n  function assertDecreases (object, prop, msg) {\n    if (msg) flag(this, 'message', msg);\n    var fn = flag(this, 'object');\n    new Assertion(object, msg).to.have.property(prop);\n    new Assertion(fn).is.a('function');\n\n    var initial = object[prop];\n    fn();\n\n    this.assert(\n      object[prop] - initial < 0\n      , 'expected .' + prop + ' to decrease'\n      , 'expected .' + prop + ' to not decrease'\n    );\n  }\n\n  Assertion.addChainableMethod('decrease', assertDecreases);\n  Assertion.addChainableMethod('decreases', assertDecreases);\n\n  /**\n   * ### .extensible\n   *\n   * Asserts that the target is extensible (can have new properties added to\n   * it).\n   *\n   *     var nonExtensibleObject = Object.preventExtensions({});\n   *     var sealedObject = Object.seal({});\n   *     var frozenObject = Object.freeze({});\n   *\n   *     expect({}).to.be.extensible;\n   *     expect(nonExtensibleObject).to.not.be.extensible;\n   *     expect(sealedObject).to.not.be.extensible;\n   *     expect(frozenObject).to.not.be.extensible;\n   *\n   * @name extensible\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('extensible', function() {\n    var obj = flag(this, 'object');\n\n    // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n    // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false.\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible\n    // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n    var isExtensible;\n\n    try {\n      isExtensible = Object.isExtensible(obj);\n    } catch (err) {\n      if (err instanceof TypeError) isExtensible = false;\n      else throw err;\n    }\n\n    this.assert(\n      isExtensible\n      , 'expected #{this} to be extensible'\n      , 'expected #{this} to not be extensible'\n    );\n  });\n\n  /**\n   * ### .sealed\n   *\n   * Asserts that the target is sealed (cannot have new properties added to it\n   * and its existing properties cannot be removed).\n   *\n   *     var sealedObject = Object.seal({});\n   *     var frozenObject = Object.freeze({});\n   *\n   *     expect(sealedObject).to.be.sealed;\n   *     expect(frozenObject).to.be.sealed;\n   *     expect({}).to.not.be.sealed;\n   *\n   * @name sealed\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('sealed', function() {\n    var obj = flag(this, 'object');\n\n    // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n    // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true.\n    // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed\n    // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n    var isSealed;\n\n    try {\n      isSealed = Object.isSealed(obj);\n    } catch (err) {\n      if (err instanceof TypeError) isSealed = true;\n      else throw err;\n    }\n\n    this.assert(\n      isSealed\n      , 'expected #{this} to be sealed'\n      , 'expected #{this} to not be sealed'\n    );\n  });\n\n  /**\n   * ### .frozen\n   *\n   * Asserts that the target is frozen (cannot have new properties added to it\n   * and its existing properties cannot be modified).\n   *\n   *     var frozenObject = Object.freeze({});\n   *\n   *     expect(frozenObject).to.be.frozen;\n   *     expect({}).to.not.be.frozen;\n   *\n   * @name frozen\n   * @namespace BDD\n   * @api public\n   */\n\n  Assertion.addProperty('frozen', function() {\n    var obj = flag(this, 'object');\n\n    // In ES5, if the argument to this method is not an object (a primitive), then it will cause a TypeError.\n    // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true.\n    // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen\n    // The following provides ES6 behavior when a TypeError is thrown under ES5.\n\n    var isFrozen;\n\n    try {\n      isFrozen = Object.isFrozen(obj);\n    } catch (err) {\n      if (err instanceof TypeError) isFrozen = true;\n      else throw err;\n    }\n\n    this.assert(\n      isFrozen\n      , 'expected #{this} to be frozen'\n      , 'expected #{this} to not be frozen'\n    );\n  });\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n\nmodule.exports = function (chai, util) {\n\n  /*!\n   * Chai dependencies.\n   */\n\n  var Assertion = chai.Assertion\n    , flag = util.flag;\n\n  /*!\n   * Module export.\n   */\n\n  /**\n   * ### assert(expression, message)\n   *\n   * Write your own test expressions.\n   *\n   *     assert('foo' !== 'bar', 'foo is not bar');\n   *     assert(Array.isArray([]), 'empty arrays are arrays');\n   *\n   * @param {Mixed} expression to test for truthiness\n   * @param {String} message to display on error\n   * @name assert\n   * @namespace Assert\n   * @api public\n   */\n\n  var assert = chai.assert = function (express, errmsg) {\n    var test = new Assertion(null, null, chai.assert);\n    test.assert(\n        express\n      , errmsg\n      , '[ negation message unavailable ]'\n    );\n  };\n\n  /**\n   * ### .fail(actual, expected, [message], [operator])\n   *\n   * Throw a failure. Node.js `assert` module-compatible.\n   *\n   * @name fail\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @param {String} operator\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.fail = function (actual, expected, message, operator) {\n    message = message || 'assert.fail()';\n    throw new chai.AssertionError(message, {\n        actual: actual\n      , expected: expected\n      , operator: operator\n    }, assert.fail);\n  };\n\n  /**\n   * ### .isOk(object, [message])\n   *\n   * Asserts that `object` is truthy.\n   *\n   *     assert.isOk('everything', 'everything is ok');\n   *     assert.isOk(false, 'this will fail');\n   *\n   * @name isOk\n   * @alias ok\n   * @param {Mixed} object to test\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isOk = function (val, msg) {\n    new Assertion(val, msg).is.ok;\n  };\n\n  /**\n   * ### .isNotOk(object, [message])\n   *\n   * Asserts that `object` is falsy.\n   *\n   *     assert.isNotOk('everything', 'this will fail');\n   *     assert.isNotOk(false, 'this will pass');\n   *\n   * @name isNotOk\n   * @alias notOk\n   * @param {Mixed} object to test\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotOk = function (val, msg) {\n    new Assertion(val, msg).is.not.ok;\n  };\n\n  /**\n   * ### .equal(actual, expected, [message])\n   *\n   * Asserts non-strict equality (`==`) of `actual` and `expected`.\n   *\n   *     assert.equal(3, '3', '== coerces values to strings');\n   *\n   * @name equal\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.equal = function (act, exp, msg) {\n    var test = new Assertion(act, msg, assert.equal);\n\n    test.assert(\n        exp == flag(test, 'object')\n      , 'expected #{this} to equal #{exp}'\n      , 'expected #{this} to not equal #{act}'\n      , exp\n      , act\n    );\n  };\n\n  /**\n   * ### .notEqual(actual, expected, [message])\n   *\n   * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n   *\n   *     assert.notEqual(3, 4, 'these numbers are not equal');\n   *\n   * @name notEqual\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notEqual = function (act, exp, msg) {\n    var test = new Assertion(act, msg, assert.notEqual);\n\n    test.assert(\n        exp != flag(test, 'object')\n      , 'expected #{this} to not equal #{exp}'\n      , 'expected #{this} to equal #{act}'\n      , exp\n      , act\n    );\n  };\n\n  /**\n   * ### .strictEqual(actual, expected, [message])\n   *\n   * Asserts strict equality (`===`) of `actual` and `expected`.\n   *\n   *     assert.strictEqual(true, true, 'these booleans are strictly equal');\n   *\n   * @name strictEqual\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.strictEqual = function (act, exp, msg) {\n    new Assertion(act, msg).to.equal(exp);\n  };\n\n  /**\n   * ### .notStrictEqual(actual, expected, [message])\n   *\n   * Asserts strict inequality (`!==`) of `actual` and `expected`.\n   *\n   *     assert.notStrictEqual(3, '3', 'no coercion for strict equality');\n   *\n   * @name notStrictEqual\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notStrictEqual = function (act, exp, msg) {\n    new Assertion(act, msg).to.not.equal(exp);\n  };\n\n  /**\n   * ### .deepEqual(actual, expected, [message])\n   *\n   * Asserts that `actual` is deeply equal to `expected`.\n   *\n   *     assert.deepEqual({ tea: 'green' }, { tea: 'green' });\n   *\n   * @name deepEqual\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.deepEqual = function (act, exp, msg) {\n    new Assertion(act, msg).to.eql(exp);\n  };\n\n  /**\n   * ### .notDeepEqual(actual, expected, [message])\n   *\n   * Assert that `actual` is not deeply equal to `expected`.\n   *\n   *     assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });\n   *\n   * @name notDeepEqual\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notDeepEqual = function (act, exp, msg) {\n    new Assertion(act, msg).to.not.eql(exp);\n  };\n\n   /**\n   * ### .isAbove(valueToCheck, valueToBeAbove, [message])\n   *\n   * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`\n   *\n   *     assert.isAbove(5, 2, '5 is strictly greater than 2');\n   *\n   * @name isAbove\n   * @param {Mixed} valueToCheck\n   * @param {Mixed} valueToBeAbove\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isAbove = function (val, abv, msg) {\n    new Assertion(val, msg).to.be.above(abv);\n  };\n\n   /**\n   * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message])\n   *\n   * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`\n   *\n   *     assert.isAtLeast(5, 2, '5 is greater or equal to 2');\n   *     assert.isAtLeast(3, 3, '3 is greater or equal to 3');\n   *\n   * @name isAtLeast\n   * @param {Mixed} valueToCheck\n   * @param {Mixed} valueToBeAtLeast\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isAtLeast = function (val, atlst, msg) {\n    new Assertion(val, msg).to.be.least(atlst);\n  };\n\n   /**\n   * ### .isBelow(valueToCheck, valueToBeBelow, [message])\n   *\n   * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`\n   *\n   *     assert.isBelow(3, 6, '3 is strictly less than 6');\n   *\n   * @name isBelow\n   * @param {Mixed} valueToCheck\n   * @param {Mixed} valueToBeBelow\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isBelow = function (val, blw, msg) {\n    new Assertion(val, msg).to.be.below(blw);\n  };\n\n   /**\n   * ### .isAtMost(valueToCheck, valueToBeAtMost, [message])\n   *\n   * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`\n   *\n   *     assert.isAtMost(3, 6, '3 is less than or equal to 6');\n   *     assert.isAtMost(4, 4, '4 is less than or equal to 4');\n   *\n   * @name isAtMost\n   * @param {Mixed} valueToCheck\n   * @param {Mixed} valueToBeAtMost\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isAtMost = function (val, atmst, msg) {\n    new Assertion(val, msg).to.be.most(atmst);\n  };\n\n  /**\n   * ### .isTrue(value, [message])\n   *\n   * Asserts that `value` is true.\n   *\n   *     var teaServed = true;\n   *     assert.isTrue(teaServed, 'the tea has been served');\n   *\n   * @name isTrue\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isTrue = function (val, msg) {\n    new Assertion(val, msg).is['true'];\n  };\n\n  /**\n   * ### .isNotTrue(value, [message])\n   *\n   * Asserts that `value` is not true.\n   *\n   *     var tea = 'tasty chai';\n   *     assert.isNotTrue(tea, 'great, time for tea!');\n   *\n   * @name isNotTrue\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotTrue = function (val, msg) {\n    new Assertion(val, msg).to.not.equal(true);\n  };\n\n  /**\n   * ### .isFalse(value, [message])\n   *\n   * Asserts that `value` is false.\n   *\n   *     var teaServed = false;\n   *     assert.isFalse(teaServed, 'no tea yet? hmm...');\n   *\n   * @name isFalse\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isFalse = function (val, msg) {\n    new Assertion(val, msg).is['false'];\n  };\n\n  /**\n   * ### .isNotFalse(value, [message])\n   *\n   * Asserts that `value` is not false.\n   *\n   *     var tea = 'tasty chai';\n   *     assert.isNotFalse(tea, 'great, time for tea!');\n   *\n   * @name isNotFalse\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotFalse = function (val, msg) {\n    new Assertion(val, msg).to.not.equal(false);\n  };\n\n  /**\n   * ### .isNull(value, [message])\n   *\n   * Asserts that `value` is null.\n   *\n   *     assert.isNull(err, 'there was no error');\n   *\n   * @name isNull\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNull = function (val, msg) {\n    new Assertion(val, msg).to.equal(null);\n  };\n\n  /**\n   * ### .isNotNull(value, [message])\n   *\n   * Asserts that `value` is not null.\n   *\n   *     var tea = 'tasty chai';\n   *     assert.isNotNull(tea, 'great, time for tea!');\n   *\n   * @name isNotNull\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotNull = function (val, msg) {\n    new Assertion(val, msg).to.not.equal(null);\n  };\n\n  /**\n   * ### .isNaN\n   * Asserts that value is NaN\n   *\n   *    assert.isNaN('foo', 'foo is NaN');\n   *\n   * @name isNaN\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNaN = function (val, msg) {\n    new Assertion(val, msg).to.be.NaN;\n  };\n\n  /**\n   * ### .isNotNaN\n   * Asserts that value is not NaN\n   *\n   *    assert.isNotNaN(4, '4 is not NaN');\n   *\n   * @name isNotNaN\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n  assert.isNotNaN = function (val, msg) {\n    new Assertion(val, msg).not.to.be.NaN;\n  };\n\n  /**\n   * ### .isUndefined(value, [message])\n   *\n   * Asserts that `value` is `undefined`.\n   *\n   *     var tea;\n   *     assert.isUndefined(tea, 'no tea defined');\n   *\n   * @name isUndefined\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isUndefined = function (val, msg) {\n    new Assertion(val, msg).to.equal(undefined);\n  };\n\n  /**\n   * ### .isDefined(value, [message])\n   *\n   * Asserts that `value` is not `undefined`.\n   *\n   *     var tea = 'cup of chai';\n   *     assert.isDefined(tea, 'tea has been defined');\n   *\n   * @name isDefined\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isDefined = function (val, msg) {\n    new Assertion(val, msg).to.not.equal(undefined);\n  };\n\n  /**\n   * ### .isFunction(value, [message])\n   *\n   * Asserts that `value` is a function.\n   *\n   *     function serveTea() { return 'cup of tea'; };\n   *     assert.isFunction(serveTea, 'great, we can have tea now');\n   *\n   * @name isFunction\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isFunction = function (val, msg) {\n    new Assertion(val, msg).to.be.a('function');\n  };\n\n  /**\n   * ### .isNotFunction(value, [message])\n   *\n   * Asserts that `value` is _not_ a function.\n   *\n   *     var serveTea = [ 'heat', 'pour', 'sip' ];\n   *     assert.isNotFunction(serveTea, 'great, we have listed the steps');\n   *\n   * @name isNotFunction\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotFunction = function (val, msg) {\n    new Assertion(val, msg).to.not.be.a('function');\n  };\n\n  /**\n   * ### .isObject(value, [message])\n   *\n   * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`).\n   * _The assertion does not match subclassed objects._\n   *\n   *     var selection = { name: 'Chai', serve: 'with spices' };\n   *     assert.isObject(selection, 'tea selection is an object');\n   *\n   * @name isObject\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isObject = function (val, msg) {\n    new Assertion(val, msg).to.be.a('object');\n  };\n\n  /**\n   * ### .isNotObject(value, [message])\n   *\n   * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`).\n   *\n   *     var selection = 'chai'\n   *     assert.isNotObject(selection, 'tea selection is not an object');\n   *     assert.isNotObject(null, 'null is not an object');\n   *\n   * @name isNotObject\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotObject = function (val, msg) {\n    new Assertion(val, msg).to.not.be.a('object');\n  };\n\n  /**\n   * ### .isArray(value, [message])\n   *\n   * Asserts that `value` is an array.\n   *\n   *     var menu = [ 'green', 'chai', 'oolong' ];\n   *     assert.isArray(menu, 'what kind of tea do we want?');\n   *\n   * @name isArray\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isArray = function (val, msg) {\n    new Assertion(val, msg).to.be.an('array');\n  };\n\n  /**\n   * ### .isNotArray(value, [message])\n   *\n   * Asserts that `value` is _not_ an array.\n   *\n   *     var menu = 'green|chai|oolong';\n   *     assert.isNotArray(menu, 'what kind of tea do we want?');\n   *\n   * @name isNotArray\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotArray = function (val, msg) {\n    new Assertion(val, msg).to.not.be.an('array');\n  };\n\n  /**\n   * ### .isString(value, [message])\n   *\n   * Asserts that `value` is a string.\n   *\n   *     var teaOrder = 'chai';\n   *     assert.isString(teaOrder, 'order placed');\n   *\n   * @name isString\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isString = function (val, msg) {\n    new Assertion(val, msg).to.be.a('string');\n  };\n\n  /**\n   * ### .isNotString(value, [message])\n   *\n   * Asserts that `value` is _not_ a string.\n   *\n   *     var teaOrder = 4;\n   *     assert.isNotString(teaOrder, 'order placed');\n   *\n   * @name isNotString\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotString = function (val, msg) {\n    new Assertion(val, msg).to.not.be.a('string');\n  };\n\n  /**\n   * ### .isNumber(value, [message])\n   *\n   * Asserts that `value` is a number.\n   *\n   *     var cups = 2;\n   *     assert.isNumber(cups, 'how many cups');\n   *\n   * @name isNumber\n   * @param {Number} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNumber = function (val, msg) {\n    new Assertion(val, msg).to.be.a('number');\n  };\n\n  /**\n   * ### .isNotNumber(value, [message])\n   *\n   * Asserts that `value` is _not_ a number.\n   *\n   *     var cups = '2 cups please';\n   *     assert.isNotNumber(cups, 'how many cups');\n   *\n   * @name isNotNumber\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotNumber = function (val, msg) {\n    new Assertion(val, msg).to.not.be.a('number');\n  };\n\n  /**\n   * ### .isBoolean(value, [message])\n   *\n   * Asserts that `value` is a boolean.\n   *\n   *     var teaReady = true\n   *       , teaServed = false;\n   *\n   *     assert.isBoolean(teaReady, 'is the tea ready');\n   *     assert.isBoolean(teaServed, 'has tea been served');\n   *\n   * @name isBoolean\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isBoolean = function (val, msg) {\n    new Assertion(val, msg).to.be.a('boolean');\n  };\n\n  /**\n   * ### .isNotBoolean(value, [message])\n   *\n   * Asserts that `value` is _not_ a boolean.\n   *\n   *     var teaReady = 'yep'\n   *       , teaServed = 'nope';\n   *\n   *     assert.isNotBoolean(teaReady, 'is the tea ready');\n   *     assert.isNotBoolean(teaServed, 'has tea been served');\n   *\n   * @name isNotBoolean\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotBoolean = function (val, msg) {\n    new Assertion(val, msg).to.not.be.a('boolean');\n  };\n\n  /**\n   * ### .typeOf(value, name, [message])\n   *\n   * Asserts that `value`'s type is `name`, as determined by\n   * `Object.prototype.toString`.\n   *\n   *     assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');\n   *     assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');\n   *     assert.typeOf('tea', 'string', 'we have a string');\n   *     assert.typeOf(/tea/, 'regexp', 'we have a regular expression');\n   *     assert.typeOf(null, 'null', 'we have a null');\n   *     assert.typeOf(undefined, 'undefined', 'we have an undefined');\n   *\n   * @name typeOf\n   * @param {Mixed} value\n   * @param {String} name\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.typeOf = function (val, type, msg) {\n    new Assertion(val, msg).to.be.a(type);\n  };\n\n  /**\n   * ### .notTypeOf(value, name, [message])\n   *\n   * Asserts that `value`'s type is _not_ `name`, as determined by\n   * `Object.prototype.toString`.\n   *\n   *     assert.notTypeOf('tea', 'number', 'strings are not numbers');\n   *\n   * @name notTypeOf\n   * @param {Mixed} value\n   * @param {String} typeof name\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notTypeOf = function (val, type, msg) {\n    new Assertion(val, msg).to.not.be.a(type);\n  };\n\n  /**\n   * ### .instanceOf(object, constructor, [message])\n   *\n   * Asserts that `value` is an instance of `constructor`.\n   *\n   *     var Tea = function (name) { this.name = name; }\n   *       , chai = new Tea('chai');\n   *\n   *     assert.instanceOf(chai, Tea, 'chai is an instance of tea');\n   *\n   * @name instanceOf\n   * @param {Object} object\n   * @param {Constructor} constructor\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.instanceOf = function (val, type, msg) {\n    new Assertion(val, msg).to.be.instanceOf(type);\n  };\n\n  /**\n   * ### .notInstanceOf(object, constructor, [message])\n   *\n   * Asserts `value` is not an instance of `constructor`.\n   *\n   *     var Tea = function (name) { this.name = name; }\n   *       , chai = new String('chai');\n   *\n   *     assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');\n   *\n   * @name notInstanceOf\n   * @param {Object} object\n   * @param {Constructor} constructor\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notInstanceOf = function (val, type, msg) {\n    new Assertion(val, msg).to.not.be.instanceOf(type);\n  };\n\n  /**\n   * ### .include(haystack, needle, [message])\n   *\n   * Asserts that `haystack` includes `needle`. Works\n   * for strings and arrays.\n   *\n   *     assert.include('foobar', 'bar', 'foobar contains string \"bar\"');\n   *     assert.include([ 1, 2, 3 ], 3, 'array contains value');\n   *\n   * @name include\n   * @param {Array|String} haystack\n   * @param {Mixed} needle\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.include = function (exp, inc, msg) {\n    new Assertion(exp, msg, assert.include).include(inc);\n  };\n\n  /**\n   * ### .notInclude(haystack, needle, [message])\n   *\n   * Asserts that `haystack` does not include `needle`. Works\n   * for strings and arrays.\n   *\n   *     assert.notInclude('foobar', 'baz', 'string not include substring');\n   *     assert.notInclude([ 1, 2, 3 ], 4, 'array not include contain value');\n   *\n   * @name notInclude\n   * @param {Array|String} haystack\n   * @param {Mixed} needle\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notInclude = function (exp, inc, msg) {\n    new Assertion(exp, msg, assert.notInclude).not.include(inc);\n  };\n\n  /**\n   * ### .match(value, regexp, [message])\n   *\n   * Asserts that `value` matches the regular expression `regexp`.\n   *\n   *     assert.match('foobar', /^foo/, 'regexp matches');\n   *\n   * @name match\n   * @param {Mixed} value\n   * @param {RegExp} regexp\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.match = function (exp, re, msg) {\n    new Assertion(exp, msg).to.match(re);\n  };\n\n  /**\n   * ### .notMatch(value, regexp, [message])\n   *\n   * Asserts that `value` does not match the regular expression `regexp`.\n   *\n   *     assert.notMatch('foobar', /^foo/, 'regexp does not match');\n   *\n   * @name notMatch\n   * @param {Mixed} value\n   * @param {RegExp} regexp\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notMatch = function (exp, re, msg) {\n    new Assertion(exp, msg).to.not.match(re);\n  };\n\n  /**\n   * ### .property(object, property, [message])\n   *\n   * Asserts that `object` has a property named by `property`.\n   *\n   *     assert.property({ tea: { green: 'matcha' }}, 'tea');\n   *\n   * @name property\n   * @param {Object} object\n   * @param {String} property\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.property = function (obj, prop, msg) {\n    new Assertion(obj, msg).to.have.property(prop);\n  };\n\n  /**\n   * ### .notProperty(object, property, [message])\n   *\n   * Asserts that `object` does _not_ have a property named by `property`.\n   *\n   *     assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');\n   *\n   * @name notProperty\n   * @param {Object} object\n   * @param {String} property\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notProperty = function (obj, prop, msg) {\n    new Assertion(obj, msg).to.not.have.property(prop);\n  };\n\n  /**\n   * ### .deepProperty(object, property, [message])\n   *\n   * Asserts that `object` has a property named by `property`, which can be a\n   * string using dot- and bracket-notation for deep reference.\n   *\n   *     assert.deepProperty({ tea: { green: 'matcha' }}, 'tea.green');\n   *\n   * @name deepProperty\n   * @param {Object} object\n   * @param {String} property\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.deepProperty = function (obj, prop, msg) {\n    new Assertion(obj, msg).to.have.deep.property(prop);\n  };\n\n  /**\n   * ### .notDeepProperty(object, property, [message])\n   *\n   * Asserts that `object` does _not_ have a property named by `property`, which\n   * can be a string using dot- and bracket-notation for deep reference.\n   *\n   *     assert.notDeepProperty({ tea: { green: 'matcha' }}, 'tea.oolong');\n   *\n   * @name notDeepProperty\n   * @param {Object} object\n   * @param {String} property\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.notDeepProperty = function (obj, prop, msg) {\n    new Assertion(obj, msg).to.not.have.deep.property(prop);\n  };\n\n  /**\n   * ### .propertyVal(object, property, value, [message])\n   *\n   * Asserts that `object` has a property named by `property` with value given\n   * by `value`.\n   *\n   *     assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');\n   *\n   * @name propertyVal\n   * @param {Object} object\n   * @param {String} property\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.propertyVal = function (obj, prop, val, msg) {\n    new Assertion(obj, msg).to.have.property(prop, val);\n  };\n\n  /**\n   * ### .propertyNotVal(object, property, value, [message])\n   *\n   * Asserts that `object` has a property named by `property`, but with a value\n   * different from that given by `value`.\n   *\n   *     assert.propertyNotVal({ tea: 'is good' }, 'tea', 'is bad');\n   *\n   * @name propertyNotVal\n   * @param {Object} object\n   * @param {String} property\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.propertyNotVal = function (obj, prop, val, msg) {\n    new Assertion(obj, msg).to.not.have.property(prop, val);\n  };\n\n  /**\n   * ### .deepPropertyVal(object, property, value, [message])\n   *\n   * Asserts that `object` has a property named by `property` with value given\n   * by `value`. `property` can use dot- and bracket-notation for deep\n   * reference.\n   *\n   *     assert.deepPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');\n   *\n   * @name deepPropertyVal\n   * @param {Object} object\n   * @param {String} property\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.deepPropertyVal = function (obj, prop, val, msg) {\n    new Assertion(obj, msg).to.have.deep.property(prop, val);\n  };\n\n  /**\n   * ### .deepPropertyNotVal(object, property, value, [message])\n   *\n   * Asserts that `object` has a property named by `property`, but with a value\n   * different from that given by `value`. `property` can use dot- and\n   * bracket-notation for deep reference.\n   *\n   *     assert.deepPropertyNotVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');\n   *\n   * @name deepPropertyNotVal\n   * @param {Object} object\n   * @param {String} property\n   * @param {Mixed} value\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.deepPropertyNotVal = function (obj, prop, val, msg) {\n    new Assertion(obj, msg).to.not.have.deep.property(prop, val);\n  };\n\n  /**\n   * ### .lengthOf(object, length, [message])\n   *\n   * Asserts that `object` has a `length` property with the expected value.\n   *\n   *     assert.lengthOf([1,2,3], 3, 'array has length of 3');\n   *     assert.lengthOf('foobar', 6, 'string has length of 6');\n   *\n   * @name lengthOf\n   * @param {Mixed} object\n   * @param {Number} length\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.lengthOf = function (exp, len, msg) {\n    new Assertion(exp, msg).to.have.length(len);\n  };\n\n  /**\n   * ### .throws(function, [constructor/string/regexp], [string/regexp], [message])\n   *\n   * Asserts that `function` will throw an error that is an instance of\n   * `constructor`, or alternately that it will throw an error with message\n   * matching `regexp`.\n   *\n   *     assert.throws(fn, 'function throws a reference error');\n   *     assert.throws(fn, /function throws a reference error/);\n   *     assert.throws(fn, ReferenceError);\n   *     assert.throws(fn, ReferenceError, 'function throws a reference error');\n   *     assert.throws(fn, ReferenceError, /function throws a reference error/);\n   *\n   * @name throws\n   * @alias throw\n   * @alias Throw\n   * @param {Function} function\n   * @param {ErrorConstructor} constructor\n   * @param {RegExp} regexp\n   * @param {String} message\n   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.throws = function (fn, errt, errs, msg) {\n    if ('string' === typeof errt || errt instanceof RegExp) {\n      errs = errt;\n      errt = null;\n    }\n\n    var assertErr = new Assertion(fn, msg).to.throw(errt, errs);\n    return flag(assertErr, 'object');\n  };\n\n  /**\n   * ### .doesNotThrow(function, [constructor/regexp], [message])\n   *\n   * Asserts that `function` will _not_ throw an error that is an instance of\n   * `constructor`, or alternately that it will not throw an error with message\n   * matching `regexp`.\n   *\n   *     assert.doesNotThrow(fn, Error, 'function does not throw');\n   *\n   * @name doesNotThrow\n   * @param {Function} function\n   * @param {ErrorConstructor} constructor\n   * @param {RegExp} regexp\n   * @param {String} message\n   * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.doesNotThrow = function (fn, type, msg) {\n    if ('string' === typeof type) {\n      msg = type;\n      type = null;\n    }\n\n    new Assertion(fn, msg).to.not.Throw(type);\n  };\n\n  /**\n   * ### .operator(val1, operator, val2, [message])\n   *\n   * Compares two values using `operator`.\n   *\n   *     assert.operator(1, '<', 2, 'everything is ok');\n   *     assert.operator(1, '>', 2, 'this will fail');\n   *\n   * @name operator\n   * @param {Mixed} val1\n   * @param {String} operator\n   * @param {Mixed} val2\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.operator = function (val, operator, val2, msg) {\n    var ok;\n    switch(operator) {\n      case '==':\n        ok = val == val2;\n        break;\n      case '===':\n        ok = val === val2;\n        break;\n      case '>':\n        ok = val > val2;\n        break;\n      case '>=':\n        ok = val >= val2;\n        break;\n      case '<':\n        ok = val < val2;\n        break;\n      case '<=':\n        ok = val <= val2;\n        break;\n      case '!=':\n        ok = val != val2;\n        break;\n      case '!==':\n        ok = val !== val2;\n        break;\n      default:\n        throw new Error('Invalid operator \"' + operator + '\"');\n    }\n    var test = new Assertion(ok, msg);\n    test.assert(\n        true === flag(test, 'object')\n      , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)\n      , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );\n  };\n\n  /**\n   * ### .closeTo(actual, expected, delta, [message])\n   *\n   * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n   *\n   *     assert.closeTo(1.5, 1, 0.5, 'numbers are close');\n   *\n   * @name closeTo\n   * @param {Number} actual\n   * @param {Number} expected\n   * @param {Number} delta\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.closeTo = function (act, exp, delta, msg) {\n    new Assertion(act, msg).to.be.closeTo(exp, delta);\n  };\n\n  /**\n   * ### .approximately(actual, expected, delta, [message])\n   *\n   * Asserts that the target is equal `expected`, to within a +/- `delta` range.\n   *\n   *     assert.approximately(1.5, 1, 0.5, 'numbers are close');\n   *\n   * @name approximately\n   * @param {Number} actual\n   * @param {Number} expected\n   * @param {Number} delta\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.approximately = function (act, exp, delta, msg) {\n    new Assertion(act, msg).to.be.approximately(exp, delta);\n  };\n\n  /**\n   * ### .sameMembers(set1, set2, [message])\n   *\n   * Asserts that `set1` and `set2` have the same members.\n   * Order is not taken into account.\n   *\n   *     assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');\n   *\n   * @name sameMembers\n   * @param {Array} set1\n   * @param {Array} set2\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.sameMembers = function (set1, set2, msg) {\n    new Assertion(set1, msg).to.have.same.members(set2);\n  }\n\n  /**\n   * ### .sameDeepMembers(set1, set2, [message])\n   *\n   * Asserts that `set1` and `set2` have the same members - using a deep equality checking.\n   * Order is not taken into account.\n   *\n   *     assert.sameDeepMembers([ {b: 3}, {a: 2}, {c: 5} ], [ {c: 5}, {b: 3}, {a: 2} ], 'same deep members');\n   *\n   * @name sameDeepMembers\n   * @param {Array} set1\n   * @param {Array} set2\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.sameDeepMembers = function (set1, set2, msg) {\n    new Assertion(set1, msg).to.have.same.deep.members(set2);\n  }\n\n  /**\n   * ### .includeMembers(superset, subset, [message])\n   *\n   * Asserts that `subset` is included in `superset`.\n   * Order is not taken into account.\n   *\n   *     assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');\n   *\n   * @name includeMembers\n   * @param {Array} superset\n   * @param {Array} subset\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.includeMembers = function (superset, subset, msg) {\n    new Assertion(superset, msg).to.include.members(subset);\n  }\n\n  /**\n   * ### .includeDeepMembers(superset, subset, [message])\n   *\n   * Asserts that `subset` is included in `superset` - using deep equality checking.\n   * Order is not taken into account.\n   * Duplicates are ignored.\n   *\n   *     assert.includeDeepMembers([ {a: 1}, {b: 2}, {c: 3} ], [ {b: 2}, {a: 1}, {b: 2} ], 'include deep members');\n   *\n   * @name includeDeepMembers\n   * @param {Array} superset\n   * @param {Array} subset\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.includeDeepMembers = function (superset, subset, msg) {\n    new Assertion(superset, msg).to.include.deep.members(subset);\n  }\n\n  /**\n   * ### .oneOf(inList, list, [message])\n   *\n   * Asserts that non-object, non-array value `inList` appears in the flat array `list`.\n   *\n   *     assert.oneOf(1, [ 2, 1 ], 'Not found in list');\n   *\n   * @name oneOf\n   * @param {*} inList\n   * @param {Array<*>} list\n   * @param {String} message\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.oneOf = function (inList, list, msg) {\n    new Assertion(inList, msg).to.be.oneOf(list);\n  }\n\n   /**\n   * ### .changes(function, object, property)\n   *\n   * Asserts that a function changes the value of a property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 22 };\n   *     assert.changes(fn, obj, 'val');\n   *\n   * @name changes\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.changes = function (fn, obj, prop) {\n    new Assertion(fn).to.change(obj, prop);\n  }\n\n   /**\n   * ### .doesNotChange(function, object, property)\n   *\n   * Asserts that a function does not changes the value of a property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { console.log('foo'); };\n   *     assert.doesNotChange(fn, obj, 'val');\n   *\n   * @name doesNotChange\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.doesNotChange = function (fn, obj, prop) {\n    new Assertion(fn).to.not.change(obj, prop);\n  }\n\n   /**\n   * ### .increases(function, object, property)\n   *\n   * Asserts that a function increases an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 13 };\n   *     assert.increases(fn, obj, 'val');\n   *\n   * @name increases\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.increases = function (fn, obj, prop) {\n    new Assertion(fn).to.increase(obj, prop);\n  }\n\n   /**\n   * ### .doesNotIncrease(function, object, property)\n   *\n   * Asserts that a function does not increase object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 8 };\n   *     assert.doesNotIncrease(fn, obj, 'val');\n   *\n   * @name doesNotIncrease\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.doesNotIncrease = function (fn, obj, prop) {\n    new Assertion(fn).to.not.increase(obj, prop);\n  }\n\n   /**\n   * ### .decreases(function, object, property)\n   *\n   * Asserts that a function decreases an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 5 };\n   *     assert.decreases(fn, obj, 'val');\n   *\n   * @name decreases\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.decreases = function (fn, obj, prop) {\n    new Assertion(fn).to.decrease(obj, prop);\n  }\n\n   /**\n   * ### .doesNotDecrease(function, object, property)\n   *\n   * Asserts that a function does not decreases an object property\n   *\n   *     var obj = { val: 10 };\n   *     var fn = function() { obj.val = 15 };\n   *     assert.doesNotDecrease(fn, obj, 'val');\n   *\n   * @name doesNotDecrease\n   * @param {Function} modifier function\n   * @param {Object} object\n   * @param {String} property name\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.doesNotDecrease = function (fn, obj, prop) {\n    new Assertion(fn).to.not.decrease(obj, prop);\n  }\n\n  /*!\n   * ### .ifError(object)\n   *\n   * Asserts if value is not a false value, and throws if it is a true value.\n   * This is added to allow for chai to be a drop-in replacement for Node's\n   * assert class.\n   *\n   *     var err = new Error('I am a custom error');\n   *     assert.ifError(err); // Rethrows err!\n   *\n   * @name ifError\n   * @param {Object} object\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.ifError = function (val) {\n    if (val) {\n      throw(val);\n    }\n  };\n\n  /**\n   * ### .isExtensible(object)\n   *\n   * Asserts that `object` is extensible (can have new properties added to it).\n   *\n   *     assert.isExtensible({});\n   *\n   * @name isExtensible\n   * @alias extensible\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isExtensible = function (obj, msg) {\n    new Assertion(obj, msg).to.be.extensible;\n  };\n\n  /**\n   * ### .isNotExtensible(object)\n   *\n   * Asserts that `object` is _not_ extensible.\n   *\n   *     var nonExtensibleObject = Object.preventExtensions({});\n   *     var sealedObject = Object.seal({});\n   *     var frozenObject = Object.freese({});\n   *\n   *     assert.isNotExtensible(nonExtensibleObject);\n   *     assert.isNotExtensible(sealedObject);\n   *     assert.isNotExtensible(frozenObject);\n   *\n   * @name isNotExtensible\n   * @alias notExtensible\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotExtensible = function (obj, msg) {\n    new Assertion(obj, msg).to.not.be.extensible;\n  };\n\n  /**\n   * ### .isSealed(object)\n   *\n   * Asserts that `object` is sealed (cannot have new properties added to it\n   * and its existing properties cannot be removed).\n   *\n   *     var sealedObject = Object.seal({});\n   *     var frozenObject = Object.seal({});\n   *\n   *     assert.isSealed(sealedObject);\n   *     assert.isSealed(frozenObject);\n   *\n   * @name isSealed\n   * @alias sealed\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isSealed = function (obj, msg) {\n    new Assertion(obj, msg).to.be.sealed;\n  };\n\n  /**\n   * ### .isNotSealed(object)\n   *\n   * Asserts that `object` is _not_ sealed.\n   *\n   *     assert.isNotSealed({});\n   *\n   * @name isNotSealed\n   * @alias notSealed\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotSealed = function (obj, msg) {\n    new Assertion(obj, msg).to.not.be.sealed;\n  };\n\n  /**\n   * ### .isFrozen(object)\n   *\n   * Asserts that `object` is frozen (cannot have new properties added to it\n   * and its existing properties cannot be modified).\n   *\n   *     var frozenObject = Object.freeze({});\n   *     assert.frozen(frozenObject);\n   *\n   * @name isFrozen\n   * @alias frozen\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isFrozen = function (obj, msg) {\n    new Assertion(obj, msg).to.be.frozen;\n  };\n\n  /**\n   * ### .isNotFrozen(object)\n   *\n   * Asserts that `object` is _not_ frozen.\n   *\n   *     assert.isNotFrozen({});\n   *\n   * @name isNotFrozen\n   * @alias notFrozen\n   * @param {Object} object\n   * @param {String} message _optional_\n   * @namespace Assert\n   * @api public\n   */\n\n  assert.isNotFrozen = function (obj, msg) {\n    new Assertion(obj, msg).to.not.be.frozen;\n  };\n\n  /*!\n   * Aliases.\n   */\n\n  (function alias(name, as){\n    assert[as] = assert[name];\n    return alias;\n  })\n  ('isOk', 'ok')\n  ('isNotOk', 'notOk')\n  ('throws', 'throw')\n  ('throws', 'Throw')\n  ('isExtensible', 'extensible')\n  ('isNotExtensible', 'notExtensible')\n  ('isSealed', 'sealed')\n  ('isNotSealed', 'notSealed')\n  ('isFrozen', 'frozen')\n  ('isNotFrozen', 'notFrozen');\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n  chai.expect = function (val, message) {\n    return new chai.Assertion(val, message);\n  };\n\n  /**\n   * ### .fail(actual, expected, [message], [operator])\n   *\n   * Throw a failure.\n   *\n   * @name fail\n   * @param {Mixed} actual\n   * @param {Mixed} expected\n   * @param {String} message\n   * @param {String} operator\n   * @namespace Expect\n   * @api public\n   */\n\n  chai.expect.fail = function (actual, expected, message, operator) {\n    message = message || 'expect.fail()';\n    throw new chai.AssertionError(message, {\n        actual: actual\n      , expected: expected\n      , operator: operator\n    }, chai.expect.fail);\n  };\n};\n","/*!\n * chai\n * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nmodule.exports = function (chai, util) {\n  var Assertion = chai.Assertion;\n\n  function loadShould () {\n    // explicitly define this method as function as to have it's name to include as `ssfi`\n    function shouldGetter() {\n      if (this instanceof String || this instanceof Number || this instanceof Boolean ) {\n        return new Assertion(this.valueOf(), null, shouldGetter);\n      }\n      return new Assertion(this, null, shouldGetter);\n    }\n    function shouldSetter(value) {\n      // See https://github.com/chaijs/chai/issues/86: this makes\n      // `whatever.should = someValue` actually set `someValue`, which is\n      // especially useful for `global.should = require('chai').should()`.\n      //\n      // Note that we have to use [[DefineProperty]] instead of [[Put]]\n      // since otherwise we would trigger this very setter!\n      Object.defineProperty(this, 'should', {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    }\n    // modify Object.prototype to have `should`\n    Object.defineProperty(Object.prototype, 'should', {\n      set: shouldSetter\n      , get: shouldGetter\n      , configurable: true\n    });\n\n    var should = {};\n\n    /**\n     * ### .fail(actual, expected, [message], [operator])\n     *\n     * Throw a failure.\n     *\n     * @name fail\n     * @param {Mixed} actual\n     * @param {Mixed} expected\n     * @param {String} message\n     * @param {String} operator\n     * @namespace Should\n     * @api public\n     */\n\n    should.fail = function (actual, expected, message, operator) {\n      message = message || 'should.fail()';\n      throw new chai.AssertionError(message, {\n          actual: actual\n        , expected: expected\n        , operator: operator\n      }, should.fail);\n    };\n\n    /**\n     * ### .equal(actual, expected, [message])\n     *\n     * Asserts non-strict equality (`==`) of `actual` and `expected`.\n     *\n     *     should.equal(3, '3', '== coerces values to strings');\n     *\n     * @name equal\n     * @param {Mixed} actual\n     * @param {Mixed} expected\n     * @param {String} message\n     * @namespace Should\n     * @api public\n     */\n\n    should.equal = function (val1, val2, msg) {\n      new Assertion(val1, msg).to.equal(val2);\n    };\n\n    /**\n     * ### .throw(function, [constructor/string/regexp], [string/regexp], [message])\n     *\n     * Asserts that `function` will throw an error that is an instance of\n     * `constructor`, or alternately that it will throw an error with message\n     * matching `regexp`.\n     *\n     *     should.throw(fn, 'function throws a reference error');\n     *     should.throw(fn, /function throws a reference error/);\n     *     should.throw(fn, ReferenceError);\n     *     should.throw(fn, ReferenceError, 'function throws a reference error');\n     *     should.throw(fn, ReferenceError, /function throws a reference error/);\n     *\n     * @name throw\n     * @alias Throw\n     * @param {Function} function\n     * @param {ErrorConstructor} constructor\n     * @param {RegExp} regexp\n     * @param {String} message\n     * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n     * @namespace Should\n     * @api public\n     */\n\n    should.Throw = function (fn, errt, errs, msg) {\n      new Assertion(fn, msg).to.Throw(errt, errs);\n    };\n\n    /**\n     * ### .exist\n     *\n     * Asserts that the target is neither `null` nor `undefined`.\n     *\n     *     var foo = 'hi';\n     *\n     *     should.exist(foo, 'foo exists');\n     *\n     * @name exist\n     * @namespace Should\n     * @api public\n     */\n\n    should.exist = function (val, msg) {\n      new Assertion(val, msg).to.exist;\n    }\n\n    // negation\n    should.not = {}\n\n    /**\n     * ### .not.equal(actual, expected, [message])\n     *\n     * Asserts non-strict inequality (`!=`) of `actual` and `expected`.\n     *\n     *     should.not.equal(3, 4, 'these numbers are not equal');\n     *\n     * @name not.equal\n     * @param {Mixed} actual\n     * @param {Mixed} expected\n     * @param {String} message\n     * @namespace Should\n     * @api public\n     */\n\n    should.not.equal = function (val1, val2, msg) {\n      new Assertion(val1, msg).to.not.equal(val2);\n    };\n\n    /**\n     * ### .throw(function, [constructor/regexp], [message])\n     *\n     * Asserts that `function` will _not_ throw an error that is an instance of\n     * `constructor`, or alternately that it will not throw an error with message\n     * matching `regexp`.\n     *\n     *     should.not.throw(fn, Error, 'function does not throw');\n     *\n     * @name not.throw\n     * @alias not.Throw\n     * @param {Function} function\n     * @param {ErrorConstructor} constructor\n     * @param {RegExp} regexp\n     * @param {String} message\n     * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types\n     * @namespace Should\n     * @api public\n     */\n\n    should.not.Throw = function (fn, errt, errs, msg) {\n      new Assertion(fn, msg).to.not.Throw(errt, errs);\n    };\n\n    /**\n     * ### .not.exist\n     *\n     * Asserts that the target is neither `null` nor `undefined`.\n     *\n     *     var bar = null;\n     *\n     *     should.not.exist(bar, 'bar does not exist');\n     *\n     * @name not.exist\n     * @namespace Should\n     * @api public\n     */\n\n    should.not.exist = function (val, msg) {\n      new Assertion(val, msg).to.not.exist;\n    }\n\n    should['throw'] = should['Throw'];\n    should.not['throw'] = should.not['Throw'];\n\n    return should;\n  };\n\n  chai.should = loadShould;\n  chai.Should = loadShould;\n};\n","/*!\n * Chai - addChainingMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar transferFlags = require('./transferFlags');\nvar flag = require('./flag');\nvar config = require('../config');\n\n/*!\n * Module variables\n */\n\n// Check whether `__proto__` is supported\nvar hasProtoSupport = '__proto__' in Object;\n\n// Without `__proto__` support, this module will need to add properties to a function.\n// However, some Function.prototype methods cannot be overwritten,\n// and there seems no easy cross-platform way to detect them (@see chaijs/chai/issues/69).\nvar excludeNames = /^(?:length|name|arguments|caller)$/;\n\n// Cache `Function` properties\nvar call  = Function.prototype.call,\n    apply = Function.prototype.apply;\n\n/**\n * ### addChainableMethod (ctx, name, method, chainingBehavior)\n *\n * Adds a method to an object, such that the method can also be chained.\n *\n *     utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {\n *       var obj = utils.flag(this, 'object');\n *       new chai.Assertion(obj).to.be.equal(str);\n *     });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);\n *\n * The result can then be used as both a method assertion, executing both `method` and\n * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.\n *\n *     expect(fooStr).to.be.foo('bar');\n *     expect(fooStr).to.be.foo.equal('foo');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for `name`, when called\n * @param {Function} chainingBehavior function to be called every time the property is accessed\n * @namespace Utils\n * @name addChainableMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method, chainingBehavior) {\n  if (typeof chainingBehavior !== 'function') {\n    chainingBehavior = function () { };\n  }\n\n  var chainableBehavior = {\n      method: method\n    , chainingBehavior: chainingBehavior\n  };\n\n  // save the methods so we can overwrite them later, if we need to.\n  if (!ctx.__methods) {\n    ctx.__methods = {};\n  }\n  ctx.__methods[name] = chainableBehavior;\n\n  Object.defineProperty(ctx, name,\n    { get: function () {\n        chainableBehavior.chainingBehavior.call(this);\n\n        var assert = function assert() {\n          var old_ssfi = flag(this, 'ssfi');\n          if (old_ssfi && config.includeStack === false)\n            flag(this, 'ssfi', assert);\n          var result = chainableBehavior.method.apply(this, arguments);\n          return result === undefined ? this : result;\n        };\n\n        // Use `__proto__` if available\n        if (hasProtoSupport) {\n          // Inherit all properties from the object by replacing the `Function` prototype\n          var prototype = assert.__proto__ = Object.create(this);\n          // Restore the `call` and `apply` methods from `Function`\n          prototype.call = call;\n          prototype.apply = apply;\n        }\n        // Otherwise, redefine all properties (slow!)\n        else {\n          var asserterNames = Object.getOwnPropertyNames(ctx);\n          asserterNames.forEach(function (asserterName) {\n            if (!excludeNames.test(asserterName)) {\n              var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);\n              Object.defineProperty(assert, asserterName, pd);\n            }\n          });\n        }\n\n        transferFlags(this, assert);\n        return assert;\n      }\n    , configurable: true\n  });\n};\n","/*!\n * Chai - addMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar config = require('../config');\n\n/**\n * ### .addMethod (ctx, name, method)\n *\n * Adds a method to the prototype of an object.\n *\n *     utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {\n *       var obj = utils.flag(this, 'object');\n *       new chai.Assertion(obj).to.be.equal(str);\n *     });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.addMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n *     expect(fooStr).to.be.foo('bar');\n *\n * @param {Object} ctx object to which the method is added\n * @param {String} name of method to add\n * @param {Function} method function to be used for name\n * @namespace Utils\n * @name addMethod\n * @api public\n */\nvar flag = require('./flag');\n\nmodule.exports = function (ctx, name, method) {\n  ctx[name] = function () {\n    var old_ssfi = flag(this, 'ssfi');\n    if (old_ssfi && config.includeStack === false)\n      flag(this, 'ssfi', ctx[name]);\n    var result = method.apply(this, arguments);\n    return result === undefined ? this : result;\n  };\n};\n","/*!\n * Chai - addProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar config = require('../config');\nvar flag = require('./flag');\n\n/**\n * ### addProperty (ctx, name, getter)\n *\n * Adds a property to the prototype of an object.\n *\n *     utils.addProperty(chai.Assertion.prototype, 'foo', function () {\n *       var obj = utils.flag(this, 'object');\n *       new chai.Assertion(obj).to.be.instanceof(Foo);\n *     });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.addProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n *     expect(myFoo).to.be.foo;\n *\n * @param {Object} ctx object to which the property is added\n * @param {String} name of property to add\n * @param {Function} getter function to be used for name\n * @namespace Utils\n * @name addProperty\n * @api public\n */\n\nmodule.exports = function (ctx, name, getter) {\n  Object.defineProperty(ctx, name,\n    { get: function addProperty() {\n        var old_ssfi = flag(this, 'ssfi');\n        if (old_ssfi && config.includeStack === false)\n          flag(this, 'ssfi', addProperty);\n\n        var result = getter.call(this);\n        return result === undefined ? this : result;\n      }\n    , configurable: true\n  });\n};\n","/*!\n * Chai - expectTypes utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### expectTypes(obj, types)\n *\n * Ensures that the object being tested against is of a valid type.\n *\n *     utils.expectTypes(this, ['array', 'object', 'string']);\n *\n * @param {Mixed} obj constructed Assertion\n * @param {Array} type A list of allowed types for this assertion\n * @namespace Utils\n * @name expectTypes\n * @api public\n */\n\nvar AssertionError = require('assertion-error');\nvar flag = require('./flag');\nvar type = require('type-detect');\n\nmodule.exports = function (obj, types) {\n  var obj = flag(obj, 'object');\n  types = types.map(function (t) { return t.toLowerCase(); });\n  types.sort();\n\n  // Transforms ['lorem', 'ipsum'] into 'a lirum, or an ipsum'\n  var str = types.map(function (t, index) {\n    var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a';\n    var or = types.length > 1 && index === types.length - 1 ? 'or ' : '';\n    return or + art + ' ' + t;\n  }).join(', ');\n\n  if (!types.some(function (expected) { return type(obj) === expected; })) {\n    throw new AssertionError(\n      'object tested must be ' + str + ', but ' + type(obj) + ' given'\n    );\n  }\n};\n","/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### flag(object, key, [value])\n *\n * Get or set a flag value on an object. If a\n * value is provided it will be set, else it will\n * return the currently set value or `undefined` if\n * the value is not set.\n *\n *     utils.flag(this, 'foo', 'bar'); // setter\n *     utils.flag(this, 'foo'); // getter, returns `bar`\n *\n * @param {Object} object constructed Assertion\n * @param {String} key\n * @param {Mixed} value (optional)\n * @namespace Utils\n * @name flag\n * @api private\n */\n\nmodule.exports = function (obj, key, value) {\n  var flags = obj.__flags || (obj.__flags = Object.create(null));\n  if (arguments.length === 3) {\n    flags[key] = value;\n  } else {\n    return flags[key];\n  }\n};\n","/*!\n * Chai - getActual utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * # getActual(object, [actual])\n *\n * Returns the `actual` value for an Assertion\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getActual\n */\n\nmodule.exports = function (obj, args) {\n  return args.length > 4 ? args[4] : obj._obj;\n};\n","/*!\n * Chai - getEnumerableProperties utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getEnumerableProperties(object)\n *\n * This allows the retrieval of enumerable property names of an object,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getEnumerableProperties\n * @api public\n */\n\nmodule.exports = function getEnumerableProperties(object) {\n  var result = [];\n  for (var name in object) {\n    result.push(name);\n  }\n  return result;\n};\n","/*!\n * Chai - message composition utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar flag = require('./flag')\n  , getActual = require('./getActual')\n  , inspect = require('./inspect')\n  , objDisplay = require('./objDisplay');\n\n/**\n * ### .getMessage(object, message, negateMessage)\n *\n * Construct the error message based on flags\n * and template tags. Template tags will return\n * a stringified inspection of the object referenced.\n *\n * Message template tags:\n * - `#{this}` current asserted object\n * - `#{act}` actual value\n * - `#{exp}` expected value\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name getMessage\n * @api public\n */\n\nmodule.exports = function (obj, args) {\n  var negate = flag(obj, 'negate')\n    , val = flag(obj, 'object')\n    , expected = args[3]\n    , actual = getActual(obj, args)\n    , msg = negate ? args[2] : args[1]\n    , flagMsg = flag(obj, 'message');\n\n  if(typeof msg === \"function\") msg = msg();\n  msg = msg || '';\n  msg = msg\n    .replace(/#\\{this\\}/g, function () { return objDisplay(val); })\n    .replace(/#\\{act\\}/g, function () { return objDisplay(actual); })\n    .replace(/#\\{exp\\}/g, function () { return objDisplay(expected); });\n\n  return flagMsg ? flagMsg + ': ' + msg : msg;\n};\n","/*!\n * Chai - getName utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * # getName(func)\n *\n * Gets the name of a function, in a cross-browser way.\n *\n * @param {Function} a function (usually a constructor)\n * @namespace Utils\n * @name getName\n */\n\nmodule.exports = function (func) {\n  if (func.name) return func.name;\n\n  var match = /^\\s?function ([^(]*)\\(/.exec(func);\n  return match && match[1] ? match[1] : \"\";\n};\n","/*!\n * Chai - getPathInfo utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar hasProperty = require('./hasProperty');\n\n/**\n * ### .getPathInfo(path, object)\n *\n * This allows the retrieval of property info in an\n * object given a string path.\n *\n * The path info consists of an object with the\n * following properties:\n *\n * * parent - The parent object of the property referenced by `path`\n * * name - The name of the final property, a number if it was an array indexer\n * * value - The value of the property, if it exists, otherwise `undefined`\n * * exists - Whether the property exists or not\n *\n * @param {String} path\n * @param {Object} object\n * @returns {Object} info\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nmodule.exports = function getPathInfo(path, obj) {\n  var parsed = parsePath(path),\n      last = parsed[parsed.length - 1];\n\n  var info = {\n    parent: parsed.length > 1 ? _getPathValue(parsed, obj, parsed.length - 1) : obj,\n    name: last.p || last.i,\n    value: _getPathValue(parsed, obj)\n  };\n  info.exists = hasProperty(info.name, info.parent);\n\n  return info;\n};\n\n\n/*!\n * ## parsePath(path)\n *\n * Helper function used to parse string object\n * paths. Use in conjunction with `_getPathValue`.\n *\n *      var parsed = parsePath('myobject.property.subprop');\n *\n * ### Paths:\n *\n * * Can be as near infinitely deep and nested\n * * Arrays are also valid using the formal `myobject.document[3].property`.\n * * Literal dots and brackets (not delimiter) must be backslash-escaped.\n *\n * @param {String} path\n * @returns {Object} parsed\n * @api private\n */\n\nfunction parsePath (path) {\n  var str = path.replace(/([^\\\\])\\[/g, '$1.[')\n    , parts = str.match(/(\\\\\\.|[^.]+?)+/g);\n  return parts.map(function (value) {\n    var re = /^\\[(\\d+)\\]$/\n      , mArr = re.exec(value);\n    if (mArr) return { i: parseFloat(mArr[1]) };\n    else return { p: value.replace(/\\\\([.\\[\\]])/g, '$1') };\n  });\n}\n\n\n/*!\n * ## _getPathValue(parsed, obj)\n *\n * Helper companion function for `.parsePath` that returns\n * the value located at the parsed address.\n *\n *      var value = getPathValue(parsed, obj);\n *\n * @param {Object} parsed definition from `parsePath`.\n * @param {Object} object to search against\n * @param {Number} object to search against\n * @returns {Object|Undefined} value\n * @api private\n */\n\nfunction _getPathValue (parsed, obj, index) {\n  var tmp = obj\n    , res;\n\n  index = (index === undefined ? parsed.length : index);\n\n  for (var i = 0, l = index; i < l; i++) {\n    var part = parsed[i];\n    if (tmp) {\n      if ('undefined' !== typeof part.p)\n        tmp = tmp[part.p];\n      else if ('undefined' !== typeof part.i)\n        tmp = tmp[part.i];\n      if (i == (l - 1)) res = tmp;\n    } else {\n      res = undefined;\n    }\n  }\n  return res;\n}\n","/*!\n * Chai - getPathValue utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * @see https://github.com/logicalparadox/filtr\n * MIT Licensed\n */\n\nvar getPathInfo = require('./getPathInfo');\n\n/**\n * ### .getPathValue(path, object)\n *\n * This allows the retrieval of values in an\n * object given a string path.\n *\n *     var obj = {\n *         prop1: {\n *             arr: ['a', 'b', 'c']\n *           , str: 'Hello'\n *         }\n *       , prop2: {\n *             arr: [ { nested: 'Universe' } ]\n *           , str: 'Hello again!'\n *         }\n *     }\n *\n * The following would be the results.\n *\n *     getPathValue('prop1.str', obj); // Hello\n *     getPathValue('prop1.att[2]', obj); // b\n *     getPathValue('prop2.arr[0].nested', obj); // Universe\n *\n * @param {String} path\n * @param {Object} object\n * @returns {Object} value or `undefined`\n * @namespace Utils\n * @name getPathValue\n * @api public\n */\nmodule.exports = function(path, obj) {\n  var info = getPathInfo(path, obj);\n  return info.value;\n};\n","/*!\n * Chai - getProperties utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### .getProperties(object)\n *\n * This allows the retrieval of property names of an object, enumerable or not,\n * inherited or not.\n *\n * @param {Object} object\n * @returns {Array}\n * @namespace Utils\n * @name getProperties\n * @api public\n */\n\nmodule.exports = function getProperties(object) {\n  var result = Object.getOwnPropertyNames(object);\n\n  function addProperty(property) {\n    if (result.indexOf(property) === -1) {\n      result.push(property);\n    }\n  }\n\n  var proto = Object.getPrototypeOf(object);\n  while (proto !== null) {\n    Object.getOwnPropertyNames(proto).forEach(addProperty);\n    proto = Object.getPrototypeOf(proto);\n  }\n\n  return result;\n};\n","/*!\n * Chai - hasProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\nvar type = require('type-detect');\n\n/**\n * ### .hasProperty(object, name)\n *\n * This allows checking whether an object has\n * named property or numeric array index.\n *\n * Basically does the same thing as the `in`\n * operator but works properly with natives\n * and null/undefined values.\n *\n *     var obj = {\n *         arr: ['a', 'b', 'c']\n *       , str: 'Hello'\n *     }\n *\n * The following would be the results.\n *\n *     hasProperty('str', obj);  // true\n *     hasProperty('constructor', obj);  // true\n *     hasProperty('bar', obj);  // false\n *\n *     hasProperty('length', obj.str); // true\n *     hasProperty(1, obj.str);  // true\n *     hasProperty(5, obj.str);  // false\n *\n *     hasProperty('length', obj.arr);  // true\n *     hasProperty(2, obj.arr);  // true\n *     hasProperty(3, obj.arr);  // false\n *\n * @param {Objuect} object\n * @param {String|Number} name\n * @returns {Boolean} whether it exists\n * @namespace Utils\n * @name getPathInfo\n * @api public\n */\n\nvar literals = {\n    'number': Number\n  , 'string': String\n};\n\nmodule.exports = function hasProperty(name, obj) {\n  var ot = type(obj);\n\n  // Bad Object, obviously no props at all\n  if(ot === 'null' || ot === 'undefined')\n    return false;\n\n  // The `in` operator does not work with certain literals\n  // box these before the check\n  if(literals[ot] && typeof obj !== 'object')\n    obj = new literals[ot](obj);\n\n  return name in obj;\n};\n","/*!\n * chai\n * Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Main exports\n */\n\nvar exports = module.exports = {};\n\n/*!\n * test utility\n */\n\nexports.test = require('./test');\n\n/*!\n * type utility\n */\n\nexports.type = require('type-detect');\n\n/*!\n * expectTypes utility\n */\nexports.expectTypes = require('./expectTypes');\n\n/*!\n * message utility\n */\n\nexports.getMessage = require('./getMessage');\n\n/*!\n * actual utility\n */\n\nexports.getActual = require('./getActual');\n\n/*!\n * Inspect util\n */\n\nexports.inspect = require('./inspect');\n\n/*!\n * Object Display util\n */\n\nexports.objDisplay = require('./objDisplay');\n\n/*!\n * Flag utility\n */\n\nexports.flag = require('./flag');\n\n/*!\n * Flag transferring utility\n */\n\nexports.transferFlags = require('./transferFlags');\n\n/*!\n * Deep equal utility\n */\n\nexports.eql = require('deep-eql');\n\n/*!\n * Deep path value\n */\n\nexports.getPathValue = require('./getPathValue');\n\n/*!\n * Deep path info\n */\n\nexports.getPathInfo = require('./getPathInfo');\n\n/*!\n * Check if a property exists\n */\n\nexports.hasProperty = require('./hasProperty');\n\n/*!\n * Function name\n */\n\nexports.getName = require('./getName');\n\n/*!\n * add Property\n */\n\nexports.addProperty = require('./addProperty');\n\n/*!\n * add Method\n */\n\nexports.addMethod = require('./addMethod');\n\n/*!\n * overwrite Property\n */\n\nexports.overwriteProperty = require('./overwriteProperty');\n\n/*!\n * overwrite Method\n */\n\nexports.overwriteMethod = require('./overwriteMethod');\n\n/*!\n * Add a chainable method\n */\n\nexports.addChainableMethod = require('./addChainableMethod');\n\n/*!\n * Overwrite chainable method\n */\n\nexports.overwriteChainableMethod = require('./overwriteChainableMethod');\n","// This is (almost) directly from Node.js utils\n// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js\n\nvar getName = require('./getName');\nvar getProperties = require('./getProperties');\nvar getEnumerableProperties = require('./getEnumerableProperties');\n\nmodule.exports = inspect;\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Boolean} showHidden Flag that shows hidden (not enumerable)\n *    properties of objects.\n * @param {Number} depth Depth in which to descend in object. Default is 2.\n * @param {Boolean} colors Flag to turn on ANSI escape codes to color the\n *    output. Default is false (no coloring).\n * @namespace Utils\n * @name inspect\n */\nfunction inspect(obj, showHidden, depth, colors) {\n  var ctx = {\n    showHidden: showHidden,\n    seen: [],\n    stylize: function (str) { return str; }\n  };\n  return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth));\n}\n\n// Returns true if object is a DOM element.\nvar isDOMElement = function (object) {\n  if (typeof HTMLElement === 'object') {\n    return object instanceof HTMLElement;\n  } else {\n    return object &&\n      typeof object === 'object' &&\n      object.nodeType === 1 &&\n      typeof object.nodeName === 'string';\n  }\n};\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (value && typeof value.inspect === 'function' &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes);\n    if (typeof ret !== 'string') {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // If this is a DOM element, try to get the outer HTML.\n  if (isDOMElement(value)) {\n    if ('outerHTML' in value) {\n      return value.outerHTML;\n      // This value does not have an outerHTML attribute,\n      //   it could still be an XML element\n    } else {\n      // Attempt to serialize it\n      try {\n        if (document.xmlVersion) {\n          var xmlSerializer = new XMLSerializer();\n          return xmlSerializer.serializeToString(value);\n        } else {\n          // Firefox 11- do not support outerHTML\n          //   It does, however, support innerHTML\n          //   Use the following to render the element\n          var ns = \"http://www.w3.org/1999/xhtml\";\n          var container = document.createElementNS(ns, '_');\n\n          container.appendChild(value.cloneNode(false));\n          html = container.innerHTML\n            .replace('><', '>' + value.innerHTML + '<');\n          container.innerHTML = '';\n          return html;\n        }\n      } catch (err) {\n        // This could be a non-native DOM implementation,\n        //   continue with the normal flow:\n        //   printing the element as if it is an object.\n      }\n    }\n  }\n\n  // Look up the keys of the object.\n  var visibleKeys = getEnumerableProperties(value);\n  var keys = ctx.showHidden ? getProperties(value) : visibleKeys;\n\n  // Some type of object without properties can be shortcutted.\n  // In IE, errors have a single `stack` property, or if they are vanilla `Error`,\n  // a `stack` plus `description` property; ignore those for consistency.\n  if (keys.length === 0 || (isError(value) && (\n      (keys.length === 1 && keys[0] === 'stack') ||\n      (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')\n     ))) {\n    if (typeof value === 'function') {\n      var name = getName(value);\n      var nameSuffix = name ? ': ' + name : '';\n      return ctx.stylize('[Function' + nameSuffix + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (typeof value === 'function') {\n    var name = getName(value);\n    var nameSuffix = name ? ': ' + name : '';\n    base = ' [Function' + nameSuffix + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    return formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  switch (typeof value) {\n    case 'undefined':\n      return ctx.stylize('undefined', 'undefined');\n\n    case 'string':\n      var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                               .replace(/'/g, \"\\\\'\")\n                                               .replace(/\\\\\"/g, '\"') + '\\'';\n      return ctx.stylize(simple, 'string');\n\n    case 'number':\n      if (value === 0 && (1/value) === -Infinity) {\n        return ctx.stylize('-0', 'number');\n      }\n      return ctx.stylize('' + value, 'number');\n\n    case 'boolean':\n      return ctx.stylize('' + value, 'boolean');\n  }\n  // For some reason typeof null is \"object\", so special case here.\n  if (value === null) {\n    return ctx.stylize('null', 'null');\n  }\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (Object.prototype.hasOwnProperty.call(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str;\n  if (value.__lookupGetter__) {\n    if (value.__lookupGetter__(key)) {\n      if (value.__lookupSetter__(key)) {\n        str = ctx.stylize('[Getter/Setter]', 'special');\n      } else {\n        str = ctx.stylize('[Getter]', 'special');\n      }\n    } else {\n      if (value.__lookupSetter__(key)) {\n        str = ctx.stylize('[Setter]', 'special');\n      }\n    }\n  }\n  if (visibleKeys.indexOf(key) < 0) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(value[key]) < 0) {\n      if (recurseTimes === null) {\n        str = formatValue(ctx, value[key], null);\n      } else {\n        str = formatValue(ctx, value[key], recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (typeof name === 'undefined') {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\nfunction isArray(ar) {\n  return Array.isArray(ar) ||\n         (typeof ar === 'object' && objectToString(ar) === '[object Array]');\n}\n\nfunction isRegExp(re) {\n  return typeof re === 'object' && objectToString(re) === '[object RegExp]';\n}\n\nfunction isDate(d) {\n  return typeof d === 'object' && objectToString(d) === '[object Date]';\n}\n\nfunction isError(e) {\n  return typeof e === 'object' && objectToString(e) === '[object Error]';\n}\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n","/*!\n * Chai - flag utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar inspect = require('./inspect');\nvar config = require('../config');\n\n/**\n * ### .objDisplay (object)\n *\n * Determines if an object or an array matches\n * criteria to be inspected in-line for error\n * messages or should be truncated.\n *\n * @param {Mixed} javascript object to inspect\n * @name objDisplay\n * @namespace Utils\n * @api public\n */\n\nmodule.exports = function (obj) {\n  var str = inspect(obj)\n    , type = Object.prototype.toString.call(obj);\n\n  if (config.truncateThreshold && str.length >= config.truncateThreshold) {\n    if (type === '[object Function]') {\n      return !obj.name || obj.name === ''\n        ? '[Function]'\n        : '[Function: ' + obj.name + ']';\n    } else if (type === '[object Array]') {\n      return '[ Array(' + obj.length + ') ]';\n    } else if (type === '[object Object]') {\n      var keys = Object.keys(obj)\n        , kstr = keys.length > 2\n          ? keys.splice(0, 2).join(', ') + ', ...'\n          : keys.join(', ');\n      return '{ Object (' + kstr + ') }';\n    } else {\n      return str;\n    }\n  } else {\n    return str;\n  }\n};\n","/*!\n * Chai - overwriteChainableMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### overwriteChainableMethod (ctx, name, method, chainingBehavior)\n *\n * Overwites an already existing chainable method\n * and provides access to the previous function or\n * property.  Must return functions to be used for\n * name.\n *\n *     utils.overwriteChainableMethod(chai.Assertion.prototype, 'length',\n *       function (_super) {\n *       }\n *     , function (_super) {\n *       }\n *     );\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.overwriteChainableMethod('foo', fn, fn);\n *\n * Then can be used as any other assertion.\n *\n *     expect(myFoo).to.have.length(3);\n *     expect(myFoo).to.have.length.above(3);\n *\n * @param {Object} ctx object whose method / property is to be overwritten\n * @param {String} name of method / property to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @param {Function} chainingBehavior function that returns a function to be used for property\n * @namespace Utils\n * @name overwriteChainableMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method, chainingBehavior) {\n  var chainableBehavior = ctx.__methods[name];\n\n  var _chainingBehavior = chainableBehavior.chainingBehavior;\n  chainableBehavior.chainingBehavior = function () {\n    var result = chainingBehavior(_chainingBehavior).call(this);\n    return result === undefined ? this : result;\n  };\n\n  var _method = chainableBehavior.method;\n  chainableBehavior.method = function () {\n    var result = method(_method).apply(this, arguments);\n    return result === undefined ? this : result;\n  };\n};\n","/*!\n * Chai - overwriteMethod utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### overwriteMethod (ctx, name, fn)\n *\n * Overwites an already existing method and provides\n * access to previous function. Must return function\n * to be used for name.\n *\n *     utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {\n *       return function (str) {\n *         var obj = utils.flag(this, 'object');\n *         if (obj instanceof Foo) {\n *           new chai.Assertion(obj.value).to.equal(str);\n *         } else {\n *           _super.apply(this, arguments);\n *         }\n *       }\n *     });\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.overwriteMethod('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n *     expect(myFoo).to.equal('bar');\n *\n * @param {Object} ctx object whose method is to be overwritten\n * @param {String} name of method to overwrite\n * @param {Function} method function that returns a function to be used for name\n * @namespace Utils\n * @name overwriteMethod\n * @api public\n */\n\nmodule.exports = function (ctx, name, method) {\n  var _method = ctx[name]\n    , _super = function () { return this; };\n\n  if (_method && 'function' === typeof _method)\n    _super = _method;\n\n  ctx[name] = function () {\n    var result = method(_super).apply(this, arguments);\n    return result === undefined ? this : result;\n  }\n};\n","/*!\n * Chai - overwriteProperty utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### overwriteProperty (ctx, name, fn)\n *\n * Overwites an already existing property getter and provides\n * access to previous value. Must return function to use as getter.\n *\n *     utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {\n *       return function () {\n *         var obj = utils.flag(this, 'object');\n *         if (obj instanceof Foo) {\n *           new chai.Assertion(obj.name).to.equal('bar');\n *         } else {\n *           _super.call(this);\n *         }\n *       }\n *     });\n *\n *\n * Can also be accessed directly from `chai.Assertion`.\n *\n *     chai.Assertion.overwriteProperty('foo', fn);\n *\n * Then can be used as any other assertion.\n *\n *     expect(myFoo).to.be.ok;\n *\n * @param {Object} ctx object whose property is to be overwritten\n * @param {String} name of property to overwrite\n * @param {Function} getter function that returns a getter function to be used for name\n * @namespace Utils\n * @name overwriteProperty\n * @api public\n */\n\nmodule.exports = function (ctx, name, getter) {\n  var _get = Object.getOwnPropertyDescriptor(ctx, name)\n    , _super = function () {};\n\n  if (_get && 'function' === typeof _get.get)\n    _super = _get.get\n\n  Object.defineProperty(ctx, name,\n    { get: function () {\n        var result = getter(_super).call(this);\n        return result === undefined ? this : result;\n      }\n    , configurable: true\n  });\n};\n","/*!\n * Chai - test utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependancies\n */\n\nvar flag = require('./flag');\n\n/**\n * # test(object, expression)\n *\n * Test and object for expression.\n *\n * @param {Object} object (constructed Assertion)\n * @param {Arguments} chai.Assertion.prototype.assert arguments\n * @namespace Utils\n * @name test\n */\n\nmodule.exports = function (obj, args) {\n  var negate = flag(obj, 'negate')\n    , expr = args[0];\n  return negate ? !expr : expr;\n};\n","/*!\n * Chai - transferFlags utility\n * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/**\n * ### transferFlags(assertion, object, includeAll = true)\n *\n * Transfer all the flags for `assertion` to `object`. If\n * `includeAll` is set to `false`, then the base Chai\n * assertion flags (namely `object`, `ssfi`, and `message`)\n * will not be transferred.\n *\n *\n *     var newAssertion = new Assertion();\n *     utils.transferFlags(assertion, newAssertion);\n *\n *     var anotherAsseriton = new Assertion(myObj);\n *     utils.transferFlags(assertion, anotherAssertion, false);\n *\n * @param {Assertion} assertion the assertion to transfer the flags from\n * @param {Object} object the object to transfer the flags to; usually a new assertion\n * @param {Boolean} includeAll\n * @namespace Utils\n * @name transferFlags\n * @api private\n */\n\nmodule.exports = function (assertion, object, includeAll) {\n  var flags = assertion.__flags || (assertion.__flags = Object.create(null));\n\n  if (!object.__flags) {\n    object.__flags = Object.create(null);\n  }\n\n  includeAll = arguments.length === 3 ? includeAll : true;\n\n  for (var flag in flags) {\n    if (includeAll ||\n        (flag !== 'object' && flag !== 'ssfi' && flag != 'message')) {\n      object.__flags[flag] = flags[flag];\n    }\n  }\n};\n","/*!\n * assertion-error\n * Copyright(c) 2013 Jake Luer <jake@qualiancy.com>\n * MIT Licensed\n */\n\n/*!\n * Return a function that will copy properties from\n * one object to another excluding any originally\n * listed. Returned function will create a new `{}`.\n *\n * @param {String} excluded properties ...\n * @return {Function}\n */\n\nfunction exclude () {\n  var excludes = [].slice.call(arguments);\n\n  function excludeProps (res, obj) {\n    Object.keys(obj).forEach(function (key) {\n      if (!~excludes.indexOf(key)) res[key] = obj[key];\n    });\n  }\n\n  return function extendExclude () {\n    var args = [].slice.call(arguments)\n      , i = 0\n      , res = {};\n\n    for (; i < args.length; i++) {\n      excludeProps(res, args[i]);\n    }\n\n    return res;\n  };\n};\n\n/*!\n * Primary Exports\n */\n\nmodule.exports = AssertionError;\n\n/**\n * ### AssertionError\n *\n * An extension of the JavaScript `Error` constructor for\n * assertion and validation scenarios.\n *\n * @param {String} message\n * @param {Object} properties to include (optional)\n * @param {callee} start stack function (optional)\n */\n\nfunction AssertionError (message, _props, ssf) {\n  var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')\n    , props = extend(_props || {});\n\n  // default values\n  this.message = message || 'Unspecified AssertionError';\n  this.showDiff = false;\n\n  // copy from properties\n  for (var key in props) {\n    this[key] = props[key];\n  }\n\n  // capture stack trace\n  ssf = ssf || arguments.callee;\n  if (ssf && Error.captureStackTrace) {\n    Error.captureStackTrace(this, ssf);\n  } else {\n    this.stack = new Error().stack;\n  }\n}\n\n/*!\n * Inherit from Error.prototype\n */\n\nAssertionError.prototype = Object.create(Error.prototype);\n\n/*!\n * Statically set name\n */\n\nAssertionError.prototype.name = 'AssertionError';\n\n/*!\n * Ensure correct constructor\n */\n\nAssertionError.prototype.constructor = AssertionError;\n\n/**\n * Allow errors to be converted to JSON for static transfer.\n *\n * @param {Boolean} include stack (default: `true`)\n * @return {Object} object that can be `JSON.stringify`\n */\n\nAssertionError.prototype.toJSON = function (stack) {\n  var extend = exclude('constructor', 'toJSON', 'stack')\n    , props = extend({ name: this.name }, this);\n\n  // include stack if exists and not turned off\n  if (false !== stack && this.stack) {\n    props.stack = this.stack;\n  }\n\n  return props;\n};\n","module.exports = require('./lib/eql');\n","/*!\n * deep-eql\n * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Module dependencies\n */\n\nvar type = require('type-detect');\n\n/*!\n * Buffer.isBuffer browser shim\n */\n\nvar Buffer;\ntry { Buffer = require('buffer').Buffer; }\ncatch(ex) {\n  Buffer = {};\n  Buffer.isBuffer = function() { return false; }\n}\n\n/*!\n * Primary Export\n */\n\nmodule.exports = deepEqual;\n\n/**\n * Assert super-strict (egal) equality between\n * two objects of any type.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @param {Array} memoised (optional)\n * @return {Boolean} equal match\n */\n\nfunction deepEqual(a, b, m) {\n  if (sameValue(a, b)) {\n    return true;\n  } else if ('date' === type(a)) {\n    return dateEqual(a, b);\n  } else if ('regexp' === type(a)) {\n    return regexpEqual(a, b);\n  } else if (Buffer.isBuffer(a)) {\n    return bufferEqual(a, b);\n  } else if ('arguments' === type(a)) {\n    return argumentsEqual(a, b, m);\n  } else if (!typeEqual(a, b)) {\n    return false;\n  } else if (('object' !== type(a) && 'object' !== type(b))\n  && ('array' !== type(a) && 'array' !== type(b))) {\n    return sameValue(a, b);\n  } else {\n    return objectEqual(a, b, m);\n  }\n}\n\n/*!\n * Strict (egal) equality test. Ensures that NaN always\n * equals NaN and `-0` does not equal `+0`.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} equal match\n */\n\nfunction sameValue(a, b) {\n  if (a === b) return a !== 0 || 1 / a === 1 / b;\n  return a !== a && b !== b;\n}\n\n/*!\n * Compare the types of two given objects and\n * return if they are equal. Note that an Array\n * has a type of `array` (not `object`) and arguments\n * have a type of `arguments` (not `array`/`object`).\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction typeEqual(a, b) {\n  return type(a) === type(b);\n}\n\n/*!\n * Compare two Date objects by asserting that\n * the time values are equal using `saveValue`.\n *\n * @param {Date} a\n * @param {Date} b\n * @return {Boolean} result\n */\n\nfunction dateEqual(a, b) {\n  if ('date' !== type(b)) return false;\n  return sameValue(a.getTime(), b.getTime());\n}\n\n/*!\n * Compare two regular expressions by converting them\n * to string and checking for `sameValue`.\n *\n * @param {RegExp} a\n * @param {RegExp} b\n * @return {Boolean} result\n */\n\nfunction regexpEqual(a, b) {\n  if ('regexp' !== type(b)) return false;\n  return sameValue(a.toString(), b.toString());\n}\n\n/*!\n * Assert deep equality of two `arguments` objects.\n * Unfortunately, these must be sliced to arrays\n * prior to test to ensure no bad behavior.\n *\n * @param {Arguments} a\n * @param {Arguments} b\n * @param {Array} memoize (optional)\n * @return {Boolean} result\n */\n\nfunction argumentsEqual(a, b, m) {\n  if ('arguments' !== type(b)) return false;\n  a = [].slice.call(a);\n  b = [].slice.call(b);\n  return deepEqual(a, b, m);\n}\n\n/*!\n * Get enumerable properties of a given object.\n *\n * @param {Object} a\n * @return {Array} property names\n */\n\nfunction enumerable(a) {\n  var res = [];\n  for (var key in a) res.push(key);\n  return res;\n}\n\n/*!\n * Simple equality for flat iterable objects\n * such as Arrays or Node.js buffers.\n *\n * @param {Iterable} a\n * @param {Iterable} b\n * @return {Boolean} result\n */\n\nfunction iterableEqual(a, b) {\n  if (a.length !==  b.length) return false;\n\n  var i = 0;\n  var match = true;\n\n  for (; i < a.length; i++) {\n    if (a[i] !== b[i]) {\n      match = false;\n      break;\n    }\n  }\n\n  return match;\n}\n\n/*!\n * Extension to `iterableEqual` specifically\n * for Node.js Buffers.\n *\n * @param {Buffer} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction bufferEqual(a, b) {\n  if (!Buffer.isBuffer(b)) return false;\n  return iterableEqual(a, b);\n}\n\n/*!\n * Block for `objectEqual` ensuring non-existing\n * values don't get in.\n *\n * @param {Mixed} object\n * @return {Boolean} result\n */\n\nfunction isValue(a) {\n  return a !== null && a !== undefined;\n}\n\n/*!\n * Recursively check the equality of two objects.\n * Once basic sameness has been established it will\n * defer to `deepEqual` for each enumerable key\n * in the object.\n *\n * @param {Mixed} a\n * @param {Mixed} b\n * @return {Boolean} result\n */\n\nfunction objectEqual(a, b, m) {\n  if (!isValue(a) || !isValue(b)) {\n    return false;\n  }\n\n  if (a.prototype !== b.prototype) {\n    return false;\n  }\n\n  var i;\n  if (m) {\n    for (i = 0; i < m.length; i++) {\n      if ((m[i][0] === a && m[i][1] === b)\n      ||  (m[i][0] === b && m[i][1] === a)) {\n        return true;\n      }\n    }\n  } else {\n    m = [];\n  }\n\n  try {\n    var ka = enumerable(a);\n    var kb = enumerable(b);\n  } catch (ex) {\n    return false;\n  }\n\n  ka.sort();\n  kb.sort();\n\n  if (!iterableEqual(ka, kb)) {\n    return false;\n  }\n\n  m.push([ a, b ]);\n\n  var key;\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], m)) {\n      return false;\n    }\n  }\n\n  return true;\n}\n","module.exports = require('./lib/type');\n","/*!\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Primary Exports\n */\n\nvar exports = module.exports = getType;\n\n/*!\n * Detectable javascript natives\n */\n\nvar natives = {\n    '[object Array]': 'array'\n  , '[object RegExp]': 'regexp'\n  , '[object Function]': 'function'\n  , '[object Arguments]': 'arguments'\n  , '[object Date]': 'date'\n};\n\n/**\n * ### typeOf (obj)\n *\n * Use several different techniques to determine\n * the type of object being tested.\n *\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\n\nfunction getType (obj) {\n  var str = Object.prototype.toString.call(obj);\n  if (natives[str]) return natives[str];\n  if (obj === null) return 'null';\n  if (obj === undefined) return 'undefined';\n  if (obj === Object(obj)) return 'object';\n  return typeof obj;\n}\n\nexports.Library = Library;\n\n/**\n * ### Library\n *\n * Create a repository for custom type detection.\n *\n * ```js\n * var lib = new type.Library;\n * ```\n *\n */\n\nfunction Library () {\n  this.tests = {};\n}\n\n/**\n * #### .of (obj)\n *\n * Expose replacement `typeof` detection to the library.\n *\n * ```js\n * if ('string' === lib.of('hello world')) {\n *   // ...\n * }\n * ```\n *\n * @param {Mixed} object to test\n * @return {String} type\n */\n\nLibrary.prototype.of = getType;\n\n/**\n * #### .define (type, test)\n *\n * Add a test to for the `.test()` assertion.\n *\n * Can be defined as a regular expression:\n *\n * ```js\n * lib.define('int', /^[0-9]+$/);\n * ```\n *\n * ... or as a function:\n *\n * ```js\n * lib.define('bln', function (obj) {\n *   if ('boolean' === lib.of(obj)) return true;\n *   var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];\n *   if ('string' === lib.of(obj)) obj = obj.toLowerCase();\n *   return !! ~blns.indexOf(obj);\n * });\n * ```\n *\n * @param {String} type\n * @param {RegExp|Function} test\n * @api public\n */\n\nLibrary.prototype.define = function (type, test) {\n  if (arguments.length === 1) return this.tests[type];\n  this.tests[type] = test;\n  return this;\n};\n\n/**\n * #### .test (obj, test)\n *\n * Assert that an object is of type. Will first\n * check natives, and if that does not pass it will\n * use the user defined custom tests.\n *\n * ```js\n * assert(lib.test('1', 'int'));\n * assert(lib.test('yes', 'bln'));\n * ```\n *\n * @param {Mixed} object\n * @param {String} type\n * @return {Boolean} result\n * @api public\n */\n\nLibrary.prototype.test = function (obj, type) {\n  if (type === getType(obj)) return true;\n  var test = this.tests[type];\n\n  if (test && 'regexp' === getType(test)) {\n    return test.test(obj);\n  } else if (test && 'function' === getType(test)) {\n    return test(obj);\n  } else {\n    throw new ReferenceError('Type test \"' + type + '\" not defined or invalid.');\n  }\n};\n","/*!\n * type-detect\n * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>\n * MIT Licensed\n */\n\n/*!\n * Primary Exports\n */\n\nvar exports = module.exports = getType;\n\n/**\n * ### typeOf (obj)\n *\n * Use several different techniques to determine\n * the type of object being tested.\n *\n *\n * @param {Mixed} object\n * @return {String} object type\n * @api public\n */\nvar objectTypeRegexp = /^\\[object (.*)\\]$/;\n\nfunction getType(obj) {\n  var type = Object.prototype.toString.call(obj).match(objectTypeRegexp)[1].toLowerCase();\n  // Let \"new String('')\" return 'object'\n  if (typeof Promise === 'function' && obj instanceof Promise) return 'promise';\n  // PhantomJS has type \"DOMWindow\" for null\n  if (obj === null) return 'null';\n  // PhantomJS has type \"DOMWindow\" for undefined\n  if (obj === undefined) return 'undefined';\n  return type;\n}\n\nexports.Library = Library;\n\n/**\n * ### Library\n *\n * Create a repository for custom type detection.\n *\n * ```js\n * var lib = new type.Library;\n * ```\n *\n */\n\nfunction Library() {\n  if (!(this instanceof Library)) return new Library();\n  this.tests = {};\n}\n\n/**\n * #### .of (obj)\n *\n * Expose replacement `typeof` detection to the library.\n *\n * ```js\n * if ('string' === lib.of('hello world')) {\n *   // ...\n * }\n * ```\n *\n * @param {Mixed} object to test\n * @return {String} type\n */\n\nLibrary.prototype.of = getType;\n\n/**\n * #### .define (type, test)\n *\n * Add a test to for the `.test()` assertion.\n *\n * Can be defined as a regular expression:\n *\n * ```js\n * lib.define('int', /^[0-9]+$/);\n * ```\n *\n * ... or as a function:\n *\n * ```js\n * lib.define('bln', function (obj) {\n *   if ('boolean' === lib.of(obj)) return true;\n *   var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];\n *   if ('string' === lib.of(obj)) obj = obj.toLowerCase();\n *   return !! ~blns.indexOf(obj);\n * });\n * ```\n *\n * @param {String} type\n * @param {RegExp|Function} test\n * @api public\n */\n\nLibrary.prototype.define = function(type, test) {\n  if (arguments.length === 1) return this.tests[type];\n  this.tests[type] = test;\n  return this;\n};\n\n/**\n * #### .test (obj, test)\n *\n * Assert that an object is of type. Will first\n * check natives, and if that does not pass it will\n * use the user defined custom tests.\n *\n * ```js\n * assert(lib.test('1', 'int'));\n * assert(lib.test('yes', 'bln'));\n * ```\n *\n * @param {Mixed} object\n * @param {String} type\n * @return {Boolean} result\n * @api public\n */\n\nLibrary.prototype.test = function(obj, type) {\n  if (type === getType(obj)) return true;\n  var test = this.tests[type];\n\n  if (test && 'regexp' === getType(test)) {\n    return test.test(obj);\n  } else if (test && 'function' === getType(test)) {\n    return test(obj);\n  } else {\n    throw new ReferenceError('Type test \"' + type + '\" not defined or invalid.');\n  }\n};\n","/*!\n * jQuery JavaScript Library v2.2.3\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-04-05T19:26Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.3\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = iframe[ 0 ].contentDocument;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE9-11+\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tcontainer.appendChild( div );\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// At this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// At this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// At this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// Support: IE11 only\n\t// In IE 11 fullscreen elements inside of an iframe have\n\t// 100x too small dimensions (gh-1764).\n\tif ( document.msFullscreenElement && window.top !== window ) {\n\n\t\t// Support: IE11 only\n\t\t// Running getBoundingClientRect on a disconnected node\n\t\t// in IE throws an error.\n\t\tif ( elem.getClientRects().length ) {\n\t\t\tval = Math.round( elem.getBoundingClientRect()[ name ] * 100 );\n\t\t}\n\t}\n\n\t// Some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// Check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// Use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display !== \"none\" || !hidden ) {\n\t\t\t\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\t\t\"float\": \"cssFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// Support: Android 2.3\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE9\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE9-10 do not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tdataPriv.get( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\t\t\tstyle.display = \"inline-block\";\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// Store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\n\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: iOS<=5.1, Android<=4.2+\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE<=11+\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: Android<=2.3\n\t// Options inside disabled selects are incorrectly marked as disabled\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<=11+\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle;\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ name ];\n\t\t\tattrHandle[ name ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tname.toLowerCase() :\n\t\t\t\tnull;\n\t\t\tattrHandle[ name ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\telem[ type ]();\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// But now, this \"simulate\" function is used only for events\n\t\t\t\t// for which stopPropagation() is noop, so there is no need for that anymore.\n\t\t\t\t//\n\t\t\t\t// For the 1.x branch though, guard for \"click\" and \"submit\"\n\t\t\t\t// events is still used, but was moved to jQuery.event.stopPropagation function\n\t\t\t\t// because `originalEvent` should point to the original event for the constancy\n\t\t\t\t// with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Support: Android 2.3\n// Workaround failure to string-cast null input\njQuery.parseJSON = function( data ) {\n\treturn JSON.parse( data + \"\" );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\njQuery.expr.filters.hidden = function( elem ) {\n\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE9\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\telem = this[ 0 ],\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\tbox = elem.getBoundingClientRect();\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top + win.pageYOffset - docElem.clientTop,\n\t\t\tleft: box.left + win.pageXOffset - docElem.clientLeft\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume getBoundingClientRect is there when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\n} );\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport LayerItsInventory from '../layers/LayerItsInventory';\r\nimport * as colors from '../util/colors';\r\nimport provide from '../util/provide';\r\nlet nm = provide('collections');\r\n\r\n\r\nlet itsConfig = [\r\n    {name: 'Camera', itsType: 'cctv', minZoom: 11, itsIcon: 'cctv.png'},\r\n    {\r\n        name: 'Message Signs',\r\n        itsType: 'DMS',\r\n        minZoom: 11,\r\n        itsIconConfig: {\r\n            prop: 'dmsType',\r\n            defaultName: 'DMS',\r\n            defaultIcon: 'dms.png',\r\n            iconArray: [\r\n                ['pcms', 'PCMS', 'pcms.png']\r\n            ]\r\n        }\r\n    },\r\n    {name: 'Lighting', itsType: 'light', minZoom: 16, itsIcon: 'streetlight.png', visible: false, onDemand: true},\r\n    {name: 'Bluetooth', itsType: 'blue', minZoom: 10, itsIcon: 'bluetooth.png', visible: false},\r\n    {name: 'Cabinets', itsType: 'cabinet', minZoom: 10, itsIcon: 'cabinet.png', visible: false},\r\n    {name: 'Hut', itsType: 'hut', minZoom: 10, itsIcon: 'hut.png', visible: false},\r\n    {name: 'Vault', itsType: 'vault', minZoom: 13, itsIcon: 'vault.png', visible: false},\r\n    {name: 'Advisory Radio', itsType: 'har', minZoom: 10, itsIcon: 'har.png', visible: false},\r\n    {\r\n        name: 'Loop Detectors',\r\n        itsType: 'loop',\r\n        legendCollapse: true,\r\n        minZoom: 14,\r\n        visible: false,\r\n        itsIconConfig: {\r\n            prop: 'dtctrType',\r\n            defaultName: 'Other',\r\n            defaultIcon: 'loopdetectorother.png',\r\n            iconArray: [\r\n                ['detector', 'Detector', 'loopdetector.png'],\r\n                ['long', 'Long', 'loopdetectorlong.png'],\r\n                ['zone', 'Zone', 'loopdetectorzone.png']\r\n            ]\r\n        },\r\n        onDemand: true\r\n    },\r\n    {name: 'Microwave', itsType: 'microwave', minZoom: 14, itsIcon: 'microwave.png', visible: false},\r\n    {name: 'Pull Box', itsType: 'pull', minZoom: 14, itsIcon: 'pullbox.png', visible: false, onDemand: true},\r\n    {name: 'RWIS', itsType: 'rwis', minZoom: 7, itsIcon: 'rwis.png', visible: false},\r\n    {name: 'Ramp Gates', itsType: 'gate', minZoom: 10, itsIcon: 'rampgate.png', visible: false},\r\n    {name: 'Ramp Meter', itsType: 'meter', minZoom: 10, itsIcon: 'rampmeter.png', visible: false},\r\n    {name: 'Signal', itsType: 'signal', minZoom: 13, itsIcon: 'signal.png', visible: false, onDemand: true},\r\n    {name: 'Tower', itsType: 'tower', minZoom: 10, itsIcon: 'tower.png', visible: false},\r\n    {\r\n        name: 'Trench',\r\n        itsType: 'trench',\r\n        onDemand: true,\r\n        visible: false,\r\n        onDemandDelay: 500,\r\n        minZoom: 15,\r\n        legendCollapse: true,\r\n        itsLineConfig: {\r\n            prop: 'owner',\r\n            //defaultName: 'Other',\r\n            //defaultWidth: 7,\r\n            defaultColor: colors.hexAlphaToRgbOrRgba('#747474', 0.8),\r\n            lineArray: [\r\n                ['WisDOT', 'WisDOT', colors.hexAlphaToRgbOrRgba('#FF032F', 0.7)],\r\n                ['WIN', 'WIN', colors.hexAlphaToRgbOrRgba('#FFC632', 0.7)],\r\n                ['USXchange', 'USXchange', colors.hexAlphaToRgbOrRgba('#2DFF46', 0.7)],\r\n                ['AT&T', 'AT&T', colors.hexAlphaToRgbOrRgba('#ff2be5', 0.7)],\r\n                ['Touch America', 'Touch America', colors.hexAlphaToRgbOrRgba('#52f3ff', 0.7)],\r\n                ['Qwest', 'Qwest', colors.hexAlphaToRgbOrRgba('#9278ff', 0.7)],\r\n                ['McLeodUSA', 'McLeodUSA', colors.hexAlphaToRgbOrRgba('#2926FF', 0.7)],\r\n                ['CINC', 'CINC', colors.hexAlphaToRgbOrRgba('#CB00FF', 0.7)],\r\n                ['City of Madison', 'Madison', colors.hexAlphaToRgbOrRgba('#000380', 0.7)]\r\n            ]\r\n        }\r\n    }\r\n\r\n\r\n];\r\n\r\n\r\nclass ItsLayerCollection {\r\n\r\n    /**\r\n     * Create a collection of all ITS layers\r\n     * @param {ol.Map} theMap the openlayers map\r\n     * @param {Array} [exclude=[]] array of Its layer identifiers to exclude\r\n     *\r\n     * BLUE Bluetooth Detector - Bluetooth Detector\r\n     * CABINET Cabinets - The cabinets\r\n     * CCTV Camera - Traffic Cameras\r\n     * HUT Communication Hut - Communication Hut\r\n     * VAULT Communication Vault - The communication vaults\r\n     * HAR Highway Advisory Radio - Advisory Radios\r\n     * LIGHT Lighting - Lighting\r\n     * LOOP Loop Detectors - Loop Detectors\r\n     * DMS Message Board - Message Boards and Signs\r\n     * MICROWAVE Microwave Detector - Microwave Detectors\r\n     * PULL Pull Box - A pull box\r\n     * RWIS RWIS - Road weather information system\r\n     * GATE Ramp Gate - The ramp Gates\r\n     * METER Ramp Meter - The ramp meters\r\n     * SIGNAL Signal - Traffic Signal\r\n     * TOWER Tower - The towers\r\n     * TRENCH\r\n     */\r\n    constructor(theMap, exclude) {\r\n\r\n        this.map = theMap;\r\n        this._layers = [];\r\n\r\n        exclude = typeof exclude == 'object' ? exclude : [];\r\n\r\n        for (let i = 0; i < itsConfig.length; i++) {\r\n            let lyrConfig = itsConfig[i];\r\n            let addLayer = true;\r\n\r\n            for (let j = 0; j < exclude.length; j++) {\r\n                if (exclude[j] == lyrConfig.itsType) {\r\n                    addLayer = false;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (addLayer) {\r\n                let inventLyr = new LayerItsInventory(lyrConfig);\r\n                this['map'].addLayer(inventLyr.olLayer);\r\n                this._layers.push(inventLyr);\r\n\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Return the array of layers in this collection\r\n     * @returns {Array<LayerItsInventory>} an array of layers\r\n     */\r\n    get layers() {\r\n        return this._layers;\r\n    }\r\n}\r\n\r\nnm.ItsLayerCollection = ItsLayerCollection;\r\nexport default ItsLayerCollection;\r\n","/**\r\n * Created by gavorhes on 12/16/2015.\r\n */\r\nimport $ from '../jquery';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nimport mapMove from '../olHelpers/mapMove';\r\nlet nm = provide('collections');\r\n\r\nclass LayerGroup {\r\n\r\n    /**\r\n     *\r\n     * @param {object} [groupConfig={}] - group configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} [groupConfig.collapse=false] - if the group should be collapsed initially\r\n     * @param {boolean} [groupConfig.addCheck=true] - if the group should have a checkbox controlling visibility of all layers\r\n     * @param {LayerGroup} [parent=undefined] - the parent group\r\n     */\r\n    constructor(groupConfig, parent) {\r\n        this.groupLayers = [];\r\n        this.groupLayersLookup = {};\r\n        this.groupGroups = [];\r\n        this.groupGroupsLookup = {};\r\n        this.itemIdArray = [];\r\n\r\n        if (typeof groupConfig == 'undefined') {\r\n            this.parent = null;\r\n            this.groupId = 'root';\r\n            this.groupName = 'root';\r\n            this.allGroupLookup = {root: this};\r\n            this.allGroupArray = [this];\r\n            this.allLayerArray = [];\r\n            this.allLayerLookup = {};\r\n            this.layerParentLookup = {};\r\n            this.collapse = false;\r\n            this.addCheck = false;\r\n        } else {\r\n            this.groupId = makeGuid();\r\n            this.parent = parent;\r\n            this.groupName = groupConfig.groupName;\r\n            this.collapse = typeof  groupConfig.collapse == 'boolean' ? groupConfig.collapse : false;\r\n            this.addCheck = typeof  groupConfig.addCheck == 'boolean' ? groupConfig.addCheck : true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {object} groupConfig - configuration object\r\n     * @param {string} groupConfig.groupName - the group name\r\n     * @param {boolean} groupConfig.collapse if the group should be collapsed initially\r\n     * @param {boolean} groupConfig.addCheck if the group should have a checkbox controlling visibility of all layers\r\n     * @param {Array<LayerGroup>} parents parent groups\r\n     * @returns {LayerGroup} the layer group just added\r\n     */\r\n    addGroup(groupConfig, parents) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n        let newGroup = new LayerGroup(groupConfig, parentGroup);\r\n        this.allGroupLookup[newGroup.groupId] = newGroup;\r\n        this.allGroupArray.push(newGroup);\r\n\r\n        parentGroup.groupGroups.push(newGroup);\r\n        parentGroup.groupGroupsLookup[newGroup.groupId] = newGroup;\r\n\r\n        if (parentGroup.itemIdArray.indexOf(newGroup.groupId) > 0) {\r\n            console.log(newGroup.groupId);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newGroup.groupId);\r\n\r\n        return newGroup;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} newLayer the layer to be added\r\n     * @param {Array} parents array\r\n     */\r\n    addLegendLayer(newLayer, parents) {\r\n        let parent;\r\n        if (parents.length > 0) {\r\n            parent = parents[parents.length - 1];\r\n        } else {\r\n            parent = 'root';\r\n        }\r\n\r\n        this.allLayerLookup[newLayer.id] = newLayer;\r\n        this.allLayerArray.push(newLayer);\r\n\r\n        /**\r\n         * @type {LayerGroup}\r\n         */\r\n        let parentGroup = this.allGroupLookup[parent];\r\n\r\n        parentGroup.groupLayers.push(newLayer);\r\n        parentGroup.groupLayersLookup[newLayer.id] = newLayer;\r\n        if (parentGroup.itemIdArray.indexOf(newLayer.id) > 0) {\r\n            console.log(newLayer.id);\r\n            throw 'layer and group ids must be unique';\r\n        }\r\n        parentGroup.itemIdArray.push(newLayer.id);\r\n\r\n        this.layerParentLookup[newLayer.id] = parentGroup;\r\n\r\n    }\r\n\r\n    getLegendHtml(legendId, options) {\r\n\r\n\r\n        let legendHtml = `<ul id=\"${legendId}\" class=\"legend-container\">`;\r\n\r\n        legendHtml += `<li>${options.legendTitle}<input type=\"checkbox\" checked id=\"suppress-by-extent-${legendId}\" class=\"suppress-by-extent\">` +\r\n            `<label title=\"Suppress layers not visible at this zoom level\" for=\"suppress-by-extent-${legendId}\">` +\r\n            `<span></span>` +\r\n            `</label></li>`;\r\n\r\n        legendHtml += this._buildLegend(this.itemIdArray, this, options.layerDivClasses) + '</ul>';\r\n\r\n        return legendHtml;\r\n    }\r\n\r\n    /**\r\n     * @param {Array} itemIds the items to process\r\n     * @param {LayerGroup} theGroup new group\r\n     * @param {Array} [layerDivClasses=[]] optional classes to apply to the layer divs\r\n     * @static\r\n     * @returns {string} html string\r\n     */\r\n    _buildLegend(itemIds, theGroup, layerDivClasses) {\r\n\r\n        if (itemIds.length == 0) {\r\n            return '';\r\n        }\r\n\r\n        let theHml = '';\r\n\r\n        let itemId = itemIds[0];\r\n\r\n        if (theGroup.groupLayersLookup[itemId]) {\r\n\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let lyr = theGroup.groupLayersLookup[itemId];\r\n            theHml += `<li id=\"${lyr.id}-layer-li\" class=\"legend-layer-li ${layerDivClasses.join(' ')}\">` + lyr.getLegendDiv() + '</li>';\r\n\r\n\r\n        } else if (theGroup.groupGroupsLookup[itemId]) {\r\n            /**\r\n             * type {LayerGroup}\r\n             */\r\n            let otherGroup = theGroup.groupGroupsLookup[itemId];\r\n\r\n            theHml += `<li>`;\r\n            theHml += `<div id=\"${otherGroup.groupId}-legend-layer-div\" ` +\r\n                `class=\"legend-layer-group  ${layerDivClasses.join(' ')}\">`;\r\n\r\n            if (otherGroup.addCheck) {\r\n                theHml += `<input type=\"checkbox\" checked id=\"${otherGroup.groupId}-group-chck\">` +\r\n                    `<label for=\"${otherGroup.groupId}-group-chck\" title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            } else {\r\n                theHml += `<label title=\"Click arrow to expand or collapse\">${otherGroup.groupName}</label>`;\r\n            }\r\n\r\n            theHml += `<span title=\"Expand/Collapse\" class=\"layer-group-expander`;\r\n            theHml += `${otherGroup.collapse ? ' legend-layer-group-initial-collapse' : ''}\">`;\r\n            theHml += otherGroup.collapse ? '&#9654;' : '&#9660;';\r\n            theHml += '</span>';\r\n\r\n            //parents.push(groupId);\r\n            theHml += '<ul>' + this._buildLegend(otherGroup.itemIdArray, otherGroup, layerDivClasses) + '</ul>';\r\n            theHml += '</div>';\r\n            theHml += '</li>';\r\n        }\r\n\r\n        return theHml + this._buildLegend(itemIds.slice(1), theGroup, layerDivClasses);\r\n    }\r\n}\r\n\r\n/**\r\n * a wrapper to make a legend\r\n */\r\nclass LayerLegend {\r\n\r\n    /**\r\n     *\r\n     * @param {Array} legendItems array of layers or objects with {groupName:  {string}, collapse: {boolean}, addCheck: {boolean}, items: {Array}}\r\n     * @param {string} divId the div where the legend should be added\r\n     * @param {object} options for legend\r\n     * @param {Array} [options.layerDivClasses=[]] optional array of classes to be applied to the layer legend divs for custom styling\r\n     * @param {string} [options.legendTitle=Legend] the legend title\r\n     * @param {bool} [options.scaleDependent=true] if legend display is scale dependent\r\n     */\r\n    constructor(legendItems, divId, options) {\r\n        for (let i of legendItems) {\r\n            if (typeof i == 'undefined') {\r\n                throw 'undefined item passed in array to legend constructor';\r\n            }\r\n        }\r\n\r\n        options = options || {};\r\n\r\n        options.legendTitle = typeof options.legendTitle == 'string' ? options.legendTitle : 'Legend';\r\n        options.scaleDependent = typeof options.scaleDependent == 'boolean' ? options.scaleDependent : true;\r\n        options.layerDivClasses = options.layerDivClasses || [];\r\n\r\n        // if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n        }\r\n\r\n        this.$divElement = $('#' + divId);\r\n\r\n        this._legendItems = legendItems;\r\n\r\n        this.layerGroup = new LayerGroup();\r\n\r\n        this._buildTree(legendItems);\r\n\r\n        this.legendId = makeGuid();\r\n\r\n        this.$divElement.append(this.layerGroup.getLegendHtml(this.legendId, options));\r\n\r\n        for (let l of this.layerGroup.allLayerArray){\r\n            l.applyCollapse();\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        //// if legend display is scale dependent, make sure the mapMove object is initialized first\r\n        if (options.scaleDependent) {\r\n            mapMove.checkInit();\r\n\r\n            mapMove.addCallback(function (ext, zoom, evt) {\r\n                if (typeof evt == 'undefined' || evt == 'change:resolution') {\r\n                    for (let lyr of this.layerGroup.allLayerArray) {\r\n                        let $lyrLi = $('#' + lyr.id + '-layer-li');\r\n                        if (zoom > lyr.maxZoom || zoom < lyr.minZoom) {\r\n                            $lyrLi.addClass('layer-not-visible');\r\n                        } else {\r\n                            $lyrLi.removeClass('layer-not-visible');\r\n                        }\r\n                    }\r\n                }\r\n            }, this, 100, true, 'legend1');\r\n        }\r\n\r\n        // <editor-fold desc=\"add event listeners\">\r\n\r\n        this.$divElement.find(\".suppress-by-extent\").change(function () {\r\n            let legendLayerLis = $('.legend-layer-li');\r\n            if (this.checked) {\r\n                legendLayerLis.removeClass('layer-force-show');\r\n            } else {\r\n                legendLayerLis.addClass('layer-force-show');\r\n            }\r\n        });\r\n\r\n\r\n        this.$divElement.find('.legend-check').change(function () {\r\n            let lyrId = this.id.replace('-legend-layer-check', '');\r\n            _this.layerGroup.allLayerLookup[lyrId].visible = this.checked;\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group > input[type=checkbox]').change(function () {\r\n            $(this).siblings('ul').find('input[type=checkbox]').prop('checked', this.checked).trigger('change');\r\n        });\r\n\r\n        this.$divElement.find('.layer-group-expander').click(function () {\r\n            let $this = $(this);\r\n            $this.removeClass('legend-layer-group-initial-collapse');\r\n\r\n            $this.siblings('ul').slideToggle();\r\n\r\n            if ($this.hasClass('legend-layer-group-collapsed')){\r\n                $this.removeClass('legend-layer-group-collapsed');\r\n                $this.html('&#9660;');\r\n            } else {\r\n                $this.addClass('legend-layer-group-collapsed');\r\n                $this.html('&#9654;');\r\n            }\r\n        });\r\n\r\n        this.$divElement.find('.legend-layer-group-initial-collapse').trigger('click');\r\n        // </editor-fold>\r\n    }\r\n\r\n    /**\r\n     * @param {Array} [legendItems=this._layerConfig] the legend items\r\n     * @param {Array} [parents=[]] the ordered list of groups in which this item is a member\r\n     * @private\r\n     */\r\n    _buildTree(legendItems, parents) {\r\n\r\n        if (legendItems.length == 0) {\r\n            return;\r\n        }\r\n\r\n        let oneItem = legendItems[0];\r\n\r\n        //reset the parent if the item is in the base array\r\n        if (this._legendItems.indexOf(oneItem) > -1 || typeof parents == 'undefined') {\r\n            parents = [];\r\n        }\r\n\r\n        if (typeof oneItem['groupName'] !== 'undefined') {\r\n            let groupItem = legendItems[0];\r\n            let newGroup = this.layerGroup.addGroup(groupItem, parents);\r\n            parents.push(newGroup.groupId);\r\n            this._buildTree(groupItem.items, parents);\r\n        } else {\r\n            /**\r\n             * @type {LayerBase}\r\n             */\r\n            let layerItem = legendItems[0];\r\n\r\n            this.layerGroup.addLegendLayer(layerItem, parents);\r\n        }\r\n\r\n        this._buildTree(legendItems.slice(1), parents);\r\n    }\r\n\r\n    set showAll(val) {\r\n\r\n    }\r\n}\r\n\r\nnm.LayerLegend = LayerLegend;\r\nexport default LayerLegend;\r\n","/**\r\n * Created by gavorhes on 5/3/2016.\r\n */\r\nglobal.jQuery = require('jquery');\r\n\r\nexport default global.jQuery;","import $ from '../jquery';\r\nimport makeGuid from '../util/makeGuid';\r\nimport * as zoomResolutionConvert from '../olHelpers/zoomResolutionConvert';\r\nimport provide from '../util/provide';\r\nconst nm = provide('layers');\r\n\r\n/**\r\n * The base layer class\r\n * @abstract\r\n */\r\nclass LayerBase {\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id=makeGuid()] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] - the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] - the z index for the layer\r\n     * @param {function} [options.loadCallback] - function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] - if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] - if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent=undefined] - additional content to add to the legend\r\n     */\r\n    constructor(url, options) {\r\n        options = options || {};\r\n\r\n        if (typeof url !== 'string') {\r\n            throw 'Invalid URL';\r\n        }\r\n        this._url = url;\r\n        \r\n        \r\n        \r\n        this._params = typeof options.params == 'object' ? options.params : {};\r\n        this._legendCollapse = typeof options.legendCollapse == 'boolean' ? options.legendCollapse : false;\r\n        this._legendCheckbox = typeof options.legendCheckbox == 'boolean' ? options.legendCheckbox : true;\r\n\r\n        this.id = options.id || makeGuid();\r\n        this._name = options.name || 'Unnamed Layer';\r\n        this.animate = false;\r\n        this._opacity = typeof options.opacity == 'number' ? options.opacity : 1;\r\n\r\n        if (this._opacity > 1) {\r\n            this._opacity = 1;\r\n        } else if (this._opacity < 0) {\r\n            this._opacity = 0;\r\n        }\r\n\r\n        this._visible = typeof options.visible === 'boolean' ? options.visible : true;\r\n        \r\n        this._source = undefined;\r\n        this.olLayer = undefined;\r\n        this._loaded = false;\r\n\r\n        this._maxResolution = zoomResolutionConvert.zoomToResolution(options.minZoom);\r\n        if (typeof this._maxResolution !== 'undefined') {\r\n            this._maxResolution += 0.00001;\r\n        }\r\n        this._minResolution = zoomResolutionConvert.zoomToResolution(options.maxZoom);\r\n\r\n        this._minZoom = typeof options.minZoom == 'number' ? options.minZoom : undefined;\r\n        this._maxZoom = typeof options.maxZoom == 'number' ? options.maxZoom : undefined;\r\n        this._zIndex = typeof options.zIndex == 'number' ? options.zIndex : 0;\r\n\r\n        this.loadCallback = typeof options.loadCallback == 'function' ? options.loadCallback : function () {\r\n        };\r\n\r\n\r\n        this._legendContent = '';\r\n\r\n        if (this._legendCheckbox) {\r\n            this._legendContent += `<input type=\"checkbox\" ${this.visible ? 'checked' : ''} ` +\r\n                `class=\"legend-check\" id=\"${this.id}-legend-layer-check\"><span></span>`;\r\n            this._legendContent += `<label for=\"${this.id}-legend-layer-check\" class=\"legend-layer-name\">${this.name}</label>`;\r\n        } else {\r\n            this._legendContent += `<label class=\"legend-layer-name\">${this.name}</label>`;\r\n        }\r\n\r\n        this._$legendDiv = null;\r\n        this._applyCollapseCalled = false;\r\n        this._addLegendContent(typeof options.legendContent === 'string' ? options.legendContent : undefined);\r\n    }\r\n\r\n    /**\r\n     * base load function, sets _loaded = true if it is not already\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (this.loaded == true) {\r\n            return true;\r\n        } else {\r\n            this._loaded = true;\r\n\r\n            return false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the legend html, be sure to only add to the DOM once\r\n     * @returns {string} html for layer wrapped in a div\r\n     */\r\n    getLegendDiv() {\r\n        return `<div class=\"legend-layer-div\" id=\"${this.id}-legend-layer-div\">${this._legendContent}</div>`;\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {string|undefined} additionalContent - additional content to add to legend\r\n     * @private\r\n     */\r\n    _addLegendContent(additionalContent) {\r\n        additionalContent = typeof additionalContent == 'string' ? additionalContent : '';\r\n\r\n        let addCollapse = additionalContent.indexOf('<ul>') > -1;\r\n\r\n        if (addCollapse) {\r\n            additionalContent = '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span>' + additionalContent;\r\n        }\r\n\r\n        this._legendContent += additionalContent;\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n            this._$legendDiv.append(additionalContent);\r\n            this.applyCollapse();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=] - additonal content to add\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        this._addLegendContent(additionalContent);\r\n    }\r\n\r\n    applyCollapse() {\r\n        if (this._applyCollapseCalled) {\r\n            console.log('collapse already applied');\r\n\r\n            return undefined;\r\n        }\r\n\r\n        this._$legendDiv = $(`#${this.id}-legend-layer-div`);\r\n\r\n        if (this._$legendDiv.length > 0) {\r\n\r\n            let $expander = this._$legendDiv.find('.legend-items-expander');\r\n\r\n            if ($expander.length > 0) {\r\n                this._applyCollapseCalled = true;\r\n\r\n                $expander.click(function () {\r\n                    let $this = $(this);\r\n\r\n                    $this.siblings('ul').slideToggle();\r\n\r\n                    if ($this.hasClass('legend-layer-group-collapsed')) {\r\n                        $this.removeClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9660;');\r\n                    } else {\r\n                        $this.addClass('legend-layer-group-collapsed');\r\n                        $this.html('&#9654;');\r\n                    }\r\n                });\r\n\r\n                if (this._legendCollapse) {\r\n                    $expander.trigger('click');\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trick to refresh the layer\r\n     */\r\n    refresh(){\r\n        if (this.source){\r\n            this.source.refresh();\r\n            //let src = this.source;\r\n            //this.olLayer.setSource(undefined);\r\n            //this.olLayer.setSource(src);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * get the legend content\r\n     * @type {string}\r\n     */\r\n    get legendContent() {\r\n        return this._legendContent;\r\n    }\r\n\r\n    /**\r\n     * set the legend content directly\r\n     * @param {string} newVal - new content\r\n     * @protected\r\n     */\r\n    set legendContent(newVal) {\r\n        this._legendContent = newVal;\r\n    }\r\n\r\n    /**\r\n     * get the map get params\r\n     * @type {object}\r\n     */\r\n    get params() {\r\n        return this._params;\r\n    }\r\n\r\n    /**\r\n     * set the map get params\r\n     * @param {object} newParams - new get params\r\n     * @protected\r\n     */\r\n    set params(newParams){\r\n        this._params = newParams;\r\n    }\r\n\r\n    /**\r\n     * get the minimum resolution\r\n     * @type {number|*}\r\n     */\r\n    get minResolution() {\r\n        return this._minResolution;\r\n    }\r\n\r\n    /**\r\n     * get the maximum resolution\r\n     * @type {number|*}\r\n     */\r\n    get maxResolution() {\r\n        return this._maxResolution;\r\n    }\r\n\r\n    /**\r\n     * get min zoom\r\n     * @type {number|*}\r\n     */\r\n    get minZoom() {\r\n        return this._minZoom;\r\n    }\r\n\r\n    /**\r\n     * get max zoom\r\n     * @type {number|*}\r\n     */\r\n    get maxZoom() {\r\n        return this._maxZoom;\r\n    }\r\n\r\n    /**\r\n     * get the url\r\n     * @type {string}\r\n     */\r\n    get url() {\r\n        return this._url;\r\n    }\r\n\r\n    /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible() {\r\n        return this._visible;\r\n    }\r\n\r\n    /**\r\n     * Set the layer visibility\r\n     * @param {boolean} visibility - layer visibility\r\n     */\r\n    set visible(visibility) {\r\n        this._visible = visibility;\r\n        if (this.olLayer) {\r\n            this.olLayer.setVisible(this._visible);\r\n            if (visibility && !this._loaded) {\r\n                this._load();\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer opacity\r\n     * @type {number}\r\n     */\r\n    get opacity() {\r\n        return this._opacity;\r\n    }\r\n\r\n    /**\r\n     * Set the layer opacity\r\n     * @param {number} opacity - layer opacity\r\n     */\r\n    set opacity(opacity) {\r\n        this._opacity = opacity;\r\n        if (this.olLayer) {\r\n            this.olLayer.setOpacity(this._opacity);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Get the layer name\r\n     * @type {string}\r\n     */\r\n    get name() {\r\n        return this._name;\r\n    }\r\n\r\n    /**\r\n     * set the layer name\r\n     * @param {string} newName - the new name\r\n     */\r\n    set name(newName) {\r\n        this._name = newName;\r\n    }\r\n\r\n    /**\r\n     * Check if the layer is loaded\r\n     * @type {boolean}\r\n     */\r\n    get loaded() {\r\n        return this._loaded;\r\n    }\r\n\r\n    /**\r\n     * get the layer source\r\n     * @type {*}\r\n     */\r\n    get source() {\r\n        return this._source;\r\n    }\r\n\r\n    /**\r\n     * get the z index\r\n     * @type {number}\r\n     */\r\n    get zIndex(){\r\n        return this._zIndex;\r\n    }\r\n\r\n    /**\r\n     * set the z index\r\n     * @param {number} newZ - new Z index\r\n     */\r\n    set zIndex(newZ){\r\n        this._zIndex = newZ;\r\n        this.olLayer.setZIndex(this.zIndex);\r\n    }\r\n}\r\n\r\nnm.LayerBase = LayerBase;\r\nexport default LayerBase;\r\n","import $ from '../jquery';\r\nimport LayerBase from './LayerBase';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('layers');\r\n\r\n/**\r\n * The make mapMoveGetParams function takes the extent and the zoom level\r\n * context is 'this' object, probably want to do something with this.mapMoveParams\r\n * @callback mapMoveMakeGetParams\r\n * @param {LayerBaseVector} lyr\r\n * @param {object} extent\r\n * @param {number} extent.minX\r\n * @param {number} extent.minY\r\n * @param {number} extent.maxX\r\n * @param {number} extent.maxY\r\n * @param {number} zoomLevel\r\n */\r\n\r\n\r\n/**\r\n * The Vector layer base\r\n * @augments LayerBase\r\n * @abstract\r\n */\r\nclass LayerBaseVector extends LayerBase {\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - pass an empty string to prevent default load and add from a json source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     */\r\n    constructor(url, options) {\r\n        super(url, options);\r\n\r\n        //prevent regular load if no url has been provided\r\n        if (this.url.trim() == '') {\r\n            this._loaded = true;\r\n        }\r\n\r\n        this._style = typeof options.style == 'undefined' ? undefined : options.style;\r\n\r\n        if (this.visible) {\r\n            this._autoLoad = true;\r\n        } else {\r\n            this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);\r\n        }\r\n\r\n        this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;\r\n        this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;\r\n\r\n        if (options.mapMoveObj){\r\n            this._mapMove = options.mapMoveObj;\r\n        } else {\r\n            this._mapMove = this._onDemand ? mapMove : undefined;\r\n        }\r\n\r\n        this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :\r\n            function(lyr, extent, zoomLevel){\r\n                return {};\r\n            };\r\n\r\n        if (this._onDemand) {\r\n            this._loaded = true;\r\n            this._mapMoveParams = {};\r\n            this._mapMove.checkInit();\r\n            this._mapMove.addVectorLayer(this);\r\n        }\r\n\r\n        this._source = new ol.source.Vector();\r\n\r\n        /**\r\n         *\r\n         * @type {ol.layer.Vector|ol.layer.Base}\r\n         */\r\n        this.olLayer = new ol.layer.Vector(\r\n            {\r\n                source: this._source,\r\n                visible: this.visible,\r\n                style: this.style,\r\n                minResolution: this._minResolution,\r\n                maxResolution: this._maxResolution,\r\n                zIndex: this._zIndex\r\n            }\r\n        );\r\n    }\r\n\r\n    /**\r\n     * dummy to be overridden\r\n     * @param {object} featureCollection - geojson or esrijson object\r\n     */\r\n    addFeatures(featureCollection) {\r\n        console.log('Layer vector base addFeatures is a placeholder and does nothing');\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom, evtType) {\r\n        if (this.minZoom !== undefined) {\r\n            if (zoom < this.minZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        if (this.maxZoom !== undefined) {\r\n            if (zoom > this.maxZoom) {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        return this.visible;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        this._mapMoveParams = {};\r\n        $.extend(this._mapMoveParams, this.params);\r\n        $.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d) {\r\n        if (this.source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * clear features in the layer\r\n     */\r\n    clear() {\r\n        if (this._source) {\r\n            this._source.clear();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get on demand delay in miliseconds\r\n     * @type {number|*}\r\n     */\r\n    get onDemandDelay() {\r\n        return this._onDemandDelay;\r\n    }\r\n\r\n    /**\r\n     * get if the layer is autoloaded\r\n     * @type {boolean}\r\n     */\r\n    get autoLoad() {\r\n        return this._autoLoad;\r\n    }\r\n\r\n    /**\r\n     * get the style definition\r\n     * @type {ol.Style|styleFunc}\r\n     */\r\n    get style() {\r\n        return this._style;\r\n    }\r\n\r\n    /**\r\n     * set the style\r\n     * @param {ol.Style|styleFunc} style - the style or function\r\n     */\r\n    set style(style) {\r\n        this._style = style;\r\n        this.olLayer.setStyle(this._style);\r\n    }\r\n\r\n    /**\r\n     * get the map CRS if it is defined by the map move object\r\n     * @type {string|*}\r\n     */\r\n    get mapCrs() {\r\n        if (this._mapMove) {\r\n            return this._mapMove.map.getView().getProjection().getCode();\r\n        } else {\r\n            return undefined;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get the map move object\r\n     * @type {MapMoveCls|*}\r\n     */\r\n    get mapMove() {\r\n        return this._mapMove;\r\n    }\r\n\r\n    /**\r\n     * map move params\r\n     * @type {object}\r\n     */\r\n    get mapMoveParams() {\r\n        return this._mapMoveParams;\r\n    }\r\n\r\n        /**\r\n     * Get the layer visibility\r\n     * @type {boolean}\r\n     */\r\n    get visible() {\r\n        return super.visible;\r\n    }\r\n\r\n    /**\r\n     * Set the layer visibility\r\n     * @type {boolean}\r\n     * @override\r\n     */\r\n    set visible(visibility) {\r\n        super.visible = visibility;\r\n\r\n        if (this._onDemand) {\r\n            this.mapMove.triggerLyrLoad(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * get the layer vector source\r\n     * @override\r\n     * @type {ol.source.Vector}\r\n     */\r\n    get source(){\r\n        return super.source;\r\n    }\r\n\r\n    /**\r\n     * array of ol features\r\n     * @type {Array.<ol.Feature>}\r\n     */\r\n    get features(){\r\n        return this.source.getFeatures();\r\n    }\r\n}\r\n\r\nnm.LayerBaseVector = LayerBaseVector;\r\nexport default LayerBaseVector;\r\n","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport LayerBaseVector from './LayerBaseVector';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\n\r\nlet nm = provide('layers');\r\n\r\n/**\r\n * Base layer for esri vector layers\r\n * @augments LayerBaseVector\r\n */\r\nclass LayerBaseVectorEsri extends LayerBaseVector {\r\n\r\n    /**\r\n     * The base vector layer\r\n     * @param {string} url - url for source\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} [options.where=1=1] the layer filter clause\r\n     * @param {string} [options.outFields=*] comma separated list of output fields, defaults to all\r\n     * @param {string} [options.format=pjson] the format the retrieve the data\r\n     * @param {number} [options.outSR=3857] the output spatial reference, defaults to web mercator\r\n     * @param {boolean} [options.useEsriStyle=false] if the map service style should be used\r\n     * @param {boolean} [options.collapseLegend=false] if the legend should be initially collapsed\r\n     * @param {number} [options.mapMoveMakeGetParams=function(extent, zoomLevel){}] function to create additional map move params\r\n     */\r\n    constructor(url, options) {\r\n\r\n        if (typeof options.params != 'object') {\r\n            options.params = {};\r\n        }\r\n        options.params['where'] = options.where || '1=1';\r\n        options.params['outFields'] = options.outFields || '*';\r\n        options.params['f'] = options.format || 'pjson';\r\n        options.params['outSR'] = options.outSR || 3857;\r\n\r\n        super(url, options);\r\n        this._outSR = this.params['outSR'];\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n\r\n        if (this._url[this._url.length - 1] !== '/') {\r\n            this._url += '/';\r\n        }\r\n\r\n        this._urlCopy = this.url;\r\n        this._url += 'query?callback=?';\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n\r\n        this._useEsriStyle = typeof options.useEsriStyle == 'boolean' ? options.useEsriStyle : false;\r\n\r\n        if (this._useEsriStyle) {\r\n            this.addLegendContent();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content to add to legend\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        if (!this._useEsriStyle) {\r\n            super.addLegendContent(additionalContent);\r\n        } else {\r\n            $.get(this._urlCopy + '?f=pjson&callback=?', {}, (d) => {\r\n                if (d['subLayers'].length > 0) {\r\n                    alert('should only use single feature layers, not groups');\r\n\r\n                    return;\r\n                }\r\n\r\n                let newStyleAndLegend = esriToOl.makeFeatureServiceLegendAndSymbol(d);\r\n                this.style = newStyleAndLegend.style;\r\n                super.addLegendContent(newStyleAndLegend.legend);\r\n            }, 'json');\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - features as esrijson\r\n     */\r\n    addFeatures(featureCollection) {\r\n        let feats = this._esriFormat.readFeatures(featureCollection);\r\n        this.source.addFeatures(feats);\r\n    }\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n        $.get(this._url, this.params, (d) => {\r\n            this.addFeatures(d);\r\n            this.loadCallback(this);\r\n        }, 'json').fail(() => {\r\n                this._loaded = false;\r\n            });\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        this.mapMoveParams['geometry'] = `${extent.minX},${extent.minY},${extent.maxX},${extent.maxY}`;\r\n        this.mapMoveParams['geometryType'] = 'esriGeometryEnvelope';\r\n        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';\r\n        this.mapMoveParams['spatialRel'] = 'esriSpatialRelIntersects';\r\n        this.mapMoveParams['inSR'] = 3857;\r\n        if (this._outSR == 3857) {\r\n            this.mapMoveParams['geometryPrecision'] = 1;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Before call to map move callback, can prevent call by returning false\r\n     * @param {number} zoom - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     * @returns {boolean} if the call should proceed\r\n     */\r\n    mapMoveBefore(zoom, evtType) {\r\n        return super.mapMoveBefore(zoom, evtType);\r\n        //if (super.mapMoveBefore(zoom, evtType)){\r\n        //    //place holder for additional processing\r\n        //    return true;\r\n        //} else {\r\n        //    return false;\r\n        //}\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d - the json response\r\n     */\r\n    mapMoveCallback(d) {\r\n        super.mapMoveCallback(d);\r\n        this.source.addFeatures(this._esriFormat.readFeatures(d));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorEsri = LayerBaseVectorEsri;\r\nexport default LayerBaseVectorEsri;\r\n","/**\r\n * Created by gavorhes on 11/2/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport LayerBaseVector from './LayerBaseVector';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nlet nm = provide('layers');\r\n\r\n/**\r\n * The Vector GeoJson Layer\r\n * @augments LayerBaseVector\r\n */\r\nclass LayerBaseVectorGeoJson extends LayerBaseVector {\r\n\r\n    /**\r\n     * @param {string|undefined|null} url - resource url, set to '' to make blank layer\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     *\r\n     * @param {object} [options.transform={}] SR transform, set as false for no transform\r\n     * @param {string} options.transform.dataProjection=EPSG:4326 the data CRS\r\n     * @param {string} options.transform.featureProjection=EPSG:3857 the feature/map CRS\r\n     * @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     */\r\n    constructor(url, options) {\r\n        url = typeof url == 'string' ? url : '';\r\n        super(url, options);\r\n\r\n        this._geoJsonFormat = new ol.format.GeoJSON();\r\n\r\n        this._transform = options.transform || {};\r\n        this._transform.dataProjection = this._transform.dataProjection || \"EPSG:4326\";\r\n        this._transform.featureProjection = this._transform.featureProjection || \"EPSG:3857\";\r\n\r\n        if (this.autoLoad || this.visible) {\r\n            this._load();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add feature collection\r\n     * @param {object} featureCollection - as geojson object\r\n     */\r\n    addFeatures(featureCollection) {\r\n        if (this._transform.dataProjection == 'EPSG:3857' && this._transform.featureProjection == 'EPSG:3857') {\r\n            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection));\r\n        } else {\r\n            this._source.addFeatures(this._geoJsonFormat.readFeatures(featureCollection, this._transform));\r\n        }\r\n    }\r\n\r\n    /**\r\n     * trigger load features\r\n     * @protected\r\n     * @returns {boolean} if already loaded\r\n     */\r\n    _load() {\r\n\r\n        if (super._load()) {\r\n            return true;\r\n        }\r\n\r\n        $.get(this._url,\r\n            this._params,\r\n            (d) => {\r\n                this.addFeatures(d);\r\n                this.loadCallback(this);\r\n            }, 'json').fail(\r\n            function () {\r\n                this._loaded = false;\r\n            }\r\n        );\r\n\r\n        return false;\r\n    }\r\n\r\n    /**\r\n     * callback function on map move\r\n     * @param {object} d the json response\r\n     * @override\r\n     */\r\n    mapMoveCallback(d) {\r\n        super.mapMoveCallback(d);\r\n        this._source.addFeatures(this._geoJsonFormat.readFeatures(d, this._transform));\r\n    }\r\n}\r\n\r\nnm.LayerBaseVectorGeoJson = LayerBaseVectorGeoJson;\r\nexport default LayerBaseVectorGeoJson;\r\n","/**\r\n * Created by gavorhes on 12/7/2015.\r\n */\r\nimport $ from '../jquery';\r\nimport LayerBase from './LayerBase';\r\nimport * as esriToOl from '../olHelpers/esriToOlStyle';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('layers');\r\n\r\n/**\r\n * esri mapserver layer\r\n * @augments LayerBase\r\n */\r\nclass LayerEsriMapServer extends LayerBase {\r\n    /**\r\n     * The base layer for all others\r\n     * @param {string} url - resource url\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     * @param {boolean} [options.addPopup=false] if a popup should be added\r\n     */\r\n    constructor(url, options) {\r\n        super(url, options);\r\n        this._source = new ol.source.TileArcGISRest({url: this.url == '' ? undefined : this.url});\r\n\r\n        this.olLayer = new ol.layer.Tile({\r\n            source: this._source,\r\n            visible: this.visible,\r\n            opacity: this.opacity,\r\n            minResolution: this._minResolution,\r\n            maxResolution: this._maxResolution,\r\n            zIndex: this._zIndex\r\n        });\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : false;\r\n\r\n        this._esriFormat = new ol.format.EsriJSON();\r\n        this._popupRequest = null;\r\n\r\n        this.addLegendContent();\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addMapServicePopup(this);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * add additional content to the legend\r\n     * @param {string} [additionalContent=''] additional content for legend\r\n     */\r\n    addLegendContent(additionalContent) {\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] !== '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'legend?f=pjson&callback=?';\r\n\r\n        let _this = this;\r\n        let superAddLegend = super.addLegendContent;\r\n\r\n        $.get(urlCopy, {}, function (d) {\r\n            let newHtml = esriToOl.makeMapServiceLegend(d);\r\n            superAddLegend.call(_this, newHtml);\r\n        }, 'json');\r\n    }\r\n\r\n\r\n    getPopupInfo(queryParams) {\r\n        if (!this.visible) {\r\n            return;\r\n        }\r\n\r\n        let urlCopy = this.url;\r\n\r\n        if (urlCopy[urlCopy.length - 1] != '/') {\r\n            urlCopy += '/';\r\n        }\r\n\r\n        urlCopy += 'identify?callback=?';\r\n\r\n        let _this = this;\r\n\r\n        if (this._popupRequest != null) {\r\n            this._popupRequest.abort();\r\n        }\r\n\r\n        this._popupRequest = $.get(urlCopy, queryParams, function (d) {\r\n            for (let r of d['results']) {\r\n\r\n                let popupHtml = '<table class=\"esri-popup-table\">';\r\n\r\n                for (let a in r['attributes']) {\r\n                    if (r['attributes'].hasOwnProperty(a)) {\r\n                        let attrVal = r['attributes'][a];\r\n\r\n                        if (attrVal == null || attrVal.toString().toLowerCase() == 'null') {\r\n                            continue;\r\n                        }\r\n\r\n                        let attr = a;\r\n                        if (attr.length > 14) {\r\n                            attr = attr.slice(0, 11) + '...';\r\n                        }\r\n\r\n                        popupHtml += `<tr><td>${attr}</td><td>${attrVal}</td></tr>`;\r\n                    }\r\n                }\r\n\r\n                popupHtml += '</table>';\r\n\r\n                mapPopup.addMapServicePopupContent(_this._esriFormat.readFeature(r), _this, popupHtml, r['layerName']);\r\n            }\r\n        }, 'json').always(function () {\r\n            _this._popupRequest = null;\r\n        });\r\n    }\r\n\r\n    /**\r\n     * overwrite the base load\r\n     * @protected\r\n     */\r\n    _load() {\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @returns {ol.source.TileArcGISRest} the vector source\r\n     */\r\n    get source() {\r\n        return super.source;\r\n    }\r\n}\r\nnm.LayerEsriMapServer = LayerEsriMapServer;\r\nexport default LayerEsriMapServer;\r\n","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport LayerBaseVectorGeoJson from './LayerBaseVectorGeoJson';\r\nimport mapMove from '../olHelpers/mapMove';\r\nimport mapPopup from '../olHelpers/mapPopup';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nlet nm = provide('layers');\r\n\r\n\r\nfunction checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n\r\n    //make sure one and only one configuration is defined;\r\n    let configCount = 0;\r\n    if (typeof itsIcon == 'string') {\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineStyle == 'object') {\r\n        itsLineStyle.width = typeof itsLineStyle.width == 'number' ? itsLineStyle.width : 5;\r\n        itsLineStyle.color = typeof itsLineStyle.color == 'string' ? itsLineStyle.color : 'red';\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsIconConfig == 'object') {\r\n        itsIconConfig.defaultName = itsIconConfig.defaultName || 'Other';\r\n\r\n        if (typeof itsIconConfig.iconArray == 'undefined') {\r\n            itsIconConfig.iconArray = [];\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (typeof itsLineConfig == 'object') {\r\n        itsLineConfig.defaultName = itsLineConfig.defaultName || 'Other';\r\n        itsLineConfig.defaultWidth = itsLineConfig.defaultWidth || 5;\r\n        itsLineConfig.defaultColor = itsLineConfig.defaultColor || 'red';\r\n\r\n\r\n        if (typeof itsLineConfig.lineArray == 'undefined') {\r\n            itsLineConfig.lineArray = [];\r\n        }\r\n\r\n        // set the width if not defined\r\n        for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n            if (itsLineConfig.lineArray[i].length == 3) {\r\n                itsLineConfig.lineArray[i].push(5);\r\n            }\r\n        }\r\n\r\n        configCount++;\r\n    }\r\n\r\n    if (configCount > 1) {\r\n        throw 'Only one style config can be defined';\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {*} undefined, style, or style function\r\n */\r\nfunction defineStyle(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return new ol.style.Style({\r\n            image: new ol.style.Icon({src: _iconUrlRoot + itsIcon})\r\n        });\r\n    } else if (itsLineStyle) {\r\n        return new ol.style.Style({\r\n            stroke: new ol.style.Stroke({\r\n                color: itsLineStyle.color,\r\n                width: itsLineStyle.width\r\n            })\r\n        });\r\n    } else if (itsIconConfig) {\r\n        return function (feature) {\r\n            let symbolProp = feature.getProperties()[itsIconConfig.prop];\r\n            let iconUrl = _iconUrlRoot + itsIconConfig.defaultIcon;\r\n\r\n            for (let i = 0; i < itsIconConfig.iconArray.length; i++) {\r\n                let thisProp = itsIconConfig.iconArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    iconUrl = _iconUrlRoot + thisProp[2];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new ol.style.Style({\r\n                image: new ol.style.Icon({src: iconUrl})\r\n            })];\r\n        };\r\n    } else if (itsLineConfig) {\r\n        return function (feature) {\r\n            let symbolProp = feature.getProperties()[itsLineConfig.prop];\r\n            let colr = itsLineConfig.defaultColor || 'red';\r\n            let width = itsLineConfig.defaultWidth || 5;\r\n\r\n            for (let i = 0; i < itsLineConfig.lineArray.length; i++) {\r\n                let thisProp = itsLineConfig.lineArray[i];\r\n\r\n                if (symbolProp.trim().toLocaleLowerCase() == thisProp[0].trim().toLocaleLowerCase()) {\r\n                    colr = thisProp[2];\r\n                    width = thisProp[3];\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return [new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: colr,\r\n                    width: width\r\n                })\r\n            })];\r\n        };\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} [itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n *\r\n * @param {object} [itsLineStyle=undefined] A single line style\r\n * @param {string} itsLineStyle.color the line color as rgb or hex\r\n * @param {number} [itsLineStyle.width=5] the line width\r\n *\r\n * @param {object} [itsIconConfig=undefined] The icon subtype configuration\r\n * @param {string} itsIconConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} itsIconConfig.defaultName The default name to be used if no other match is found\r\n * @param {string} itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n * @param {object} [itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n *\r\n * @param {object} [itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n * @param {string} itsLineConfig.prop The property used to define icon attribute symbolization\r\n * @param {string} [itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n * @param {string} [itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n * @param {number} [itsLineConfig.defaultWidth=5] The default line width to be used for no other matches\r\n * @param {object} [itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width]\r\n * @returns {string} html to be added to the legend\r\n */\r\nfunction defineLegend(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig) {\r\n    \"use strict\";\r\n\r\n    let iconHeight = 17;\r\n\r\n    checkStyleNumber(itsIcon, itsLineStyle, itsIconConfig, itsLineConfig);\r\n\r\n    let _iconUrlRoot = 'http://transportal.cee.wisc.edu/its/inventory/icons/';\r\n\r\n    if (itsIcon) {\r\n        return `<img src=\"${_iconUrlRoot + itsIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n    } else if (itsLineStyle) {\r\n        return `<hr style=\"height: ${itsLineStyle.width}px; background-color: ${itsLineStyle.color}\">`;\r\n    } else if (itsIconConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n\r\n        for (let a of itsIconConfig.iconArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${a[1]}</span><img src=\"${_iconUrlRoot + a[2]}\" class=\"legend-layer-icon\" height=\"${iconHeight}\">`;\r\n        }\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsIconConfig.defaultName}</span>` +\r\n            `<img src=\"${_iconUrlRoot + itsIconConfig.defaultIcon}\" class=\"legend-layer-icon\" height=\"${iconHeight}\"></li>`;\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else if (itsLineConfig) {\r\n        let outHtml = '';\r\n        outHtml += '<ul>';\r\n        for (let ls of itsLineConfig.lineArray) {\r\n            outHtml += `<li><span class=\"legend-layer-subitem\">${ls[1]}</span>` +\r\n                `<hr style=\"height: ${ls[3]}px; background-color: ${ls[2]}\">`;\r\n        }\r\n        outHtml += `<li><span class=\"legend-layer-subitem\">${itsLineConfig.defaultName}</span>` +\r\n            `<hr style=\"height: ${itsLineConfig.defaultWidth}px; background-color: ${itsLineConfig.defaultColor}\"></li>`;\r\n        outHtml += '</ul>';\r\n\r\n        return outHtml;\r\n    } else {\r\n        return '';\r\n    }\r\n}\r\n\r\n/**\r\n * Its Layer class\r\n * @augments LayerBaseVectorGeoJson\r\n */\r\nclass LayerItsInventory extends LayerBaseVectorGeoJson {\r\n\r\n    /**\r\n     * ITS device layer, types available at http://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {object} options - config\r\n     * @param {string} [options.id] - layer id\r\n     * @param {string} [options.name=Unnamed Layer] - layer name\r\n     * @param {number} [options.opacity=1] - opacity\r\n     * @param {boolean} [options.visible=true] - default visible\r\n     * @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28\r\n     * @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28\r\n     * @param {object} [options.params={}] the get parameters to include to retrieve the layer\r\n     * @param {number} [options.zIndex=0] the z index for the layer\r\n     * @param {function} [options.loadCallback] function to call on load, context this is the layer object\r\n     * @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed\r\n     * @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility\r\n     * @param {boolean} [options.legendContent] additional content to add to the legend\r\n     *\r\n     * @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible\r\n     * @param {object|*} [options.style=undefined] the layer style, use openlayers default style if not defined\r\n     * @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move\r\n     * @param {number} [options.onDemandDelay=300] delay before the map move callback should be called\r\n     * @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages\r\n     *\r\n     * @param {string} options.itsType the ITS device type, use the url flag at http://transportal.cee.wisc.edu/its/inventory/\r\n     * @param {boolean} [options.addPopup=true] if the popup should be added automatically\r\n     *\r\n     * @param {string} [options.itsIcon=undefined] the ITS device type icon image see http://transportal.cee.wisc.edu/its/inventory/icons/\r\n     *\r\n     * @param {object} [options.itsLineStyle=undefined] A single line style\r\n     * @param {string} options.itsLineStyle.color the line color as rgb or hex\r\n     * @param {number} [options.itsLineStyle.width=5] the line width\r\n     *\r\n     * @param {object} [options.itsIconConfig=undefined] The icon subtype configuration\r\n     * @param {string} options.itsIconConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} options.itsIconConfig.defaultName The default name to be used if no other match is found\r\n     * @param {string} options.itsIconConfig.defaultIcon The default icon to be used for no other matches\r\n     * @param {object} [options.itsIconConfig.iconArray=[]] an array, items with format [property, name, img]\r\n     *\r\n     * @param {object} [options.itsLineConfig=undefined] The property used to define icon attribute symbolization\r\n     * @param {string} options.itsLineConfig.prop The property used to define icon attribute symbolization\r\n     * @param {string} [options.itsLineConfig.defaultName=Other] The default name to be used if no other match is found\r\n     * @param {string} [options.itsLineConfig.defaultColor=red] The default line color to be used for no other matches\r\n     * @param {number} [options.itsLineConfig.defaultWidth] The default line width to be used for no other matches\r\n     * @param {object} [options.itsLineConfig.lineArray=[]] an array, items with format [property, name, color, optional width = 5]\r\n     */\r\n    constructor(options) {\r\n        if (typeof options.itsType !== 'string') {\r\n            throw 'its type must be defined';\r\n        }\r\n\r\n        let addToLegend = '';\r\n\r\n        // define a style with the helper function if it is not explicitly defined\r\n        if (typeof options.style == 'undefined') {\r\n            options.style = defineStyle(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n            addToLegend = defineLegend(\r\n                options.itsIcon, options.itsLineStyle, options.itsIconConfig, options.itsLineConfig\r\n            );\r\n        }\r\n\r\n        options.params = typeof options.params == 'object' ? options.params : {};\r\n        $.extend(options.params, {format: 'JSON', resource: options.itsType});\r\n\r\n        super('http://transportal.cee.wisc.edu/its/inventory/', options);\r\n        \r\n        //add any additional content to the legend\r\n        this.addLegendContent(addToLegend);\r\n\r\n        options.addPopup = typeof options.addPopup == 'boolean' ? options.addPopup : true;\r\n\r\n        if (options.addPopup) {\r\n            mapPopup.addVectorPopup(this, function (props) {\r\n                return `<iframe src=\"http://transportal.cee.wisc.edu/its/inventory/?feature=${props['featureGuid']}\" ` +\r\n                    `height=\"250\" width=\"350\"></iframe>`;\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * callback to generate the parameters passed in the get request\r\n     * @callback makeGetParams\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     */\r\n    mapMoveMakeGetParams(extent, zoomLevel) {\r\n        super.mapMoveMakeGetParams(extent, zoomLevel);\r\n        let lowerLeft = new ol.geom.Point([extent.minX, extent.minY]);\r\n        lowerLeft.transform(this.mapCrs, \"EPSG:4326\");\r\n        let lowerLeftCoordinates = lowerLeft.getCoordinates();\r\n        let upperRight = new ol.geom.Point([extent.maxX, extent.maxY]);\r\n        upperRight.transform(this.mapCrs, \"EPSG:4326\");\r\n        let upperRightCoordinates = upperRight.getCoordinates();\r\n\r\n        $.extend(this.mapMoveParams,\r\n            {\r\n                L: lowerLeftCoordinates[0],\r\n                R: upperRightCoordinates[0],\r\n                B: lowerLeftCoordinates[1],\r\n                T: upperRightCoordinates[1]\r\n            });\r\n    }\r\n}\r\n\r\nnm.LayerItsInventory = LayerItsInventory;\r\nexport default LayerItsInventory;\r\n","/**\r\n * Created by gavorhes on 1/4/2016.\r\n */\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('olHelpers.esriToOlStyle');\r\n\r\n/**\r\n * This callback is displayed as part of the Requester class.\r\n * @callback styleFunc\r\n * @param {ol.Feature} feat - openlayers feature\r\n * @param {number} resolution - map resolution\r\n */\r\n\r\n/**\r\n *\r\n * @param {Array<number>} colorArray - input color array\r\n * @param {number} opacity - the opacity 0 to 1\r\n * @returns {string} rgba string\r\n * @private\r\n */\r\nfunction _colorArrayToRgba(colorArray, opacity) {\r\n    \"use strict\";\r\n\r\n    return `rgba(${colorArray[0]},${colorArray[1]},${colorArray[2]},${opacity})`;\r\n}\r\n\r\n/**\r\n * escape html charcters\r\n * @param {string} str - input string\r\n * @returns {string} escaped string\r\n */\r\nfunction htmlEscape(str) {\r\n    return String(str)\r\n        .replace(/&/g, '&amp;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/'/g, '&#39;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;');\r\n}\r\n\r\nnm.htmlEscape = htmlEscape;\r\n\r\n\r\nclass CommonSymbol {\r\n\r\n    /**\r\n     * \r\n     * @param symbolObj\r\n     * @param {number} opacity\r\n     */\r\n    constructor(symbolObj, opacity) {\r\n        this.symbolObj = symbolObj;\r\n        this.opacity = opacity;\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass PointSymbol extends CommonSymbol {\r\n    constructor(symbolObj, opacity) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSMS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n                let radius = this.symbolObj.size;\r\n\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Circle({\r\n                        radius: radius,\r\n                        fill: new ol.style.Fill({\r\n                            color: innerColor\r\n                        }),\r\n                        stroke: new ol.style.Stroke({color: outerColor, width: outlineWidth})\r\n                    })\r\n                });\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" style=\"color: ${innerColor}\">&#9679;</span>`;\r\n                break;\r\n            case 'esriPMS':\r\n                this.olStyle = new ol.style.Style({\r\n                    image: new ol.style.Icon({src: `data:image/png;base64,${this.symbolObj['imageData']}`})\r\n                });\r\n                this.legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${this.symbolObj['imageData']}\">`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Point symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass LineSymbol extends CommonSymbol {\r\n    constructor(symbolObj, opacity) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSLS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let lineWidth = this.symbolObj.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: innerColor,\r\n                        //lineDash: [4],\r\n                        width: lineWidth\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 4px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: -1px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Line symbol does not handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass PolygonSymbol extends CommonSymbol {\r\n    constructor(symbolObj, opacity) {\r\n        super(symbolObj, opacity);\r\n        switch (this.symbolObj['type']) {\r\n            case 'esriSFS':\r\n                let innerColor = _colorArrayToRgba(this.symbolObj.color, this.opacity);\r\n                let outerColor = _colorArrayToRgba(this.symbolObj.outline.color, this.opacity);\r\n                let outlineWidth = this.symbolObj.outline.width;\r\n\r\n                this.olStyle = new ol.style.Style({\r\n                    stroke: new ol.style.Stroke({\r\n                        color: outerColor,\r\n                        //lineDash: [4],\r\n                        width: outlineWidth\r\n                    }),\r\n                    fill: new ol.style.Fill({\r\n                        color: innerColor\r\n                    })\r\n                });\r\n\r\n                this.legendHtml = `<span class=\"legend-layer-icon\" `;\r\n                this.legendHtml += `style=\"`;\r\n                this.legendHtml += `background-color: ${innerColor};`;\r\n                this.legendHtml += `border: solid ${outerColor} 1px;`;\r\n                this.legendHtml += `width: 40px;`;\r\n                this.legendHtml += `height: 9px;`;\r\n                this.legendHtml += `position: relative;`;\r\n                this.legendHtml += `display: inline-block;`;\r\n                this.legendHtml += `top: 2px;`;\r\n                this.legendHtml += `\"></span>`;\r\n                break;\r\n\r\n            default:\r\n                console.log(this.symbolObj);\r\n                alert('Polygon symbol does handle symbol type: ' + this.symbolObj['type']);\r\n        }\r\n    }\r\n}\r\n\r\nclass SymbolGenerator {\r\n    constructor(esriResponse) {\r\n        this.opacity = (100 - (esriResponse['drawingInfo']['transparency'] || 0)) / 100;\r\n        this.renderer = esriResponse['drawingInfo']['renderer'];\r\n        this.olStyle = undefined;\r\n        this.legendHtml = '';\r\n    }\r\n}\r\n\r\nclass SingleSymbol extends SymbolGenerator {\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param {Constructor|*} SymbolClass - the symbol class to use\r\n     */\r\n    constructor(esriResponse, SymbolClass) {\r\n        super(esriResponse);\r\n        this.symbol = this.renderer['symbol'];\r\n        let symbolObj = new SymbolClass(this.symbol, this.opacity);\r\n        this.olStyle = symbolObj.olStyle;\r\n        this.legendHtml = symbolObj.legendHtml;\r\n    }\r\n}\r\n\r\nclass UniqueValueSymbol extends SymbolGenerator {\r\n    /**\r\n     *\r\n     * @param {object} esriResponse - layer info\r\n     * @param {Constructor|*} SymbolClass - the Symbol class definition\r\n     */\r\n    constructor(esriResponse, SymbolClass) {\r\n        super(esriResponse);\r\n        this.uniqueValueInfos = this.renderer['uniqueValueInfos'];\r\n        this.propertyName = this.renderer['field1'];\r\n        this.defaultSymbol = this.renderer['defaultSymbol'];\r\n\r\n\r\n        if (this.defaultSymbol) {\r\n            let symbolObj = new SymbolClass(this.defaultSymbol, this.opacity);\r\n            this.defaultStyle = symbolObj.olStyle;\r\n            this.defaultLabelHtml = `<span class=\"legend-layer-subitem\">${htmlEscape(this.renderer['defaultLabel'])}</span>` + symbolObj.legendHtml;\r\n        } else {\r\n            this.defaultStyle = undefined;\r\n            this.defaultLabelHtml = 'other';\r\n        }\r\n\r\n        this.valueArray = [];\r\n        this.labelArray = [];\r\n        this.legendArray = [];\r\n        this.propertyStyleLookup = {};\r\n\r\n        for (let uniqueVal of this.uniqueValueInfos) {\r\n            this.labelArray.push(uniqueVal['label']);\r\n            this.valueArray.push(uniqueVal['value']);\r\n            let uniqueSym = new SymbolClass(uniqueVal.symbol, this.opacity);\r\n            this.legendArray.push(`<span class=\"legend-layer-subitem\">${htmlEscape(uniqueVal['label'])}</span>` + uniqueSym.legendHtml);\r\n            this.propertyStyleLookup[uniqueVal['value']] = uniqueSym.olStyle;\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        this.olStyle = function (feature, resolution) {\r\n            let checkProperties = feature.getProperties();\r\n            let checkProperty = checkProperties[_this.propertyName];\r\n\r\n            let returnValue;\r\n            if (_this.propertyStyleLookup[checkProperty] !== undefined) {\r\n                returnValue = [_this.propertyStyleLookup[checkProperty]];\r\n            } else {\r\n               returnValue = [_this.defaultStyle];\r\n            }\r\n\r\n            return returnValue;\r\n        };\r\n\r\n        if (this.defaultLabelHtml !== null) {\r\n            this.legendArray.push(this.defaultLabelHtml);\r\n        }\r\n\r\n        this.legendHtml = '<ul>';\r\n        for (let h of this.legendArray) {\r\n            this.legendHtml += `<li>${h}</li>`;\r\n        }\r\n        this.legendHtml += '</ul>';\r\n    }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n/**\r\n * style and legend object\r\n * @typedef {object} styleAndLegend\r\n * @property {styleFunc} style - style function\r\n * @property {string} legend - legend content\r\n */\r\n\r\n/**\r\n *\r\n * @param {object} esriResponse - layer info\r\n * @returns {styleAndLegend} style and legend object\r\n */\r\nexport function makeFeatureServiceLegendAndSymbol(esriResponse) {\r\n    \"use strict\";\r\n    let renderer = esriResponse['drawingInfo']['renderer'];\r\n    let symbolLegendOut = null;\r\n\r\n    switch (renderer['type']) {\r\n        case 'simple':\r\n            switch (esriResponse['geometryType']) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new SingleSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        case 'uniqueValue':\r\n            switch (esriResponse['geometryType']) {\r\n                case 'esriGeometryPoint':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PointSymbol);\r\n                    break;\r\n                case 'esriGeometryPolyline':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, LineSymbol);\r\n                    break;\r\n                case 'esriGeometryPolygon':\r\n                    symbolLegendOut = new UniqueValueSymbol(esriResponse, PolygonSymbol);\r\n                    break;\r\n                default:\r\n                    console.log(esriResponse);\r\n                    alert(esriResponse['geometryType'] + ' not handled');\r\n            }\r\n            break;\r\n        default:\r\n            alert('not handled renderer type: ' + renderer['type']);\r\n    }\r\n\r\n    if (symbolLegendOut == null) {\r\n        return {style: undefined, legend: ''};\r\n    } else {\r\n        return {style: symbolLegendOut.olStyle, legend: symbolLegendOut.legendHtml};\r\n    }\r\n}\r\n\r\nnm.makeFeatureServiceLegendAndSymbol = makeFeatureServiceLegendAndSymbol;\r\n\r\n/**\r\n *\r\n * @param {object} lyrObject - the layer as defined in the response\r\n * @param {boolean} [iconsOnly=false] use only icons\r\n * @returns {string} legend html\r\n */\r\nfunction mapServiceLegendItem(lyrObject, iconsOnly) {\r\n\r\n\r\n    iconsOnly = typeof iconsOnly == 'boolean' ? iconsOnly : false;\r\n    let layerName = lyrObject['layerName'];\r\n    let legendItems = lyrObject['legend'];\r\n    let legendHtml = '';\r\n\r\n    if (legendItems.length == 1) {\r\n        legendHtml = `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[0]['imageData']}\">`;\r\n    } else {\r\n        legendHtml += '<span class=\"legend-items-expander\" title=\"Expand/Collapse\">&#9660;</span><ul>';\r\n        for (let i = 0; i < legendItems.length; i++) {\r\n            legendHtml += `<li>`;\r\n            legendHtml += `<span class=\"legend-layer-subitem\">${htmlEscape(legendItems[i]['label'])}</span>`;\r\n            legendHtml += `<img class=\"legend-layer-icon\" height=\"17\" src=\"data:image/png;base64,${legendItems[i]['imageData']}\">`;\r\n            legendHtml += `</li>`;\r\n        }\r\n        legendHtml += '</ul>';\r\n    }\r\n\r\n    if (!iconsOnly) {\r\n        legendHtml = `<span class=\"legend-layer-subitem\">${layerName}</span>` + legendHtml;\r\n    }\r\n\r\n    return legendHtml;\r\n}\r\n\r\n/**\r\n * make map service legent\r\n * @param {object} esriResponse - layer info\r\n * @returns {string} legend content\r\n */\r\nexport function makeMapServiceLegend(esriResponse) {\r\n    \"use strict\";\r\n\r\n    let newLegendHtml = '';\r\n\r\n    let layers = esriResponse['layers'];\r\n\r\n    if (layers.length == 1) {\r\n        newLegendHtml += mapServiceLegendItem(layers[0], true);\r\n    } else {\r\n        newLegendHtml += '<ul>';\r\n        for (let i = 0; i < layers.length; i++) {\r\n            newLegendHtml += '<li>' + mapServiceLegendItem(layers[i]) + '</li>';\r\n        }\r\n        newLegendHtml += '</ul>';\r\n    }\r\n\r\n    return newLegendHtml;\r\n}\r\n\r\nnm.makeMapServiceLegend = makeMapServiceLegend;\r\n","/**\r\n * Created by gavorhes on 12/8/2015.\r\n */\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers');\r\n\r\n\r\n/**\r\n * base interaction\r\n */\r\nclass MapInteractionBase {\r\n\r\n    /**\r\n     * map interaction base\r\n     * @param {string} subtype - the interaction subtype\r\n     */\r\n    constructor(subtype) {\r\n        this._map = undefined;\r\n        this._initialized = false;\r\n        this._subtype = subtype;\r\n    }\r\n\r\n    /**\r\n     * base initializer, returns true for already initialized\r\n     * @param {ol.Map} theMap - the ol Map\r\n     * @returns {boolean} true for already initialized\r\n     */\r\n    init(theMap) {\r\n        if (!this._initialized) {\r\n            this._map = theMap;\r\n            this._initialized = true;\r\n\r\n            return false;\r\n        }\r\n\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * get reference to the ol map object\r\n     * @returns {ol.Map} the map object\r\n     */\r\n    get map() {\r\n        return this._map;\r\n    }\r\n\r\n    /**\r\n     * get if is initialized\r\n     * @returns {boolean} is initialized\r\n     */\r\n    get initialized() {\r\n        return this._initialized;\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     * @protected\r\n     */\r\n    _checkInit() {\r\n        if (!this.initialized) {\r\n            let msg = `${this._subtype} object not initialized`;\r\n            alert(msg);\r\n            console.log(msg);\r\n            throw msg;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Check the initialization status and throw exception if not valid yet\r\n     */\r\n    checkInit(){\r\n        this._checkInit();\r\n    }\r\n}\r\nnm.MapInteractionBase = MapInteractionBase;\r\nexport default MapInteractionBase;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapMoveCls from './mapMoveCls';\r\n\r\n/**\r\n * The single map move object catch is that it is common to multimap pages\r\n * @type {MapMoveCls}\r\n */\r\nexport default new MapMoveCls();\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\n\r\nimport $ from '../jquery';\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport * as checkDefined from '../util/checkDefined';\r\nimport provide from '../util/provide';\r\nimport makeGuid from '../util/makeGuid';\r\nconst nm = provide('olHelpers');\r\n\r\n/**\r\n * assists with map move interactions, trigger callback functions\r\n * @augments MapInteractionBase\r\n */\r\nclass MapMoveCls extends MapInteractionBase {\r\n\r\n    /**\r\n     * constructor called implicitly\r\n     */\r\n    constructor() {\r\n        super('map move');\r\n        this._arrLyrRequest = [];\r\n        this._arrLyrTimeout = [];\r\n        this._arrLayer = [];\r\n        this._lookupLayer = {};\r\n\r\n        this._mapMoveCallbacks = [];\r\n        this._mapMoveCallbacksLookup = {};\r\n        this._mapMoveCallbackDelays = [];\r\n        this._mapMoveCallbackContext = [];\r\n        this._mapMoveCallbackTimeout = [];\r\n\r\n        this._mapExtent = undefined;\r\n        this._zoomLevel = undefined;\r\n    }\r\n\r\n    /**\r\n     * initialize the map move object\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    init(theMap) {\r\n        if (super.init(theMap)) {\r\n            return;\r\n        }\r\n\r\n        let _this = this;\r\n\r\n        this.map.getView().on(['change:center', 'change:resolution'], function (e) {\r\n\r\n            _this._updateMapExtent();\r\n\r\n            // trigger the layer updates\r\n            for (let i = 0; i < _this._arrLayer.length; i++) {\r\n                _this.triggerLyrLoad(_this._arrLayer[i], i, e.type);\r\n            }\r\n\r\n            // trigger the map callbacks\r\n            for (let i = 0; i < _this._mapMoveCallbacks.length; i++) {\r\n                _this.triggerMoveCallback(i, e.type);\r\n            }\r\n        });\r\n    }\r\n\r\n    _updateMapExtent() {\r\n        let theView = this.map.getView();\r\n        this._zoomLevel = theView.getZoom();\r\n\r\n        let extentArray = theView.calculateExtent(this.map.getSize());\r\n\r\n        this._mapExtent = {\r\n            minX: extentArray[0],\r\n            minY: extentArray[1],\r\n            maxX: extentArray[2],\r\n            maxY: extentArray[3]\r\n        };\r\n    }\r\n\r\n    /**\r\n     * return the map extent\r\n     */\r\n    get mapExtent() {\r\n        if (!this._mapExtent) {\r\n            this._updateMapExtent();\r\n        }\r\n\r\n        return this._mapExtent;\r\n    }\r\n\r\n    /**\r\n     * Trigger the layer load\r\n     * @param {LayerBaseVector|*} lyr - the layer being acted on\r\n     * @param {number} [index=undefined] - index of the layer\r\n     * @param {string|*} [eventType=undefined] the event triggering the load, as 'change:center' or 'change:resolution'\r\n     */\r\n    triggerLyrLoad(lyr, index, eventType) {\r\n\r\n        if (checkDefined.undefinedOrNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            throw 'need to define lyr or index';\r\n        } else if (checkDefined.definedAndNotNull(lyr) && checkDefined.undefinedOrNull(index)) {\r\n            index = this._arrLayer.indexOf(lyr);\r\n        } else if (checkDefined.undefinedOrNull(lyr) && checkDefined.definedAndNotNull(index)) {\r\n            lyr = this._arrLayer[index];\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._arrLyrTimeout[index] != null) {\r\n            clearTimeout(this._arrLyrTimeout[index]);\r\n            this._arrLyrTimeout[index] = null;\r\n        }\r\n\r\n        // abort if necessary and clear the request\r\n        if (this._arrLyrRequest[index] != null && this._arrLyrRequest[index] != 4) {\r\n            this._arrLyrRequest[index].abort();\r\n            this._arrLyrRequest[index] = null;\r\n        }\r\n\r\n        // dummy callback used if before load returns false\r\n        let callbackFunc = function () {};\r\n\r\n        if (lyr.mapMoveBefore(this._zoomLevel, eventType)) {\r\n            lyr.mapMoveMakeGetParams(this._mapExtent, this._zoomLevel);\r\n\r\n            let _this = this;\r\n\r\n            callbackFunc = function () {\r\n                function innerFunction(theLayer, theIndex) {\r\n                    let _innerThis = this;\r\n                    this._arrLyrRequest[theIndex] = $.get(\r\n                        theLayer.url,\r\n                        theLayer.mapMoveParams,\r\n                        function (d) {\r\n                            /**\r\n                             * @type {LayerBaseVector}\r\n                             */\r\n                            theLayer.mapMoveCallback(d);\r\n                            theLayer.loadCallback();\r\n                        }, 'json').fail(\r\n                        function (jqXHR) {\r\n                            if (jqXHR.statusText != 'abort') {\r\n                                console.log('failed');\r\n                                console.log(theLayer.url);\r\n                                console.log(theLayer.mapMoveParams);\r\n                            }\r\n                        }).always(\r\n                        function () {\r\n                            _innerThis._arrLyrTimeout[theIndex] = null;\r\n                            _innerThis._arrLyrRequest[theIndex] = null;\r\n                        });\r\n                }\r\n                innerFunction.call(_this, lyr, index);\r\n            };\r\n        } else {\r\n            lyr.clear();\r\n        }\r\n        this._arrLyrTimeout[index] = setTimeout(callbackFunc, lyr.onDemandDelay);\r\n    }\r\n\r\n    /**\r\n     * trigger the map move call back at the given index\r\n     * @param {number} ind - the index of the layer\r\n     * @param {string|*} [eventType=undefined] the event triggering the load as 'change:center' or 'change:resolution'\r\n     * @param {string} [functionId=undefined] the function id used to reference the added callback function\r\n     */\r\n    triggerMoveCallback(ind, eventType, functionId) {\r\n\r\n        if (typeof ind == 'undefined' && typeof functionId == 'undefined'){\r\n            throw 'either the function index or the id must be defined';\r\n        }\r\n\r\n        if (typeof ind !== 'number'){\r\n            ind = this._mapMoveCallbacks.indexOf(this._mapMoveCallbacksLookup[functionId]);\r\n        }\r\n\r\n        if (ind < 0){\r\n            console.log('function not found');\r\n\r\n            return;\r\n        }\r\n\r\n        // clear the timeout\r\n        if (this._mapMoveCallbackTimeout[ind] != null) {\r\n            clearTimeout(this._mapMoveCallbackTimeout[ind]);\r\n            this._mapMoveCallbackTimeout[ind] = null;\r\n        }\r\n\r\n        let ctx = this._mapMoveCallbackContext[ind];\r\n        let theFunc = this._mapMoveCallbacks[ind];\r\n\r\n        let _this = this;\r\n\r\n        let f = function () {\r\n            if (ctx !== null) {\r\n                theFunc.call(ctx, _this._mapExtent, _this._zoomLevel, eventType);\r\n            } else {\r\n                theFunc(_this._mapExtent, _this._zoomLevel, eventType);\r\n            }\r\n        };\r\n\r\n        this._mapMoveCallbackTimeout[ind] = setTimeout(f, this._mapMoveCallbackDelays[ind]);\r\n    }\r\n\r\n    /**\r\n     * Add a layer to the interaction\r\n     * @param {LayerBaseVector|*} lyr - layer to add\r\n     * @param {boolean} [triggerOnAdd=true] - if the layer should be loaded on add\r\n     */\r\n    addVectorLayer(lyr, triggerOnAdd) {\r\n        if (this._arrLayer.indexOf(lyr) > -1) {\r\n            console.log('already added ' + lyr.name + ' to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n\r\n        this._arrLyrRequest.push(null);\r\n        this._arrLyrTimeout.push(null);\r\n        this._arrLayer.push(lyr);\r\n        this._lookupLayer[lyr.id] = lyr;\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerLyrLoad(lyr, this._arrLayer.length - 1);\r\n        }\r\n    }\r\n\r\n    /**\r\n     * This callback is displayed as a global member.\r\n     * @callback mapMoveCallbackFunction\r\n     * @param {object} extent - extent object\r\n     * @param {number} extent.minX - minX\r\n     * @param {number} extent.minY - minY\r\n     * @param {number} extent.maxX - maxX\r\n     * @param {number} extent.maxY - maxY\r\n     * @param {number} zoomLevel - zoom level\r\n     * @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'\r\n     */\r\n\r\n    /**\r\n     * add a callback to the map move event\r\n     * @param {mapMoveCallbackFunction} func - callback function\r\n     * @param {*} context - the context to use for this function\r\n     * @param {number} [delay=50] the delay before call load\r\n     * @param {boolean} [triggerOnAdd=true] if the layer should be loaded on add to mapMove\r\n     * @param {string} [functionId=undefined] optional id to reference the function later for outside triggering\r\n     */\r\n    addCallback(func, context, delay, triggerOnAdd, functionId) {\r\n\r\n        if (this._mapMoveCallbacks.indexOf(func) > -1) {\r\n            console.log('this function already added to map move');\r\n\r\n            return;\r\n        }\r\n        this._checkInit();\r\n        if (!functionId){\r\n            functionId = makeGuid();\r\n        }\r\n\r\n        this._mapMoveCallbacks.push(func);\r\n        this._mapMoveCallbacksLookup[functionId] = func;\r\n        this._mapMoveCallbackDelays.push(typeof delay == 'number' ? delay : 50);\r\n        this._mapMoveCallbackContext.push(checkDefined.definedAndNotNull(context) ? context : null);\r\n        this._mapMoveCallbackTimeout.push(null);\r\n\r\n        triggerOnAdd = typeof triggerOnAdd == 'boolean' ? triggerOnAdd : true;\r\n\r\n        if (triggerOnAdd) {\r\n            if (this._mapExtent === undefined) {\r\n                this._updateMapExtent();\r\n            }\r\n            this.triggerMoveCallback(this._mapMoveCallbacks.length - 1);\r\n        }\r\n    }\r\n}\r\n\r\nnm.MapMoveCls = MapMoveCls;\r\nexport default MapMoveCls;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport MapPopupCls from './mapPopupCls';\r\n\r\n/**\r\n * The single popup object catch is that it is common to multimap pages\r\n * @type {MapPopupCls}\r\n */\r\nexport default new MapPopupCls();\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport MapInteractionBase from './mapInteractionBase';\r\nimport propertiesZoomStyle from '../olHelpers/propertiesZoomStyle';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\n\r\n\r\nconst nm = provide('olHelpers');\r\n\r\n\r\nclass _FeatureLayerProperties {\r\n\r\n    /**\r\n     *\r\n     * @param {ol.Feature} feature the feature\r\n     * @param {LayerBaseVector|*} layer - the layer in the popup\r\n     * @param {number} layerIndex - index of the layer\r\n     * @param {ol.layer.Vector} selectionLayer - the ol selection layer\r\n     * @param {string} [esriLayerName=undefined] - esri layer name\r\n     */\r\n    constructor(feature, layer, layerIndex, selectionLayer, esriLayerName) {\r\n        this.feature = feature;\r\n        this.layer = layer;\r\n        this.layerIndex = layerIndex;\r\n        this.selectionLayer = selectionLayer;\r\n        this.popupContent = '';\r\n        this.esriLayerName = typeof esriLayerName == 'string' ? esriLayerName : undefined;\r\n    }\r\n\r\n    get layerName() {\r\n        if (typeof this.esriLayerName == 'string') {\r\n            return this.esriLayerName;\r\n        } else {\r\n            return this.layer.name;\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * map popup class\r\n * @augments MapInteractionBase\r\n */\r\nclass MapPopupCls extends MapInteractionBase {\r\n\r\n    /**\r\n     * Definition for openlayers style function\r\n     * @callback olStyleFunction\r\n     * &param feature the openlayers vector feature\r\n     * $param\r\n     */\r\n\r\n    /**\r\n     * Definition for popup changed callback functions\r\n     * @callback popupChangedFunction\r\n     * @param $popContent jquery reference to the popup content\r\n     */\r\n\r\n    /**\r\n     * map popup constructor\r\n     */\r\n    constructor() {\r\n        super('map popup');\r\n        this._arrPopupLayerIds = [];\r\n        this._arrPopupLayerNames = [];\r\n        /**\r\n         *\r\n         * @type {Array<LayerBaseVector>}\r\n         * @private\r\n         */\r\n        this._arrPopupLayers = [];\r\n        this._arrPopupOlLayers = [];\r\n        this._arrPopupContentFunction = [];\r\n        this._$popupContainer = undefined;\r\n        this._$popupContent = undefined;\r\n        this._$popupCloser = undefined;\r\n        this._popupOverlay = undefined;\r\n        this._selectionLayers = [];\r\n        this._selectionLayerLookup = {};\r\n        this._mapClickFunctions = [];\r\n\r\n        //let a = function($jqueryContent){console.log($jqueryContent)};\r\n        //this._popupChangedLookup = {'a': a};\r\n        this._popupChangedFunctions = [];\r\n        /**\r\n         *\r\n         * @type {Array<LayerEsriMapServer>}\r\n         * @private\r\n         */\r\n        this._esriMapServiceLayers = [];\r\n\r\n        this._popupOpen = false;\r\n        this._popupCoordinate = null;\r\n\r\n        /**\r\n         *\r\n         * @type {Array.<_FeatureLayerProperties>}\r\n         */\r\n        this._passThroughLayerFeatureArray = [];\r\n\r\n        this._currentPopupIndex = -1;\r\n        this._popupContentLength = 0;\r\n\r\n    }\r\n\r\n    /**\r\n     * map popup initialization\r\n     * @param {ol.Map} theMap - the ol map\r\n     */\r\n    init(theMap) {\r\n        if (super.init(theMap)) {\r\n            return;\r\n        }\r\n        let $map = $('#' + this.map.getTarget());\r\n\r\n        $map.append(\r\n            '<div class=\"ol-popup\">' +\r\n            '<a href=\"#\" class=\"ol-popup-closer\"></a>' +\r\n            '<div class=\"popup-content\"></div>' +\r\n            '</div>'\r\n        );\r\n\r\n        this._$popupContainer = $map.find('.ol-popup');\r\n        this._$popupContent = $map.find('.popup-content');\r\n        this._$popupCloser = $map.find('.ol-popup-closer');\r\n\r\n        this._popupOverlay = new ol.Overlay({\r\n            element: this._$popupContainer[0],\r\n            autoPan: true,\r\n            autoPanAnimation: {\r\n                duration: 250\r\n            }\r\n        });\r\n\r\n        this._map.addOverlay(this._popupOverlay);\r\n\r\n        this._$popupCloser.click(() => {\r\n            this.closePopup();\r\n        });\r\n\r\n        // display popup on click\r\n        this._map.on('singleclick', (evt) => {\r\n            this.closePopup();\r\n            this._popupCoordinate = evt.coordinate;\r\n\r\n            if (this._esriMapServiceLayers.length > 0) {\r\n                let queryParams = {\r\n                    geometry: evt.coordinate.join(','),\r\n                    geometryType: 'esriGeometryPoint',\r\n                    layers: 'all',\r\n                    sr: this._map.getView().getProjection().getCode().split(':')[1],\r\n                    mapExtent: this._map.getView().calculateExtent(this._map.getSize()).join(','),\r\n                    imageDisplay: this._map.getSize().join(',') + ',96',\r\n                    returnGeometry: true,\r\n                    tolerance: 15,\r\n                    f: 'pjson'\r\n                };\r\n\r\n                for (let l of this._esriMapServiceLayers) {\r\n                    l.getPopupInfo(queryParams, this._selectionLayerLookup[l.id]);\r\n                }\r\n            }\r\n\r\n            let layerFeatureObjectArray = this._featuresAtPixel(evt.pixel);\r\n\r\n            /**\r\n             *\r\n             * @type {Array.<_FeatureLayerProperties>}\r\n             */\r\n            this._passThroughLayerFeatureArray = [];\r\n            this._currentPopupIndex = -1;\r\n\r\n            for (let i = 0; i < layerFeatureObjectArray.length; i++) {\r\n                let featObj = layerFeatureObjectArray[i];\r\n\r\n                let props = featObj.feature.getProperties();\r\n\r\n                let popupContentResponse = this._arrPopupContentFunction[featObj.layerIndex](props, this._$popupContent);\r\n\r\n                //skip if return was false\r\n                if (popupContentResponse === false) {\r\n                    //continue;\r\n                } else if (typeof popupContentResponse == 'string') {\r\n                    featObj.popupContent = popupContentResponse;\r\n                    this._passThroughLayerFeatureArray.push(featObj);\r\n                } else {\r\n                    featObj.selectionLayer.getSource().addFeature(featObj.feature);\r\n                }\r\n            }\r\n\r\n            this._popupContentLength = this._passThroughLayerFeatureArray.length;\r\n\r\n            this._currentPopupIndex = -1;\r\n\r\n            let popupHtml = '<div class=\"ol-popup-nav\">';\r\n            popupHtml += '<span class=\"previous-popup ol-popup-nav-arrow\">&#9664;</span>';\r\n            popupHtml += '<span class=\"next-popup ol-popup-nav-arrow\">&#9654;</span>';\r\n            popupHtml += `<span class=\"current-popup-item-number\" style=\"font-weight: bold;\"></span>`;\r\n            popupHtml += `<span>&nbsp;of&nbsp;</span>`;\r\n            popupHtml += `<span class=\"popup-content-length\" style=\"font-weight: bold;\">${this._popupContentLength}</span>`;\r\n            popupHtml += `<span>&nbsp;&nbsp;-&nbsp;&nbsp;</span>`;\r\n            popupHtml += `<span class=\"current-popup-layer-name\"></span>`;\r\n            popupHtml += '</div>';\r\n            popupHtml += '<div class=\"ol-popup-inner\">';\r\n\r\n            popupHtml += '</div>';\r\n\r\n            this._$popupContent.html(popupHtml);\r\n\r\n            this._$popupContent.find('.previous-popup').click(() => {\r\n                if (this._popupContentLength == 1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == 0) {\r\n                    this._currentPopupIndex = this._popupContentLength - 1;\r\n                } else {\r\n                    this._currentPopupIndex--;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n            let nextPopup = this._$popupContent.find('.next-popup');\r\n\r\n            nextPopup.click(() => {\r\n                if (this._popupContentLength == 1 && this._currentPopupIndex > -1) {\r\n                    return;\r\n                }\r\n\r\n                if (this._currentPopupIndex == this._popupContentLength - 1) {\r\n                    this._currentPopupIndex = 0;\r\n                } else {\r\n                    this._currentPopupIndex++;\r\n                }\r\n                this._triggerFeatSelect();\r\n            });\r\n\r\n\r\n            if (this._popupContentLength > 0) {\r\n                nextPopup.trigger('click');\r\n                this._popupOverlay.setPosition(this._popupCoordinate);\r\n                this._$popupContent.scrollTop(0);\r\n                this._popupOpen = true;\r\n            }\r\n        });\r\n\r\n        //change mouse cursor when over marker\r\n        this._map.on('pointermove', (e) => {\r\n            if (e.dragging) {\r\n                return;\r\n            }\r\n            let pixel = this.map.getEventPixel(e.originalEvent);\r\n            let hit = this.map.hasFeatureAtPixel(pixel, (lyrCandidate) => {\r\n                for (let olLayer of this._arrPopupOlLayers) {\r\n                    if (lyrCandidate == olLayer) {\r\n                        return true;\r\n                    }\r\n                }\r\n\r\n                return false;\r\n            });\r\n            this.map.getTargetElement().style.cursor = hit ? 'pointer' : '';\r\n        });\r\n    }\r\n\r\n    /**\r\n     * helper to select features\r\n     * @private\r\n     */\r\n    _triggerFeatSelect() {\r\n        let $currentPopupItemNumber = this._$popupContent.find('.current-popup-item-number');\r\n        let $innerPopup = this._$popupContent.find('.ol-popup-inner');\r\n        let $layerNameSpan = this._$popupContent.find('.current-popup-layer-name');\r\n        this.clearSelection();\r\n        let lyrFeatObj = this._passThroughLayerFeatureArray[this._currentPopupIndex];\r\n        $currentPopupItemNumber.html((this._currentPopupIndex + 1).toFixed());\r\n        $layerNameSpan.html(lyrFeatObj.layerName);\r\n        $innerPopup.html(lyrFeatObj.popupContent);\r\n        lyrFeatObj.selectionLayer.getSource().addFeature(lyrFeatObj.feature);\r\n        for (let f of this._popupChangedFunctions) {\r\n            f(this._$popupContent);\r\n        }\r\n    }\r\n\r\n\r\n    /**\r\n     *\r\n     * @param {ol.Feature} feature - the ol feature\r\n     * @param {LayerEsriMapServer} lyr - the map server layer\r\n     * @param {string} popupContent - popup content\r\n     * @param {string} esriName - esri layer name\r\n     */\r\n    addMapServicePopupContent(feature, lyr, popupContent, esriName) {\r\n\r\n        let featLayerObject = new _FeatureLayerProperties(\r\n            feature, lyr, this._popupContentLength, this._selectionLayerLookup[lyr.id], esriName\r\n        );\r\n        featLayerObject.popupContent = popupContent;\r\n\r\n        this._passThroughLayerFeatureArray.push(featLayerObject);\r\n        this._popupContentLength++;\r\n\r\n        $('.popup-content-length').html(this._popupContentLength.toFixed());\r\n\r\n        if (!this._popupOpen) {\r\n            this._$popupContent.find('.next-popup').trigger('click');\r\n\r\n            this._popupOverlay.setPosition(this._popupCoordinate);\r\n            this._$popupContent.scrollTop(0);\r\n            this._popupOpen = true;\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {ol.Pixel} pixel - the ol pixel\r\n     * @returns {Array.<_FeatureLayerProperties>} - feature layer properties\r\n     * @private\r\n     */\r\n    _featuresAtPixel(pixel) {\r\n        let layerFeatureObjectArray = [];\r\n        this.map.forEachFeatureAtPixel(pixel, (feature, layer) => {\r\n            let lyrIndex = this._arrPopupOlLayers.indexOf(layer);\r\n\r\n            if (lyrIndex > -1) {\r\n                layerFeatureObjectArray.push(new _FeatureLayerProperties(\r\n                    feature, this._arrPopupLayers[lyrIndex], lyrIndex, this._selectionLayers[lyrIndex]));\r\n            }\r\n        });\r\n\r\n        return layerFeatureObjectArray;\r\n    }\r\n\r\n    closePopup() {\r\n        this._checkInit();\r\n        this._popupOpen = false;\r\n        this._popupOverlay.setPosition(undefined);\r\n        this._$popupCloser[0].blur();\r\n        this.clearSelection();\r\n        this._$popupContent.html('');\r\n\r\n        return false;\r\n    };\r\n\r\n    /**\r\n     *\r\n     * @param {popupChangedFunction} chgFunction - popup change function\r\n     */\r\n    addPopupChangedFunction(chgFunction) {\r\n        this._popupChangedFunctions.push(chgFunction);\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase|*} lyr - the layer being acted on\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {ol.layer.Vector} the new selection layer\r\n     * @private\r\n     */\r\n    _addPopupLayer(lyr, selectionStyle) {\r\n        this._checkInit();\r\n\r\n        selectionStyle = selectionStyle || {};\r\n        selectionStyle.color = selectionStyle.color || 'rgba(255,170,0,0.5)';\r\n        selectionStyle.width = selectionStyle.width || 10;\r\n\r\n        let theStyle;\r\n\r\n        if (selectionStyle.olStyle) {\r\n            theStyle = selectionStyle.olStyle;\r\n        } else {\r\n            theStyle = new ol.style.Style({\r\n                stroke: new ol.style.Stroke({\r\n                    color: selectionStyle.color,\r\n                    width: selectionStyle.width\r\n                }),\r\n                image: new ol.style.Circle({\r\n                    radius: 7,\r\n                    fill: new ol.style.Fill({color: selectionStyle.color}),\r\n                    stroke: new ol.style.Stroke({color: selectionStyle.color, width: 1})\r\n                }),\r\n                fill: new ol.style.Fill({\r\n                    color: selectionStyle.color\r\n                })\r\n            });\r\n        }\r\n\r\n        let selectionLayer = new ol.layer.Vector(\r\n            {\r\n                source: new ol.source.Vector(),\r\n                style: theStyle,\r\n                zIndex: 100\r\n            }\r\n        );\r\n\r\n        this._selectionLayers.push(selectionLayer);\r\n        this._selectionLayerLookup[lyr.id] = selectionLayer;\r\n        this.map.addLayer(selectionLayer);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n    /**\r\n     * The popup callback function\r\n     * @callback popupCallback\r\n     * @param {object} featureProperties - the feature properties\r\n     * @param {jQuery} jqRef reference to the div content to do some async stuff inside the div\r\n     * @returns {string} the html content to be added to the popup\r\n     */\r\n\r\n    /**\r\n     * Add popup to the map\r\n     * @param {LayerBase|*} lyr The layer that the popup with act on\r\n     * @param {popupCallback} popupContentFunction - popup content function that makes popup info\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addVectorPopup(lyr, popupContentFunction, selectionStyle) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._arrPopupLayerIds.push(lyr.id);\r\n        this._arrPopupLayerNames.push(lyr.name);\r\n        this._arrPopupLayers.push(lyr);\r\n        this._arrPopupOlLayers.push(lyr.olLayer);\r\n        this._arrPopupContentFunction.push(popupContentFunction);\r\n\r\n        return selectionLayer;\r\n    };\r\n\r\n    /**\r\n     *\r\n     * @param {LayerBase} lyr - layer\r\n     */\r\n    removeVectorPopup(lyr) {\r\n        let idx = this._arrPopupLayerIds.indexOf(lyr.id);\r\n\r\n        if (idx > -1) {\r\n            this._arrPopupLayerIds.splice(idx, 1);\r\n            this._arrPopupLayerNames.splice(idx, 1);\r\n            this._arrPopupLayers.splice(idx, 1);\r\n            this._arrPopupOlLayers.splice(idx, 1);\r\n            this._arrPopupContentFunction.splice(idx, 1);\r\n            this._selectionLayers.splice(idx, 1);\r\n            delete this._selectionLayerLookup[lyr.id];\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param {LayerEsriMapServer} lyr - map server layer\r\n     * @param {object} [selectionStyle={}] the selection style configuration\r\n     * @param {string} [selectionStyle.color=rgba(255,170,0,0.5)] the selection color\r\n     * @param {number} [selectionStyle.width=10] the selection width for linear features\r\n     * @param {object|function} [selectionStyle.olStyle=undefined] an openlayers style object or function\r\n     * @returns {object} a reference to the ol selection layer\r\n     */\r\n    addMapServicePopup(lyr, selectionStyle) {\r\n        let selectionLayer = this._addPopupLayer(lyr, selectionStyle);\r\n        this._esriMapServiceLayers.push(lyr);\r\n\r\n        return selectionLayer;\r\n    }\r\n\r\n    clearSelection() {\r\n        this._checkInit();\r\n        for (let i = 0; i < this._selectionLayers.length; i++) {\r\n            this._selectionLayers[i].getSource().clear();\r\n        }\r\n        for (let f of this._mapClickFunctions) {\r\n            f();\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Add a function to be called when the map is clicked but before any popups are implemented\r\n     * @param {function} func - the map click function\r\n     */\r\n    addMapClickFunction(func) {\r\n        this._mapClickFunctions.push(func);\r\n    }\r\n}\r\nnm.MapPopupCls = MapPopupCls;\r\nexport default MapPopupCls;\r\n","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nimport * as zoomResolutionConvert from './zoomResolutionConvert';\r\nconst nm = provide('olHelpers');\r\n\r\n/**\r\n * A style function based on properties and zoom level, wraps normal feature, resolution function\r\n * @callback propertiesZoomStyle\r\n * @param {object} properties the feature properties\r\n * @param {number} zoom level\r\n *\r\n */\r\n\r\n/**\r\n * wrapper to define a style function by properties and zoom level\r\n * @param {propertiesZoomStyle|*} styleFunc - style function\r\n * @returns {function|*} new function\r\n */\r\nfunction propertiesZoomStyle(styleFunc) {\r\n    if (styleFunc == undefined){\r\n        return undefined;\r\n    }\r\n\r\n    return function (feature, resolution) {\r\n        styleFunc(feature.getProperties(), zoomResolutionConvert.resolutionToZoom(resolution));\r\n    };\r\n}\r\n\r\nnm.propertiesZoomStyle = propertiesZoomStyle;\r\nexport default propertiesZoomStyle;\r\n","/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport quickMapBase from './quickMapBase';\r\nimport provide from '../util/provide';\r\nimport mapMove from './mapMove';\r\nimport mapPopup from './mapPopup';\r\nlet nm = provide('olHelpers');\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nfunction quickMap(options) {\r\n    let m = quickMapBase(options);\r\n    mapMove.init(m);\r\n    mapPopup.init(m);\r\n\r\n    return m;\r\n}\r\n\r\n\r\nnm.quickMap = quickMap;\r\nexport default quickMap;\r\n","/**\r\n * Created by gavorhes on 3/25/2016.\r\n */\r\n\r\n/**\r\n * Created by gavorhes on 12/15/2015.\r\n */\r\n\r\nimport $ from '../jquery';\r\nimport provide from '../util/provide';\r\nimport ol from '../ol/ol';\r\nconst nm = provide('olHelpers');\r\n\r\n/**\r\n * Sets up a map with some default parameters and initializes\r\n * mapMove and mapPopup\r\n *\r\n * @param {object} [options={}] config options\r\n * @param {string} [options.divId=map] map div id\r\n * @param {object} [options.center={}] center config object\r\n * @param {number} [options.center.x=-10018378] center x, web mercator x or lon\r\n * @param {number} [options.center.y=5574910] center y, web mercator y or lat\r\n * @param {number} [options.zoom=7] zoom level\r\n * @param {number} [options.minZoom=undefined] min zoom\r\n * @param {number} [options.maxZoom=undefined] max zoom\r\n * @param {boolean} [options.baseSwitcher=true] if add base map switcher\r\n * @param {boolean} [options.fullScreen=false] if add base map switcher\r\n * @returns {ol.Map} the ol map\r\n */\r\nfunction quickMapBase(options) {\r\n    options = options || {};\r\n    options.divId = options.divId || 'map';\r\n    options.center = options.center || {};\r\n    options.center.x = typeof options.center.x == 'number' ? options.center.x : -10018378;\r\n    options.center.y = typeof options.center.y == 'number' ? options.center.y : 5574910;\r\n    options.zoom = typeof options.zoom == 'number' ? options.zoom : 7;\r\n    options.baseSwitcher = typeof options.baseSwitcher == 'boolean' ? options.baseSwitcher : true;\r\n    options.fullScreen = typeof options.fullScreen == 'boolean' ? options.fullScreen : false;\r\n\r\n\r\n    let $mapDiv = $('#' + options.divId);\r\n    $mapDiv.css('position', 'relative');\r\n\r\n    let osmLayer = new ol.layer.Tile({source: new ol.source.OSM()});\r\n    let satLayer = new ol.layer.Tile({visible: false, source: new ol.source.MapQuest({layer: 'sat'})});\r\n\r\n    let osmCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAADQ1NDk5OURFREtLS1FHSFlZWGJRVGJiYWdmZWxsbHRmaXBpanN0c3V0dHp5eX5+fIVzd4F3eeV0jud5juZ8k4aHhomHhoyGh5eGj5OVlJiVlZiYl5qZmJydnKOTlaKZmqKdnaOioaqqqKuzsbOvrrSysLa3tbW4uLm6ub27ub+/vbGXwbCZwbCgxLKlxrOqyLStybO3yrSxyrWzzbW2y7a1zbK4y7W6zbW8y760yrTAzbTFzrPKzrLOzrTJzrTOzr7CwbXC0LXK0LTO0L3I0bPQz7TQz7PS0bXQ0LnR0brW1bzT0r7U077V1Lzc2dqNqteUsdyXscaquuOHneaGmueHnOeJnuiBleiKn+eNoOiOoOWUpOiRo+iSpeiUpeqYpumaqOmdrPSynemgruSqtOmisOmlsuuqtequuOW1vOuxu+uxvOq1ve+xvPK0pvW3o/W5pfO5qvS7qfCwvMOuwc2/wNenxNyyzNe/0Nq31Nq51dy72Oy3wOu4wOu+xey4wO+6xO2+xfTAr/TCsvfFtPHLvvTJuMPDwMfHxcXKyc3DxMvFyMvLyM3PzcDV08DV1MTX1cbY1s7X1sjZ1sra2Mnd3M7b2c7c2tfH1tnB1t7F2d7M29fX1tLY1tDd2tHe3NTf3NnS19rZ1tva2Nnf3t3d28rh3tXg3Nnh3tzj393k39ni4N7k4N7n5uXDyOfLz+zAxu3CyOzEyezKzeDJ3eLM3uvP0u3P0ePf2+7R0u7Q1u/U0+7U1ezc0+7a2e/d2+3f3vbFzvLOwfHN0PPQw/TUx/LWyvLYzPDQ1fPe0ubc4vve4uHh3+nh3+/h2u/h3vHj2vHl3uHm4eTn4uDp5ebo4+Xo5ODq6ebq6OTv6+nl4+/j4O7l4e7n5ujp4+np5Ozq5e7s5urt6O7t6Orw6u7x6u3x7vPj5PDl4fDo4vDq5fDt5vDu6PDv7PTv6fDx6vHx7fH17fXw6fXy7fb07/bz8fT18vn38vr39fr48/r59Pr6+P3++//+/gAAALNTSk0AAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAFNElEQVRIS1VVCZxVUxi/9l0UIUT2bMnY43bVI2c0Y01kSWIaS0j2JEtkN41piomZrPPKQ2aQ7JKImOZlnm2493TJzDufuU1Zi+v/fee+mZ//793vnPOd7zvfes5zDBEZkBBjAcIjb+Iiotqgdhat8AMK0vl7/R9N7GiWtshqIr+EZ5gYKibyUsXY1l/mfFpssvUlWQ0FkU3gy4+RB/+kwYcO8pRSnldcOU/r2lAHARSwk2ORgEmOdC1EsuRiYSqMPwwroMIraZk5V2fYJQjCKfZrRmh3gSAZi2i4b7wSylWu8EqZwS59JkFUaW96JbNSc+CEUmt4rorwuZmWdDaoc+uZETuQlTCU5xYzR7muUnVUVo+BcRhre/VwUpasgJwhH7JkYIYA0sNxhmCwUK+lw6vCKBZehw01dEiyw4Q4aE0Z4ahDhKaFQsGnJ2BgqKoTBsNjFy0SlW6whRAZTdm8DBJmkBZhDi1j4xJQBk6ywrWUTymaCxac8lROcdauRGzQSNtA7EHUYhXyEwhhgjFUqRuO+rauhF1awFpzCsmwUbjIFBR0u1bKtyGpulW/H/cVVzkyGaIWTIR9pFAV6GK2gPMXMX8gPk9zzxXgI1kimcAltEYr+cjio1imlKpEa9rOipLm+p+CZ6Bw//qd1/f/O+GwMxbSLpyoZEcwkyh2jIks+3hmdd2jWUw4scxNysnHxU7nSspTRcJjCZGL3IsjsYJMMg5mwgx7gaIOLBFCogAgBBoNa9w+DE6I+Bs7FTgwwrJbHjWDgpYo2KwtBTcYEDuloC9geQw+k2RGnPGpTaOlq7AS+YICUz4DZVaX2TiNDhuYfTtY4geLi0IoCm3XccwM9hx4kU28StQEljDs3ZEpFGA+8dKzLmV9ymIwF5FOGn2GdJM8KLHDJbXyiYVMG9MRTLiXGGg2QKaxM3khPSRrwM9zEIardxU2w/EiA0gOeYKHzDR0V7/QGV3lKIA9ktrDArxO3gdA+k6SKoBiVwcm7NjZb9+Hnztg282TuHVZ9LOISFNt9MgyCetZVczSxnyDbl17Penq6mqpg1IhRaEO2aVLUO4/r17H8tTv6f13h71dduvZI3Y+uMdWksNSauLovJw5hsqiPIUvt0ku7/iBeUR3sksmomYWtRbAjbiLfv2lX9/V7LVG4uYnUZXhQ7f2OPCZEx9wrYWTcePEQqPEML8pl4mMdr/jlXlvHiRiJ2+MSTFY4TTSYStuvz2R/JXh+PPeGXm055J+3/YDWuNu3R3DArPutyg0ZgykMVDU9Ndm22+wYalr2rse48CnsTIFcMn73vfhNrktx1EUcZnPv6ah3Yy5cDTRdBEoGoBeah71dqFyjZDJLkWk3N3v4uuktssjWpzciMPxQeHj8nMKzcGuB0tAyzFhdCKOYWv4HwOQVwIxLG99a6uvH3sJCyO3h+k4EZ+G7+xj5f4XXksoaGrdMRzSc8ARA8+cdOuk2x6fffNNt5x+Ro1omPlrT/CQDlcNlpx4NBIWXhkx7Y3Zp3ofNR7Uv89Om/beW0TLIynHv3vs1VsOFpSWSXvfuPUf9BrRFyxgXdHoKJnQFegPOovvzz59ntrzye240ig8UQ3lDI2VqwagrKIQcLXNFL3wglN2OHdBQ6/vI3kENDVBwRb3k1XtczFbjWn4EzMYi7CF3129+JTYuRSdrGuS92g5dpqn6qXoJQs5xmL8p+Wt4hLbt0mx2OLNZR2bbPy8zJNQGFM/f/CfXZekRYFjGCWjIJpM+WiCzGBPWHhoyaAsjRT/B2Gy5yzYJkwUAAAAAElFTkSuQmCC')\";\r\n    let aerialCss = \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQALBgIMDQgOBwQOEQcTBwUSCwoVDAwdBw8ZDgUREwYUGAYZFQYZGgkTFQoVGQsZFAwZHBMeDhIbFBEbHAwWIA4bIREcIQ4hCQwjFw4lHBgkDB8sDxUiExIiGhAoGxohFRshGRorHQcrKQsiIQwmKgooJA0pKQ81Jw8yLRMiIxImKxUrJREuKhslJB0rIhooKRUuMBMyLhkwJhozKh48LxUzMRM9MBwzMiUvFCMtGiMwEiwzFCgzHDI+GSIsISkvJSQxIiM2LiY5Jic+Lyk0JSo0Ky49JSs9KSU1NSM7NCs2NS8+NDM1JzU9Ljg7IDJCHS1DLSNAMitCMSxIOjREITZLIDZJKDlFIjpFKztKJT1LKzJBMzpHMD1JMjpKPD1RKjlQNC1DQj5QQEA8MEJGJkBKJUJNK0lLLEJMMkVMPEpONENSLUdZL0pTLkpaLkRUMkRSPEVZMktUM0pVOklZMklZNEpcNU1ZMk1ZNUxfMk5dNkxcOVFUM1RUOFJbNVFZOVNYPVFdOVJdPFVaOVVaPVVdOlVdPVpaNlpdO0phN01hOlBiN1NhPFNoP1piPWFbPmRjPENOQEtPSURTQkJVS0xVQk1VSkxbQkxcS0heUVFXRFRcQlJfTFxeQlpeS05lQk1kSFRjQVRjSlZpQ1tkQlxlSlxpRF1rSVVnUVtlU1llXF9tU1xoXlxwSl9ramRfQmJlQ2FhSWFlSWFlTmVlSWRmTGFoQWFpRWFsRmVpRWVtRmNsSmtlRGpqRmpsS2BmWGRsUmFrW2ptUmZyR2RxTGpxTWVyU2RyW2d5V2tzUmt0WW15VG15WXFuTHNtVnFxTXF4T3h0TnJzUnJ1XHJ4VXN6Wnp0VHx1W315VXp8XGR0YGx0YHVzZXJ0aHR9ZXV+aHl9YHOCXXqBXXeCYHyCY3iEaHyIYn+JaXqKcYB5WIN6Y4SCXoCDZIGEaYCIZoOLa4iCaImJbIOOdYuMco6OeIuVcpOKbZKPc5aQb5eXe5ufg6KjhAAAAAAAAAAAAAAAAOGCeQgAAAEAdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wBT9wclAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGHRFWHRTb2Z0d2FyZQBwYWludC5uZXQgNC4wLjlsM35OAAAH80lEQVRISy1WbXQUVxm+6wqnk3Zmpxl2FG2EGg92C8GDlWptVTwa+uF3xcKmDfFzCUzDsJNsunXipglJXJbrtJWmwZNSnHD3jojRgUIm2UumIZ0JZ7JByrALbMWW0IBW8aRa4+cf76TeX3Nm3uc+z/s+7/vugl4r/aMTrT4e1pPTqnnmJNn5AyUzRnrRle/qE33dsvrBtAQVoxtpZNK3zSzYjUjviWO2Ag+R77dl7W36n/1Ep9KBPG/S+Py0PkjU/gPKQGqwTHryiWYFAXSvMairsio7SjyNsnCzh0qKImV9/7mhfHQZx2yN1O+7rXUm33MUPaboOkAJHaoIdXfJj2xWeyD8jMFEXkvIu5qzpU988gWB5zl+GS+sFe55trEVPdWZB2miq8bBVkNFO2R0qnrfkiXhcJhtDNXE6tbW97/s9O9/7ZfVhx86/CwrROpfvvxboMqeLsuqPr1j44qEwDNMOBximUiYoU8sw7BC/a7T72uEnyJDlGxZ9KcglZRyuqqrv/tSZErgOI4NgRBTIw9EmHAoFGZZnp6aGaJ2GTxfxYs8kKVUQh7WB5hQeC3LsUxoxVKW14l3BX2WcoUYPiZyLLe8teZ+iuT4GGhvV5KpKWkpyzxEr2MZgQ1xdRjfRBoH+2k6lIHjKTHPPBo8CSJISqqq4wGGOcWylIGlgvgNX1Gd8vF5f+IUIwb30ng+Gg2QfBRIMvy0jG8SVkYo4N0zvUXVRztbJ/L6xL7lUZEXBEHkuZqlS6gEAUgKJurnhFtfpACOYd8b/hVbJPqwi44a6KA0sPVjIi/SIyxb3u8KlAJ0S8jRVgrlW+nVHPdrhiXCxu42d86ByksDc80P3MkJFBFQ8Ho1lQegpWJRWFGsDsRwwv7pIyvuQW0ZkrX6NDVFbqcvaQI8vbyqzt5AARrsbKx5yhQEGs+wPO56bOK+0rcwMrOKkpUbZWYxV04UeZZv/cBKFhRL6Qdv9y4LfEDA7/thg7tTmv1a5/GnO0wl0dQg80wglZaHUmxRvjwAHOfyN0mxrpqLUpcjsK3NHYMo4R1o6eho2ZyIb2FoeOC3ILK8kZ2HQMOuWywGXUkJBCeTbYFS0+ym1h2/6UgmvnrvKYZZtIEXGf75C2cIAp5LHNd71x7uPoTjakrWH9e3KFpaatjUvJUysFw0KrLMYMW2lTg4PeUQx6kJEALvxXEmCdVyPLHtCSjBhc01XCjIgafxou+PE6KC1dhxSCwoBCc+N4P3btM84pmdSSjJnjO/nvY4LQfVyz5/I+v6IwjUOMjy+MVCxIbKupTJaEktp7cTKU42Pvjh2m/8cSpC6aPsaX/MHSuUQLVVsIa4RUTs/r/BVAexNdjdnsNG7j/rV93xheLMzKnFrPeTEQchCyCcKb25aAIn7lrAertrZwyNXM8N6zfWrFo3d2SmOEcF83x/r+OOFgrAHYWF7cELjhV7UQo/6WAIUVl9JFl8a//HZ66VpbY3I9QKZqPru77lA+iOWAIr0hKxHCmmr0othSyeIl5y3qt4xT8gSNrKEZozs8Els67rgsLOZ+ygzwMfbtNhobfgzpEyGnz7htPtzUi6PuOoj7K0WF/MXiUFxwGajRD1hjYXHXI9p406qOyinp5/tiWcDHY0jIu4n64Qfq7kliB2gemag9QbOia0PbbDMbd43SHuvxFxrAocxins7MX5Kqbe1QixKBxoV4//PfAgGCu+Rlm4SvZizyDH+0reDHp92iO0BuX3bCfItl0PEwvYLqpwXG2MHlGsQ4S8pMJZv1JGmHiEoHQDdOjwmVlEP/nE9ADKjI8xLI0OOGITfy0SbeG/C2jKUDGSlDhM9I3IpK9iup6XnbRNC7yqueNsJCCIiXzdQhnaGN+46umnEdy5U5UbUJ48LFM9GkJo8BdDOiAZ7ZIQbKhYLMqvhU2wmNxjEAsS2AI7y4nWF64duePbk7YV3zvAVLEMD9AxJRNa3KDUibV7DjnkuprMEYjScFNcaR2ceP2u9R/5k1052Ryme5phAFRswlHjAudiP4dOy7CaxLgdJh9vUlU1702/+LPa1U9fvPi9qlA4XEUBJc3dFlpsR457IDl1iPqLp7o81NQgyV19iYU38uTiv975Pd3SiwQcsGjx+v4/6fl5T7EOOMTCtpbKxfemsQq/3olQZcminADAAI0cuGLHaHOFxbuGvRk/Z9u7CULqoVR6NE0yx1avj30oRhc/jWUoIALGxkz0dg1Dl9iaI7LqOOXKsXJFwjiuEAi70Jra2nW1PL08zLBhZsMABpW5csI7TPfew9ipFKcn5k1i+1KyCWKjC3W/8dF1d666+RaabBVTFTHacjoojBNDh0NDxk+IPTlwfqJkWpbnpFHXIbLbmpxEQ3ff/Z0g/mauXsoln9wDRjy/NHsQFw3P6vWuTJ43/+FZrk2cvAFRipCKdfD9y2+pjRj78s0KdCUDKJvdV91ChngV38T20TM+gghjpJaPlpFr2xbEz5g4A/NGt5rNwdwmYGeeeMXBSLHHUIc+6RsojRH9VTUm3/mLf/64b470XvoxoTKhlMBQ2jMEzo2PjxdGMppmn1RM24bWFJqaQv4BcuJa2Sam7Zokq1ldCsz06NCBHrhwqVQYpfFj42NZexz1EW9SR/kT58nEeQKJb2fPXjjp0u/YUkwHEgLeOnf2nOuf1TRTM02CLKLTPy60/x1CCztqn7Ev+BdsC3m+30decQvW/wBNTwU+CfUQAQAAAABJRU5ErkJggg==')\";\r\n\r\n    if (options.baseSwitcher) {\r\n        let switcherContent = '<div class=\"base-map-switcher\" title=\"Toggle Base Layer\" style=\"';\r\n        switcherContent += 'position: absolute; top: 70px; left: 4px; border: solid black 1px; ';\r\n        switcherContent += `height: 50px; width: 50px; z-index: 10; border-radius: 4px; background: ${aerialCss};`;\r\n        switcherContent += '\"></div>';\r\n        $mapDiv.append(switcherContent);\r\n\r\n       $mapDiv.find('.base-map-switcher').click(function() {\r\n            \"use strict\";\r\n            osmLayer.setVisible(!osmLayer.getVisible());\r\n            satLayer.setVisible(!satLayer.getVisible());\r\n\r\n            if (osmLayer.getVisible()){\r\n                $(this).css('background', aerialCss);\r\n            } else {\r\n                $(this).css('background', osmCss);\r\n            }\r\n        });\r\n    }\r\n\r\n    if (options.zoom < 0 || options.zoom > 28) {\r\n        throw 'zoom out of range';\r\n    }\r\n\r\n    if (options.center.x >= -180 && options.center.x <= 180 && options.center.y >= -90 && options.center.y <= 90) {\r\n        let p = new ol.geom.Point([options.center.x, options.center.y]);\r\n        p.transform(\"EPSG:4326\", \"EPSG:3857\");\r\n        let coordinates = p.getCoordinates();\r\n        options.center.x = coordinates[0];\r\n        options.center.y = coordinates[1];\r\n    }\r\n\r\n    let map = new ol.Map({\r\n        layers: [osmLayer, satLayer],\r\n        target: options.divId,\r\n        controls: ol.control.defaults({\r\n            attributionOptions: {collapsible: false}\r\n        }),\r\n        view: new ol.View({\r\n            center: [options.center.x, options.center.y],\r\n            zoom: options.zoom,\r\n            minZoom: options.minZoom,\r\n            maxZoom: options.maxZoom\r\n        })\r\n    });\r\n    \r\n    if (options.fullScreen){\r\n        map.addControl(new ol.control.FullScreen());\r\n    }\r\n\r\n    return map;\r\n}\r\n\r\nnm.quickMapBase = quickMapBase;\r\nexport default quickMapBase;\r\n\r\n","/**\r\n * Created by gavorhes on 12/14/2015.\r\n */\r\n\r\nimport provide from '../util/provide';\r\nconst nm = provide('olHelpers.zoomResolutionConvert');\r\n\r\nlet _zoomResLookup = [\r\n    156543.03392804097, //0\r\n    78271.51696402048, //1\r\n    39135.75848201024, //2\r\n    19567.87924100512, //3\r\n    9783.93962050256, //4\r\n    4891.96981025128, //5\r\n    2445.98490512564, //6\r\n    1222.99245256282, //7\r\n    611.49622628141, //8\r\n    305.748113140705, //9\r\n    152.8740565703525, //10\r\n    76.43702828517625, //11\r\n    38.21851414258813, //12\r\n    19.109257071294063, //13\r\n    9.554628535647032, //14\r\n    4.777314267823516, //15\r\n    2.388657133911758, //16\r\n    1.194328566955879, //17\r\n    0.5971642834779395, //18\r\n    0.29858214173896974, //19\r\n    0.14929107086948487, //20\r\n    0.07464553543474244, //21\r\n    0.03732276771737122, //22\r\n    0.01866138385868561, //23\r\n    0.009330691929342804, //24\r\n    0.004665345964671402, //25\r\n    0.002332672982335701, //26\r\n    0.0011663364911678506, //27\r\n    0.0005831682455839253 //28\r\n];\r\n\r\n/**\r\n * Get the resolution given the zoom level\r\n * @param {number} zoomLevel - the zoom level\r\n * @returns {number|*} the map resolution\r\n */\r\nexport function zoomToResolution(zoomLevel) {\r\n    \"use strict\";\r\n\r\n    if (typeof zoomLevel == 'number') {\r\n        if (zoomLevel % 1 === 0 && zoomLevel >= 0 && zoomLevel <= 28) {\r\n            return _zoomResLookup[zoomLevel];\r\n        } else {\r\n            console.log(`invalid zoom level provided: ${zoomLevel}`);\r\n\r\n            return undefined;\r\n        }\r\n    } else {\r\n        return undefined;\r\n    }\r\n}\r\nnm.zoomToResolution = zoomToResolution;\r\n\r\n\r\n/**\r\n * Get resolution from the zoom level\r\n * @param {number} resolution - the resolution\r\n * @returns {number|*} the zoom level\r\n */\r\nexport function resolutionToZoom(resolution){\r\n    for (let i = 0; i < _zoomResLookup.length; i++){\r\n        if (resolution >= _zoomResLookup[i] ){\r\n            return i;\r\n        }\r\n    }\r\n\r\n    return 0;\r\n}\r\n\r\nnm.resolutionToZoom = resolutionToZoom;\r\n","// OpenLayers 3. See http://openlayers.org/\n// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md\n(function (root, factory) {\n  if (typeof exports === \"object\") {\n    module.exports = factory();\n  } else if (typeof define === \"function\" && define.amd) {\n    define([], factory);\n  } else {\n    root.ol = factory();\n  }\n}(this, function () {\n  var OPENLAYERS = {};\n  var p,x=this;function F(b,c,d){b=b.split(\".\");d=d||x;b[0]in d||!d.execScript||d.execScript(\"var \"+b[0]);for(var e;b.length&&(e=b.shift());)b.length||void 0===c?d[e]?d=d[e]:d=d[e]={}:d[e]=c}function aa(b){b.ua=function(){return b.Ac?b.Ac:b.Ac=new b}}\nfunction ba(b){var c=typeof b;if(\"object\"==c)if(b){if(b instanceof Array)return\"array\";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if(\"[object Window]\"==d)return\"object\";if(\"[object Array]\"==d||\"number\"==typeof b.length&&\"undefined\"!=typeof b.splice&&\"undefined\"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==d||\"undefined\"!=typeof b.call&&\"undefined\"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\nelse if(\"function\"==c&&\"undefined\"==typeof b.call)return\"object\";return c}function ca(b){var c=ba(b);return\"array\"==c||\"object\"==c&&\"number\"==typeof b.length}function da(b){return\"string\"==typeof b}function ea(b){return\"number\"==typeof b}function ga(b){return\"function\"==ba(b)}function ha(b){var c=typeof b;return\"object\"==c&&null!=b||\"function\"==c}function I(b){return b[ia]||(b[ia]=++ja)}var ia=\"closure_uid_\"+(1E9*Math.random()>>>0),ja=0;function ka(b,c,d){return b.call.apply(b.bind,arguments)}\nfunction la(b,c,d){if(!b)throw Error();if(2<arguments.length){var e=Array.prototype.slice.call(arguments,2);return function(){var d=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(d,e);return b.apply(c,d)}}return function(){return b.apply(c,arguments)}}function ma(b,c,d){ma=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?ka:la;return ma.apply(null,arguments)}\nfunction na(b,c){var d=Array.prototype.slice.call(arguments,1);return function(){var c=d.slice();c.push.apply(c,arguments);return b.apply(this,c)}}function M(b,c){function d(){}d.prototype=c.prototype;b.X=c.prototype;b.prototype=new d;b.prototype.constructor=b;b.We=function(b,d,g){for(var h=Array(arguments.length-2),k=2;k<arguments.length;k++)h[k-2]=arguments[k];return c.prototype[d].apply(b,h)}};var oa;function pa(){};var qa;var sa=String.prototype.trim?function(b){return b.trim()}:function(b){return b.replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g,\"\")};function ta(b){if(!ua.test(b))return b;-1!=b.indexOf(\"&\")&&(b=b.replace(va,\"&amp;\"));-1!=b.indexOf(\"<\")&&(b=b.replace(wa,\"&lt;\"));-1!=b.indexOf(\">\")&&(b=b.replace(xa,\"&gt;\"));-1!=b.indexOf('\"')&&(b=b.replace(ya,\"&quot;\"));-1!=b.indexOf(\"'\")&&(b=b.replace(za,\"&#39;\"));-1!=b.indexOf(\"\\x00\")&&(b=b.replace(Aa,\"&#0;\"));return b}var va=/&/g,wa=/</g,xa=/>/g,ya=/\"/g,za=/'/g,Aa=/\\x00/g,ua=/[\\x00&<>\"']/;\nfunction Ba(b,c){return b<c?-1:b>c?1:0};function Ca(b,c,d){return Math.min(Math.max(b,c),d)}var Da=function(){var b;\"cosh\"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Ea(b,c){var d=b%c;return 0>d*c?d+c:d};function Fa(b){return function(c){if(c)return[Ca(c[0],b[0],b[2]),Ca(c[1],b[1],b[3])]}}function Ga(b){return b};function Ha(b,c){return b>c?1:b<c?-1:0}function Ia(b,c,d){var e=b.length;if(b[0]<=c)return 0;if(!(c<=b[e-1]))if(0<d)for(d=1;d<e;++d){if(b[d]<c)return d-1}else if(0>d)for(d=1;d<e;++d){if(b[d]<=c)return d}else for(d=1;d<e;++d){if(b[d]==c)return d;if(b[d]<c)return b[d-1]-c<c-b[d]?d-1:d}return e-1}function Ja(b){return b.reduce(function(b,d){return Array.isArray(d)?b.concat(Ja(d)):b.concat(d)},[])}function Ka(b,c){var d,e=ca(c)?c:[c],f=e.length;for(d=0;d<f;d++)b[b.length]=e[d]}\nfunction La(b,c){var d=b.indexOf(c),e=-1<d;e&&b.splice(d,1);return e}function Ma(b,c){var d=b.length;if(d!==c.length)return!1;for(var e=0;e<d;e++)if(b[e]!==c[e])return!1;return!0}function Na(b){var c=Oa,d=b.length,e=Array(b.length),f;for(f=0;f<d;f++)e[f]={index:f,value:b[f]};e.sort(function(b,d){return c(b.value,d.value)||b.index-d.index});for(f=0;f<b.length;f++)b[f]=e[f].value};function Pa(b){return function(c,d,e){if(void 0!==c)return c=Ia(b,c,e),c=Ca(c+d,0,b.length-1),b[c]}}function Qa(b,c,d){return function(e,f,g){if(void 0!==e)return e=Math.max(Math.floor(Math.log(c/e)/Math.log(b)+(0<g?0:0>g?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function Ra(b){if(void 0!==b)return 0}function Sa(b,c){if(void 0!==b)return b+c}function Ta(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Ua(){var b=5*Math.PI/180;return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Va(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Wa=\"function\"===typeof Object.assign?Object.assign:function(b,c){if(void 0===b||null===b)throw new TypeError(\"Cannot convert undefined or null to object\");for(var d=Object(b),e=1,f=arguments.length;e<f;++e){var g=arguments[e];if(void 0!==g&&null!==g)for(var h in g)g.hasOwnProperty(h)&&(d[h]=g[h])}return d};function Ya(b){for(var c in b)delete b[c]}function Za(b){var c=[],d;for(d in b)c.push(b[d]);return c}function $a(b){for(var c in b)return!1;return!c};var ab=\"olm_\"+(1E4*Math.random()|0);function bb(b){function c(c){var e=b.listener,f=b.hc||b.target;b.kc&&N(b);return e.call(f,c)}return b.ic=c}function cb(b,c,d,e){for(var f,g=0,h=b.length;g<h;++g)if(f=b[g],f.listener===c&&f.hc===d)return e&&(f.deleteIndex=g),f}function db(b,c){var d=b[ab];return d?d[c]:void 0}function eb(b){var c=b[ab];c||(c=b[ab]={});return c}\nfunction fb(b,c){var d=db(b,c);if(d){for(var e=0,f=d.length;e<f;++e)b.removeEventListener(c,d[e].ic),Ya(d[e]);d.length=0;if(d=b[ab])delete d[c],0===Object.keys(d).length&&delete b[ab]}}function Q(b,c,d,e,f){var g=eb(b),h=g[c];h||(h=g[c]=[]);(g=cb(h,d,e,!1))?f||(g.kc=!1):(g={hc:e,kc:!!f,listener:d,target:b,type:c},b.addEventListener(c,bb(g)),h.push(g));return g}function gb(b,c,d,e){(b=db(b,c))&&(d=cb(b,d,e,!0))&&N(d)}\nfunction N(b){if(b&&b.target){b.target.removeEventListener(b.type,b.ic);var c=db(b.target,b.type);if(c){var d=\"deleteIndex\"in b?b.deleteIndex:c.indexOf(b);-1!==d&&c.splice(d,1);0===c.length&&fb(b.target,b.type)}Ya(b)}}function hb(b){var c=eb(b),d;for(d in c)fb(b,d)};function ib(){}ib.prototype.ja=!1;function jb(b){b.ja||(b.ja=!0,b.J())}ib.prototype.J=pa;function R(b,c){this.type=b;this.target=c||null}R.prototype.preventDefault=R.prototype.stopPropagation=function(){this.xe=!0};function kb(b){b.stopPropagation()}function lb(b){b.preventDefault()};function mb(){this.H={};this.A={}}M(mb,ib);mb.prototype.addEventListener=function(b,c){var d=this.A[b];d||(d=this.A[b]=[]);-1===d.indexOf(c)&&d.push(c)};function S(b,c){var d=\"string\"===typeof c?new R(c):c,e=d.type;d.target=b;var f=b.A[e],g;if(f){e in b.H||(b.H[e]=0);for(var h=0,k=f.length;h<k;++h)if(!1===f[h].call(b,d)||d.xe){g=!1;break}d=b.H[e];for(delete b.H[e];d--;)b.removeEventListener(e,pa);return g}}mb.prototype.J=function(){hb(this)};\nfunction nb(b,c){return c?c in b.A:0<Object.keys(b.A).length}mb.prototype.removeEventListener=function(b,c){var d=this.A[b];if(d){var e=d.indexOf(c);b in this.H?(d[e]=pa,++this.H[b]):(d.splice(e,1),0===d.length&&delete this.A[b])}};function ob(){mb.call(this);this.f=0}M(ob,mb);ob.prototype.v=function(){++this.f;S(this,\"change\")};ob.prototype.ba=function(b,c,d){if(Array.isArray(b)){for(var e=b.length,f=Array(e),g=0;g<e;++g)f[g]=Q(this,b[g],c,d);return f}return Q(this,b,c,d)};function pb(b,c,d){R.call(this,b);this.key=c;this.oldValue=d}M(pb,R);function T(b){ob.call(this);I(this);this.K={};void 0!==b&&this.l(b)}M(T,ob);var qb={};function rb(b){return qb.hasOwnProperty(b)?qb[b]:qb[b]=\"change:\"+b}T.prototype.get=function(b){var c;this.K.hasOwnProperty(b)&&(c=this.K[b]);return c};T.prototype.za=function(){return Wa({},this.K)};T.prototype.set=function(b,c,d){d?this.K[b]=c:(d=this.K[b],this.K[b]=c,d!==c&&(c=rb(b),S(this,new pb(c,b,d)),S(this,new pb(\"propertychange\",b,d))))};\nT.prototype.l=function(b,c){for(var d in b)this.set(d,b[d],c)};function sb(b,c,d){void 0===d&&(d=[0,0]);d[0]=b[0]*c+.5|0;d[1]=b[1]*c+.5|0;return d}function tb(b,c){if(Array.isArray(b))return b;void 0===c?c=[b,b]:(c[0]=b,c[1]=b);return c};function ub(b,c){b[0]+=c[0];b[1]+=c[1]}function vb(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f};function wb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}wb.prototype.BYTES_PER_ELEMENT=4;wb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};wb.prototype.toString=Array.prototype.join;\"undefined\"==typeof Float32Array&&(wb.BYTES_PER_ELEMENT=4,wb.prototype.BYTES_PER_ELEMENT=wb.prototype.BYTES_PER_ELEMENT,wb.prototype.set=wb.prototype.set,wb.prototype.toString=wb.prototype.toString,F(\"Float32Array\",wb,void 0));function xb(b){this.length=b.length||b;for(var c=0;c<this.length;c++)this[c]=b[c]||0}xb.prototype.BYTES_PER_ELEMENT=8;xb.prototype.set=function(b,c){c=c||0;for(var d=0;d<b.length&&c+d<this.length;d++)this[c+d]=b[d]};xb.prototype.toString=Array.prototype.join;if(\"undefined\"==typeof Float64Array){try{xb.BYTES_PER_ELEMENT=8}catch(b){}xb.prototype.BYTES_PER_ELEMENT=xb.prototype.BYTES_PER_ELEMENT;xb.prototype.set=xb.prototype.set;xb.prototype.toString=xb.prototype.toString;F(\"Float64Array\",xb,void 0)};function yb(b,c,d,e,f){b[0]=c;b[1]=d;b[2]=e;b[3]=f};function zb(){var b=Array(16);Ab(b,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);return b}function Bb(){var b=Array(16);Ab(b,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return b}function Ab(b,c,d,e,f,g,h,k,l,m,n,q,r,u,w,y,z){b[0]=c;b[1]=d;b[2]=e;b[3]=f;b[4]=g;b[5]=h;b[6]=k;b[7]=l;b[8]=m;b[9]=n;b[10]=q;b[11]=r;b[12]=u;b[13]=w;b[14]=y;b[15]=z}\nfunction Cb(b,c){b[0]=c[0];b[1]=c[1];b[2]=c[2];b[3]=c[3];b[4]=c[4];b[5]=c[5];b[6]=c[6];b[7]=c[7];b[8]=c[8];b[9]=c[9];b[10]=c[10];b[11]=c[11];b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15]}function Db(b){b[0]=1;b[1]=0;b[2]=0;b[3]=0;b[4]=0;b[5]=1;b[6]=0;b[7]=0;b[8]=0;b[9]=0;b[10]=1;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1}\nfunction Eb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],n=b[8],q=b[9],r=b[10],u=b[11],w=b[12],y=b[13],z=b[14],D=b[15],t=d*k-e*h,v=d*l-f*h,B=d*m-g*h,E=e*l-f*k,C=e*m-g*k,G=f*m-g*l,J=n*y-q*w,A=n*z-r*w,H=n*D-u*w,O=q*z-r*y,P=q*D-u*y,L=r*D-u*z,K=t*L-v*P+B*O+E*H-C*A+G*J;0!=K&&(K=1/K,c[0]=(k*L-l*P+m*O)*K,c[1]=(-e*L+f*P-g*O)*K,c[2]=(y*G-z*C+D*E)*K,c[3]=(-q*G+r*C-u*E)*K,c[4]=(-h*L+l*H-m*A)*K,c[5]=(d*L-f*H+g*A)*K,c[6]=(-w*G+z*B-D*v)*K,c[7]=(n*G-r*B+u*v)*K,c[8]=(h*P-k*H+m*J)*K,c[9]=(-d*P+\ne*H-g*J)*K,c[10]=(w*C-y*B+D*t)*K,c[11]=(-n*C+q*B-u*t)*K,c[12]=(-h*O+k*A-l*J)*K,c[13]=(d*O-e*A+f*J)*K,c[14]=(-w*E+y*v-z*t)*K,c[15]=(n*E-q*v+r*t)*K)}function Fb(b,c,d){var e=b[1]*c+b[5]*d+0*b[9]+b[13],f=b[2]*c+b[6]*d+0*b[10]+b[14],g=b[3]*c+b[7]*d+0*b[11]+b[15];b[12]=b[0]*c+b[4]*d+0*b[8]+b[12];b[13]=e;b[14]=f;b[15]=g}function Gb(b,c,d){Ab(b,b[0]*c,b[1]*c,b[2]*c,b[3]*c,b[4]*d,b[5]*d,b[6]*d,b[7]*d,1*b[8],1*b[9],1*b[10],1*b[11],b[12],b[13],b[14],b[15])}\nfunction Hb(b,c){var d=b[0],e=b[1],f=b[2],g=b[3],h=b[4],k=b[5],l=b[6],m=b[7],n=Math.cos(c),q=Math.sin(c);b[0]=d*n+h*q;b[1]=e*n+k*q;b[2]=f*n+l*q;b[3]=g*n+m*q;b[4]=d*-q+h*n;b[5]=e*-q+k*n;b[6]=f*-q+l*n;b[7]=g*-q+m*n}new Float64Array(3);new Float64Array(3);new Float64Array(4);new Float64Array(4);new Float64Array(4);new Float64Array(16);function Ib(b){for(var c=Jb(),d=0,e=b.length;d<e;++d)Kb(c,b[d]);return c}function Lb(b,c,d){return d?(d[0]=b[0]-c,d[1]=b[1]-c,d[2]=b[2]+c,d[3]=b[3]+c,d):[b[0]-c,b[1]-c,b[2]+c,b[3]+c]}function Mb(b,c){return c?(c[0]=b[0],c[1]=b[1],c[2]=b[2],c[3]=b[3],c):b.slice()}function Nb(b,c){return b[0]<=c[0]&&c[2]<=b[2]&&b[1]<=c[1]&&c[3]<=b[3]}function Jb(){return[Infinity,Infinity,-Infinity,-Infinity]}function Ob(b,c,d,e,f){return f?(f[0]=b,f[1]=c,f[2]=d,f[3]=e,f):[b,c,d,e]}\nfunction Pb(b){return Ob(Infinity,Infinity,-Infinity,-Infinity,b)}function Qb(b,c){var d=b[0],e=b[1];return Ob(d,e,d,e,c)}function Rb(b,c){return b[0]==c[0]&&b[2]==c[2]&&b[1]==c[1]&&b[3]==c[3]}function Sb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[2]>b[2]&&(b[2]=c[2]);c[1]<b[1]&&(b[1]=c[1]);c[3]>b[3]&&(b[3]=c[3])}function Kb(b,c){c[0]<b[0]&&(b[0]=c[0]);c[0]>b[2]&&(b[2]=c[0]);c[1]<b[1]&&(b[1]=c[1]);c[1]>b[3]&&(b[3]=c[1])}\nfunction Tb(b,c,d,e,f){for(;d<e;d+=f){var g=b,h=c[d],k=c[d+1];g[0]=Math.min(g[0],h);g[1]=Math.min(g[1],k);g[2]=Math.max(g[2],h);g[3]=Math.max(g[3],k)}return b}function Ub(b){var c=0;b[2]<b[0]||b[3]<b[1]||(c=Vb(b)*Wb(b));return c}function Xb(b){return[b[0],b[1]]}function Yb(b){return[(b[0]+b[2])/2,(b[1]+b[3])/2]}\nfunction Zb(b,c,d,e){var f=c*e[0]/2;e=c*e[1]/2;c=Math.cos(d);var g=Math.sin(d);d=f*c;f*=g;c*=e;var h=e*g,k=b[0],l=b[1];b=k-d+h;e=k-d-h;g=k+d-h;d=k+d+h;var h=l-f-c,k=l-f+c,m=l+f+c,f=l+f-c;return Ob(Math.min(b,e,g,d),Math.min(h,k,m,f),Math.max(b,e,g,d),Math.max(h,k,m,f),void 0)}function Wb(b){return b[3]-b[1]}function $b(b,c){var d=Jb();ac(b,c)&&(d[0]=b[0]>c[0]?b[0]:c[0],d[1]=b[1]>c[1]?b[1]:c[1],d[2]=b[2]<c[2]?b[2]:c[2],d[3]=b[3]<c[3]?b[3]:c[3]);return d}function bc(b){return[b[0],b[3]]}\nfunction Vb(b){return b[2]-b[0]}function ac(b,c){return b[0]<=c[2]&&b[2]>=c[0]&&b[1]<=c[3]&&b[3]>=c[1]};function cc(){return!0}function dc(){return!1};/*\n\n Latitude/longitude spherical geodesy formulae taken from\n http://www.movable-type.co.uk/scripts/latlong.html\n Licensed under CC-BY-3.0.\n*/\nfunction ec(b){this.radius=b}function fc(b,c){var d=b[1]*Math.PI/180,e=c[1]*Math.PI/180,f=(e-d)/2,g=(c[0]-b[0])*Math.PI/180/2,d=Math.sin(f)*Math.sin(f)+Math.sin(g)*Math.sin(g)*Math.cos(d)*Math.cos(e);return 2*gc.radius*Math.atan2(Math.sqrt(d),Math.sqrt(1-d))}\nec.prototype.offset=function(b,c,d){var e=b[1]*Math.PI/180;c/=this.radius;var f=Math.asin(Math.sin(e)*Math.cos(c)+Math.cos(e)*Math.sin(c)*Math.cos(d));return[180*(b[0]*Math.PI/180+Math.atan2(Math.sin(d)*Math.sin(c)*Math.cos(e),Math.cos(c)-Math.sin(e)*Math.sin(f)))/Math.PI,180*f/Math.PI]};var gc=new ec(6370997);var hc={};hc.degrees=2*Math.PI*gc.radius/360;hc.ft=.3048;hc.m=1;hc[\"us-ft\"]=1200/3937;\nfunction ic(b){this.qa=b.code;this.b=b.units;this.h=void 0!==b.extent?b.extent:null;this.f=void 0!==b.global?b.global:!1;this.a=!(!this.f||!this.h);this.i=void 0!==b.getPointResolution?b.getPointResolution:this.j;this.c=null;this.g=b.metersPerUnit;var c=jc,d=b.code,e=kc||x.proj4;if(\"function\"==typeof e&&void 0===c[d]){var f=e.defs(d);if(void 0!==f){void 0===b.metersPerUnit&&(this.g=f.to_meter);void 0===b.units&&(this.b=f.units);var g,h;for(g in c)if(b=e.defs(g),void 0!==b)if(c=lc(g),b===f)mc([c,this]);\nelse{h=e(g,d);b=h.forward;h=h.inverse;var c=lc(c),k=lc(this);nc(c,k,oc(b));nc(k,c,oc(h))}}}}ic.prototype.l=function(){return this.qa};ic.prototype.C=function(){return this.h};function pc(b){return b.g||hc[b.b]}ic.prototype.j=function(b,c){if(\"degrees\"==this.b)return b;var d=qc(this,lc(\"EPSG:4326\")),e=[c[0]-b/2,c[1],c[0]+b/2,c[1],c[0],c[1]-b/2,c[0],c[1]+b/2],e=d(e,e,2),d=(fc(e.slice(0,2),e.slice(2,4))+fc(e.slice(4,6),e.slice(6,8)))/2,e=pc(this);void 0!==e&&(d/=e);return d};\nic.prototype.getPointResolution=function(b,c){return this.i(b,c)};var jc={},rc={},kc=null;function mc(b){sc(b);b.forEach(function(c){b.forEach(function(b){c!==b&&nc(c,b,tc)})})}function uc(b){jc[b.qa]=b;nc(b,b,tc)}function sc(b){var c=[];b.forEach(function(b){c.push(uc(b))})}function vc(b){return b?\"string\"===typeof b?lc(b):b:lc(\"EPSG:3857\")}function nc(b,c,d){b=b.qa;c=c.qa;b in rc||(rc[b]={});rc[b][c]=d}\nfunction oc(b){return function(c,d,e){var f=c.length;e=void 0!==e?e:2;d=void 0!==d?d:Array(f);var g,h;for(h=0;h<f;h+=e)for(g=b([c[h],c[h+1]]),d[h]=g[0],d[h+1]=g[1],g=e-1;2<=g;--g)d[h+g]=c[h+g];return d}}function lc(b){var c;if(b instanceof ic)c=b;else if(\"string\"===typeof b){c=jc[b];var d=kc||x.proj4;void 0===c&&\"function\"==typeof d&&void 0!==d.defs(b)&&(c=new ic({code:b}),uc(c))}else c=null;return c}function wc(b,c){if(b===c)return!0;var d=b.b===c.b;return b.qa===c.qa?d:qc(b,c)===tc&&d}\nfunction xc(b,c){var d=lc(b),e=lc(c);return qc(d,e)}function qc(b,c){var d=b.qa,e=c.qa,f;d in rc&&e in rc[d]&&(f=rc[d][e]);void 0===f&&(f=yc);return f}function yc(b,c){if(void 0!==c&&b!==c){for(var d=0,e=b.length;d<e;++d)c[d]=b[d];b=c}return b}function tc(b,c){var d;if(void 0!==c){d=0;for(var e=b.length;d<e;++d)c[d]=b[d];d=c}else d=b.slice();return d};function zc(){T.call(this);this.u=Jb();this.w=-1;this.h={};this.s=this.i=0}M(zc,T);zc.prototype.C=function(b){this.w!=this.f&&(this.u=this.ib(this.u),this.w=this.f);var c=this.u;b?(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3]):b=c;return b};zc.prototype.o=function(b,c){this.Eb(xc(b,c));return this};function Ac(b,c,d,e,f,g){var h=f[0],k=f[1],l=f[4],m=f[5],n=f[12];f=f[13];for(var q=g?g:[],r=0;c<d;c+=e){var u=b[c],w=b[c+1];q[r++]=h*u+l*w+n;q[r++]=k*u+m*w+f}g&&q.length!=r&&(q.length=r);return q};function Bc(){zc.call(this);this.g=\"XY\";this.b=2;this.a=null}M(Bc,zc);function Cc(b){if(\"XY\"==b)return 2;if(\"XYZ\"==b||\"XYM\"==b)return 3;if(\"XYZM\"==b)return 4}p=Bc.prototype;p.ib=function(b){var c=this.a,d=this.a.length,e=this.b;b=Pb(b);return Tb(b,c,0,d,e)};\np.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=this.Ma(b);if(d.a.length<this.a.length)return this.h[c]=d;this.i=b;return this};p.Ma=function(){return this};function U(b,c,d){b.b=Cc(c);b.g=c;b.a=d}function Dc(b,c,d,e){if(c)d=Cc(c);else{for(c=0;c<e;++c){if(0===d.length){b.g=\"XY\";b.b=2;return}d=d[0]}d=d.length;c=2==d?\"XY\":3==d?\"XYZ\":4==d?\"XYZM\":void 0}b.g=c;b.b=d}\np.Eb=function(b){this.a&&(b(this.a,this.a,this.b),this.v())};p.rotate=function(b,c){var d=this.a;if(d){for(var e=d.length,f=this.b,g=d?d:[],h=Math.cos(b),k=Math.sin(b),l=c[0],m=c[1],n=0,q=0;q<e;q+=f){var r=d[q]-l,u=d[q+1]-m;g[n++]=l+r*h-u*k;g[n++]=m+r*k+u*h;for(r=q+2;r<q+f;++r)g[n++]=d[r]}d&&g.length!=n&&(g.length=n);this.v()}};function Ec(b,c){var d=0,e,f;e=0;for(f=c.length;e<f;++e)b[d++]=c[e];return d}function Fc(b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],k;for(k=0;k<e;++k)b[c++]=h[k]}return c}function Gc(b,c,d,e,f){f=f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h)c=Fc(b,c,d[h],e),f[g++]=c;f.length=g;return f};function Hc(b,c,d,e,f){f=void 0!==f?f:[];for(var g=0;c<d;c+=e)f[g++]=b.slice(c,c+e);f.length=g;return f}function Ic(b,c,d,e,f){f=void 0!==f?f:[];var g=0,h,k;h=0;for(k=d.length;h<k;++h){var l=d[h];f[g++]=Hc(b,c,l,e,f[g]);c=l}f.length=g;return f};function Jc(b,c,d,e,f,g,h){var k=(d-c)/e;if(3>k){for(;c<d;c+=e)g[h++]=b[c],g[h++]=b[c+1];return h}var l=Array(k);l[0]=1;l[k-1]=1;d=[c,d-e];for(var m=0,n;0<d.length;){var q=d.pop(),r=d.pop(),u=0,w=b[r],y=b[r+1],z=b[q],D=b[q+1];for(n=r+e;n<q;n+=e){var t,v=b[n];t=b[n+1];var B=w,E=y,C=z-B,G=D-E;if(0!==C||0!==G){var J=((v-B)*C+(t-E)*G)/(C*C+G*G);1<J?(B=z,E=D):0<J&&(B+=C*J,E+=G*J)}v=B-v;t=E-t;t=v*v+t*t;t>u&&(m=n,u=t)}u>f&&(l[(m-c)/e]=1,r+e<m&&d.push(r,m),m+e<q&&d.push(m,q))}for(n=0;n<k;++n)l[n]&&(g[h++]=\nb[c+n*e],g[h++]=b[c+n*e+1]);return h}\nfunction Kc(b,c,d,e,f,g,h,k){var l,m;l=0;for(m=d.length;l<m;++l){var n=d[l];a:{var q=b,r=n,u=e,w=f,y=g;if(c!=r){var z=w*Math.round(q[c]/w),D=w*Math.round(q[c+1]/w);c+=u;y[h++]=z;y[h++]=D;var t=void 0,v=void 0;do if(t=w*Math.round(q[c]/w),v=w*Math.round(q[c+1]/w),c+=u,c==r){y[h++]=t;y[h++]=v;break a}while(t==z&&v==D);for(;c<r;){var B,E;B=w*Math.round(q[c]/w);E=w*Math.round(q[c+1]/w);c+=u;if(B!=t||E!=v){var C=t-z,G=v-D,J=B-z,A=E-D;C*A==G*J&&(0>C&&J<C||C==J||0<C&&J>C)&&(0>G&&A<G||G==A||0<G&&A>G)||(y[h++]=\nt,y[h++]=v,z=t,D=v);t=B;v=E}}y[h++]=t;y[h++]=v}}k.push(h);c=n}return h};function Lc(b,c){Bc.call(this);this.W(b,c)}M(Lc,Bc);p=Lc.prototype;p.clone=function(){var b=new Lc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new Lc(null);U(b,\"XY\",c);b.v();return b};p.U=function(){return\"LinearRing\"};p.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,\"XY\",null);this.v()};function Mc(b,c){Bc.call(this);this.W(b,c)}M(Mc,Bc);p=Mc.prototype;p.clone=function(){var b=new Mc(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return this.a?this.a.slice():[]};p.ib=function(b){return Qb(this.a,b)};p.U=function(){return\"Point\"};p.W=function(b,c){b?(Dc(this,c,b,0),this.a||(this.a=[]),this.a.length=Ec(this.a,b)):U(this,\"XY\",null);this.v()};function Nc(b,c,d,e,f,g){for(var h=!1,k=b[d-e],l=b[d-e+1];c<d;c+=e){var m=b[c],n=b[c+1];l>g!=n>g&&f<(m-k)*(g-l)/(n-l)+k&&(h=!h);k=m;l=n}return h};function Oc(b,c,d,e,f,g,h){var k,l,m,n,q,r=f[g+1],u=[],w=d[0];m=b[w-e];q=b[w-e+1];for(k=c;k<w;k+=e){n=b[k];l=b[k+1];if(r<=q&&l<=r||q<=r&&r<=l)m=(r-q)/(l-q)*(n-m)+m,u.push(m);m=n;q=l}w=NaN;q=-Infinity;u.sort(Ha);m=u[0];k=1;for(l=u.length;k<l;++k){n=u[k];var y=Math.abs(n-m);if(y>q){m=(m+n)/2;var z;a:if(0!==d.length&&Nc(b,c,d[0],e,m,r)){var D=z=void 0;z=1;for(D=d.length;z<D;++z)if(Nc(b,d[z-1],d[z],e,m,r)){z=!1;break a}z=!0}else z=!1;z&&(w=m,q=y)}m=n}isNaN(w)&&(w=f[g]);return h?(h.push(w,r),h):[w,r]}\n;function Pc(b,c,d,e){for(var f=0,g=b[d-e],h=b[d-e+1];c<d;c+=e)var k=b[c],l=b[c+1],f=f+(k-g)*(l+h),g=k,h=l;return 0<f}function Qc(b,c,d,e){var f=0;e=void 0!==e?e:!1;var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g],f=Pc(b,f,k,d);if(0===g){if(e&&f||!e&&!f)return!1}else if(e&&!f||!e&&f)return!1;f=k}return!0}\nfunction Rc(b,c,d,e,f){f=void 0!==f?f:!1;var g,h;g=0;for(h=d.length;g<h;++g){var k=d[g],l=Pc(b,c,k,e);if(0===g?f&&l||!f&&!l:f&&!l||!f&&l)for(var l=b,m=k,n=e;c<m-n;){var q;for(q=0;q<n;++q){var r=l[c+q];l[c+q]=l[m-n+q];l[m-n+q]=r}c+=n;m-=n}c=k}return c}function Sc(b,c,d,e){var f=0,g,h;g=0;for(h=c.length;g<h;++g)f=Rc(b,f,c[g],d,e);return f};function Tc(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Tc,Bc);p=Tc.prototype;p.clone=function(){var b=new Tc(null);Uc(b,this.g,this.a.slice(),this.c.slice());return b};p.ra=function(b){var c;void 0!==b?(c=Vc(this).slice(),Rc(c,0,this.c,this.b,b)):c=this.a;return Ic(c,0,this.c,this.b)};p.ab=function(){return this.c};function Wc(b){if(b.B!=b.f){var c=Yb(b.C());b.D=Oc(Vc(b),0,b.c,b.b,c,0);b.B=b.f}return b.D}\nfunction Vc(b){if(b.G!=b.f){var c=b.a;Qc(c,b.c,b.b)?b.j=c:(b.j=c.slice(),b.j.length=Rc(b.j,0,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[];c.length=Kc(this.a,0,this.c,this.b,Math.sqrt(b),c,0,d);b=new Tc(null);Uc(b,\"XY\",c,d);return b};p.U=function(){return\"Polygon\"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1];this.v()}else Uc(this,\"XY\",null,this.c)};function Uc(b,c,d,e){U(b,c,d);b.c=e;b.v()};function V(b){T.call(this);b=b||{};this.g=[0,0];var c={};c.center=void 0!==b.center?b.center:null;this.h=vc(b.projection);var d,e,f,g=void 0!==b.minZoom?b.minZoom:0;d=void 0!==b.maxZoom?b.maxZoom:28;var h=void 0!==b.zoomFactor?b.zoomFactor:2;if(void 0!==b.resolutions)d=b.resolutions,e=d[0],f=d[d.length-1],d=Pa(d);else{e=vc(b.projection);f=e.C();var k=(f?Math.max(Vb(f),Wb(f)):360*hc.degrees/pc(e))/256/Math.pow(2,0),l=k/Math.pow(2,28);e=b.maxResolution;void 0!==e?g=0:e=k/Math.pow(h,g);f=b.minResolution;\nvoid 0===f&&(f=void 0!==b.maxZoom?void 0!==b.maxResolution?e/Math.pow(h,d):k/Math.pow(h,d):l);d=g+Math.floor(Math.log(e/f)/Math.log(h));f=e/Math.pow(h,d-g);d=Qa(h,e,d-g)}this.b=e;this.i=f;this.c=g;g=void 0!==b.extent?Fa(b.extent):Ga;(void 0!==b.enableRotation?b.enableRotation:1)?(e=b.constrainRotation,e=void 0===e||!0===e?Ua():!1===e?Sa:ea(e)?Ta(e):Sa):e=Ra;this.a=new Va(g,d,e);void 0!==b.resolution?c.resolution=b.resolution:void 0!==b.zoom&&(c.resolution=this.constrainResolution(this.b,b.zoom-this.c));\nc.rotation=void 0!==b.rotation?b.rotation:0;this.l(c)}M(V,T);p=V.prototype;p.constrainResolution=function(b,c,d){return this.a.resolution(b,c||0,d||0)};p.constrainRotation=function(b,c){return this.a.rotation(b,c||0)};p.ia=function(){return this.get(\"center\")};p.jc=function(b){var c=this.ia(),d=this.I(),e=this.Z();return Zb(c,d,e,b)};p.le=function(){return this.h};p.I=function(){return this.get(\"resolution\")};function Xc(b,c){return Math.max(Vb(b)/c[0],Wb(b)/c[1])}p.Z=function(){return this.get(\"rotation\")};\np.N=function(){var b=this.ia(),c=this.h,d=this.I(),e=this.Z();return{center:[Math.round(b[0]/d)*d,Math.round(b[1]/d)*d],projection:void 0!==c?c:null,resolution:d,rotation:e}};p.wd=function(){var b,c=this.I();if(void 0!==c){var d,e=0;do{d=this.constrainResolution(this.b,e);if(d==c){b=e;break}++e}while(d>this.i)}return void 0!==b?this.c+b:b};\np.nd=function(b,c,d){if(!(b instanceof Bc)){var e=b[0],f=b[1],g=b[2],h=b[3],e=[e,f,e,h,g,h,g,f,e,f],f=new Tc(null);Uc(f,\"XY\",e,[e.length]);b=f}e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var h=void 0!==e.constrainResolution?e.constrainResolution:!0,f=void 0!==e.nearest?e.nearest:!1,k;void 0!==e.minResolution?k=e.minResolution:void 0!==e.maxZoom?k=this.constrainResolution(this.b,e.maxZoom-this.c,0):k=0;var l=b.a,g=this.Z(),e=Math.cos(-g),g=Math.sin(-g),m=Infinity,n=Infinity,q=-Infinity,r=-Infinity;\nb=b.b;for(var u=0,w=l.length;u<w;u+=b)var y=l[u]*e-l[u+1]*g,z=l[u]*g+l[u+1]*e,m=Math.min(m,y),n=Math.min(n,z),q=Math.max(q,y),r=Math.max(r,z);c=Xc([m,n,q,r],[c[0]-d[1]-d[3],c[1]-d[0]-d[2]]);c=isNaN(c)?k:Math.max(c,k);h&&(k=this.constrainResolution(c,0,0),!f&&k<c&&(k=this.constrainResolution(k,-1,0)),c=k);Yc(this,c);g=-g;k=(m+q)/2+(d[1]-d[3])/2*c;c=(n+r)/2+(d[0]-d[2])/2*c;this.oa([k*e-c*g,c*e+k*g])};\np.rotate=function(b,c){if(void 0!==c){var d,e=this.ia();void 0!==e&&(d=[e[0]-c[0],e[1]-c[1]],vb(d,b-this.Z()),ub(d,c));this.oa(d)}this.set(\"rotation\",b)};p.oa=function(b){this.set(\"center\",b)};function Zc(b,c){b.g[1]+=c}function Yc(b,c){b.set(\"resolution\",c)}p.Ee=function(b){b=this.constrainResolution(this.b,b-this.c,0);Yc(this,b)};function $c(b){return 1-Math.pow(1-b,3)}function ad(b){return 3*b*b-2*b*b*b}function bd(b){return b};function cd(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:ad;return function(b,c){if(c.time<d)return c.animate=!0,c.viewHints[0]+=1,!0;if(c.time<d+g){var m=1-h((c.time-d)/g),n=e-c.viewState.center[0],q=f-c.viewState.center[1];c.animate=!0;c.viewState.center[0]+=m*n;c.viewState.center[1]+=m*q;c.viewHints[0]+=1;return!0}return!1}}\nfunction dd(b){var c=b.rotation?b.rotation:0,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad,g=b.anchor?b.anchor:null;return function(b,k){if(k.time<d)return k.animate=!0,k.viewHints[0]+=1,!0;if(k.time<d+e){var l=1-f((k.time-d)/e),l=(c-k.viewState.rotation)*l;k.animate=!0;k.viewState.rotation+=l;if(g){var m=k.viewState.center;m[0]-=g[0];m[1]-=g[1];vb(m,l);ub(m,g)}k.viewHints[0]+=1;return!0}return!1}}\nfunction ed(b){var c=b.resolution,d=b.start?b.start:Date.now(),e=void 0!==b.duration?b.duration:1E3,f=b.easing?b.easing:ad;return function(b,h){if(h.time<d)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<d+e){var k=1-f((h.time-d)/e),l=c-h.viewState.resolution;h.animate=!0;h.viewState.resolution+=k*l;h.viewHints[0]+=1;return!0}return!1}};function fd(b,c,d,e){this.a=b;this.f=c;this.b=d;this.c=e}function gd(b,c,d){return b.a<=c&&c<=b.f&&b.b<=d&&d<=b.c}function hd(b,c){return b.a==c.a&&b.b==c.b&&b.f==c.f&&b.c==c.c}fd.prototype.ha=function(){return this.f-this.a+1};function id(b,c){return b.a<=c.f&&b.f>=c.a&&b.b<=c.c&&b.c>=c.b};function jd(b){this.b=b.html;this.a=b.tileRanges?b.tileRanges:null};function kd(b,c,d){R.call(this,b,d);this.element=c}M(kd,R);function ld(b){T.call(this);this.a=b?b:[];md(this)}M(ld,T);p=ld.prototype;p.clear=function(){for(;0<this.get(\"length\");)this.pop()};function nd(b,c,d){b.a.forEach(c,d)}p.item=function(b){return this.a[b]};p.pop=function(){return od(this,this.get(\"length\")-1)};p.push=function(b){var c=this.a.length;this.a.splice(c,0,b);md(this);S(this,new kd(\"add\",b,this));return c};\np.remove=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)if(c[d]===b)return od(this,d)};function od(b,c){var d=b.a[c];b.a.splice(c,1);md(b);S(b,new kd(\"remove\",d,b));return d}function md(b){b.set(\"length\",b.a.length)};function pd(b,c){Array.prototype.forEach.call(b,c,void 0)}function qd(b){var c=b.length;if(0<c){for(var d=Array(c),e=0;e<c;e++)d[e]=b[e];return d}return[]}function rd(b,c,d){return 2>=arguments.length?Array.prototype.slice.call(b,c):Array.prototype.slice.call(b,c,d)};var sd=/^#(?:[0-9a-f]{3}){1,2}$/i,td=/^(?:rgb)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2})\\)$/i,ud=/^(?:rgba)?\\((0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|[1-9]\\d{0,2}),\\s?(0|1|0\\.\\d{0,10})\\)$/i;function vd(b){if(\"string\"!==typeof b){var c=b[0];c!=(c|0)&&(c=c+.5|0);var d=b[1];d!=(d|0)&&(d=d+.5|0);var e=b[2];e!=(e|0)&&(e=e+.5|0);b=\"rgba(\"+c+\",\"+d+\",\"+e+\",\"+(void 0===b[3]?1:b[3])+\")\"}return b}\nvar xd=function(){var b={},c=0;return function(d){var e;if(b.hasOwnProperty(d))e=b[d];else{if(1024<=c){e=0;for(var f in b)0===(e++&3)&&(delete b[f],--c)}var g,h;sd.exec(d)?(h=3==d.length-1?1:2,e=parseInt(d.substr(1+0*h,h),16),f=parseInt(d.substr(1+1*h,h),16),g=parseInt(d.substr(1+2*h,h),16),1==h&&(e=(e<<4)+e,f=(f<<4)+f,g=(g<<4)+g),e=[e,f,g,1]):(h=ud.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),h=Number(h[4]),e=[e,f,g,h],e=wd(e,e)):(h=td.exec(d))?(e=Number(h[1]),f=Number(h[2]),g=Number(h[3]),\ne=[e,f,g,1],e=wd(e,e)):e=void 0;b[d]=e;++c}return e}}();function wd(b,c){var d=c||[];d[0]=Ca(b[0]+.5|0,0,255);d[1]=Ca(b[1]+.5|0,0,255);d[2]=Ca(b[2]+.5|0,0,255);d[3]=Ca(b[3],0,1);return d};function yd(b){return\"string\"===typeof b||b instanceof CanvasPattern||b instanceof CanvasGradient?b:vd(b)};var zd;a:{var Ad=x.navigator;if(Ad){var Bd=Ad.userAgent;if(Bd){zd=Bd;break a}}zd=\"\"}function W(b){return-1!=zd.indexOf(b)};function Cd(b,c){for(var d in b)c.call(void 0,b[d],d,b)}var Dd=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");function Ed(b,c){for(var d,e,f=1;f<arguments.length;f++){e=arguments[f];for(d in e)b[d]=e[d];for(var g=0;g<Dd.length;g++)d=Dd[g],Object.prototype.hasOwnProperty.call(e,d)&&(b[d]=e[d])}};var Fd=W(\"Opera\")||W(\"OPR\"),Gd=W(\"Trident\")||W(\"MSIE\"),Hd=W(\"Edge\"),Id=W(\"Gecko\")&&!(-1!=zd.toLowerCase().indexOf(\"webkit\")&&!W(\"Edge\"))&&!(W(\"Trident\")||W(\"MSIE\"))&&!W(\"Edge\"),Jd=-1!=zd.toLowerCase().indexOf(\"webkit\")&&!W(\"Edge\");function Kd(){var b=x.document;return b?b.documentMode:void 0}var Ld;\na:{var Md=\"\",Nd=function(){var b=zd;if(Id)return/rv\\:([^\\);]+)(\\)|;)/.exec(b);if(Hd)return/Edge\\/([\\d\\.]+)/.exec(b);if(Gd)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(b);if(Jd)return/WebKit\\/(\\S+)/.exec(b);if(Fd)return/(?:Version)[ \\/]?(\\S+)/.exec(b)}();Nd&&(Md=Nd?Nd[1]:\"\");if(Gd){var Od=Kd();if(null!=Od&&Od>parseFloat(Md)){Ld=String(Od);break a}}Ld=Md}var Pd={};\nfunction Qd(b){var c;if(!(c=Pd[b])){c=0;for(var d=sa(String(Ld)).split(\".\"),e=sa(String(b)).split(\".\"),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||\"\",k=e[g]||\"\",l=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\"),m=RegExp(\"(\\\\d*)(\\\\D*)\",\"g\");do{var n=l.exec(h)||[\"\",\"\",\"\"],q=m.exec(k)||[\"\",\"\",\"\"];if(0==n[0].length&&0==q[0].length)break;c=Ba(0==n[1].length?0:parseInt(n[1],10),0==q[1].length?0:parseInt(q[1],10))||Ba(0==n[2].length,0==q[2].length)||Ba(n[2],q[2])}while(0==c)}c=Pd[b]=0<=c}return c}\nvar Rd=x.document,Sd=Rd&&Gd?Kd()||(\"CSS1Compat\"==Rd.compatMode?parseInt(Ld,10):5):void 0;var Td=!Gd||9<=Number(Sd);!Id&&!Gd||Gd&&9<=Number(Sd)||Id&&Qd(\"1.9.1\");Gd&&Qd(\"9\");function Ud(b,c){this.x=void 0!==b?b:0;this.y=void 0!==c?c:0}p=Ud.prototype;p.clone=function(){return new Ud(this.x,this.y)};p.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};p.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};p.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.x*=b;this.y*=d;return this};function Vd(b,c){this.width=b;this.height=c}p=Vd.prototype;p.clone=function(){return new Vd(this.width,this.height)};p.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};p.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};p.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.width*=b;this.height*=d;return this};function Wd(b){return b?new Xd(Yd(b)):qa||(qa=new Xd)}function Zd(b){var c=document;return da(b)?c.getElementById(b):b}function $d(b,c){Cd(c,function(c,e){\"style\"==e?b.style.cssText=c:\"class\"==e?b.className=c:\"for\"==e?b.htmlFor=c:ae.hasOwnProperty(e)?b.setAttribute(ae[e],c):0==e.lastIndexOf(\"aria-\",0)||0==e.lastIndexOf(\"data-\",0)?b.setAttribute(e,c):b[e]=c})}\nvar ae={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 be(b,c,d){var e=arguments,f=document,g=e[0],h=e[1];if(!Td&&h&&(h.name||h.type)){g=[\"<\",g];h.name&&g.push(' name=\"',ta(h.name),'\"');if(h.type){g.push(' type=\"',ta(h.type),'\"');var k={};Ed(k,h);delete k.type;h=k}g.push(\">\");g=g.join(\"\")}g=f.createElement(g);h&&(da(h)?g.className=h:\"array\"==ba(h)?g.className=h.join(\" \"):$d(g,h));2<e.length&&ce(f,g,e);return g}\nfunction ce(b,c,d){function e(d){d&&c.appendChild(da(d)?b.createTextNode(d):d)}for(var f=2;f<d.length;f++){var g=d[f];!ca(g)||ha(g)&&0<g.nodeType?e(g):pd(de(g)?qd(g):g,e)}}function ee(b){for(var c;c=b.firstChild;)b.removeChild(c)}function fe(b,c,d){b.insertBefore(c,b.childNodes[d]||null)}function ge(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function he(b,c){var d=c.parentNode;d&&d.replaceChild(b,c)}\nfunction ie(b,c){if(!b||!c)return!1;if(b.contains&&1==c.nodeType)return b==c||b.contains(c);if(\"undefined\"!=typeof b.compareDocumentPosition)return b==c||!!(b.compareDocumentPosition(c)&16);for(;c&&b!=c;)c=c.parentNode;return c==b}function Yd(b){return 9==b.nodeType?b:b.ownerDocument||b.document}function de(b){if(b&&\"number\"==typeof b.length){if(ha(b))return\"function\"==typeof b.item||\"string\"==typeof b.item;if(ga(b))return\"function\"==typeof b.item}return!1}\nfunction Xd(b){this.a=b||x.document||document}Xd.prototype.appendChild=function(b,c){b.appendChild(c)};function je(b,c,d,e){this.top=b;this.right=c;this.bottom=d;this.left=e}p=je.prototype;p.ha=function(){return this.right-this.left};p.clone=function(){return new je(this.top,this.right,this.bottom,this.left)};p.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};\np.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};p.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};p.scale=function(b,c){var d=ea(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function ke(b,c){var d=Yd(b);return d.defaultView&&d.defaultView.getComputedStyle&&(d=d.defaultView.getComputedStyle(b,null))?d[c]||d.getPropertyValue(c)||\"\":\"\"}function le(b){var c;try{c=b.getBoundingClientRect()}catch(d){return{left:0,top:0,right:0,bottom:0}}Gd&&b.ownerDocument.body&&(b=b.ownerDocument,c.left-=b.documentElement.clientLeft+b.body.clientLeft,c.top-=b.documentElement.clientTop+b.body.clientTop);return c}\nfunction me(b){var c=ne;if(\"none\"!=(ke(b,\"display\")||(b.currentStyle?b.currentStyle.display:null)||b.style&&b.style.display))return c(b);var d=b.style,e=d.display,f=d.visibility,g=d.position;d.visibility=\"hidden\";d.position=\"absolute\";d.display=\"inline\";b=c(b);d.display=e;d.position=g;d.visibility=f;return b}function ne(b){var c=b.offsetWidth,d=b.offsetHeight,e=Jd&&!c&&!d;return(void 0===c||e)&&b.getBoundingClientRect?(b=le(b),new Vd(b.right-b.left,b.bottom-b.top)):new Vd(c,d)}\nfunction oe(b,c){b.style.display=c?\"\":\"none\"}function pe(b,c,d,e){if(/^\\d+px?$/.test(c))return parseInt(c,10);var f=b.style[d],g=b.runtimeStyle[d];b.runtimeStyle[d]=b.currentStyle[d];b.style[d]=c;c=b.style[e];b.style[d]=f;b.runtimeStyle[d]=g;return c}function qe(b,c){var d=b.currentStyle?b.currentStyle[c]:null;return d?pe(b,d,\"left\",\"pixelLeft\"):0}var re={thin:2,medium:4,thick:6};\nfunction se(b,c){if(\"none\"==(b.currentStyle?b.currentStyle[c+\"Style\"]:null))return 0;var d=b.currentStyle?b.currentStyle[c+\"Width\"]:null;return d in re?re[d]:pe(b,d,\"left\",\"pixelLeft\")};function te(b,c,d){R.call(this,b);this.map=c;this.frameState=void 0!==d?d:null}M(te,R);function ue(b){T.call(this);this.element=b.element?b.element:null;this.c=this.B=null;this.h=[];this.render=b.render?b.render:pa;b.target&&(this.B=Zd(b.target))}M(ue,T);ue.prototype.J=function(){ge(this.element);ue.X.J.call(this)};ue.prototype.setMap=function(b){this.c&&ge(this.element);for(var c=0,d=this.h.length;c<d;++c)N(this.h[c]);this.h.length=0;if(this.c=b)(this.B?this.B:b.j).appendChild(this.element),this.render!==pa&&this.h.push(Q(b,\"postrender\",this.render,this)),b.render()};function ve(){this.f=0;this.c={};this.b=this.a=null}p=ve.prototype;p.clear=function(){this.f=0;this.c={};this.b=this.a=null};function we(b,c){return b.c.hasOwnProperty(c)}function xe(b,c){for(var d=b.a;d;)c.call(void 0,d.Ia,d.Rb,b),d=d.ma}p.get=function(b){b=this.c[b];if(b===this.b)return b.Ia;b===this.a?(this.a=this.a.ma,this.a.Ra=null):(b.ma.Ra=b.Ra,b.Ra.ma=b.ma);b.ma=null;b.Ra=this.b;this.b=this.b.ma=b;return b.Ia};\np.pop=function(){var b=this.a;delete this.c[b.Rb];b.ma&&(b.ma.Ra=null);this.a=b.ma;this.a||(this.b=null);--this.f;return b.Ia};p.replace=function(b,c){this.get(b);this.c[b].Ia=c};p.set=function(b,c){var d={Rb:b,ma:null,Ra:this.b,Ia:c};this.b?this.b.ma=d:this.a=d;this.b=d;this.c[b]=d;++this.f};function ye(b){ve.call(this);this.g=void 0!==b?b:2048}M(ye,ve);function ze(b){return b.f>b.g}function Ae(b,c){for(var d,e;ze(b);){d=b.a.Ia;e=d.L[0].toString();var f;if(f=e in c)d=d.L,f=gd(c[e],d[1],d[2]);if(f)break;else jb(b.pop())}};function Be(b,c){mb.call(this);this.L=b;this.state=c;this.a=null;this.key=\"\"}M(Be,mb);function Ce(b){S(b,\"change\")}Be.prototype.getKey=function(){return I(this).toString()};Be.prototype.N=function(){return this.state};function De(b){T.call(this);this.c=lc(b.projection);this.i=Ee(b.attributions);this.w=b.logo;this.B=void 0!==b.state?b.state:\"ready\";this.j=void 0!==b.wrapX?b.wrapX:!1}M(De,T);function Ee(b){if(\"string\"===typeof b)return[new jd({html:b})];if(b instanceof jd)return[b];if(Array.isArray(b)){for(var c=b.length,d=Array(c),e=0;e<c;e++){var f=b[e];d[e]=\"string\"===typeof f?new jd({html:f}):f}return d}return null}De.prototype.N=function(){return this.B};De.prototype.wa=function(){this.v()};function Fe(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.b=b.resolutions;this.maxZoom=this.b.length-1;this.f=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.f||this.g||(this.f=bc(c));this.h=null;void 0!==b.tileSizes&&(this.h=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.h?null:256;this.i=void 0!==c?c:null;this.a=null;void 0!==b.sizes?this.a=b.sizes.map(function(b){return new fd(Math.min(0,b[0]),Math.max(b[0]-1,-1),\nMath.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Ge(this,c);this.c=[0,0]}var He=[0,0,0];function Ie(b,c,d,e,f){f=Je(b,c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Ke(b,f,c,e)))return!0;--c}return!1}Fe.prototype.C=function(){return this.i};Fe.prototype.ka=function(b){return this.f?this.f:this.g[b]};Fe.prototype.I=function(b){return this.b[b]};Fe.prototype.Nb=function(){return this.b};function Le(b,c,d,e){return c[0]<b.maxZoom?(e=Je(b,c,e),Ke(b,e,c[0]+1,d)):null}\nfunction Me(b,c,d,e){Ne(b,c[0],c[1],d,!1,He);var f=He[1],g=He[2];Ne(b,c[2],c[3],d,!0,He);b=He[1];c=He[2];void 0!==e?(e.a=f,e.f=b,e.b=g,e.c=c):e=new fd(f,b,g,c);return e}function Ke(b,c,d,e){d=b.I(d);return Me(b,c,d,e)}function Oe(b,c){var d=b.ka(c[0]),e=b.I(c[0]),f=tb(Pe(b,c[0]),b.c);return[d[0]+(c[1]+.5)*f[0]*e,d[1]+(c[2]+.5)*f[1]*e]}function Je(b,c,d){var e=b.ka(c[0]),f=b.I(c[0]);b=tb(Pe(b,c[0]),b.c);var g=e[0]+c[1]*b[0]*f;c=e[1]+c[2]*b[1]*f;return Ob(g,c,g+b[0]*f,c+b[1]*f,d)}\nfunction Ne(b,c,d,e,f,g){var h=Qe(b,e),k=e/b.I(h),l=b.ka(h);b=tb(Pe(b,h),b.c);c=k*Math.floor((c-l[0])/e+(f?.5:0))/b[0];d=k*Math.floor((d-l[1])/e+(f?0:.5))/b[1];f?(c=Math.ceil(c)-1,d=Math.ceil(d)-1):(c=Math.floor(c),d=Math.floor(d));f=c;void 0!==g?(g[0]=h,g[1]=f,g[2]=d):g=[h,f,d];return g}function Re(b,c,d){d=b.I(d);return Ne(b,c[0],c[1],d,!1,void 0)}function Pe(b,c){return b.l?b.l:b.h[c]}function Qe(b,c){var d=Ia(b.b,c,0);return Ca(d,b.minZoom,b.maxZoom)}\nfunction Ge(b,c){for(var d=b.b.length,e=Array(d),f=b.minZoom;f<d;++f)e[f]=Ke(b,c,f);b.a=e}function Se(b){var c=b.c;if(!c){var c=Te(b),d=Ue(c,void 0,void 0),c=new Fe({extent:c,origin:bc(c),resolutions:d,tileSize:void 0});b.c=c}return c}function Ue(b,c,d){c=void 0!==c?c:42;var e=Wb(b);b=Vb(b);d=tb(void 0!==d?d:256);d=Math.max(b/d[0],e/d[1]);c+=1;e=Array(c);for(b=0;b<c;++b)e[b]=d/Math.pow(2,b);return e}function Te(b){b=lc(b);var c=b.C();c||(b=180*hc.degrees/pc(b),c=Ob(-b,-b,b,b));return c};function Ve(b){De.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state,wrapX:b.wrapX});this.G=void 0!==b.opaque?b.opaque:!1;this.Y=void 0!==b.tilePixelRatio?b.tilePixelRatio:1;this.tileGrid=void 0!==b.tileGrid?b.tileGrid:null;this.a=new ye(b.cacheSize);this.h=[0,0]}M(Ve,De);p=Ve.prototype;p.Qc=function(){return ze(this.a)};p.Rc=function(b,c){var d=this.bb(b);d&&Ae(d,c)};\nfunction We(b,c,d,e,f){c=b.bb(c);if(!c)return!1;for(var g=!0,h,k,l=e.a;l<=e.f;++l)for(var m=e.b;m<=e.c;++m)h=b.lb(d,l,m),k=!1,we(c,h)&&(h=c.get(h),(k=2===h.N())&&(k=!1!==f(h))),k||(g=!1);return g}p.kb=function(){return 0};p.lb=function(b,c,d){return b+\"/\"+c+\"/\"+d};p.Mb=function(){return this.G};p.Nb=function(){return this.tileGrid.Nb()};p.la=function(b){return this.tileGrid?this.tileGrid:Se(b)};p.bb=function(b){var c=this.c;return c&&!wc(c,b)?null:this.a};p.mb=function(){return this.Y};\nfunction Xe(b,c,d,e){e=b.la(e);d=b.mb(d);c=tb(Pe(e,c),b.h);return 1==d?c:sb(c,d,b.h)}function Ye(b,c,d){var e=void 0!==d?d:b.c;d=b.la(e);if(b.j&&e.f){var f=c;c=f[0];b=Oe(d,f);var e=Te(e),g=b[0],h=b[1];e[0]<=g&&g<=e[2]&&e[1]<=h&&h<=e[3]?c=f:(f=Vb(e),b[0]+=f*Math.ceil((e[0]-b[0])/f),c=Re(d,b,c))}e=c[0];b=c[1];f=c[2];d=d.minZoom>e||e>d.maxZoom?!1:(d=(g=d.C())?Ke(d,g,e):d.a?d.a[e]:null)?gd(d,b,f):!0;return d?c:null}p.wa=function(){this.a.clear();this.v()};p.Yc=pa;\nfunction Ze(b,c){R.call(this,b);this.tile=c}M(Ze,R);function $e(b){b=b?b:{};this.s=document.createElement(\"UL\");this.j=document.createElement(\"LI\");this.s.appendChild(this.j);oe(this.j,!1);this.g=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.g=!1);var c=void 0!==b.className?b.className:\"ol-attribution\",d=void 0!==b.tipLabel?b.tipLabel:\"Attributions\",e=void 0!==b.collapseLabel?b.collapseLabel:\"\\u00bb\";this.u=\"string\"===typeof e?be(\"SPAN\",{},e):e;e=void 0!==b.label?b.label:\"i\";this.w=\"string\"===typeof e?\nbe(\"SPAN\",{},e):e;d=be(\"BUTTON\",{type:\"button\",title:d},this.i&&!this.g?this.u:this.w);Q(d,\"click\",this.G,this);c=be(\"DIV\",c+\" ol-unselectable ol-control\"+(this.g&&this.i?\" ol-collapsed\":\"\")+(this.i?\"\":\" ol-uncollapsible\"),this.s,d);ue.call(this,{element:c,render:b.render?b.render:af,target:b.target});this.o=!0;this.b={};this.a={};this.D={}}M($e,ue);\nfunction af(b){if(b=b.frameState){var c,d,e,f,g,h,k,l,m,n,q,r=b.layerStatesArray,u=Wa({},b.attributions),w={},y=b.viewState.projection;d=0;for(c=r.length;d<c;d++)if(h=r[d].layer.V())if(n=I(h).toString(),m=h.i)for(e=0,f=m.length;e<f;e++)if(k=m[e],l=I(k).toString(),!(l in u)){if(g=b.usedTiles[n]){var z=h.la(y);a:{q=k;var D=y;if(q.a){var t=void 0,v=void 0,B=void 0,E=void 0;for(E in g)if(E in q.a)for(var B=g[E],C,t=0,v=q.a[E].length;t<v;++t){C=q.a[E][t];if(id(C,B)){q=!0;break a}var G=Ke(z,Te(D),parseInt(E,\n10)),J=G.ha();if(B.a<G.a||B.f>G.f)if(id(C,new fd(Ea(B.a,J),Ea(B.f,J),B.b,B.c))||B.ha()>J&&id(C,G)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(l in w&&delete w[l],u[l]=k):w[l]=k}c=[u,w];d=c[0];c=c[1];for(var A in this.b)A in d?(this.a[A]||(oe(this.b[A],!0),this.a[A]=!0),delete d[A]):A in c?(this.a[A]&&(oe(this.b[A],!1),delete this.a[A]),delete c[A]):(ge(this.b[A]),delete this.b[A],delete this.a[A]);for(A in d)e=document.createElement(\"LI\"),e.innerHTML=d[A].b,this.s.appendChild(e),this.b[A]=e,this.a[A]=\n!0;for(A in c)e=document.createElement(\"LI\"),e.innerHTML=c[A].b,oe(e,!1),this.s.appendChild(e),this.b[A]=e;A=!$a(this.a)||!$a(b.logos);this.o!=A&&(oe(this.element,A),this.o=A);A&&$a(this.a)?this.element.classList.add(\"ol-logo-only\"):this.element.classList.remove(\"ol-logo-only\");var H;b=b.logos;A=this.D;for(H in A)H in b||(ge(A[H]),delete A[H]);for(var O in b)O in A||(H=new Image,H.src=O,d=b[O],\"\"===d?d=H:(d=be(\"A\",{href:d}),d.appendChild(H)),this.j.appendChild(d),A[O]=d);oe(this.j,!$a(b))}else this.o&&\n(oe(this.element,!1),this.o=!1)}$e.prototype.G=function(b){b.preventDefault();this.element.classList.toggle(\"ol-collapsed\");this.g?he(this.u,this.w):he(this.w,this.u);this.g=!this.g};function bf(b){b=b?b:{};var c=void 0!==b.className?b.className:\"ol-rotate\",d=void 0!==b.label?b.label:\"\\u21e7\";this.a=null;\"string\"===typeof d?this.a=be(\"SPAN\",\"ol-compass\",d):(this.a=d,this.a.classList.add(this.a,\"ol-compass\"));d=be(\"BUTTON\",{\"class\":c+\"-reset\",type:\"button\",title:b.tipLabel?b.tipLabel:\"Reset rotation\"},this.a);Q(d,\"click\",bf.prototype.o,this);c=be(\"DIV\",c+\" ol-unselectable ol-control\",d);d=b.render?b.render:cf;this.g=b.resetNorth?b.resetNorth:void 0;ue.call(this,{element:c,render:d,\ntarget:b.target});this.i=void 0!==b.duration?b.duration:250;this.b=void 0!==b.autoHide?b.autoHide:!0;this.j=void 0;this.b&&this.element.classList.add(\"ol-hidden\")}M(bf,ue);bf.prototype.o=function(b){b.preventDefault();if(void 0!==this.g)this.g();else{b=this.c;var c=b.O();if(c){var d=c.Z();void 0!==d&&(0<this.i&&(d%=2*Math.PI,d<-Math.PI&&(d+=2*Math.PI),d>Math.PI&&(d-=2*Math.PI),b.fa(dd({rotation:d,duration:this.i,easing:$c}))),c.set(\"rotation\",0))}}};\nfunction cf(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.j){var c=\"rotate(\"+b+\"rad)\";if(this.b){var d=this.element.classList.contains(\"ol-hidden\");d||0!==b?d&&0!==b&&this.element.classList.remove(\"ol-hidden\"):this.element.classList.add(\"ol-hidden\")}this.a.style.msTransform=c;this.a.style.webkitTransform=c;this.a.style.transform=c}this.j=b}};function df(b){b=b?b:{};var c=void 0!==b.className?b.className:\"ol-zoom\",d=void 0!==b.delta?b.delta:1,e=void 0!==b.zoomOutLabel?b.zoomOutLabel:\"\\u2212\",f=void 0!==b.zoomOutTipLabel?b.zoomOutTipLabel:\"Zoom out\",g=be(\"BUTTON\",{\"class\":c+\"-in\",type:\"button\",title:void 0!==b.zoomInTipLabel?b.zoomInTipLabel:\"Zoom in\"},void 0!==b.zoomInLabel?b.zoomInLabel:\"+\");Q(g,\"click\",na(df.prototype.b,d),this);e=be(\"BUTTON\",{\"class\":c+\"-out\",type:\"button\",title:f},e);Q(e,\"click\",na(df.prototype.b,-d),this);c=be(\"DIV\",\nc+\" ol-unselectable ol-control\",g,e);ue.call(this,{element:c,target:b.target});this.a=void 0!==b.duration?b.duration:250}M(df,ue);df.prototype.b=function(b,c){c.preventDefault();var d=this.c,e=d.O();if(e){var f=e.I();f&&(0<this.a&&d.fa(ed({resolution:f,duration:this.a,easing:$c})),d=e.constrainResolution(f,b),Yc(e,d))}};function ef(b){b=b?b:{};var c=new ld;(void 0!==b.zoom?b.zoom:1)&&c.push(new df(b.zoomOptions));(void 0!==b.rotate?b.rotate:1)&&c.push(new bf(b.rotateOptions));(void 0!==b.attribution?b.attribution:1)&&c.push(new $e(b.attributionOptions));return c};var ff=Jd?\"webkitfullscreenchange\":Id?\"mozfullscreenchange\":Gd?\"MSFullscreenChange\":\"fullscreenchange\";function gf(){var b=Wd().a,c=b.body;return!!(c.webkitRequestFullscreen||c.mozRequestFullScreen&&b.mozFullScreenEnabled||c.msRequestFullscreen&&b.msFullscreenEnabled||c.requestFullscreen&&b.fullscreenEnabled)}\nfunction hf(b){b.webkitRequestFullscreen?b.webkitRequestFullscreen():b.mozRequestFullScreen?b.mozRequestFullScreen():b.msRequestFullscreen?b.msRequestFullscreen():b.requestFullscreen&&b.requestFullscreen()}function jf(){var b=Wd().a;return!!(b.webkitIsFullScreen||b.mozFullScreen||b.msFullscreenElement||b.fullscreenElement)};function kf(b){b=b?b:{};this.a=void 0!==b.className?b.className:\"ol-full-screen\";var c=void 0!==b.label?b.label:\"\\u2922\";this.b=\"string\"===typeof c?document.createTextNode(c):c;c=void 0!==b.labelActive?b.labelActive:\"\\u00d7\";this.g=\"string\"===typeof c?document.createTextNode(c):c;c=b.tipLabel?b.tipLabel:\"Toggle full-screen\";c=be(\"BUTTON\",{\"class\":this.a+\"-\"+jf(),type:\"button\",title:c},this.b);Q(c,\"click\",this.s,this);var d=this.a+\" ol-unselectable ol-control \"+(gf()?\"\":\"ol-unsupported\"),c=be(\"DIV\",\nd,c);ue.call(this,{element:c,target:b.target});this.o=void 0!==b.keys?b.keys:!1;this.i=b.source}M(kf,ue);\nkf.prototype.s=function(b){b.preventDefault();gf()&&(b=this.c)&&(jf()?(b=Wd().a,b.webkitCancelFullScreen?b.webkitCancelFullScreen():b.mozCancelFullScreen?b.mozCancelFullScreen():b.msExitFullscreen?b.msExitFullscreen():b.exitFullscreen&&b.exitFullscreen()):(b=this.i?Zd(this.i):b.Na(),this.o?b.mozRequestFullScreenWithKeys?b.mozRequestFullScreenWithKeys():b.webkitRequestFullscreen?b.webkitRequestFullscreen():hf(b):hf(b)))};\nkf.prototype.j=function(){var b=this.element.firstElementChild,c=this.c;jf()?(b.className=this.a+\"-true\",he(this.g,this.b)):(b.className=this.a+\"-false\",he(this.b,this.g));c&&c.vb()};kf.prototype.setMap=function(b){kf.X.setMap.call(this,b);b&&this.h.push(Q(x.document,ff,this.j,this))};var lf;\nfunction mf(){var b=x.MessageChannel;\"undefined\"===typeof b&&\"undefined\"!==typeof window&&window.postMessage&&window.addEventListener&&!W(\"Presto\")&&(b=function(){var b=document.createElement(\"IFRAME\");b.style.display=\"none\";b.src=\"\";document.documentElement.appendChild(b);var c=b.contentWindow,b=c.document;b.open();b.write(\"\");b.close();var d=\"callImmediate\"+Math.random(),e=\"file:\"==c.location.protocol?\"*\":c.location.protocol+\"//\"+c.location.host,b=ma(function(b){if((\"*\"==e||b.origin==e)&&b.data==\nd)this.port1.onmessage()},this);c.addEventListener(\"message\",b,!1);this.port1={};this.port2={postMessage:function(){c.postMessage(d,e)}}});if(\"undefined\"!==typeof b&&!W(\"Trident\")&&!W(\"MSIE\")){var c=new b,d={},e=d;c.port1.onmessage=function(){if(void 0!==d.next){d=d.next;var b=d.lc;d.lc=null;b()}};return function(b){e.next={lc:b};e=e.next;c.port2.postMessage(0)}}return\"undefined\"!==typeof document&&\"onreadystatechange\"in document.createElement(\"SCRIPT\")?function(b){var c=document.createElement(\"SCRIPT\");\nc.onreadystatechange=function(){c.onreadystatechange=null;c.parentNode.removeChild(c);c=null;b();b=null};document.documentElement.appendChild(c)}:function(b){x.setTimeout(b,0)}};function nf(b,c,d){R.call(this,b);this.a=c;b=d?d:{};this.buttons=of(b);this.pressure=pf(b,this.buttons);this.bubbles=\"bubbles\"in b?b.bubbles:!1;this.cancelable=\"cancelable\"in b?b.cancelable:!1;this.view=\"view\"in b?b.view:null;this.detail=\"detail\"in b?b.detail:null;this.screenX=\"screenX\"in b?b.screenX:0;this.screenY=\"screenY\"in b?b.screenY:0;this.clientX=\"clientX\"in b?b.clientX:0;this.clientY=\"clientY\"in b?b.clientY:0;this.button=\"button\"in b?b.button:0;this.relatedTarget=\"relatedTarget\"in b?b.relatedTarget:\nnull;this.pointerId=\"pointerId\"in b?b.pointerId:0;this.width=\"width\"in b?b.width:0;this.height=\"height\"in b?b.height:0;this.pointerType=\"pointerType\"in b?b.pointerType:\"\";this.isPrimary=\"isPrimary\"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}M(nf,R);function of(b){if(b.buttons||qf)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b}function pf(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}\nvar qf=!1;try{qf=1===(new MouseEvent(\"click\",{buttons:1})).buttons}catch(b){};function rf(b,c){var d=document.createElement(\"CANVAS\");b&&(d.width=b);c&&(d.height=c);return d.getContext(\"2d\")}\nvar sf=function(){var b;return function(){if(void 0===b){var c=document.createElement(\"P\"),d,e={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]=\"translate(1px,1px)\",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&\"none\"!==d}return b}}(),tf=function(){var b;return function(){if(void 0===b){var c=document.createElement(\"P\"),\nd,e={webkitTransform:\"-webkit-transform\",OTransform:\"-o-transform\",msTransform:\"-ms-transform\",MozTransform:\"-moz-transform\",transform:\"transform\"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]=\"translate3d(1px,1px,1px)\",d=x.getComputedStyle(c).getPropertyValue(e[f]));document.body.removeChild(c);b=d&&\"none\"!==d}return b}}();\nfunction uf(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Gd&&Qd(\"9.0\")&&(b.style.transformOrigin=\"0 0\")}function vf(b,c){var d;if(tf()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);uf(b,\"matrix3d(\"+e.join(\",\")+\")\")}else if(sf()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);uf(b,\"matrix(\"+f.join(\",\")+\")\")}else b.style.left=Math.round(c[12])+\"px\",b.style.top=Math.round(c[13])+\"px\"};var wf=[\"experimental-webgl\",\"webgl\",\"webkit-3d\",\"moz-webgl\"];function xf(b,c){var d,e,f=wf.length;for(e=0;e<f;++e)try{if(d=b.getContext(wf[e],c))return d}catch(g){}return null};var yf,zf=\"undefined\"!==typeof navigator?navigator.userAgent.toLowerCase():\"\",Af=-1!==zf.indexOf(\"firefox\"),Bf=-1!==zf.indexOf(\"safari\")&&-1===zf.indexOf(\"chrom\"),Cf=-1!==zf.indexOf(\"macintosh\"),Df=x.devicePixelRatio||1,Ef=!1,Ff=function(){if(!(\"HTMLCanvasElement\"in x))return!1;try{var b=rf();return b?(void 0!==b.setLineDash&&(Ef=!0),!0):!1}catch(c){return!1}}(),Gf=\"ontouchstart\"in x,Hf=\"PointerEvent\"in x,If=!!x.navigator.msPointerEnabled,Jf=!1,Kf=[];\nif(\"WebGLRenderingContext\"in x)try{var Lf=xf(document.createElement(\"CANVAS\"),{failIfMajorPerformanceCaveat:!0});Lf&&(Jf=!0,Kf=Lf.getSupportedExtensions())}catch(b){}yf=Jf;oa=Kf;function Mf(b,c){this.a=b;this.g=c};function Nf(b){Mf.call(this,b,{mousedown:this.Vd,mousemove:this.Wd,mouseup:this.Zd,mouseover:this.Yd,mouseout:this.Xd});this.b=b.b;this.f=[]}M(Nf,Mf);function Of(b,c){for(var d=b.f,e=c.clientX,f=c.clientY,g=0,h=d.length,k;g<h&&(k=d[g]);g++){var l=Math.abs(f-k[1]);if(25>=Math.abs(e-k[0])&&25>=l)return!0}return!1}function Pf(b){var c=Qf(b,b),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType=\"mouse\";return c}p=Nf.prototype;\np.Vd=function(b){if(!Of(this,b)){if((1).toString()in this.b){var c=Pf(b);Rf(this.a,Sf,c,b);delete this.b[(1).toString()]}c=Pf(b);this.b[(1).toString()]=b;Rf(this.a,Tf,c,b)}};p.Wd=function(b){if(!Of(this,b)){var c=Pf(b);Rf(this.a,Uf,c,b)}};p.Zd=function(b){if(!Of(this,b)){var c=this.b[(1).toString()];c&&c.button===b.button&&(c=Pf(b),Rf(this.a,Vf,c,b),delete this.b[(1).toString()])}};p.Yd=function(b){if(!Of(this,b)){var c=Pf(b);Wf(this.a,c,b)}};\np.Xd=function(b){if(!Of(this,b)){var c=Pf(b);Xf(this.a,c,b)}};function Yf(b){Mf.call(this,b,{MSPointerDown:this.de,MSPointerMove:this.ee,MSPointerUp:this.he,MSPointerOut:this.fe,MSPointerOver:this.ge,MSPointerCancel:this.ce,MSGotPointerCapture:this.ae,MSLostPointerCapture:this.be});this.b=b.b;this.f=[\"\",\"unavailable\",\"touch\",\"pen\",\"mouse\"]}M(Yf,Mf);function Zf(b,c){var d=c;ea(c.pointerType)&&(d=Qf(c,c),d.pointerType=b.f[c.pointerType]);return d}p=Yf.prototype;p.de=function(b){this.b[b.pointerId.toString()]=b;var c=Zf(this,b);Rf(this.a,Tf,c,b)};\np.ee=function(b){var c=Zf(this,b);Rf(this.a,Uf,c,b)};p.he=function(b){var c=Zf(this,b);Rf(this.a,Vf,c,b);delete this.b[b.pointerId.toString()]};p.fe=function(b){var c=Zf(this,b);Xf(this.a,c,b)};p.ge=function(b){var c=Zf(this,b);Wf(this.a,c,b)};p.ce=function(b){var c=Zf(this,b);Rf(this.a,Sf,c,b);delete this.b[b.pointerId.toString()]};p.be=function(b){S(this.a,new nf(\"lostpointercapture\",b,b))};p.ae=function(b){S(this.a,new nf(\"gotpointercapture\",b,b))};function $f(b){Mf.call(this,b,{pointerdown:this.se,pointermove:this.te,pointerup:this.we,pointerout:this.ue,pointerover:this.ve,pointercancel:this.re,gotpointercapture:this.xd,lostpointercapture:this.Ud})}M($f,Mf);p=$f.prototype;p.se=function(b){ag(this.a,b)};p.te=function(b){ag(this.a,b)};p.we=function(b){ag(this.a,b)};p.ue=function(b){ag(this.a,b)};p.ve=function(b){ag(this.a,b)};p.re=function(b){ag(this.a,b)};p.Ud=function(b){ag(this.a,b)};p.xd=function(b){ag(this.a,b)};function bg(b,c){Mf.call(this,b,{touchstart:this.Ie,touchmove:this.He,touchend:this.Ge,touchcancel:this.Fe});this.b=b.b;this.l=c;this.f=void 0;this.h=0;this.c=void 0}M(bg,Mf);p=bg.prototype;p.Vc=function(){this.h=0;this.c=void 0};\nfunction cg(b,c,d){c=Qf(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.h;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.f===d.identifier;c.pointerType=\"touch\";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c}\nfunction dg(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.changedTouches),g=f.length,h,k;for(h=0;h<g;++h)k=cg(b,c,f[h]),k.preventDefault=e,d.call(b,c,k)}\np.Ie=function(b){var c=b.touches,d=Object.keys(this.b),e=d.length;if(e>=c.length){var f=[],g,h,k;for(g=0;g<e;++g){h=d[g];k=this.b[h];var l;if(!(l=1==h))a:{l=c.length;for(var m=void 0,n=0;n<l;n++)if(m=c[n],m.identifier===h-2){l=!0;break a}l=!1}l||f.push(k.out)}for(g=0;g<f.length;++g)this.Fb(b,f[g])}c=b.changedTouches[0];d=Object.keys(this.b).length;if(0===d||1===d&&(1).toString()in this.b)this.f=c.identifier,void 0!==this.c&&x.clearTimeout(this.c);eg(this,b);this.h++;dg(this,b,this.qe)};\np.qe=function(b,c){this.b[c.pointerId]={target:c.target,out:c,Sc:c.target};var d=this.a;c.bubbles=!0;Rf(d,fg,c,b);d=this.a;c.bubbles=!1;Rf(d,gg,c,b);Rf(this.a,Tf,c,b)};p.He=function(b){b.preventDefault();dg(this,b,this.$d)};p.$d=function(b,c){var d=this.b[c.pointerId];if(d){var e=d.out,f=d.Sc;Rf(this.a,Uf,c,b);e&&f!==c.target&&(e.relatedTarget=c.target,c.relatedTarget=f,e.target=f,c.target?(Xf(this.a,e,b),Wf(this.a,c,b)):(c.target=f,c.relatedTarget=null,this.Fb(b,c)));d.out=c;d.Sc=c.target}};\np.Ge=function(b){eg(this,b);dg(this,b,this.Je)};p.Je=function(b,c){Rf(this.a,Vf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};p.Fe=function(b){dg(this,b,this.Fb)};p.Fb=function(b,c){Rf(this.a,Sf,c,b);this.a.out(c,b);var d=this.a;c.bubbles=!1;Rf(d,hg,c,b);delete this.b[c.pointerId];c.isPrimary&&(this.f=void 0,this.c=x.setTimeout(this.Vc.bind(this),200))};\nfunction eg(b,c){var d=b.l.f,e=c.changedTouches[0];if(b.f===e.identifier){var f=[e.clientX,e.clientY];d.push(f);x.setTimeout(function(){La(d,f)},2500)}};function ig(b){mb.call(this);this.g=b;this.b={};this.c={};this.a=[];Hf?jg(this,new $f(this)):If?jg(this,new Yf(this)):(b=new Nf(this),jg(this,b),Gf&&jg(this,new bg(this,b)));b=this.a.length;for(var c,d=0;d<b;d++)c=this.a[d],kg(this,Object.keys(c.g))}M(ig,mb);function jg(b,c){var d=Object.keys(c.g);d&&(d.forEach(function(b){var d=c.g[b];d&&(this.c[b]=d.bind(c))},b),b.a.push(c))}ig.prototype.f=function(b){var c=this.c[b.type];c&&c(b)};\nfunction kg(b,c){c.forEach(function(b){Q(this.g,b,this.f,this)},b)}function lg(b,c){c.forEach(function(b){gb(this.g,b,this.f,this)},b)}function Qf(b,c){for(var d={},e,f=0,g=mg.length;f<g;f++)e=mg[f][0],d[e]=b[e]||c[e]||mg[f][1];return d}ig.prototype.out=function(b,c){b.bubbles=!0;Rf(this,ng,b,c)};function Xf(b,c,d){b.out(c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,hg,c,d))}\nfunction Wf(b,c,d){c.bubbles=!0;Rf(b,fg,c,d);var e=c.relatedTarget;e&&ie(c.target,e)||(c.bubbles=!1,Rf(b,gg,c,d))}function Rf(b,c,d,e){S(b,new nf(c,e,d))}function ag(b,c){S(b,new nf(c.type,c,c))}ig.prototype.J=function(){for(var b=this.a.length,c,d=0;d<b;d++)c=this.a[d],lg(this,Object.keys(c.g));ig.X.J.call(this)};\nvar Uf=\"pointermove\",Tf=\"pointerdown\",Vf=\"pointerup\",fg=\"pointerover\",ng=\"pointerout\",gg=\"pointerenter\",hg=\"pointerleave\",Sf=\"pointercancel\",mg=[[\"bubbles\",!1],[\"cancelable\",!1],[\"view\",null],[\"detail\",null],[\"screenX\",0],[\"screenY\",0],[\"clientX\",0],[\"clientY\",0],[\"ctrlKey\",!1],[\"altKey\",!1],[\"shiftKey\",!1],[\"metaKey\",!1],[\"button\",0],[\"relatedTarget\",null],[\"buttons\",0],[\"pointerId\",0],[\"width\",0],[\"height\",0],[\"pressure\",0],[\"tiltX\",0],[\"tiltY\",0],[\"pointerType\",\"\"],[\"hwTimestamp\",0],[\"isPrimary\",\n!1],[\"type\",\"\"],[\"target\",null],[\"currentTarget\",null],[\"which\",0]];function og(b,c,d,e,f){te.call(this,b,c,f);this.originalEvent=d;this.pixel=c.vc(d);this.coordinate=c.ta(this.pixel);this.dragging=void 0!==e?e:!1}M(og,te);og.prototype.preventDefault=function(){og.X.preventDefault.call(this);this.originalEvent.preventDefault()};og.prototype.stopPropagation=function(){og.X.stopPropagation.call(this);this.originalEvent.stopPropagation()};function pg(b,c,d,e,f){og.call(this,b,c,d.a,e,f);this.a=d}M(pg,og);\nfunction qg(b){mb.call(this);this.f=b;this.h=0;this.l=!1;this.c=[];this.b=null;b=this.f.a;this.s=0;this.o={};this.g=new ig(b);this.a=null;this.i=Q(this.g,Tf,this.Jd,this);this.j=Q(this.g,Uf,this.ye,this)}M(qg,mb);function rg(b,c){var d;d=new pg(sg,b.f,c);S(b,d);0!==b.h?(x.clearTimeout(b.h),b.h=0,d=new pg(tg,b.f,c),S(b,d)):b.h=x.setTimeout(function(){this.h=0;var b=new pg(ug,this.f,c);S(this,b)}.bind(b),250)}\nfunction vg(b,c){c.type==wg||c.type==xg?delete b.o[c.pointerId]:c.type==yg&&(b.o[c.pointerId]=!0);b.s=Object.keys(b.o).length}p=qg.prototype;p.zc=function(b){vg(this,b);var c=new pg(wg,this.f,b);S(this,c);!this.l&&0===b.button&&rg(this,this.b);0===this.s&&(this.c.forEach(N),this.c.length=0,this.l=!1,this.b=null,jb(this.a),this.a=null)};\np.Jd=function(b){vg(this,b);var c=new pg(yg,this.f,b);S(this,c);this.b=b;0===this.c.length&&(this.a=new ig(document),this.c.push(Q(this.a,zg,this.ke,this),Q(this.a,wg,this.zc,this),Q(this.g,xg,this.zc,this)))};p.ke=function(b){if(b.clientX!=this.b.clientX||b.clientY!=this.b.clientY){this.l=!0;var c=new pg(Ag,this.f,b,this.l);S(this,c)}b.preventDefault()};p.ye=function(b){S(this,new pg(b.type,this.f,b,!(!this.b||b.clientX==this.b.clientX&&b.clientY==this.b.clientY)))};\np.J=function(){this.j&&(N(this.j),this.j=null);this.i&&(N(this.i),this.i=null);this.c.forEach(N);this.c.length=0;this.a&&(jb(this.a),this.a=null);this.g&&(jb(this.g),this.g=null);qg.X.J.call(this)};var ug=\"singleclick\",sg=\"click\",tg=\"dblclick\",Ag=\"pointerdrag\",zg=\"pointermove\",yg=\"pointerdown\",wg=\"pointerup\",xg=\"pointercancel\",Bg={Ve:ug,Ke:sg,Le:tg,Oe:Ag,Re:zg,Ne:yg,Ue:wg,Te:\"pointerover\",Se:\"pointerout\",Pe:\"pointerenter\",Qe:\"pointerleave\",Me:xg};function Cg(b){T.call(this);var c=Wa({},b);c.opacity=void 0!==b.opacity?b.opacity:1;c.visible=void 0!==b.visible?b.visible:!0;c.zIndex=void 0!==b.zIndex?b.zIndex:0;c.maxResolution=void 0!==b.maxResolution?b.maxResolution:Infinity;c.minResolution=void 0!==b.minResolution?b.minResolution:0;this.l(c)}M(Cg,T);\nfunction Dg(b){var c=b.Ub(),d=b.Pb(),e=b.cb(),f=b.C(),g=b.Vb(),h=b.get(\"maxResolution\"),k=b.get(\"minResolution\");return{layer:b,opacity:Ca(c,0,1),$b:d,visible:e,eb:!0,extent:f,zIndex:g,maxResolution:h,minResolution:Math.max(k,0)}}p=Cg.prototype;p.C=function(){return this.get(\"extent\")};p.Ub=function(){return this.get(\"opacity\")};p.cb=function(){return this.get(\"visible\")};p.Vb=function(){return this.get(\"zIndex\")};p.Fc=function(b){this.set(\"opacity\",b)};p.Gc=function(b){this.set(\"visible\",b)};\np.Hc=function(b){this.set(\"zIndex\",b)};function Eg(){};function Fg(b,c,d,e,f,g){R.call(this,b,c);this.vectorContext=d;this.frameState=e;this.context=f;this.glContext=g}M(Fg,R);function Gg(b){var c=Wa({},b);delete c.source;Cg.call(this,c);this.h=this.c=this.b=null;b.map&&this.setMap(b.map);Q(this,rb(\"source\"),this.Od,this);this.Zb(b.source?b.source:null)}M(Gg,Cg);function Hg(b,c){return b.visible&&c>=b.minResolution&&c<b.maxResolution}p=Gg.prototype;p.Lb=function(b){b=b?b:[];b.push(Dg(this));return b};p.V=function(){return this.get(\"source\")||null};p.Pb=function(){var b=this.V();return b?b.N():\"undefined\"};p.me=function(){this.v()};\np.Od=function(){this.h&&(N(this.h),this.h=null);var b=this.V();b&&(this.h=Q(b,\"change\",this.me,this));this.v()};p.setMap=function(b){this.b&&(N(this.b),this.b=null);b||this.v();this.c&&(N(this.c),this.c=null);b&&(this.b=Q(b,\"precompose\",function(b){var d=Dg(this);d.eb=!1;d.zIndex=Infinity;b.frameState.layerStatesArray.push(d);b.frameState.layerStates[I(this)]=d},this),this.c=Q(this,\"change\",b.render,b),this.v())};p.Zb=function(b){this.set(\"source\",b)};function Ig(b,c,d,e,f,g,h,k){Db(b);0===c&&0===d||Fb(b,c,d);1==e&&1==f||Gb(b,e,f);0!==g&&Hb(b,g);0===h&&0===k||Fb(b,h,k);return b}function Jg(b,c){return b[0]==c[0]&&b[1]==c[1]&&b[4]==c[4]&&b[5]==c[5]&&b[12]==c[12]&&b[13]==c[13]}function Kg(b,c,d){var e=b[1],f=b[5],g=b[13],h=c[0];c=c[1];d[0]=b[0]*h+b[4]*c+b[12];d[1]=e*h+f*c+g;return d};function Lg(b){ob.call(this);this.a=b}M(Lg,ob);Lg.prototype.fb=pa;Lg.prototype.Ic=dc;Lg.prototype.l=function(b,c,d){return function(e,f){return We(b,c,e,f,function(b){d[e]||(d[e]={});d[e][b.L.toString()]=b})}};function Mg(b){var c=b.a;c.cb()&&\"ready\"==c.Pb()&&b.v()}function Ng(b,c){c.Qc()&&b.postRenderFunctions.push(na(function(b,c,f){c=I(b).toString();b.Rc(f.viewState.projection,f.usedTiles[c])},c))}function Og(b,c){if(c){var d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],b[I(d).toString()]=d}}\nfunction Pg(b,c){var d=c.w;void 0!==d&&(\"string\"===typeof d?b.logos[d]=\"\":ha(d)&&(b.logos[d.src]=d.href))}function Qg(b,c,d,e){c=I(c).toString();d=d.toString();c in b?d in b[c]?(b=b[c][d],e.a<b.a&&(b.a=e.a),e.f>b.f&&(b.f=e.f),e.b<b.b&&(b.b=e.b),e.c>b.c&&(b.c=e.c)):b[c][d]=e:(b[c]={},b[c][d]=e)}function Rg(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]}\nfunction Sg(b,c,d,e,f,g,h,k,l,m){var n=I(c).toString();n in b.wantedTiles||(b.wantedTiles[n]={});var q=b.wantedTiles[n];b=b.tileQueue;var r=d.minZoom,u,w,y,z,D,t;for(t=h;t>=r;--t)for(w=Ke(d,g,t,w),y=d.I(t),z=w.a;z<=w.f;++z)for(D=w.b;D<=w.c;++D)h-t<=k?(u=Tg(c,t,z,D,e,f),0==u.N()&&(q[u.L.toString()]=!0,u.getKey()in b.f||b.c([u,n,Oe(d,u.L),y])),void 0!==l&&l.call(m,u)):c.Yc(t,z,D,f)};function Ug(b){this.l=b.opacity;this.i=b.rotateWithView;this.H=b.rotation;this.gb=b.scale;this.u=b.snapToPixel}Ug.prototype.Z=function(){return this.H};function Vg(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.c=null;this.b=void 0!==b.anchorOrigin?b.anchorOrigin:\"top-left\";this.j=void 0!==b.anchorXUnits?b.anchorXUnits:\"fraction\";this.A=void 0!==b.anchorYUnits?b.anchorYUnits:\"fraction\";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src||I(d).toString());var g=void 0!==b.src?0:2,h;void 0!==b.color?(h=b.color,h=Array.isArray(h)?h:\nxd(h)):h=null;var k=Wg.ua(),l=k.get(f,c,h);l||(l=new Xg(d,f,e,c,g,h),k.set(f,c,h,l));this.a=l;this.s=void 0!==b.offset?b.offset:[0,0];this.f=void 0!==b.offsetOrigin?b.offsetOrigin:\"top-left\";this.h=null;this.o=void 0!==b.size?b.size:null;Ug.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}M(Vg,Ug);p=Vg.prototype;\np.jb=function(){if(this.c)return this.c;var b=this.g,c=this.Qa();if(\"fraction\"==this.j||\"fraction\"==this.A){if(!c)return null;b=this.g.slice();\"fraction\"==this.j&&(b[0]*=c[0]);\"fraction\"==this.A&&(b[1]*=c[1])}if(\"top-left\"!=this.b){if(!c)return null;b===this.g&&(b=this.g.slice());if(\"top-right\"==this.b||\"bottom-right\"==this.b)b[0]=-b[0]+c[0];if(\"bottom-left\"==this.b||\"bottom-right\"==this.b)b[1]=-b[1]+c[1]}return this.c=b};p.T=function(b){return this.a.T(b)};p.wc=function(){return this.a.b};p.rb=function(){return this.a.f};\np.Xb=function(){var b=this.a;if(!b.l)if(b.i){var c=b.b[0],d=b.b[1],e=rf(c,d);e.fillRect(0,0,c,d);b.l=e.canvas}else b.l=b.a;return b.l};p.ka=function(){if(this.h)return this.h;var b=this.s;if(\"top-left\"!=this.f){var c=this.Qa(),d=this.a.b;if(!c||!d)return null;b=b.slice();if(\"top-right\"==this.f||\"bottom-right\"==this.f)b[0]=d[0]-c[0]-b[0];if(\"bottom-left\"==this.f||\"bottom-right\"==this.f)b[1]=d[1]-c[1]-b[1]}return this.h=b};p.Qa=function(){return this.o?this.o:this.a.b};\np.Bc=function(b,c){return Q(this.a,\"change\",b,c)};p.load=function(){this.a.load()};p.Xc=function(b,c){gb(this.a,\"change\",b,c)};function Xg(b,c,d,e,f,g){mb.call(this);this.l=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.c=g?document.createElement(\"CANVAS\"):null;this.h=g;this.g=null;this.f=f;this.b=d;this.o=c;this.i=!1;2==this.f&&Yg(this)}M(Xg,mb);function Yg(b){var c=rf(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.i=!0}}\nXg.prototype.j=function(){this.f=3;this.g.forEach(N);this.g=null;S(this,\"change\")};\nXg.prototype.s=function(){this.f=2;this.b&&(this.a.width=this.b[0],this.a.height=this.b[1]);this.b=[this.a.width,this.a.height];this.g.forEach(N);this.g=null;Yg(this);if(!this.i&&null!==this.h){this.c.width=this.a.width;this.c.height=this.a.height;var b=this.c.getContext(\"2d\");b.drawImage(this.a,0,0);for(var c=b.getImageData(0,0,this.a.width,this.a.height),d=c.data,e=this.h[0]/255,f=this.h[1]/255,g=this.h[2]/255,h=0,k=d.length;h<k;h+=4)d[h]*=e,d[h+1]*=f,d[h+2]*=g;b.putImageData(c,0,0)}S(this,\"change\")};\nXg.prototype.T=function(){return this.c?this.c:this.a};Xg.prototype.load=function(){if(0==this.f){this.f=1;this.g=[Q(this.a,\"error\",this.j,this,!0),Q(this.a,\"load\",this.s,this,!0)];try{this.a.src=this.o}catch(b){this.j()}}};function Wg(){this.a={};this.b=0}aa(Wg);Wg.prototype.clear=function(){this.a={};this.b=0};Wg.prototype.get=function(b,c,d){b=c+\":\"+b+\":\"+(d?vd(d):\"null\");return b in this.a?this.a[b]:null};Wg.prototype.set=function(b,c,d,e){this.a[c+\":\"+b+\":\"+(d?vd(d):\"null\")]=e;++this.b};function Zg(b,c){this.h=c;this.f={};this.A={}}M(Zg,ib);function $g(b){var c=b.viewState,d=b.coordinateToPixelMatrix;Ig(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Eb(d,b.pixelToCoordinateMatrix)}p=Zg.prototype;p.J=function(){for(var b in this.f)jb(this.f[b])};function ah(){var b=Wg.ua();if(32<b.b){var c=0,d,e;for(d in b.a)e=b.a[d],0!==(c++&3)||nb(e)||(delete b.a[d],--b.b)}}\np.Wb=function(b,c,d,e,f,g){function h(b,f){var g=I(b).toString(),h=c.layerStates[I(f)].eb;if(!(g in c.skippedFeatureUids)||h)return d.call(e,b,h?f:null)}var k,l=c.viewState,m=l.resolution,n=l.projection,l=b;if(n.a){var n=n.C(),q=Vb(n),r=b[0];if(r<n[0]||r>n[2])l=[r+q*Math.ceil((n[0]-r)/q),b[1]]}n=c.layerStatesArray;for(q=n.length-1;0<=q;--q){var u=n[q],r=u.layer;if(Hg(u,m)&&f.call(g,r)&&(u=bh(this,r),r.V()&&(k=u.fb(r.V().j?l:b,c,h,e)),k))return k}};\np.Jc=function(b,c,d,e){return void 0!==this.Wb(b,c,cc,this,d,e)};function bh(b,c){var d=I(c).toString();if(d in b.f)return b.f[d];var e=b.Jb(c);b.f[d]=e;b.A[d]=Q(e,\"change\",b.Dd,b);return e}p.Dd=function(){this.h.render()};p.sb=pa;p.Be=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];N(this.A[e]);delete this.A[e];jb(f)}};function ch(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(b.Be.bind(b));break}}\nfunction Oa(b,c){return b.zIndex-c.zIndex};function dh(b,c){this.j=b;this.l=c;this.a=[];this.b=[];this.f={}}dh.prototype.clear=function(){this.a.length=0;this.b.length=0;Ya(this.f)};function eh(b){var c=b.a,d=b.b,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),fh(b,0));c=b.l(e);delete b.f[c];return e}dh.prototype.c=function(b){var c=this.j(b);return Infinity!=c?(this.a.push(b),this.b.push(c),this.f[this.l(b)]=!0,gh(this,0,this.a.length-1),!0):!1};\nfunction fh(b,c){for(var d=b.a,e=b.b,f=d.length,g=d[c],h=e[c],k=c;c<f>>1;){var l=2*c+1,m=2*c+2,l=m<f&&e[m]<e[l]?m:l;d[c]=d[l];e[c]=e[l];c=l}d[c]=g;e[c]=h;gh(b,k,c)}function gh(b,c,d){var e=b.a;b=b.b;for(var f=e[d],g=b[d];d>c;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function hh(b){var c=b.j,d=b.a,e=b.b,f=0,g=d.length,h,k,l;for(k=0;k<g;++k)h=d[k],l=c(h),Infinity==l?delete b.f[b.l(h)]:(e[f]=l,d[f++]=h);d.length=f;e.length=f;for(c=(b.a.length>>1)-1;0<=c;c--)fh(b,c)};function ih(b,c){dh.call(this,function(c){return b.apply(null,c)},function(b){return b[0].getKey()});this.A=c;this.h=0;this.g={}}M(ih,dh);ih.prototype.c=function(b){var c=ih.X.c.call(this,b);c&&Q(b[0],\"change\",this.i,this);return c};ih.prototype.i=function(b){b=b.target;var c=b.N();if(2===c||3===c||4===c||5===c)gb(b,\"change\",this.i,this),b=b.getKey(),b in this.g&&(delete this.g[b],--this.h),this.A()};function jh(){this.a=[];this.b=this.f=0}function kh(b,c){var d=b.b,e=.05-d,f=Math.log(.05/b.b)/-.005;return cd({source:c,duration:f,easing:function(b){return d*(Math.exp(-.005*b*f)-1)/e}})};function lh(b){T.call(this);this.S=null;this.set(\"active\",!0);this.handleEvent=b.handleEvent}M(lh,T);lh.prototype.setMap=function(b){this.S=b};function mh(b,c,d,e,f){if(void 0!==d){var g=c.Z(),h=c.ia();void 0!==g&&h&&f&&0<f&&(b.fa(dd({rotation:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));c.rotate(d,e)}}function nh(b,c,d,e,f){var g=c.I();d=c.constrainResolution(g,d,0);oh(b,c,d,e,f)}\nfunction oh(b,c,d,e,f){if(d){var g=c.I(),h=c.ia();void 0!==g&&h&&d!==g&&f&&0<f&&(b.fa(ed({resolution:g,duration:f,easing:$c})),e&&b.fa(cd({source:h,duration:f,easing:$c})));if(e){var k;b=c.ia();f=c.I();void 0!==b&&void 0!==f&&(k=[e[0]-d*(e[0]-b[0])/f,e[1]-d*(e[1]-b[1])/f]);c.oa(k)}Yc(c,d)}};function ph(b){b=b?b:{};this.a=b.delta?b.delta:1;lh.call(this,{handleEvent:qh});this.b=void 0!==b.duration?b.duration:250}M(ph,lh);function qh(b){var c=!1,d=b.originalEvent;if(b.type==tg){var c=b.map,e=b.coordinate,d=d.shiftKey?-this.a:this.a,f=c.O();nh(c,f,d,e,this.b);b.preventDefault();c=!0}return!c};function rh(b){b=b.originalEvent;return b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function sh(b){b=b.originalEvent;return 0==b.button&&!(Jd&&Cf&&b.ctrlKey)}function th(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&!b.shiftKey}function uh(b){b=b.originalEvent;return!b.altKey&&!(b.metaKey||b.ctrlKey)&&b.shiftKey}function vh(b){b=b.originalEvent.target.tagName;return\"INPUT\"!==b&&\"SELECT\"!==b&&\"TEXTAREA\"!==b}function wh(b){return\"mouse\"==b.a.pointerType};function xh(b){b=b?b:{};lh.call(this,{handleEvent:b.handleEvent?b.handleEvent:yh});this.wb=b.handleDownEvent?b.handleDownEvent:dc;this.xb=b.handleDragEvent?b.handleDragEvent:pa;this.yb=b.handleMoveEvent?b.handleMoveEvent:pa;this.zb=b.handleUpEvent?b.handleUpEvent:dc;this.s=!1;this.G={};this.c=[]}M(xh,lh);function zh(b){for(var c=b.length,d=0,e=0,f=0;f<c;f++)d+=b[f].clientX,e+=b[f].clientY;return[d/c,e/c]}\nfunction yh(b){if(!(b instanceof pg))return!0;var c=!1,d=b.type;if(d===yg||d===Ag||d===wg)d=b.a,b.type==wg?delete this.G[d.pointerId]:b.type==yg?this.G[d.pointerId]=d:d.pointerId in this.G&&(this.G[d.pointerId]=d),this.c=Za(this.G);this.s&&(b.type==Ag?this.xb(b):b.type==wg&&(this.s=this.zb(b)));b.type==yg?(this.s=b=this.wb(b),c=this.w(b)):b.type==zg&&this.yb(b);return!c}xh.prototype.w=function(b){return b};function Ah(b){xh.call(this,{handleDownEvent:Bh,handleDragEvent:Ch,handleUpEvent:Dh});b=b?b:{};this.a=b.kinetic;this.b=this.g=null;this.i=b.condition?b.condition:th;this.h=!1}M(Ah,xh);function Ch(b){var c=zh(this.c);this.a&&this.a.a.push(c[0],c[1],Date.now());if(this.b){var d=this.b[0]-c[0],e=c[1]-this.b[1];b=b.map;var f=b.O(),g=f.N(),e=d=[d,e],h=g.resolution;e[0]*=h;e[1]*=h;vb(d,g.rotation);ub(d,g.center);d=f.a.center(d);b.render();f.oa(d)}this.b=c}\nfunction Dh(b){b=b.map;var c=b.O();if(0===this.c.length){var d;if(d=!this.h&&this.a)if(d=this.a,6>d.a.length)d=!1;else{var e=Date.now()-100,f=d.a.length-3;if(d.a[f+2]<e)d=!1;else{for(var g=f-3;0<g&&d.a[g+2]>e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.f=Math.atan2(f,h);d.b=Math.sqrt(h*h+f*f)/e;d=.05<d.b}}d&&(d=(.05-this.a.b)/-.005,f=this.a.f,g=c.ia(),this.g=kh(this.a,g),b.fa(this.g),g=Eh(b,g),d=b.ta([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.a.center(d),c.oa(d));Zc(c,-1);\nb.render();return!1}this.b=null;return!0}function Bh(b){if(0<this.c.length&&this.i(b)){var c=b.map,d=c.O();this.b=null;this.s||Zc(d,1);c.render();this.g&&La(c.B,this.g)&&(d.oa(b.frameState.viewState.center),this.g=null);this.a&&(b=this.a,b.a.length=0,b.f=0,b.b=0);this.h=1<this.c.length;return!0}return!1}Ah.prototype.w=dc;function Fh(b){b=b?b:{};xh.call(this,{handleDownEvent:Gh,handleDragEvent:Hh,handleUpEvent:Ih});this.b=b.condition?b.condition:rh;this.a=void 0;this.g=void 0!==b.duration?b.duration:250}M(Fh,xh);function Hh(b){if(wh(b)){var c=b.map,d=c.Pa();b=b.pixel;d=Math.atan2(d[1]/2-b[1],b[0]-d[0]/2);if(void 0!==this.a){b=d-this.a;var e=c.O(),f=e.Z();c.render();mh(c,e,f-b)}this.a=d}}\nfunction Ih(b){if(!wh(b))return!0;b=b.map;var c=b.O();Zc(c,-1);var d=c.Z(),e=this.g,d=c.constrainRotation(d,0);mh(b,c,d,void 0,e);return!1}function Gh(b){return wh(b)&&sh(b)&&this.b(b)?(b=b.map,Zc(b.O(),1),b.render(),this.a=void 0,!0):!1}Fh.prototype.w=dc;function Jh(b){this.c=null;this.b=document.createElement(\"div\");this.b.style.position=\"absolute\";this.b.className=\"ol-box \"+b;this.f=this.g=this.a=null}M(Jh,ib);Jh.prototype.J=function(){this.setMap(null)};function Kh(b){var c=b.g,d=b.f;b=b.b.style;b.left=Math.min(c[0],d[0])+\"px\";b.top=Math.min(c[1],d[1])+\"px\";b.width=Math.abs(d[0]-c[0])+\"px\";b.height=Math.abs(d[1]-c[1])+\"px\"}\nJh.prototype.setMap=function(b){if(this.a){this.a.o.removeChild(this.b);var c=this.b.style;c.left=c.top=c.width=c.height=\"inherit\"}(this.a=b)&&this.a.o.appendChild(this.b)};function Lh(b){var c=b.g,d=b.f,c=[c,[c[0],d[1]],d,[d[0],c[1]]].map(b.a.ta,b.a);c[4]=c[0].slice();b.c?b.c.W([c]):b.c=new Tc([c])}Jh.prototype.M=function(){return this.c};function Mh(b,c,d){R.call(this,b);this.coordinate=c;this.mapBrowserEvent=d}M(Mh,R);function Nh(b){xh.call(this,{handleDownEvent:Oh,handleDragEvent:Ph,handleUpEvent:Qh});b=b?b:{};this.a=new Jh(b.className||\"ol-dragbox\");this.b=null;this.j=b.condition?b.condition:cc;this.i=b.boxEndCondition?b.boxEndCondition:Rh}M(Nh,xh);function Rh(b,c,d){b=d[0]-c[0];c=d[1]-c[1];return 64<=b*b+c*c}\nfunction Ph(b){if(wh(b)){var c=this.a,d=b.pixel;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh(\"boxdrag\",b.coordinate,b))}}Nh.prototype.M=function(){return this.a.M()};Nh.prototype.h=pa;function Qh(b){if(!wh(b))return!0;this.a.setMap(null);this.i(b,this.b,b.pixel)&&(this.h(b),S(this,new Mh(\"boxend\",b.coordinate,b)));return!1}\nfunction Oh(b){if(wh(b)&&sh(b)&&this.j(b)){this.b=b.pixel;this.a.setMap(b.map);var c=this.a,d=this.b;c.g=this.b;c.f=d;Lh(c);Kh(c);S(this,new Mh(\"boxstart\",b.coordinate,b));return!0}return!1};function Sh(b){b=b?b:{};var c=b.condition?b.condition:uh;this.g=void 0!==b.duration?b.duration:200;this.o=void 0!==b.out?b.out:!1;Nh.call(this,{condition:c,className:b.className||\"ol-dragzoom\"})}M(Sh,Nh);\nSh.prototype.h=function(){var b=this.S,c=b.O(),d=b.Pa(),e=this.M().C();if(this.o){var f=c.jc(d),e=[Eh(b,Xb(e)),Eh(b,[e[2],e[3]])],g=Pb(void 0),h,k;h=0;for(k=e.length;h<k;++h)Kb(g,e[h]);g=1/Xc(g,d);e=(f[2]-f[0])/2*(g-1);g=(f[3]-f[1])/2*(g-1);f[0]-=e;f[2]+=e;f[1]-=g;f[3]+=g;e=f}d=c.constrainResolution(Xc(e,d));f=c.I();g=c.ia();b.fa(ed({resolution:f,duration:this.g,easing:$c}));b.fa(cd({source:g,duration:this.g,easing:$c}));c.oa(Yb(e));Yc(c,d)};function Th(b){lh.call(this,{handleEvent:Uh});b=b||{};this.a=function(b){return th.call(this,b)&&vh.call(this,b)};this.b=void 0!==b.condition?b.condition:this.a;this.c=void 0!==b.duration?b.duration:100;this.g=void 0!==b.pixelDelta?b.pixelDelta:128}M(Th,lh);\nfunction Uh(b){var c=!1;if(\"keydown\"==b.type){var d=b.originalEvent.keyCode;if(this.b(b)&&(40==d||37==d||39==d||38==d)){var e=b.map,c=e.O(),f=c.I()*this.g,g=0,h=0;40==d?h=-f:37==d?g=-f:39==d?g=f:h=f;d=[g,h];vb(d,c.Z());f=this.c;if(g=c.ia())f&&0<f&&e.fa(cd({source:g,duration:f,easing:bd})),e=c.a.center([g[0]+d[0],g[1]+d[1]]),c.oa(e);b.preventDefault();c=!0}}return!c};function Vh(b){lh.call(this,{handleEvent:Wh});b=b?b:{};this.b=b.condition?b.condition:vh;this.a=b.delta?b.delta:1;this.c=void 0!==b.duration?b.duration:100}M(Vh,lh);function Wh(b){var c=!1;if(\"keydown\"==b.type||\"keypress\"==b.type){var d=b.originalEvent.charCode;if(this.b(b)&&(43==d||45==d)){c=b.map;d=43==d?this.a:-this.a;c.render();var e=c.O();nh(c,e,d,void 0,this.c);b.preventDefault();c=!0}}return!c};function Xh(b){lh.call(this,{handleEvent:Yh});b=b||{};this.a=0;this.i=void 0!==b.duration?b.duration:250;this.j=void 0!==b.useAnchor?b.useAnchor:!0;this.c=null;this.g=this.b=void 0}M(Xh,lh);\nfunction Yh(b){var c=!1;if(\"wheel\"==b.type||\"mousewheel\"==b.type){var c=b.map,d=b.originalEvent;this.j&&(this.c=b.coordinate);var e;\"wheel\"==b.type?(e=d.deltaY,Af&&d.deltaMode===x.WheelEvent.DOM_DELTA_PIXEL&&(e/=Df),d.deltaMode===x.WheelEvent.DOM_DELTA_LINE&&(e*=40)):\"mousewheel\"==b.type&&(e=-d.wheelDeltaY,Bf&&(e/=3));this.a+=e;void 0===this.b&&(this.b=Date.now());e=Math.max(80-(Date.now()-this.b),0);x.clearTimeout(this.g);this.g=x.setTimeout(this.h.bind(this,c),e);b.preventDefault();c=!0}return!c}\nXh.prototype.h=function(b){var c=Ca(this.a,-1,1),d=b.O();b.render();nh(b,d,-c,this.c,this.i);this.a=0;this.c=null;this.g=this.b=void 0};function Zh(b){xh.call(this,{handleDownEvent:$h,handleDragEvent:ai,handleUpEvent:bi});b=b||{};this.b=null;this.g=void 0;this.a=!1;this.h=0;this.j=void 0!==b.threshold?b.threshold:.3;this.i=void 0!==b.duration?b.duration:250}M(Zh,xh);\nfunction ai(b){var c=0,d=this.c[0],e=this.c[1],d=Math.atan2(e.clientY-d.clientY,e.clientX-d.clientX);void 0!==this.g&&(c=d-this.g,this.h+=c,!this.a&&Math.abs(this.h)>this.j&&(this.a=!0));this.g=d;b=b.map;d=b.a.getBoundingClientRect();e=zh(this.c);e[0]-=d.left;e[1]-=d.top;this.b=b.ta(e);this.a&&(d=b.O(),e=d.Z(),b.render(),mh(b,d,e+c,this.b))}\nfunction bi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);if(this.a){var d=c.Z(),e=this.b,f=this.i,d=c.constrainRotation(d,0);mh(b,c,d,e,f)}return!1}return!0}function $h(b){return 2<=this.c.length?(b=b.map,this.b=null,this.g=void 0,this.a=!1,this.h=0,this.s||Zc(b.O(),1),b.render(),!0):!1}Zh.prototype.w=dc;function ci(b){xh.call(this,{handleDownEvent:di,handleDragEvent:ei,handleUpEvent:fi});b=b?b:{};this.b=null;this.h=void 0!==b.duration?b.duration:400;this.a=void 0;this.g=1}M(ci,xh);function ei(b){var c=1,d=this.c[0],e=this.c[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.g=c);b=b.map;var f=b.O(),d=f.I(),e=b.a.getBoundingClientRect(),g=zh(this.c);g[0]-=e.left;g[1]-=e.top;this.b=b.ta(g);b.render();oh(b,f,d*c,this.b)}\nfunction fi(b){if(2>this.c.length){b=b.map;var c=b.O();Zc(c,-1);var d=c.I(),e=this.b,f=this.h,d=c.constrainResolution(d,0,this.g-1);oh(b,c,d,e,f);return!1}return!0}function di(b){return 2<=this.c.length?(b=b.map,this.b=null,this.a=void 0,this.g=1,this.s||Zc(b.O(),1),b.render(),!0):!1}ci.prototype.w=dc;function gi(b){var c=b||{};b=Wa({},c);delete b.layers;c=c.layers;Cg.call(this,b);this.b=[];this.a={};Q(this,rb(\"layers\"),this.Fd,this);c?Array.isArray(c)&&(c=new ld(c.slice())):c=new ld;this.set(\"layers\",c)}M(gi,Cg);p=gi.prototype;p.ob=function(){this.cb()&&this.v()};\np.Fd=function(){this.b.forEach(N);this.b.length=0;var b=this.get(\"layers\");this.b.push(Q(b,\"add\",this.Ed,this),Q(b,\"remove\",this.Gd,this));for(var c in this.a)this.a[c].forEach(N);Ya(this.a);var b=b.a,d,e;c=0;for(d=b.length;c<d;c++)e=b[c],this.a[I(e).toString()]=[Q(e,\"propertychange\",this.ob,this),Q(e,\"change\",this.ob,this)];this.v()};p.Ed=function(b){b=b.element;var c=I(b).toString();this.a[c]=[Q(b,\"propertychange\",this.ob,this),Q(b,\"change\",this.ob,this)];this.v()};\np.Gd=function(b){b=I(b.element).toString();this.a[b].forEach(N);delete this.a[b];this.v()};p.Lb=function(b){var c=void 0!==b?b:[],d=c.length;nd(this.get(\"layers\"),function(b){b.Lb(c)});b=Dg(this);var e,f;for(e=c.length;d<e;d++)f=c[d],f.opacity*=b.opacity,f.visible=f.visible&&b.visible,f.maxResolution=Math.min(f.maxResolution,b.maxResolution),f.minResolution=Math.max(f.minResolution,b.minResolution),void 0!==b.extent&&(f.extent=void 0!==f.extent?$b(f.extent,b.extent):b.extent);return c};p.Pb=function(){return\"ready\"};function hi(b){ic.call(this,{code:b,units:\"m\",extent:ii,global:!0,worldExtent:ji})}M(hi,ic);hi.prototype.getPointResolution=function(b,c){return b/Da(c[1]/6378137)};var ki=6378137*Math.PI,ii=[-ki,-ki,ki,ki],ji=[-180,-85,180,85],li=\"EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857\".split(\" \").map(function(b){return new hi(b)});\nfunction mi(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=6378137*Math.PI*b[f]/180,c[f+1]=6378137*Math.log(Math.tan(Math.PI*(b[f+1]+90)/360));return c}function ni(b,c,d){var e=b.length;d=1<d?d:2;void 0===c&&(2<d?c=b.slice():c=Array(e));for(var f=0;f<e;f+=d)c[f]=180*b[f]/(6378137*Math.PI),c[f+1]=360*Math.atan(Math.exp(b[f+1]/6378137))/Math.PI-90;return c};var oi=new ec(6378137);function pi(b,c){ic.call(this,{code:b,units:\"degrees\",extent:qi,axisOrientation:c,global:!0,metersPerUnit:ri,worldExtent:qi})}M(pi,ic);pi.prototype.getPointResolution=function(b){return b};\nvar qi=[-180,-90,180,90],ri=Math.PI*oi.radius/180,si=[new pi(\"CRS:84\"),new pi(\"EPSG:4326\",\"neu\"),new pi(\"urn:ogc:def:crs:EPSG::4326\",\"neu\"),new pi(\"urn:ogc:def:crs:EPSG:6.6:4326\",\"neu\"),new pi(\"urn:ogc:def:crs:OGC:1.3:CRS84\"),new pi(\"urn:ogc:def:crs:OGC:2:84\"),new pi(\"http://www.opengis.net/gml/srs/epsg.xml#4326\",\"neu\"),new pi(\"urn:x-ogc:def:crs:EPSG:4326\",\"neu\")];function X(b){b=b?b:{};var c=Wa({},b);delete c.preload;delete c.useInterimTilesOnError;Gg.call(this,c);this.set(\"preload\",void 0!==b.preload?b.preload:0);this.set(\"useInterimTilesOnError\",void 0!==b.useInterimTilesOnError?b.useInterimTilesOnError:!0)}M(X,Gg);function ti(b){return b.get(\"useInterimTilesOnError\")};var ui=[0,0,0,1],vi=[],wi=[0,0,0,1];function xi(b,c,d,e){0!==c&&(b.translate(d,e),b.rotate(c),b.translate(-d,-e))};function yi(b){b=b||{};this.a=void 0!==b.color?b.color:null;this.b=void 0}yi.prototype.ga=function(){return this.a};function zi(){this.b=-1};function Ai(){this.b=-1;this.b=64;this.a=Array(4);this.g=Array(this.b);this.c=this.f=0;this.a[0]=1732584193;this.a[1]=4023233417;this.a[2]=2562383102;this.a[3]=271733878;this.c=this.f=0}M(Ai,zi);\nfunction Bi(b,c,d){d||(d=0);var e=Array(16);if(da(c))for(var f=0;16>f;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^\nc))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+\n(d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295|\nh>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295|\nh>>>12);h=c+(f^g&(d^f))+e[9]+568446438&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[14]+3275163606&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[3]+4107603335&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[8]+1163531501&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[13]+2850285829&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[2]+4243563512&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[7]+1735328473&4294967295;f=g+(h<<14&4294967295|\nh>>>18);h=d+(g^c&(f^g))+e[12]+2368359562&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(d^f^g)+e[5]+4294588738&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[8]+2272392833&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[11]+1839030562&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[14]+4259657740&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[1]+2763975236&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[4]+1272893353&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^\nc^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+3200236656&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[13]+681279174&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[0]+3936430074&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[3]+3572445317&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[6]+76029189&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[9]+3654602809&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[12]+3873151461&4294967295;\ng=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+\n(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295;\nd=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295}\nfunction Ci(b,c){var d;void 0===d&&(d=c.length);for(var e=d-b.b,f=b.g,g=b.f,h=0;h<d;){if(0==g)for(;h<=e;)Bi(b,c,h),h+=b.b;if(da(c))for(;h<d;){if(f[g++]=c.charCodeAt(h++),g==b.b){Bi(b,f);g=0;break}}else for(;h<d;)if(f[g++]=c[h++],g==b.b){Bi(b,f);g=0;break}}b.f=g;b.c+=d};function Di(b){b=b||{};this.f=void 0!==b.color?b.color:null;this.Da=b.lineCap;this.a=void 0!==b.lineDash?b.lineDash:null;this.Ea=b.lineJoin;this.Fa=b.miterLimit;this.c=b.width;this.b=void 0}Di.prototype.ga=function(){return this.f};Di.prototype.getLineDash=function(){return this.a};Di.prototype.ha=function(){return this.c};function Ei(b){b=b||{};this.h=this.a=this.g=null;this.f=void 0!==b.fill?b.fill:null;this.b=void 0!==b.stroke?b.stroke:null;this.c=b.radius;this.o=[0,0];this.j=this.s=this.A=null;var c=b.atlasManager,d,e=null,f,g=0;this.b&&(f=vd(this.b.ga()),g=this.b.ha(),void 0===g&&(g=1),e=this.b.getLineDash(),Ef||(e=null));var h=2*(this.c+g)+1;f={strokeStyle:f,Wc:g,size:h,lineDash:e};if(void 0===c)this.a=document.createElement(\"CANVAS\"),this.a.height=h,this.a.width=h,d=h=this.a.width,c=this.a.getContext(\"2d\"),this.tc(f,\nc,0,0),this.f?this.h=this.a:(c=this.h=document.createElement(\"CANVAS\"),c.height=f.size,c.width=f.size,c=c.getContext(\"2d\"),this.oc(f,c,0,0));else{h=Math.round(h);(e=!this.f)&&(d=this.oc.bind(this,f));if(this.b){g=this.b;if(void 0===g.b){var k=\"s\"+(g.f?vd(g.f):\"-\")+\",\"+(void 0!==g.Da?g.Da.toString():\"-\")+\",\"+(g.a?g.a.toString():\"-\")+\",\"+(void 0!==g.Ea?g.Ea:\"-\")+\",\"+(void 0!==g.Fa?g.Fa.toString():\"-\")+\",\"+(void 0!==g.c?g.c.toString():\"-\"),l=new Ai;Ci(l,k);var m=Array((56>l.f?l.b:2*l.b)-l.f);m[0]=128;\nfor(k=1;k<m.length-8;++k)m[k]=0;for(var n=8*l.c,k=m.length-8;k<m.length;++k)m[k]=n&255,n/=256;Ci(l,m);m=Array(16);for(k=n=0;4>k;++k)for(var q=0;32>q;q+=8)m[n++]=l.a[k]>>>q&255;if(8192>=m.length)l=String.fromCharCode.apply(null,m);else for(l=\"\",k=0;k<m.length;k+=8192)l+=String.fromCharCode.apply(null,rd(m,k,k+8192));g.b=l}g=g.b}else g=\"-\";this.f?(l=this.f,void 0===l.b&&(l.b=l.a instanceof CanvasPattern||l.a instanceof CanvasGradient?I(l.a).toString():\"f\"+(l.a?vd(l.a):\"-\")),l=l.b):l=\"-\";this.g&&g==\nthis.g[1]&&l==this.g[2]&&this.c==this.g[3]||(this.g=[\"c\"+g+l+(void 0!==this.c?this.c.toString():\"-\"),g,l,this.c]);f=c.add(this.g[0],h,h,this.tc.bind(this,f),d);this.a=f.image;this.o=[f.offsetX,f.offsetY];d=f.image.width;e?this.h=f.Ye:this.h=this.a}this.A=[h/2,h/2];this.s=[h,h];this.j=[d,d];Ug.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0})}M(Ei,Ug);p=Ei.prototype;p.jb=function(){return this.A};p.Ka=function(){return this.f};p.Xb=function(){return this.h};\np.T=function(){return this.a};p.rb=function(){return 2};p.wc=function(){return this.j};p.ka=function(){return this.o};p.Qa=function(){return this.s};p.va=function(){return this.b};p.Bc=pa;p.load=pa;p.Xc=pa;p.tc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);this.f&&(c.fillStyle=yd(this.f.ga()),c.fill());this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};\np.oc=function(b,c,d,e){c.setTransform(1,0,0,1,0,0);c.translate(d,e);c.beginPath();c.arc(b.size/2,b.size/2,this.c,0,2*Math.PI,!0);c.fillStyle=vd(ui);c.fill();this.b&&(c.strokeStyle=b.strokeStyle,c.lineWidth=b.Wc,b.lineDash&&c.setLineDash(b.lineDash),c.stroke());c.closePath()};function Fi(b){b=b||{};this.f=null;this.b=Gi;void 0!==b.geometry&&Hi(this,b.geometry);this.c=void 0!==b.fill?b.fill:null;this.g=void 0!==b.image?b.image:null;this.h=void 0!==b.stroke?b.stroke:null;this.sa=void 0!==b.text?b.text:null;this.a=b.zIndex}Fi.prototype.M=function(){return this.f};Fi.prototype.Ka=function(){return this.c};Fi.prototype.T=function(){return this.g};Fi.prototype.va=function(){return this.h};\nfunction Hi(b,c){ga(c)?b.b=c:\"string\"===typeof c?b.b=function(b){return b.get(c)}:c?void 0!==c&&(b.b=function(){return c}):b.b=Gi;b.f=c}function Ii(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b}var Ji=null;function Ki(){if(!Ji){var b=new yi({color:\"rgba(255,255,255,0.4)\"}),c=new Di({color:\"#3399CC\",width:1.25});Ji=[new Fi({image:new Ei({fill:b,stroke:c,radius:5}),fill:b,stroke:c})]}return Ji}\nfunction Li(){var b={},c=[255,255,255,1],d=[0,153,255,1];b.Polygon=[new Fi({fill:new yi({color:[255,255,255,.5]})})];b.MultiPolygon=b.Polygon;b.LineString=[new Fi({stroke:new Di({color:c,width:5})}),new Fi({stroke:new Di({color:d,width:3})})];b.MultiLineString=b.LineString;b.Circle=b.Polygon.concat(b.LineString);b.Point=[new Fi({image:new Ei({radius:6,fill:new yi({color:d}),stroke:new Di({color:c,width:1.5})}),zIndex:Infinity})];b.MultiPoint=b.Point;b.GeometryCollection=b.Polygon.concat(b.LineString,\nb.Point);return b}function Gi(b){return b.M()};function Y(b){b=b?b:{};var c=Wa({},b);delete c.style;delete c.renderBuffer;delete c.updateWhileAnimating;delete c.updateWhileInteracting;Gg.call(this,c);this.a=void 0!==b.renderBuffer?b.renderBuffer:100;this.o=null;this.g=void 0;this.s(b.style);this.i=void 0!==b.updateWhileAnimating?b.updateWhileAnimating:!1;this.j=void 0!==b.updateWhileInteracting?b.updateWhileInteracting:!1}M(Y,Gg);Y.prototype.s=function(b){this.o=void 0!==b?b:Ki;this.g=null===b?void 0:Ii(this.o);this.v()};function Mi(b,c,d,e,f){this.c=b;this.u=c;this.l=d;this.w=e;this.Ja=f;this.g=this.a=this.b=this.Y=this.ba=this.S=null;this.aa=this.ja=this.o=this.D=this.K=this.B=0;this.ea=!1;this.h=this.na=0;this.za=!1;this.G=0;this.f=\"\";this.j=this.H=this.Aa=this.pa=0;this.P=this.A=this.i=null;this.s=[];this.Ba=zb()}M(Mi,Eg);\nfunction Ni(b,c,d){if(b.g){c=Ac(c,0,d,2,b.w,b.s);d=b.c;var e=b.Ba,f=d.globalAlpha;1!=b.o&&(d.globalAlpha=f*b.o);var g=b.na;b.ea&&(g+=b.Ja);var h,k;h=0;for(k=c.length;h<k;h+=2){var l=c[h]-b.B,m=c[h+1]-b.K;b.za&&(l=Math.round(l),m=Math.round(m));if(0!==g||1!=b.h){var n=l+b.B,q=m+b.K;Ig(e,n,q,b.h,b.h,g,-n,-q);d.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}d.drawImage(b.g,b.ja,b.aa,b.G,b.D,l,m,b.G,b.D)}0===g&&1==b.h||d.setTransform(1,0,0,1,0,0);1!=b.o&&(d.globalAlpha=f)}}\nfunction Oi(b,c,d,e){var f=0;if(b.P&&\"\"!==b.f){b.i&&Pi(b,b.i);b.A&&Qi(b,b.A);var g=b.P,h=b.c,k=b.Y;k?(k.font!=g.font&&(k.font=h.font=g.font),k.textAlign!=g.textAlign&&(k.textAlign=h.textAlign=g.textAlign),k.textBaseline!=g.textBaseline&&(k.textBaseline=h.textBaseline=g.textBaseline)):(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline,b.Y={font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});c=Ac(c,f,d,e,b.w,b.s);for(g=b.c;f<d;f+=e){h=c[f]+b.pa;k=c[f+1]+b.Aa;if(0!==b.H||\n1!=b.j){var l=Ig(b.Ba,h,k,b.j,b.j,b.H,-h,-k);g.setTransform(l[0],l[1],l[4],l[5],l[12],l[13])}b.A&&g.strokeText(b.f,h,k);b.i&&g.fillText(b.f,h,k)}0===b.H&&1==b.j||g.setTransform(1,0,0,1,0,0)}}function Ri(b,c,d,e,f,g){var h=b.c;b=Ac(c,d,e,f,b.w,b.s);h.moveTo(b[0],b[1]);c=b.length;g&&(c-=2);for(d=2;d<c;d+=2)h.lineTo(b[d],b[d+1]);g&&h.closePath();return e}function Si(b,c,d,e,f){var g,h;g=0;for(h=e.length;g<h;++g)d=Ri(b,c,d,e[g],f,!0);return d}p=Mi.prototype;\np.nc=function(b){if(ac(this.l,b.C())){if(this.b||this.a){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c;c=this.w;var d=this.s,e=b.a;c=e?Ac(e,0,e.length,b.b,c,d):null;d=c[2]-c[0];e=c[3]-c[1];d=Math.sqrt(d*d+e*e);e=this.c;e.beginPath();e.arc(c[0],c[1],d,0,2*Math.PI);this.b&&e.fill();this.a&&e.stroke()}\"\"!==this.f&&Oi(this,b.a.slice(0,b.b),2,2)}};p.$a=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);\"\"!==this.f&&Oi(this,c,c.length,b)};\np.Za=function(b){var c=b.a;b=b.b;this.g&&Ni(this,c,c.length);\"\"!==this.f&&Oi(this,c,c.length,b)};p.pc=function(b){if(ac(this.l,b.C())){if(this.a){Qi(this,this.a);var c=this.c,d=b.a;c.beginPath();Ri(this,d,0,d.length,b.b,!1);c.stroke()}\"\"!==this.f&&(b=Ti(b),Oi(this,b,2,2))}};\np.qc=function(b){var c=b.C();if(ac(this.l,c)){if(this.a){Qi(this,this.a);var c=this.c,d=b.a,e=0,f=b.ab(),g=b.b;c.beginPath();var h,k;h=0;for(k=f.length;h<k;++h)e=Ri(this,d,e,f[h],g,!1);c.stroke()}\"\"!==this.f&&(b=Ui(b),Oi(this,b,b.length,2))}};p.sc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c;c.beginPath();Si(this,Vc(b),0,b.ab(),b.b);this.b&&c.fill();this.a&&c.stroke()}\"\"!==this.f&&(b=Wc(b),Oi(this,b,2,2))}};\np.rc=function(b){if(ac(this.l,b.C())){if(this.a||this.b){this.b&&Pi(this,this.b);this.a&&Qi(this,this.a);var c=this.c,d=Vi(b),e=0,f=b.c,g=b.b,h,k;h=0;for(k=f.length;h<k;++h){var l=f[h];c.beginPath();e=Si(this,d,e,l,g);this.b&&c.fill();this.a&&c.stroke()}}\"\"!==this.f&&(b=Wi(b),Oi(this,b,b.length,2))}};function Pi(b,c){var d=b.c,e=b.S;e?e.fillStyle!=c.fillStyle&&(e.fillStyle=d.fillStyle=c.fillStyle):(d.fillStyle=c.fillStyle,b.S={fillStyle:c.fillStyle})}\nfunction Qi(b,c){var d=b.c,e=b.ba;e?(e.lineCap!=c.lineCap&&(e.lineCap=d.lineCap=c.lineCap),Ef&&!Ma(e.lineDash,c.lineDash)&&d.setLineDash(e.lineDash=c.lineDash),e.lineJoin!=c.lineJoin&&(e.lineJoin=d.lineJoin=c.lineJoin),e.lineWidth!=c.lineWidth&&(e.lineWidth=d.lineWidth=c.lineWidth),e.miterLimit!=c.miterLimit&&(e.miterLimit=d.miterLimit=c.miterLimit),e.strokeStyle!=c.strokeStyle&&(e.strokeStyle=d.strokeStyle=c.strokeStyle)):(d.lineCap=c.lineCap,Ef&&d.setLineDash(c.lineDash),d.lineJoin=c.lineJoin,d.lineWidth=\nc.lineWidth,d.miterLimit=c.miterLimit,d.strokeStyle=c.strokeStyle,b.ba={lineCap:c.lineCap,lineDash:c.lineDash,lineJoin:c.lineJoin,lineWidth:c.lineWidth,miterLimit:c.miterLimit,strokeStyle:c.strokeStyle})}\np.Ga=function(b,c){if(b){var d=b.ga();this.b={fillStyle:yd(d?d:ui)}}else this.b=null;if(c){var d=c.ga(),e=c.Da,f=c.getLineDash(),g=c.Ea,h=c.ha(),k=c.Fa;this.a={lineCap:void 0!==e?e:\"round\",lineDash:f?f:vi,lineJoin:void 0!==g?g:\"round\",lineWidth:this.u*(void 0!==h?h:1),miterLimit:void 0!==k?k:10,strokeStyle:vd(d?d:wi)}}else this.a=null};\np.Ha=function(b){if(b){var c=b.jb(),d=b.T(1),e=b.ka(),f=b.Qa();this.B=c[0];this.K=c[1];this.D=f[1];this.g=d;this.o=b.l;this.ja=e[0];this.aa=e[1];this.ea=b.i;this.na=b.Z();this.h=b.gb;this.za=b.u;this.G=f[0]}else this.g=null};\np.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),this.i={fillStyle:yd(c?c:ui)}):this.i=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa;this.A={lineCap:void 0!==e?e:\"round\",lineDash:f?f:vi,lineJoin:void 0!==g?g:\"round\",lineWidth:void 0!==h?h:1,miterLimit:void 0!==d?d:10,strokeStyle:vd(c?c:wi)}}else this.A=null;var c=b.qd(),e=b.rd(),f=b.sd(),g=b.Z(),h=b.gb,d=b.sa,k=b.td();b=b.ud();this.P={font:void 0!==c?c:\"10px sans-serif\",textAlign:void 0!==k?k:\"center\",textBaseline:void 0!==\nb?b:\"middle\"};this.f=void 0!==d?d:\"\";this.pa=void 0!==e?this.u*e:0;this.Aa=void 0!==f?this.u*f:0;this.H=void 0!==g?g:0;this.j=this.u*(void 0!==h?h:1)}else this.f=\"\"};function Xi(b){Lg.call(this,b);this.K=zb()}M(Xi,Lg);\nXi.prototype.g=function(b,c,d){Yi(this,\"precompose\",d,b,void 0);var e=this.T();if(e){var f=c.extent,g=void 0!==f;if(g){var h=b.pixelRatio,k=b.size[0]*h,l=b.size[1]*h,m=b.viewState.rotation,n=bc(f),q=[f[2],f[3]],r=[f[2],f[1]],f=Xb(f);Kg(b.coordinateToPixelMatrix,n,n);Kg(b.coordinateToPixelMatrix,q,q);Kg(b.coordinateToPixelMatrix,r,r);Kg(b.coordinateToPixelMatrix,f,f);d.save();xi(d,-m,k/2,l/2);d.beginPath();d.moveTo(n[0]*h,n[1]*h);d.lineTo(q[0]*h,q[1]*h);d.lineTo(r[0]*h,r[1]*h);d.lineTo(f[0]*h,f[1]*\nh);d.clip();xi(d,m,k/2,l/2)}h=this.D;k=d.globalAlpha;d.globalAlpha=c.opacity;d.drawImage(e,0,0,+e.width,+e.height,Math.round(h[12]),Math.round(h[13]),Math.round(e.width*h[0]),Math.round(e.height*h[5]));d.globalAlpha=k;g&&d.restore()}Yi(this,\"postcompose\",d,b,void 0)};\nfunction Yi(b,c,d,e,f){var g=b.a;if(nb(g,c)){var h=e.size[0]*e.pixelRatio,k=e.size[1]*e.pixelRatio,l=e.viewState.rotation;xi(d,-l,h/2,k/2);b=void 0!==f?f:Zi(b,e,0);b=new Mi(d,e.pixelRatio,e.extent,b,e.viewState.rotation);S(g,new Fg(c,g,b,e,d,null));xi(d,l,h/2,k/2)}}function Zi(b,c,d){var e=c.viewState,f=c.pixelRatio;return Ig(b.K,f*c.size[0]/2,f*c.size[1]/2,f/e.resolution,-f/e.resolution,-e.rotation,-e.center[0]+d,-e.center[1])};var $i=[\"Polygon\",\"LineString\",\"Image\",\"Text\"];function aj(b,c,d){this.aa=b;this.P=c;this.c=null;this.g=0;this.resolution=d;this.D=this.K=null;this.b=[];this.coordinates=[];this.ba=zb();this.a=[];this.S=[];this.Y=zb();this.ja=zb()}M(aj,Eg);\nfunction bj(b,c,d,e,f,g){var h=b.coordinates.length,k=b.Kb(),l=[c[d],c[d+1]],m=[NaN,NaN],n=!0,q,r,u;for(q=d+f;q<e;q+=f){m[0]=c[q];m[1]=c[q+1];u=k[1];var w=k[2],y=k[3],z=m[0],D=m[1],t=0;z<k[0]?t=t|16:z>w&&(t=t|4);D<u?t|=8:D>y&&(t|=2);0===t&&(t=1);u=t;u!==r?(n&&(b.coordinates[h++]=l[0],b.coordinates[h++]=l[1]),b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):1===u?(b.coordinates[h++]=m[0],b.coordinates[h++]=m[1],n=!1):n=!0;l[0]=m[0];l[1]=m[1];r=u}q===d+f&&(b.coordinates[h++]=l[0],b.coordinates[h++]=\nl[1]);g&&(b.coordinates[h++]=c[d],b.coordinates[h++]=c[d+1]);return h}function cj(b,c){b.K=[0,c,0];b.b.push(b.K);b.D=[0,c,0];b.a.push(b.D)}\nfunction dj(b,c,d,e,f,g,h,k,l){var m;Jg(e,b.ba)?m=b.S:(m=Ac(b.coordinates,0,b.coordinates.length,2,e,b.S),Cb(b.ba,e));e=!$a(g);var n=0,q=h.length,r=0,u,w=b.Y;b=b.ja;for(var y,z,D,t;n<q;){var v=h[n],B,E,C,G;switch(v[0]){case 0:r=v[1];e&&g[I(r).toString()]||!r.M()?n=v[2]:void 0===l||ac(l,r.M().C())?++n:n=v[2];break;case 1:c.beginPath();++n;break;case 2:r=v[1];u=m[r];v=m[r+1];D=m[r+2]-u;r=m[r+3]-v;c.arc(u,v,Math.sqrt(D*D+r*r),0,2*Math.PI,!0);++n;break;case 3:c.closePath();++n;break;case 4:r=v[1];u=v[2];\nB=v[3];C=v[4]*d;var J=v[5]*d,A=v[6];E=v[7];var H=v[8],O=v[9];D=v[11];t=v[12];var P=v[13],L=v[14];for(v[10]&&(D+=f);r<u;r+=2){v=m[r]-C;G=m[r+1]-J;P&&(v=Math.round(v),G=Math.round(G));if(1!=t||0!==D){var K=v+C,fa=G+J;Ig(w,K,fa,t,t,D,-K,-fa);c.transform(w[0],w[1],w[4],w[5],w[12],w[13])}K=c.globalAlpha;1!=E&&(c.globalAlpha=K*E);var fa=L+H>B.width?B.width-H:L,ra=A+O>B.height?B.height-O:A;c.drawImage(B,H,O,fa,ra,v,G,fa*d,ra*d);1!=E&&(c.globalAlpha=K);if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],\nb[12],b[13])}++n;break;case 5:r=v[1];u=v[2];C=v[3];J=v[4]*d;A=v[5]*d;D=v[6];t=v[7]*d;B=v[8];for(E=v[9];r<u;r+=2){v=m[r]+J;G=m[r+1]+A;if(1!=t||0!==D)Ig(w,v,G,t,t,D,-v,-G),c.transform(w[0],w[1],w[4],w[5],w[12],w[13]);H=C.split(\"\\n\");O=H.length;1<O?(P=Math.round(1.5*c.measureText(\"M\").width),G-=(O-1)/2*P):P=0;for(L=0;L<O;L++)K=H[L],E&&c.strokeText(K,v,G),B&&c.fillText(K,v,G),G+=P;if(1!=t||0!==D)Eb(w,b),c.transform(b[0],b[1],b[4],b[5],b[12],b[13])}++n;break;case 6:if(void 0!==k&&(r=v[1],r=k(r)))return r;\n++n;break;case 7:c.fill();++n;break;case 8:r=v[1];u=v[2];v=m[r];G=m[r+1];D=v+.5|0;t=G+.5|0;if(D!==y||t!==z)c.moveTo(v,G),y=D,z=t;for(r+=2;r<u;r+=2)if(v=m[r],G=m[r+1],D=v+.5|0,t=G+.5|0,D!==y||t!==z)c.lineTo(v,G),y=D,z=t;++n;break;case 9:c.fillStyle=v[1];++n;break;case 10:y=void 0!==v[7]?v[7]:!0;z=v[2];c.strokeStyle=v[1];c.lineWidth=y?z*d:z;c.lineCap=v[3];c.lineJoin=v[4];c.miterLimit=v[5];Ef&&c.setLineDash(v[6]);z=y=NaN;++n;break;case 11:c.font=v[1];c.textAlign=v[2];c.textBaseline=v[3];++n;break;case 12:c.stroke();\n++n;break;default:++n}}}function ej(b){var c=b.a;c.reverse();var d,e=c.length,f,g,h=-1;for(d=0;d<e;++d)if(f=c[d],g=f[0],6==g)h=d;else if(0==g){f[2]=d;f=b.a;for(g=d;h<g;){var k=f[h];f[h]=f[g];f[g]=k;++h;--g}h=-1}}function fj(b,c){b.K[2]=b.b.length;b.K=null;b.D[2]=b.a.length;b.D=null;var d=[6,c];b.b.push(d);b.a.push(d)}aj.prototype.qb=pa;aj.prototype.Kb=function(){return this.P};\nfunction gj(b,c,d){aj.call(this,b,c,d);this.i=this.G=null;this.B=this.w=this.H=this.u=this.s=this.o=this.A=this.j=this.l=this.h=this.f=void 0}M(gj,aj);gj.prototype.$a=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};\ngj.prototype.Za=function(b,c){if(this.i){cj(this,c);var d=b.a,e=this.coordinates.length,d=bj(this,d,0,d.length,b.b,!1);this.b.push([4,e,d,this.i,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);this.a.push([4,e,d,this.G,this.f,this.h,this.l,this.j,this.A,this.o,this.s,this.u,this.H,this.w,this.B]);fj(this,c)}};gj.prototype.qb=function(){ej(this);this.h=this.f=void 0;this.i=this.G=null;this.B=this.w=this.u=this.s=this.o=this.A=this.j=this.H=this.l=void 0};\ngj.prototype.Ha=function(b){var c=b.jb(),d=b.Qa(),e=b.Xb(1),f=b.T(1),g=b.ka();this.f=c[0];this.h=c[1];this.G=e;this.i=f;this.l=d[1];this.j=b.l;this.A=g[0];this.o=g[1];this.s=b.i;this.u=b.Z();this.H=b.gb;this.w=b.u;this.B=d[0]};function hj(b,c,d){aj.call(this,b,c,d);this.f={Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,Sb:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(hj,aj);\nfunction ij(b,c,d,e,f){var g=b.coordinates.length;c=bj(b,c,d,e,f,!1);g=[8,g,c];b.b.push(g);b.a.push(g);return e}p=hj.prototype;p.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};\nfunction jj(b){var c=b.f,d=c.strokeStyle,e=c.lineCap,f=c.lineDash,g=c.lineJoin,h=c.lineWidth,k=c.miterLimit;c.Ya==d&&c.Ta==e&&Ma(c.Ua,f)&&c.Va==g&&c.Wa==h&&c.Xa==k||(c.Sb!=b.coordinates.length&&(b.b.push([12]),c.Sb=b.coordinates.length),b.b.push([10,d,h,e,g,k,f],[1]),c.Ya=d,c.Ta=e,c.Ua=f,c.Va=g,c.Wa=h,c.Xa=k)}\np.pc=function(b,c){var d=this.f,e=d.lineWidth;void 0!==d.strokeStyle&&void 0!==e&&(jj(this),cj(this,c),this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]),d=b.a,ij(this,d,0,d.length,b.b),this.a.push([12]),fj(this,c))};\np.qc=function(b,c){var d=this.f,e=d.lineWidth;if(void 0!==d.strokeStyle&&void 0!==e){jj(this);cj(this,c);this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash],[1]);var d=b.ab(),e=b.a,f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=ij(this,e,g,d[h],f);this.a.push([12]);fj(this,c)}};p.qb=function(){this.f.Sb!=this.coordinates.length&&this.b.push([12]);ej(this);this.f=null};\np.Ga=function(b,c){var d=c.ga();this.f.strokeStyle=vd(d?d:wi);d=c.Da;this.f.lineCap=void 0!==d?d:\"round\";d=c.getLineDash();this.f.lineDash=d?d:vi;d=c.Ea;this.f.lineJoin=void 0!==d?d:\"round\";d=c.ha();this.f.lineWidth=void 0!==d?d:1;d=c.Fa;this.f.miterLimit=void 0!==d?d:10;this.f.lineWidth>this.g&&(this.g=this.f.lineWidth,this.c=null)};\nfunction kj(b,c,d){aj.call(this,b,c,d);this.f={mc:void 0,Ya:void 0,Ta:void 0,Ua:null,Va:void 0,Wa:void 0,Xa:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}M(kj,aj);\nfunction lj(b,c,d,e,f){var g=b.f,h=[1];b.b.push(h);b.a.push(h);var k,h=0;for(k=e.length;h<k;++h){var l=e[h],m=b.coordinates.length;d=bj(b,c,d,l,f,!0);d=[8,m,d];m=[3];b.b.push(d,m);b.a.push(d,m);d=l}c=[7];b.a.push(c);void 0!==g.fillStyle&&b.b.push(c);void 0!==g.strokeStyle&&(g=[12],b.b.push(g),b.a.push(g));return d}p=kj.prototype;\np.nc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var f=b.a,e=this.coordinates.length;bj(this,f,0,f.length,b.b,!1);f=[1];e=[2,e];this.b.push(f,e);this.a.push(f,e);e=[7];this.a.push(e);void 0!==d.fillStyle&&this.b.push(e);void 0!==d.strokeStyle&&(d=[12],this.b.push(d),this.a.push(d));fj(this,c)}};\np.sc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e)mj(this),cj(this,c),this.a.push([9,vd(ui)]),void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]),d=b.ab(),e=Vc(b),lj(this,e,0,d,b.b),fj(this,c)};\np.rc=function(b,c){var d=this.f,e=d.strokeStyle;if(void 0!==d.fillStyle||void 0!==e){mj(this);cj(this,c);this.a.push([9,vd(ui)]);void 0!==d.strokeStyle&&this.a.push([10,d.strokeStyle,d.lineWidth,d.lineCap,d.lineJoin,d.miterLimit,d.lineDash]);var d=b.c,e=Vi(b),f=b.b,g=0,h,k;h=0;for(k=d.length;h<k;++h)g=lj(this,e,g,d[h],f);fj(this,c)}};p.qb=function(){ej(this);this.f=null;var b=this.aa;if(0!==b){var c=this.coordinates,d,e;d=0;for(e=c.length;d<e;++d)c[d]=b*Math.round(c[d]/b)}};\np.Kb=function(){this.c||(this.c=Mb(this.P),0<this.g&&Lb(this.c,this.resolution*(this.g+1)/2,this.c));return this.c};\np.Ga=function(b,c){var d=this.f;if(b){var e=b.ga();d.fillStyle=yd(e?e:ui)}else d.fillStyle=void 0;c?(e=c.ga(),d.strokeStyle=vd(e?e:wi),e=c.Da,d.lineCap=void 0!==e?e:\"round\",e=c.getLineDash(),d.lineDash=e?e.slice():vi,e=c.Ea,d.lineJoin=void 0!==e?e:\"round\",e=c.ha(),d.lineWidth=void 0!==e?e:1,e=c.Fa,d.miterLimit=void 0!==e?e:10,d.lineWidth>this.g&&(this.g=d.lineWidth,this.c=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)};\nfunction mj(b){var c=b.f,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,l=c.miterLimit;void 0!==d&&c.mc!=d&&(b.b.push([9,d]),c.mc=c.fillStyle);void 0===e||c.Ya==e&&c.Ta==f&&c.Ua==g&&c.Va==h&&c.Wa==k&&c.Xa==l||(b.b.push([10,e,k,f,h,l,g]),c.Ya=e,c.Ta=f,c.Ua=g,c.Va=h,c.Wa=k,c.Xa=l)}function nj(b,c,d){aj.call(this,b,c,d);this.w=this.H=this.u=null;this.i=\"\";this.s=this.o=this.A=this.j=0;this.l=this.h=this.f=null}M(nj,aj);\nfunction oj(b,c,d,e,f){if(\"\"!==b.i&&b.l&&(b.f||b.h)){if(b.f){var g=b.f,h=b.u;if(!h||h.fillStyle!=g.fillStyle){var k=[9,g.fillStyle];b.b.push(k);b.a.push(k);h?h.fillStyle=g.fillStyle:b.u={fillStyle:g.fillStyle}}}b.h&&(g=b.h,h=b.H,h&&h.lineCap==g.lineCap&&h.lineDash==g.lineDash&&h.lineJoin==g.lineJoin&&h.lineWidth==g.lineWidth&&h.miterLimit==g.miterLimit&&h.strokeStyle==g.strokeStyle||(k=[10,g.strokeStyle,g.lineWidth,g.lineCap,g.lineJoin,g.miterLimit,g.lineDash,!1],b.b.push(k),b.a.push(k),h?(h.lineCap=\ng.lineCap,h.lineDash=g.lineDash,h.lineJoin=g.lineJoin,h.lineWidth=g.lineWidth,h.miterLimit=g.miterLimit,h.strokeStyle=g.strokeStyle):b.H={lineCap:g.lineCap,lineDash:g.lineDash,lineJoin:g.lineJoin,lineWidth:g.lineWidth,miterLimit:g.miterLimit,strokeStyle:g.strokeStyle}));g=b.l;h=b.w;h&&h.font==g.font&&h.textAlign==g.textAlign&&h.textBaseline==g.textBaseline||(k=[11,g.font,g.textAlign,g.textBaseline],b.b.push(k),b.a.push(k),h?(h.font=g.font,h.textAlign=g.textAlign,h.textBaseline=g.textBaseline):b.w=\n{font:g.font,textAlign:g.textAlign,textBaseline:g.textBaseline});cj(b,f);g=b.coordinates.length;c=bj(b,c,0,d,e,!1);c=[5,g,c,b.i,b.j,b.A,b.o,b.s,!!b.f,!!b.h];b.b.push(c);b.a.push(c);fj(b,f)}}\nnj.prototype.xa=function(b){if(b){var c=b.Ka();c?(c=c.ga(),c=yd(c?c:ui),this.f?this.f.fillStyle=c:this.f={fillStyle:c}):this.f=null;var d=b.va();if(d){var c=d.ga(),e=d.Da,f=d.getLineDash(),g=d.Ea,h=d.ha(),d=d.Fa,e=void 0!==e?e:\"round\",f=f?f.slice():vi,g=void 0!==g?g:\"round\",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vd(c?c:wi);if(this.h){var k=this.h;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.h={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.h=\nnull;var l=b.qd(),c=b.rd(),e=b.sd(),f=b.Z(),h=b.gb,d=b.sa,g=b.td(),k=b.ud();b=void 0!==l?l:\"10px sans-serif\";g=void 0!==g?g:\"center\";k=void 0!==k?k:\"middle\";this.l?(l=this.l,l.font=b,l.textAlign=g,l.textBaseline=k):this.l={font:b,textAlign:g,textBaseline:k};this.i=void 0!==d?d:\"\";this.j=void 0!==c?c:0;this.A=void 0!==e?e:0;this.o=void 0!==f?f:0;this.s=void 0!==h?h:1}else this.i=\"\"};function pj(b,c,d,e){this.o=b;this.h=c;this.A=d;this.l=e;this.b={};this.i=rf(1,1);this.j=zb()}\nfunction qj(b){for(var c in b.b){var d=b.b[c],e;for(e in d)d[e].qb()}}pj.prototype.g=function(b,c,d,e,f){var g=this.j;Ig(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.l&&(k=Jb(),Kb(k,b),Lb(k,c*this.l,k));return rj(this,h,g,d,e,function(b){if(0<h.getImageData(0,0,1,1).data[3]){if(b=f(b))return b;h.clearRect(0,0,1,1)}},k)};\npj.prototype.a=function(b,c){var d=void 0!==b?b.toString():\"0\",e=this.b[d];void 0===e&&(e={},this.b[d]=e);d=e[c];void 0===d&&(d=new sj[c](this.o,this.h,this.A),e[c]=d);return d};pj.prototype.c=function(){return $a(this.b)};\npj.prototype.f=function(b,c,d,e,f,g){var h=Object.keys(this.b).map(Number);h.sort(Ha);if(!1!==g){var k=this.h;g=k[0];var l=k[1],m=k[2],k=k[3];g=[g,l,g,k,m,k,m,l];Ac(g,0,8,2,d,g);b.save();b.beginPath();b.moveTo(g[0],g[1]);b.lineTo(g[2],g[3]);b.lineTo(g[4],g[5]);b.lineTo(g[6],g[7]);b.closePath();b.clip()}var n,q;g=0;for(l=h.length;g<l;++g)for(n=this.b[h[g].toString()],m=0,k=$i.length;m<k;++m)q=n[$i[m]],void 0!==q&&dj(q,b,c,d,e,f,q.b,void 0);b.restore()};\nfunction rj(b,c,d,e,f,g,h){var k=Object.keys(b.b).map(Number);k.sort(function(b,c){return c-b});var l,m,n,q,r;l=0;for(m=k.length;l<m;++l)for(q=b.b[k[l].toString()],n=$i.length-1;0<=n;--n)if(r=q[$i[n]],void 0!==r&&(r=dj(r,c,1,d,e,f,r.a,g,h)))return r}var sj={Image:gj,LineString:hj,Polygon:kj,Text:nj};function tj(b,c){return I(b)-I(c)}function uj(b,c){var d=.5*b/c;return d*d}function vj(b,c,d,e,f,g){var h=!1,k,l;if(k=d.T())l=k.rb(),2==l||3==l?k.Xc(f,g):(0==l&&k.load(),k.Bc(f,g),h=!0);if(f=(0,d.b)(c))e=f.Ob(e),(0,wj[e.U()])(b,e,d,c);return h}\nvar wj={Point:function(b,c,d,e){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,\"Image\");g.Ha(f);g.$a(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,c.a,2,2,e)},LineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,\"LineString\");g.Ga(null,f);g.pc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,Ti(c),2,2,e)},Polygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,\"Polygon\");h.Ga(f,g);h.sc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,Wc(c),2,2,e)},MultiPoint:function(b,c,d,\ne){var f=d.T();if(f){if(2!=f.rb())return;var g=b.a(d.a,\"Image\");g.Ha(f);g.Za(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),d=c.a,oj(b,d,d.length,c.b,e)},MultiLineString:function(b,c,d,e){var f=d.va();if(f){var g=b.a(d.a,\"LineString\");g.Ga(null,f);g.qc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),c=Ui(c),oj(b,c,c.length,2,e)},MultiPolygon:function(b,c,d,e){var f=d.Ka(),g=d.va();if(g||f){var h=b.a(d.a,\"Polygon\");h.Ga(f,g);h.rc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),c=Wi(c),oj(b,c,c.length,2,e)},GeometryCollection:function(b,\nc,d,e){c=c.a;var f,g;f=0;for(g=c.length;f<g;++f)(0,wj[c[f].U()])(b,c[f],d,e)},Circle:function(b,c,d,e){var f=d.Ka(),g=d.va();if(f||g){var h=b.a(d.a,\"Polygon\");h.Ga(f,g);h.nc(c,e)}if(f=d.sa)b=b.a(d.a,\"Text\"),b.xa(f),oj(b,c.a.slice(0,c.b),2,2,e)}};var xj=!((W(\"Chrome\")||W(\"CriOS\"))&&!W(\"Opera\")&&!W(\"OPR\")&&!W(\"Edge\"))||W(\"iPhone\")&&!W(\"iPod\")&&!W(\"iPad\")||W(\"iPad\")||W(\"iPod\");function yj(b,c,d,e){b=d-b;c=e-c;var f=Math.sqrt(b*b+c*c);return[Math.round(d+b/f),Math.round(e+c/f)]}\nfunction zj(b,c,d,e,f,g,h,k,l,m,n){var q=rf(Math.round(d*b),Math.round(d*c));if(0===l.length)return q.canvas;q.scale(d,d);var r=Jb();l.forEach(function(b){Sb(r,b.extent)});var u=rf(Math.round(d*Vb(r)/e),Math.round(d*Wb(r)/e)),w=d/e;l.forEach(function(b){u.drawImage(b.image,m,m,b.image.width-2*m,b.image.height-2*m,(b.extent[0]-r[0])*w,-(b.extent[3]-r[3])*w,Vb(b.extent)*w,Wb(b.extent)*w)});var y=bc(h);k.c.forEach(function(b){var c=b.source,f=b.target,h=c[1][0],k=c[1][1],l=c[2][0],m=c[2][1];b=(f[0][0]-\ny[0])/g;var w=-(f[0][1]-y[1])/g,n=(f[1][0]-y[0])/g,A=-(f[1][1]-y[1])/g,H=(f[2][0]-y[0])/g,O=-(f[2][1]-y[1])/g,f=c[0][0],c=c[0][1],h=h-f,k=k-c,l=l-f,m=m-c;a:{h=[[h,k,0,0,n-b],[l,m,0,0,H-b],[0,0,h,k,A-w],[0,0,l,m,O-w]];k=h.length;for(l=0;l<k;l++){for(var m=l,P=Math.abs(h[l][l]),L=l+1;L<k;L++){var K=Math.abs(h[L][l]);K>P&&(P=K,m=L)}if(0===P){h=null;break a}P=h[m];h[m]=h[l];h[l]=P;for(m=l+1;m<k;m++)for(P=-h[m][l]/h[l][l],L=l;L<k+1;L++)h[m][L]=l==L?0:h[m][L]+P*h[l][L]}l=Array(k);for(m=k-1;0<=m;m--)for(l[m]=\nh[m][k]/h[m][m],P=m-1;0<=P;P--)h[P][k]-=h[P][m]*l[m];h=l}h&&(q.save(),q.beginPath(),xj?(l=(b+n+H)/3,m=(w+A+O)/3,k=yj(l,m,b,w),n=yj(l,m,n,A),H=yj(l,m,H,O),q.moveTo(k[0],k[1]),q.lineTo(n[0],n[1]),q.lineTo(H[0],H[1])):(q.moveTo(b,w),q.lineTo(n,A),q.lineTo(H,O)),q.closePath(),q.clip(),q.transform(h[0],h[2],h[1],h[3],b,w),q.translate(r[0]-f,r[3]-c),q.scale(e/d,-e/d),q.drawImage(u.canvas,0,0),q.restore())});n&&(q.save(),q.strokeStyle=\"black\",q.lineWidth=1,k.c.forEach(function(b){var c=b.target;b=(c[0][0]-\ny[0])/g;var d=-(c[0][1]-y[1])/g,e=(c[1][0]-y[0])/g,f=-(c[1][1]-y[1])/g,h=(c[2][0]-y[0])/g,c=-(c[2][1]-y[1])/g;q.beginPath();q.moveTo(b,d);q.lineTo(e,f);q.lineTo(h,c);q.closePath();q.stroke()}),q.restore());return q.canvas};function Aj(b,c,d,e,f){this.f=b;this.g=c;var g={},h=xc(this.g,this.f);this.b=function(b){var c=b[0]+\"/\"+b[1];g[c]||(g[c]=h(b));return g[c]};this.h=e;this.A=f*f;this.c=[];this.i=!1;this.j=this.f.a&&!!e&&!!this.f.C()&&Vb(e)==Vb(this.f.C());this.a=this.f.C()?Vb(this.f.C()):null;this.l=this.g.C()?Vb(this.g.C()):null;b=bc(d);c=[d[2],d[3]];e=[d[2],d[1]];d=Xb(d);f=this.b(b);var k=this.b(c),l=this.b(e),m=this.b(d);Bj(this,b,c,e,d,f,k,l,m,10);if(this.i){var n=Infinity;this.c.forEach(function(b){n=Math.min(n,\nb.source[0][0],b.source[1][0],b.source[2][0])});this.c.forEach(function(b){if(Math.max(b.source[0][0],b.source[1][0],b.source[2][0])-n>this.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-n>this.a/2&&(c[0][0]-=this.a);c[1][0]-n>this.a/2&&(c[1][0]-=this.a);c[2][0]-n>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])<this.a/2&&(b.source=c)}},this)}g={}}\nfunction Bj(b,c,d,e,f,g,h,k,l,m){var n=Ib([g,h,k,l]),q=b.a?Vb(n)/b.a:null,r=b.f.a&&.5<q&&1>q,u=!1;if(0<m){if(b.g.f&&b.l)var w=Ib([c,d,e,f]),u=u|.25<Vb(w)/b.l;!r&&b.f.f&&q&&(u|=.25<q)}if(u||!b.h||ac(n,b.h)){if(!(u||isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(k[0])&&isFinite(k[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(q=b.b([(c[0]+e[0])/2,(c[1]+e[1])/2]),n=r?(Ea(g[0],b.a)+Ea(k[0],b.a))/2-Ea(q[0],b.a):(g[0]+k[0])/2-q[0],q=(g[1]+k[1])/2-q[1],\nu=n*n+q*q>b.A),u)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],n=b.b(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],u=b.b(q),Bj(b,c,d,r,q,g,h,n,u,m-1),Bj(b,q,r,e,f,u,n,k,l,m-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],n=b.b(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],u=b.b(q),Bj(b,c,r,q,f,g,n,u,l,m-1),Bj(b,r,d,e,q,n,h,k,u,m-1));return}if(r){if(!b.j)return;b.i=!0}b.c.push({source:[g,k,l],target:[c,e,f]});b.c.push({source:[g,h,k],target:[c,d,e]})}}\nfunction Cj(b){var c=Jb();b.c.forEach(function(b){b=b.source;Kb(c,b[0]);Kb(c,b[1]);Kb(c,b[2])});return c};function Dj(b){T.call(this);this.g=void 0;this.a=\"geometry\";this.h=null;this.c=void 0;this.b=null;Q(this,rb(this.a),this.nb,this);void 0!==b&&(b instanceof zc||!b?Ej(this,b):this.l(b))}M(Dj,T);p=Dj.prototype;p.clone=function(){var b=new Dj(this.za());Fj(b,this.a);var c=this.M();c&&Ej(b,c.clone());if(c=this.h)b.h=c,b.c=c?Gj(c):void 0,b.v();return b};p.M=function(){return this.get(this.a)};p.La=function(){return this.g};p.zd=function(){this.v()};\np.nb=function(){this.b&&(N(this.b),this.b=null);var b=this.M();b&&(this.b=Q(b,\"change\",this.zd,this));this.v()};function Ej(b,c){b.set(b.a,c)}function Fj(b,c){gb(b,rb(b.a),b.nb,b);b.a=c;Q(b,rb(b.a),b.nb,b);b.nb()}function Gj(b){if(!ga(b)){var c;c=Array.isArray(b)?b:[b];b=function(){return c}}return b};function Hj(b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open(\"GET\",ga(b)?b(e,f,g):b,!0);\"arraybuffer\"==c.U()&&(h.responseType=\"arraybuffer\");h.onload=function(){if(200<=h.status&&300>h.status){var b=c.U(),e;\"json\"==b||\"text\"==b?e=h.responseText:\"xml\"==b?(e=h.responseXML,e||(b=h.responseText,e=(new DOMParser).parseFromString(b,\"application/xml\"))):\"arraybuffer\"==b&&(e=h.response);e&&d.call(this,c.b(e,{featureProjection:g}),c.f(Ij(e)))}}.bind(this);h.send()}}\nfunction Jj(b,c){return Hj(b,c,function(b){this.Db(b)})};function Kj(){return[[-Infinity,-Infinity,Infinity,Infinity]]};var Lj;\n(function(){var b={uc:{}};(function(){function c(b,d){if(!(this instanceof c))return new c(b,d);this.Bb=Math.max(4,b||9);this.ec=Math.max(2,Math.ceil(.4*this.Bb));d&&this.ed(d);this.clear()}function d(b,c){b.bbox=e(b,0,b.children.length,c)}function e(b,c,d,e){for(var g=[Infinity,Infinity,-Infinity,-Infinity],h;c<d;c++)h=b.children[c],f(g,b.$?e(h):h.bbox);return g}function f(b,c){b[0]=Math.min(b[0],c[0]);b[1]=Math.min(b[1],c[1]);b[2]=Math.max(b[2],c[2]);b[3]=Math.max(b[3],c[3])}function g(b,c){return b.bbox[0]-\nc.bbox[0]}function h(b,c){return b.bbox[1]-c.bbox[1]}function k(b){return(b[2]-b[0])*(b[3]-b[1])}function l(b){return b[2]-b[0]+(b[3]-b[1])}function m(b,c){return b[0]<=c[0]&&b[1]<=c[1]&&c[2]<=b[2]&&c[3]<=b[3]}function n(b,c){return c[0]<=b[2]&&c[1]<=b[3]&&c[2]>=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,l,m;d>c;){600<d-c&&(g=d-c+1,h=e-c+1,k=Math.log(g),\nl=.5*Math.exp(2*k/3),m=.5*Math.sqrt(k*l*(g-l)/g)*(0>h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*l/g+m)),h=Math.min(d,Math.floor(e+(g-h)*l/g+m)),r(b,k,h,e,f));g=b[e];h=c;l=d;u(b,c,e);for(0<f(b[d],g)&&u(b,c,d);h<l;){u(b,h,l);h++;for(l--;0>f(b[h],g);)h++;for(;0<f(b[l],g);)l--}0===f(b[c],g)?u(b,c,l):(l++,u(b,l,d));l<=e&&(c=l+1);e<=l&&(d=l-1)}}function u(b,c,d){var e=b[c];b[c]=b[d];b[d]=e}c.prototype={all:function(){return this.ac(this.data,[])},search:function(b){var c=this.data,d=[],e=this.da;if(!n(b,c.bbox))return d;\nfor(var f=[],g,h,k,l;c;){g=0;for(h=c.children.length;g<h;g++)k=c.children[g],l=c.$?e(k):k.bbox,n(b,l)&&(c.$?d.push(k):m(b,l)?this.ac(k,d):f.push(k));c=f.pop()}return d},load:function(b){if(!b||!b.length)return this;if(b.length<this.ec){for(var c=0,d=b.length;c<d;c++)this.Ca(b[c]);return this}b=this.cc(b.slice(),0,b.length-1,0);this.data.children.length?this.data.height===b.height?this.fc(this.data,b):(this.data.height<b.height&&(c=this.data,this.data=b,b=c),this.dc(b,this.data.height-b.height-1,!0)):\nthis.data=b;return this},Ca:function(b){b&&this.dc(b,this.data.height-1);return this},clear:function(){this.data={children:[],height:1,bbox:[Infinity,Infinity,-Infinity,-Infinity],$:!0};return this},remove:function(b){if(!b)return this;for(var c=this.data,d=this.da(b),e=[],f=[],g,h,k,l;c||e.length;){c||(c=e.pop(),h=e[e.length-1],g=f.pop(),l=!0);if(c.$&&(k=c.children.indexOf(b),-1!==k)){c.children.splice(k,1);e.push(c);this.dd(e);break}l||c.$||!m(c.bbox,d)?h?(g++,c=h.children[g],l=!1):c=null:(e.push(c),\nf.push(g),g=0,h=c,c=c.children[0])}return this},da:function(b){return b},Hb:function(b,c){return b[0]-c[0]},Ib:function(b,c){return b[1]-c[1]},toJSON:function(){return this.data},ac:function(b,c){for(var d=[];b;)b.$?c.push.apply(c,b.children):d.push.apply(d,b.children),b=d.pop();return c},cc:function(b,c,e,f){var g=e-c+1,h=this.Bb,k;if(g<=h)return k={children:b.slice(c,e+1),height:1,bbox:null,$:!0},d(k,this.da),k;f||(f=Math.ceil(Math.log(g)/Math.log(h)),h=Math.ceil(g/Math.pow(h,f-1)));k={children:[],\nheight:f,bbox:null,$:!1};var g=Math.ceil(g/h),h=g*Math.ceil(Math.sqrt(h)),l,m,n;for(q(b,c,e,h,this.Hb);c<=e;c+=h)for(m=Math.min(c+h-1,e),q(b,c,m,g,this.Ib),l=c;l<=m;l+=g)n=Math.min(l+g-1,m),k.children.push(this.cc(b,l,n,f-1));d(k,this.da);return k},cd:function(b,c,d,e){for(var f,g,h,l,m,n,q,r;;){e.push(c);if(c.$||e.length-1===d)break;q=r=Infinity;f=0;for(g=c.children.length;f<g;f++)h=c.children[f],m=k(h.bbox),n=h.bbox,n=(Math.max(n[2],b[2])-Math.min(n[0],b[0]))*(Math.max(n[3],b[3])-Math.min(n[1],\nb[1]))-m,n<r?(r=n,q=m<q?m:q,l=h):n===r&&m<q&&(q=m,l=h);c=l}return c},dc:function(b,c,d){var e=this.da;d=d?b.bbox:e(b);var e=[],g=this.cd(d,this.data,c,e);g.children.push(b);for(f(g.bbox,d);0<=c;)if(e[c].children.length>this.Bb)this.fd(e,c),c--;else break;this.$c(d,e,c)},fd:function(b,c){var e=b[c],f=e.children.length,g=this.ec;this.ad(e,g,f);f=this.bd(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height,bbox:null,$:!1};e.$&&(f.$=!0);d(e,this.da);d(f,this.da);c?b[c-1].children.push(f):\nthis.fc(e,f)},fc:function(b,c){this.data={children:[b,c],height:b.height+1,bbox:null,$:!1};d(this.data,this.da)},bd:function(b,c,d){var f,g,h,l,m,n,q;m=n=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.da),h=e(b,f,d,this.da),l=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),l<m?(m=l,q=f,n=g<n?g:n):l===m&&g<n&&(n=g,q=f);return q},ad:function(b,c,d){var e=b.$?this.Hb:g,f=b.$?this.Ib:h,k=this.bc(b,c,d,e);c=this.bc(b,c,d,f);k<c&&b.children.sort(e)},\nbc:function(b,c,d,g){b.children.sort(g);g=this.da;var h=e(b,0,c,g),k=e(b,d-c,d,g),m=l(h)+l(k),n,q;for(n=c;n<d-c;n++)q=b.children[n],f(h,b.$?g(q):q.bbox),m+=l(h);for(n=d-c-1;n>=c;n--)q=b.children[n],f(k,b.$?g(q):q.bbox),m+=l(k);return m},$c:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},dd:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0<c?(e=b[c-1].children,e.splice(e.indexOf(b[c]),1)):this.clear():d(b[c],this.da)},ed:function(b){var c=[\"return a\",\" - b\",\";\"];this.Hb=new Function(\"a\",\n\"b\",c.join(b[0]));this.Ib=new Function(\"a\",\"b\",c.join(b[1]));this.da=new Function(\"a\",\"return [a\"+b.join(\", a\")+\"];\")}};\"undefined\"!==typeof b?b.uc=c:\"undefined\"!==typeof self?self.a=c:window.a=c})();Lj=b.uc})();function Mj(b){this.a=Lj(b);this.b={}}p=Mj.prototype;p.Ca=function(b,c){var d=[b[0],b[1],b[2],b[3],c];this.a.Ca(d);this.b[I(c)]=d};p.load=function(b,c){for(var d=Array(c.length),e=0,f=c.length;e<f;e++){var g=b[e],h=c[e],g=[g[0],g[1],g[2],g[3],h];d[e]=g;this.b[I(h)]=g}this.a.load(d)};p.remove=function(b){b=I(b);var c=this.b[b];delete this.b[b];return null!==this.a.remove(c)};function Nj(b){return b.a.all().map(function(b){return b[4]})}\nfunction Oj(b,c){return b.a.search(c).map(function(b){return b[4]})}function Pj(b,c,d,e){return Qj(Oj(b,c),d,e)}function Qj(b,c,d){for(var e,f=0,g=b.length;f<g&&!(e=c.call(d,b[f]));f++);return e}p.clear=function(){this.a.clear();this.b={}};p.C=function(){return this.a.data.bbox};function Rj(b){b=b||{};De.call(this,{attributions:b.attributions,logo:b.logo,projection:void 0,state:\"ready\",wrapX:void 0!==b.wrapX?b.wrapX:!0});this.o=pa;this.D=b.format;this.u=b.url;void 0!==b.loader?this.o=b.loader:void 0!==this.u&&(this.o=Jj(this.u,this.D));this.G=void 0!==b.strategy?b.strategy:Kj;var c=void 0!==b.useSpatialIndex?b.useSpatialIndex:!0;this.R=c?new Mj:null;this.s=new Mj;this.ca={};this.b={};this.g={};this.h={};this.a=null;var d,e;b.features instanceof ld?(d=b.features,e=d.a):Array.isArray(b.features)&&\n(e=b.features);c||void 0!==d||(d=new ld(e));void 0!==e&&Sj(this,e);void 0!==d&&Tj(this,d)}M(Rj,De);p=Rj.prototype;p.Cb=function(b){var c=I(b).toString();if(Uj(this,c,b)){Vj(this,c,b);var d=b.M();d?(c=d.C(),this.R&&this.R.Ca(c,b)):this.ca[c]=b;S(this,new Wj(\"addfeature\",b))}this.v()};function Vj(b,c,d){b.h[c]=[Q(d,\"change\",b.xc,b),Q(d,\"propertychange\",b.xc,b)]}function Uj(b,c,d){var e=!0,f=d.La();void 0!==f?f.toString()in b.b?e=!1:b.b[f.toString()]=d:b.g[c]=d;return e}p.Db=function(b){Sj(this,b);this.v()};\nfunction Sj(b,c){var d,e,f,g,h=[],k=[],l=[];e=0;for(f=c.length;e<f;e++)g=c[e],d=I(g).toString(),Uj(b,d,g)&&k.push(g);e=0;for(f=k.length;e<f;e++){g=k[e];d=I(g).toString();Vj(b,d,g);var m=g.M();m?(d=m.C(),h.push(d),l.push(g)):b.ca[d]=g}b.R&&b.R.load(h,l);e=0;for(f=k.length;e<f;e++)S(b,new Wj(\"addfeature\",k[e]))}\nfunction Tj(b,c){var d=!1;Q(b,\"addfeature\",function(b){d||(d=!0,c.push(b.feature),d=!1)});Q(b,\"removefeature\",function(b){d||(d=!0,c.remove(b.feature),d=!1)});Q(c,\"add\",function(b){d||(b=b.element,d=!0,this.Cb(b),d=!1)},b);Q(c,\"remove\",function(b){if(!d){b=b.element;d=!0;var c=I(b).toString();c in this.ca?delete this.ca[c]:this.R&&this.R.remove(b);this.Yb(b);this.v();d=!1}},b);b.a=c}\np.clear=function(b){if(b){for(var c in this.h)this.h[c].forEach(N);this.a||(this.h={},this.b={},this.g={})}else if(this.R){b=this.Yb;Qj(Nj(this.R),b,this);for(var d in this.ca)this.Yb(this.ca[d])}this.a&&this.a.clear();this.R&&this.R.clear();this.s.clear();this.ca={};S(this,new Wj(\"clear\"));this.v()};p.od=function(b,c){if(this.R)return Qj(Nj(this.R),b,c);if(this.a)return nd(this.a,b,c)};function Xj(b,c,d,e){b.R?Pj(b.R,c,d,e):b.a&&nd(b.a,d,e)}\np.pe=function(){var b;this.a?b=this.a.a:this.R&&(b=Nj(this.R),$a(this.ca)||Ka(b,Za(this.ca)));return b};p.C=function(){return this.R.C()};\np.xc=function(b){b=b.target;var c=I(b).toString(),d=b.M();if(d)if(d=d.C(),c in this.ca)delete this.ca[c],this.R&&this.R.Ca(d,b);else{if(this.R){var e=this.R,f=I(b);Rb(e.b[f].slice(0,4),d)||(e.remove(b),e.Ca(d,b))}}else c in this.ca||(this.R&&this.R.remove(b),this.ca[c]=b);d=b.La();void 0!==d?(d=d.toString(),c in this.g?(delete this.g[c],this.b[d]=b):this.b[d]!==b&&(Yj(this,b),this.b[d]=b)):c in this.g||(Yj(this,b),this.g[c]=b);this.v();S(this,new Wj(\"changefeature\",b))};\nfunction Zj(b,c,d,e){var f=b.s;c=b.G(c,d);var g,h;g=0;for(h=c.length;g<h;++g){var k=c[g];Pj(f,k,function(b){return Nb(b.extent,k)})||(b.o.call(b,k,d,e),f.Ca(k,{extent:k.slice()}))}}p.Yb=function(b){var c=I(b).toString();this.h[c].forEach(N);delete this.h[c];var d=b.La();void 0!==d?delete this.b[d.toString()]:delete this.g[c];S(this,new Wj(\"removefeature\",b))};function Yj(b,c){for(var d in b.b)if(b.b[d]===c){delete b.b[d];break}}function Wj(b,c){R.call(this,b);this.feature=c}M(Wj,R);function ak(b){Xi.call(this,b);this.c=rf();this.b=null;this.j=Jb();this.h=zb()}M(ak,Xi);\nak.prototype.g=function(b,c,d){var e=b.pixelRatio,f=b.viewState,g=f.center,h=f.projection,k=f.rotation,l=b.size,m=Math.round(e*l[0]/2),n=Math.round(e*l[1]/2),q=e/f.resolution,r=this.a,u=r.V(),w=u.kb(h),f=Zi(this,b,0);Yi(this,\"precompose\",d,b,f);var l=d,r=nb(r,\"render\"),y,z,D,t;if(k||r){l=this.c;y=l.canvas;D=u.mb(e)/e;var v=d.canvas.width*D;z=d.canvas.height*D;t=Math.round(Math.sqrt(v*v+z*z));y.width!=t?y.width=y.height=t:l.clearRect(0,0,t,t);y=(t-v)/2/D;z=(t-z)/2/D;q*=D;m=Math.round(D*(m+y));n=Math.round(D*\n(n+z))}v=l.globalAlpha;l.globalAlpha=c.opacity;var B=u.la(h),E=this.b,C;c=u.Mb(h)&&1==c.opacity;c||(E.reverse(),C=[]);for(var G=0,J=E.length;G<J;++G){var A=E[G],H=A.L,O=Je(B,H,this.j),P=H[0],L=Xb(Je(B,Re(B,g,P))),H=Math.round(Vb(O)*q),K=Math.round(Wb(O)*q),fa=Math.round((O[0]-L[0])*q/H)*H+m+Math.round((L[0]-g[0])*q),O=Math.round((L[1]-O[3])*q/K)*K+n+Math.round((g[1]-L[1])*q);if(!c){L=[fa,O,fa+H,O+K];l.save();for(var ra=0,Wl=C.length;ra<Wl;++ra){var Xa=C[ra];ac(L,Xa)&&(l.beginPath(),l.moveTo(L[0],\nL[1]),l.lineTo(L[0],L[3]),l.lineTo(L[2],L[3]),l.lineTo(L[2],L[1]),l.moveTo(Xa[0],Xa[1]),l.lineTo(Xa[2],Xa[1]),l.lineTo(Xa[2],Xa[3]),l.lineTo(Xa[0],Xa[3]),l.closePath(),l.clip())}C.push(L)}P=Xe(u,P,e,h);l.drawImage(A.T(),w,w,P[0],P[1],fa,O,H,K);c||l.restore()}r&&(e=y-m/D+m,h=z-n/D+n,g=Ig(this.h,t/2-e,t/2-h,q,-q,-k,-g[0]+e/q,-g[1]-h/q),Yi(this,\"render\",l,b,g));(k||r)&&d.drawImage(l.canvas,-Math.round(y),-Math.round(z),t/D,t/D);l.globalAlpha=v;Yi(this,\"postcompose\",d,b,f)};\nak.prototype.i=function(b,c){function d(b){b=b.N();return 2==b||4==b||3==b&&!u}var e=b.pixelRatio,f=b.viewState,g=f.projection,h=this.a,k=h.V(),l=k.la(g),m=Qe(l,f.resolution),n=l.I(m),q=f.center;n==f.resolution?(q=Rg(q,n,b.size),f=Zb(q,n,f.rotation,b.size)):f=b.extent;void 0!==c.extent&&(f=$b(f,c.extent));if(f[2]<f[0]||f[3]<f[1])return!1;n=Me(l,f,n);q={};q[m]={};var r=this.l(k,g,q),u=ti(h),w=Jb(),y=new fd(0,0,0,0),z,D,t,v;for(t=n.a;t<=n.f;++t)for(v=n.b;v<=n.c;++v)z=Tg(k,m,t,v,e,g),!d(z)&&z.a&&(z=\nz.a),d(z)?q[m][z.L.toString()]=z:(D=Ie(l,z.L,r,y,w),D||(z=Le(l,z.L,y,w))&&r(m+1,z));r=Object.keys(q).map(Number);r.sort(Ha);var w=[],B,y=0;for(t=r.length;y<t;++y)for(B in z=r[y],v=q[z],v)z=v[B],2==z.N()&&w.push(z);this.b=w;Qg(b.usedTiles,k,m,n);Sg(b,k,l,e,g,f,m,h.get(\"preload\"));Ng(b,k);Pg(b,k);return!0};function bk(b){Xi.call(this,b);this.b=!1;this.w=-1;this.u=NaN;this.j=Jb();this.c=this.o=null;this.h=rf()}M(bk,Xi);\nbk.prototype.g=function(b,c,d){var e=b.extent,f=b.pixelRatio,g=c.eb?b.skippedFeatureUids:{},h=b.viewState,k=h.projection,h=h.rotation,l=k.C(),m=this.a.V(),n=Zi(this,b,0);Yi(this,\"precompose\",d,b,n);var q=this.c;if(q&&!q.c()){var r;nb(this.a,\"render\")?(this.h.canvas.width=d.canvas.width,this.h.canvas.height=d.canvas.height,r=this.h):r=d;var u=r.globalAlpha;r.globalAlpha=c.opacity;c=b.size[0]*f;var w=b.size[1]*f;xi(r,-h,c/2,w/2);q.f(r,f,n,h,g);if(m.j&&k.a&&!Nb(l,e)){for(var k=e[0],m=Vb(l),y=0;k<l[0];)--y,\nn=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k+=m;y=0;for(k=e[2];k>l[2];)++y,n=m*y,n=Zi(this,b,n),q.f(r,f,n,h,g),k-=m;n=Zi(this,b,0)}xi(r,h,c/2,w/2);r!=d&&(Yi(this,\"render\",r,b,n),d.drawImage(r.canvas,0,0));r.globalAlpha=u}Yi(this,\"postcompose\",d,b,n)};bk.prototype.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};bk.prototype.B=function(){Mg(this)};\nbk.prototype.i=function(b){function c(b){var c,e=b.c;e?c=e.call(b,m):(e=d.g)&&(c=e(b,m));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(r,b,c[f],uj(m,n),this.B,this)||e;else e=vj(r,b,c,uj(m,n),this.B,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var l=b.extent,k=b.viewState,f=k.projection,m=k.resolution,n=b.pixelRatio,g=d.f,q=d.a,h=d.get(\"renderOrder\");\nvoid 0===h&&(h=tj);l=Lb(l,q*m);q=k.projection.C();e.j&&k.projection.a&&!Nb(q,b.extent)&&(b=Math.max(Vb(l)/2,Vb(q)),l[0]=q[0]-b,l[2]=q[2]+b);if(!this.b&&this.u==m&&this.w==g&&this.o==h&&Nb(this.j,l))return!0;this.c=null;this.b=!1;var r=new pj(.5*m/n,l,m,d.a);Zj(e,l,m,f);if(h){var u=[];Xj(e,l,function(b){u.push(b)},this);u.sort(h);u.forEach(c,this)}else Xj(e,l,c,this);qj(r);this.u=m;this.w=g;this.o=h;this.j=l;this.c=r;return!0};function ck(b,c){var d=/\\{z\\}/g,e=/\\{x\\}/g,f=/\\{y\\}/g,g=/\\{-y\\}/g;return function(h){if(h)return b.replace(d,h[0].toString()).replace(e,h[1].toString()).replace(f,function(){return(-h[2]-1).toString()}).replace(g,function(){var b=c.a?c.a[h[0]]:null;return(b.c-b.b+1+h[2]).toString()})}}function dk(b,c){for(var d=b.length,e=Array(d),f=0;f<d;++f)e[f]=ck(b[f],c);return ek(e)}function ek(b){return 1===b.length?b[0]:function(c,d,e){if(c)return b[Ea((c[1]<<c[0])+c[2],b.length)](c,d,e)}}function fk(){};function gk(b){Ve.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tilePixelRatio:b.tilePixelRatio,wrapX:b.wrapX});this.tileLoadFunction=b.tileLoadFunction;this.tileUrlFunction=this.g?this.g.bind(this):fk;this.urls=null;if(b.urls){var c=b.urls;this.urls=c;hk(this,this.g?this.g.bind(this):dk(c,this.tileGrid))}else b.url&&this.s(b.url);b.tileUrlFunction&&hk(this,b.tileUrlFunction)}\nM(gk,Ve);gk.prototype.D=function(b){b=b.target;switch(b.N()){case 1:S(this,new Ze(\"tileloadstart\",b));break;case 2:S(this,new Ze(\"tileloadend\",b));break;case 3:S(this,new Ze(\"tileloaderror\",b))}};function hk(b,c){b.a.clear();b.tileUrlFunction=c;b.v()}\ngk.prototype.s=function(b){var c=[],d=/\\{(\\d)-(\\d)\\}/.exec(b)||/\\{([a-z])-([a-z])\\}/.exec(b);if(d){var e=d[2].charCodeAt(0),f;for(f=d[1].charCodeAt(0);f<=e;++f)c.push(b.replace(d[0],String.fromCharCode(f)))}else c.push(b);b=this.urls=c;hk(this,this.g?this.g.bind(this):dk(b,this.tileGrid))};gk.prototype.Yc=function(b,c,d){b=this.lb(b,c,d);we(this.a,b)&&this.a.get(b)};function ik(b,c){Zg.call(this,0,c);this.c=rf();rf();this.a=this.c.canvas;this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.className=\"ol-unselectable\";fe(b,this.a,0);this.b=!0;this.g=zb()}M(ik,Zg);ik.prototype.Jb=function(b){return b instanceof X?new ak(b):b instanceof Y?new bk(b):null};\nfunction jk(b,c,d){var e=b.h,f=b.c;if(nb(e,c)){var g=d.extent,h=d.pixelRatio,k=d.viewState.rotation,l=d.pixelRatio,m=d.viewState,n=m.resolution;b=Ig(b.g,b.a.width/2,b.a.height/2,l/n,-l/n,-m.rotation,-m.center[0],-m.center[1]);g=new Mi(f,h,g,b,k);S(e,new Fg(c,e,g,d,f,null))}}ik.prototype.U=function(){return\"canvas\"};\nik.prototype.sb=function(b){if(b){var c=this.c,d=b.pixelRatio,e=Math.round(b.size[0]*d),d=Math.round(b.size[1]*d);this.a.width!=e||this.a.height!=d?(this.a.width=e,this.a.height=d):c.clearRect(0,0,e,d);var f=b.viewState.rotation;$g(b);jk(this,\"precompose\",b);var g=b.layerStatesArray;Na(g);xi(c,f,e/2,d/2);var h=b.viewState.resolution,k,l,m,n;k=0;for(l=g.length;k<l;++k)n=g[k],m=n.layer,m=bh(this,m),Hg(n,h)&&\"ready\"==n.$b&&m.i(b,n)&&m.g(b,n,c);xi(c,-f,e/2,d/2);jk(this,\"postcompose\",b);this.b||(oe(this.a,\n!0),this.b=!0);ch(this,b);b.postRenderFunctions.push(ah)}else this.b&&(oe(this.a,!1),this.b=!1)};function kk(b,c){Lg.call(this,b);this.target=c}M(kk,Lg);kk.prototype.Gb=pa;kk.prototype.Kc=pa;function lk(b){var c=document.createElement(\"DIV\");c.style.position=\"absolute\";kk.call(this,b,c);this.c=!0;this.h=1;this.g=0;this.b={}}M(lk,kk);lk.prototype.Gb=function(){ee(this.target);this.g=0};\nlk.prototype.Lc=function(b,c){if(!c.visible)return this.c&&(oe(this.target,!1),this.c=!1),!0;var d=b.pixelRatio,e=b.viewState,f=e.projection,g=this.a,h=g.V(),k=h.la(f),l=h.kb(f),m=Qe(k,e.resolution),n=k.I(m),q=e.center,r;n==e.resolution?(q=Rg(q,n,b.size),r=Zb(q,n,e.rotation,b.size)):r=b.extent;void 0!==c.extent&&(r=$b(r,c.extent));var n=Me(k,r,n),u={};u[m]={};var w=this.l(h,f,u),y=ti(g),z=Jb(),D=new fd(0,0,0,0),t,v,B,E;for(B=n.a;B<=n.f;++B)for(E=n.b;E<=n.c;++E)t=Tg(h,m,B,E,d,f),v=t.N(),v=2==v||4==\nv||3==v&&!y,!v&&t.a&&(t=t.a),v=t.N(),2==v?u[m][t.L.toString()]=t:4==v||3==v&&!y||(v=Ie(k,t.L,w,D,z),v||(t=Le(k,t.L,D,z))&&w(m+1,t));var C;if(this.g!=h.f){for(C in this.b)y=this.b[+C],ge(y.target);this.b={};this.g=h.f}z=Object.keys(u).map(Number);z.sort(Ha);var w={},G;B=0;for(E=z.length;B<E;++B){C=z[B];C in this.b?y=this.b[C]:(y=Re(k,q,C),y=new mk(k,y),w[C]=!0,this.b[C]=y);C=u[C];for(G in C){t=y;v=C[G];var J=l,A=v.L,H=A[0],O=A[1],P=A[2],A=A.toString();if(!(A in t.b)){var H=tb(Pe(t.g,H),t.i),L=v.T(t),\nK=L.style;K.maxWidth=\"none\";var fa=void 0,ra=void 0;0<J?(fa=document.createElement(\"DIV\"),ra=fa.style,ra.overflow=\"hidden\",ra.width=H[0]+\"px\",ra.height=H[1]+\"px\",K.position=\"absolute\",K.left=-J+\"px\",K.top=-J+\"px\",K.width=H[0]+2*J+\"px\",K.height=H[1]+2*J+\"px\",fa.appendChild(L)):(K.width=H[0]+\"px\",K.height=H[1]+\"px\",fa=L,ra=K);ra.position=\"absolute\";ra.left=(O-t.f[1])*H[0]+\"px\";ra.top=(t.f[2]-P)*H[1]+\"px\";t.a||(t.a=document.createDocumentFragment());t.a.appendChild(fa);t.b[A]=v}}y.a&&(y.target.appendChild(y.a),\ny.a=null)}l=Object.keys(this.b).map(Number);l.sort(Ha);B=zb();G=0;for(z=l.length;G<z;++G)if(C=l[G],y=this.b[C],C in u)if(t=y.I(),E=y.ka(),Ig(B,b.size[0]/2,b.size[1]/2,t/e.resolution,t/e.resolution,e.rotation,(E[0]-q[0])/t,(q[1]-E[1])/t),y.setTransform(B),C in w){for(--C;0<=C;--C)if(C in this.b){E=this.b[C].target;E.parentNode&&E.parentNode.insertBefore(y.target,E.nextSibling);break}0>C&&fe(this.target,y.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){v=Ke(y.g,r,y.f[0],D);C=[];t=E=void 0;for(t in y.b)E=\ny.b[t],J=E.L,gd(v,J[1],J[2])||C.push(E);J=v=void 0;v=0;for(J=C.length;v<J;++v)E=C[v],t=E.L.toString(),ge(E.T(y)),delete y.b[t]}}else ge(y.target),delete this.b[C];c.opacity!=this.h&&(this.h=this.target.style.opacity=c.opacity);c.visible&&!this.c&&(oe(this.target,!0),this.c=!0);Qg(b.usedTiles,h,m,n);Sg(b,h,k,d,f,r,m,g.get(\"preload\"));Ng(b,h);Pg(b,h);return!0};\nfunction mk(b,c){this.target=document.createElement(\"DIV\");this.target.style.position=\"absolute\";this.target.style.width=\"100%\";this.target.style.height=\"100%\";this.g=b;this.f=c;this.h=bc(Je(b,c));this.l=b.I(c[0]);this.b={};this.a=null;this.c=Bb();this.i=[0,0]}mk.prototype.ka=function(){return this.h};mk.prototype.I=function(){return this.l};mk.prototype.setTransform=function(b){Jg(b,this.c)||(vf(this.target,b),Cb(this.c,b))};function nk(b){this.g=rf();var c=this.g.canvas;c.style.maxWidth=\"none\";c.style.position=\"absolute\";kk.call(this,b,c);this.b=!1;this.h=-1;this.o=NaN;this.i=Jb();this.c=this.j=null;this.w=zb();this.u=zb()}M(nk,kk);p=nk.prototype;p.Gb=function(){var b=this.g.canvas;b.width=b.width;this.h=0};\np.Kc=function(b,c){var d=b.viewState,e=d.center,f=d.rotation,g=d.resolution,d=b.pixelRatio,h=b.size[0],k=b.size[1],l=h*d,m=k*d,e=Ig(this.w,d*h/2,d*k/2,d/g,-d/g,-f,-e[0],-e[1]),g=this.g;g.canvas.width=l;g.canvas.height=m;h=Ig(this.u,0,0,1/d,1/d,0,-(l-h)/2*d,-(m-k)/2*d);vf(g.canvas,h);ok(this,\"precompose\",b,e);(h=this.c)&&!h.c()&&(g.globalAlpha=c.opacity,h.f(g,d,e,f,c.eb?b.skippedFeatureUids:{}),ok(this,\"render\",b,e));ok(this,\"postcompose\",b,e)};\nfunction ok(b,c,d,e){var f=b.g;b=b.a;nb(b,c)&&(e=new Mi(f,d.pixelRatio,d.extent,e,d.viewState.rotation),S(b,new Fg(c,b,e,d,f,null)))}p.fb=function(b,c,d,e){if(this.c){var f=this.a,g={};return this.c.g(b,c.viewState.resolution,c.viewState.rotation,{},function(b){var c=I(b).toString();if(!(c in g))return g[c]=!0,d.call(e,b,f)})}};p.Mc=function(){Mg(this)};\np.Lc=function(b){function c(b){var c,e=b.c;e?c=e.call(b,l):(e=d.g)&&(c=e(b,l));if(c){if(c){e=!1;if(Array.isArray(c))for(var f=0,g=c.length;f<g;++f)e=vj(n,b,c[f],uj(l,m),this.Mc,this)||e;else e=vj(n,b,c,uj(l,m),this.Mc,this)||e;b=e}else b=!1;this.b=this.b||b}}var d=this.a,e=d.V();Og(b.attributions,e.i);Pg(b,e);var f=b.viewHints[0],g=b.viewHints[1],h=d.i,k=d.j;if(!this.b&&!h&&f||!k&&g)return!0;var g=b.extent,h=b.viewState,f=h.projection,l=h.resolution,m=b.pixelRatio;b=d.f;k=d.a;h=d.get(\"renderOrder\");\nvoid 0===h&&(h=tj);g=Lb(g,k*l);if(!this.b&&this.o==l&&this.h==b&&this.j==h&&Nb(this.i,g))return!0;this.c=null;this.b=!1;var n=new pj(.5*l/m,g,l,d.a);Zj(e,g,l,f);if(h){var q=[];Xj(e,g,function(b){q.push(b)},this);q.sort(h);q.forEach(c,this)}else Xj(e,g,c,this);qj(n);this.o=l;this.h=b;this.j=h;this.i=g;this.c=n;return!0};function pk(b,c){Zg.call(this,0,c);this.c=rf();var d=this.c.canvas;d.style.position=\"absolute\";d.style.width=\"100%\";d.style.height=\"100%\";d.className=\"ol-unselectable\";fe(b,d,0);this.g=zb();this.a=document.createElement(\"DIV\");this.a.className=\"ol-unselectable\";d=this.a.style;d.position=\"absolute\";d.width=\"100%\";d.height=\"100%\";Q(this.a,\"touchstart\",lb);fe(b,this.a,0);this.b=!0}M(pk,Zg);pk.prototype.J=function(){ge(this.a);pk.X.J.call(this)};\npk.prototype.Jb=function(b){if(b instanceof X)b=new lk(b);else if(b instanceof Y)b=new nk(b);else return null;return b};function qk(b,c,d){var e=b.h;if(nb(e,c)){var f=d.extent,g=d.pixelRatio,h=d.viewState,k=h.rotation,l=b.c,m=l.canvas;Ig(b.g,m.width/2,m.height/2,g/h.resolution,-g/h.resolution,-h.rotation,-h.center[0],-h.center[1]);b=new Mi(l,g,f,b.g,k);S(e,new Fg(c,e,b,d,l,null))}}pk.prototype.U=function(){return\"dom\"};\npk.prototype.sb=function(b){if(b){var c=this.h;if(nb(c,\"precompose\")||nb(c,\"postcompose\")){var c=this.c.canvas,d=b.pixelRatio;c.width=b.size[0]*d;c.height=b.size[1]*d}qk(this,\"precompose\",b);c=b.layerStatesArray;Na(c);var d=b.viewState.resolution,e,f,g,h;e=0;for(f=c.length;e<f;++e)h=c[e],g=h.layer,g=bh(this,g),fe(this.a,g.target,e),Hg(h,d)&&\"ready\"==h.$b?g.Lc(b,h)&&g.Kc(b,h):g.Gb();var c=b.layerStates,k;for(k in this.f)k in c||(g=this.f[k],ge(g.target));this.b||(oe(this.a,!0),this.b=!0);$g(b);ch(this,\nb);b.postRenderFunctions.push(ah);qk(this,\"postcompose\",b)}else this.b&&(oe(this.a,!1),this.b=!1)};function rk(b){this.a=b}function sk(b){this.a=b}M(sk,rk);sk.prototype.U=function(){return 35632};function tk(b){this.a=b}M(tk,rk);tk.prototype.U=function(){return 35633};function uk(){this.a=\"precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}\"}M(uk,sk);aa(uk);\nfunction vk(){this.a=\"varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}\"}M(vk,tk);aa(vk);\nfunction wk(b,c){this.i=b.getUniformLocation(c,\"j\");this.j=b.getUniformLocation(c,\"i\");this.h=b.getUniformLocation(c,\"k\");this.l=b.getUniformLocation(c,\"h\");this.a=b.getAttribLocation(c,\"e\");this.b=b.getAttribLocation(c,\"f\");this.c=b.getAttribLocation(c,\"c\");this.f=b.getAttribLocation(c,\"g\");this.g=b.getAttribLocation(c,\"d\")};function xk(b){this.a=void 0!==b?b:[]};function yk(b,c){this.A=b;this.a=c;this.b={};this.g={};this.c={};this.i=this.j=this.h=this.l=null;(this.f=0<=oa.indexOf(\"OES_element_index_uint\"))&&c.getExtension(\"OES_element_index_uint\");Q(this.A,\"webglcontextlost\",this.o,this);Q(this.A,\"webglcontextrestored\",this.s,this)}M(yk,ib);\nfunction zk(b,c,d){var e=b.a,f=d.a,g=String(I(d));if(g in b.b)e.bindBuffer(c,b.b[g].buffer);else{var h=e.createBuffer();e.bindBuffer(c,h);var k;34962==c?k=new Float32Array(f):34963==c&&(k=b.f?new Uint32Array(f):new Uint16Array(f));e.bufferData(c,k,35044);b.b[g]={Xe:d,buffer:h}}}function Ak(b,c){var d=b.a,e=String(I(c)),f=b.b[e];d.isContextLost()||d.deleteBuffer(f.buffer);delete b.b[e]}\nyk.prototype.J=function(){hb(this.A);var b=this.a;if(!b.isContextLost()){for(var c in this.b)b.deleteBuffer(this.b[c].buffer);for(c in this.c)b.deleteProgram(this.c[c]);for(c in this.g)b.deleteShader(this.g[c]);b.deleteFramebuffer(this.h);b.deleteRenderbuffer(this.i);b.deleteTexture(this.j)}};\nfunction Bk(b){if(!b.h){var c=b.a,d=c.createFramebuffer();c.bindFramebuffer(c.FRAMEBUFFER,d);var e=Ck(c,1,1),f=c.createRenderbuffer();c.bindRenderbuffer(c.RENDERBUFFER,f);c.renderbufferStorage(c.RENDERBUFFER,c.DEPTH_COMPONENT16,1,1);c.framebufferTexture2D(c.FRAMEBUFFER,c.COLOR_ATTACHMENT0,c.TEXTURE_2D,e,0);c.framebufferRenderbuffer(c.FRAMEBUFFER,c.DEPTH_ATTACHMENT,c.RENDERBUFFER,f);c.bindTexture(c.TEXTURE_2D,null);c.bindRenderbuffer(c.RENDERBUFFER,null);c.bindFramebuffer(c.FRAMEBUFFER,null);b.h=d;\nb.j=e;b.i=f}return b.h}function Dk(b,c){var d=String(I(c));if(d in b.g)return b.g[d];var e=b.a,f=e.createShader(c.U());e.shaderSource(f,c.a);e.compileShader(f);return b.g[d]=f}function Ek(b,c,d){var e=I(c)+\"/\"+I(d);if(e in b.c)return b.c[e];var f=b.a,g=f.createProgram();f.attachShader(g,Dk(b,c));f.attachShader(g,Dk(b,d));f.linkProgram(g);return b.c[e]=g}yk.prototype.o=function(){Ya(this.b);Ya(this.g);Ya(this.c);this.i=this.j=this.h=this.l=null};yk.prototype.s=function(){};\nfunction Fk(b,c){if(c==b.l)return!1;b.a.useProgram(c);b.l=c;return!0}function Gk(b,c,d){var e=b.createTexture();b.bindTexture(b.TEXTURE_2D,e);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.LINEAR);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.LINEAR);void 0!==c&&b.texParameteri(3553,10242,c);void 0!==d&&b.texParameteri(3553,10243,d);return e}function Ck(b,c,d){var e=Gk(b,void 0,void 0);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,c,d,0,b.RGBA,b.UNSIGNED_BYTE,null);return e};function Hk(b,c){this.H=this.u=void 0;this.j=Yb(c);this.s=[];this.h=[];this.B=void 0;this.g=[];this.c=[];this.D=this.K=void 0;this.b=[];this.w=this.i=null;this.G=void 0;this.na=Bb();this.za=Bb();this.S=this.P=void 0;this.pa=Bb();this.ja=this.Y=this.ba=void 0;this.ea=[];this.l=[];this.a=[];this.o=null;this.f=[];this.A=[];this.aa=void 0}M(Hk,Eg);\nfunction Ik(b,c){var d=b.o,e=b.i,f=b.ea,g=b.l,h=c.a;return function(){if(!h.isContextLost()){var b,l;b=0;for(l=f.length;b<l;++b)h.deleteTexture(f[b]);b=0;for(l=g.length;b<l;++b)h.deleteTexture(g[b])}Ak(c,d);Ak(c,e)}}\nfunction Jk(b,c,d,e){var f=b.u,g=b.H,h=b.B,k=b.K,l=b.D,m=b.G,n=b.P,q=b.S,r=b.ba?1:0,u=b.Y,w=b.ja,y=b.aa,z=Math.cos(u),u=Math.sin(u),D=b.b.length,t=b.a.length,v,B,E,C,G,J;for(v=0;v<d;v+=e)G=c[v]-b.j[0],J=c[v+1]-b.j[1],B=t/8,E=-w*f,C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=-w*(h-g),b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=(q+h)/k,b.a[t++]=m,b.a[t++]=r,E=w*(y-f),C=w*g,b.a[t++]=\nG,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=(n+y)/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,E=-w*f,C=w*g,b.a[t++]=G,b.a[t++]=J,b.a[t++]=E*z-C*u,b.a[t++]=E*u+C*z,b.a[t++]=n/l,b.a[t++]=q/k,b.a[t++]=m,b.a[t++]=r,b.b[D++]=B,b.b[D++]=B+1,b.b[D++]=B+2,b.b[D++]=B,b.b[D++]=B+2,b.b[D++]=B+3}Hk.prototype.Za=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};Hk.prototype.$a=function(b,c){this.f.push(this.b.length);this.A.push(c);var d=b.a;Jk(this,d,d.length,b.b)};\nfunction Kk(b,c){var d=c.a;b.s.push(b.b.length);b.h.push(b.b.length);b.o=new xk(b.a);zk(c,34962,b.o);b.i=new xk(b.b);zk(c,34963,b.i);var e={};Lk(b.ea,b.g,e,d);Lk(b.l,b.c,e,d);b.u=void 0;b.H=void 0;b.B=void 0;b.g=null;b.c=null;b.K=void 0;b.D=void 0;b.b=null;b.G=void 0;b.P=void 0;b.S=void 0;b.ba=void 0;b.Y=void 0;b.ja=void 0;b.a=null;b.aa=void 0}\nfunction Lk(b,c,d,e){var f,g,h,k,l=c.length;for(k=0;k<l;++k){g=c[k];h=I(g).toString();if(h in d)f=d[h];else{f=e;var m=Gk(f,33071,33071);f.texImage2D(f.TEXTURE_2D,0,f.RGBA,f.RGBA,f.UNSIGNED_BYTE,g);f=m;d[h]=f}b[k]=f}}\nfunction Mk(b,c,d,e,f,g,h,k,l,m,n){var q=c.a;zk(c,34962,b.o);zk(c,34963,b.i);var r=uk.ua(),u=vk.ua(),u=Ek(c,r,u);b.w?r=b.w:(r=new wk(q,u),b.w=r);Fk(c,u);q.enableVertexAttribArray(r.c);q.vertexAttribPointer(r.c,2,5126,!1,32,0);q.enableVertexAttribArray(r.a);q.vertexAttribPointer(r.a,2,5126,!1,32,8);q.enableVertexAttribArray(r.g);q.vertexAttribPointer(r.g,2,5126,!1,32,16);q.enableVertexAttribArray(r.b);q.vertexAttribPointer(r.b,1,5126,!1,32,24);q.enableVertexAttribArray(r.f);q.vertexAttribPointer(r.f,\n1,5126,!1,32,28);u=b.pa;Ig(u,0,0,2/(e*g[0]),2/(e*g[1]),-f,-(d[0]-b.j[0]),-(d[1]-b.j[1]));d=b.za;e=2/g[0];g=2/g[1];Db(d);d[0]=e;d[5]=g;d[10]=1;d[15]=1;g=b.na;Db(g);0!==f&&Hb(g,-f);q.uniformMatrix4fv(r.l,!1,u);q.uniformMatrix4fv(r.j,!1,d);q.uniformMatrix4fv(r.i,!1,g);q.uniform1f(r.h,h);var w;if(void 0===l)Nk(b,q,c,k,b.ea,b.s);else{if(m)a:{f=c.f?5125:5123;c=c.f?4:2;g=b.f.length-1;for(h=b.l.length-1;0<=h;--h)for(q.bindTexture(3553,b.l[h]),m=0<h?b.h[h-1]:0,u=b.h[h];0<=g&&b.f[g]>=m;){w=b.f[g];d=b.A[g];\ne=I(d).toString();if(void 0===k[e]&&d.M()&&(void 0===n||ac(n,d.M().C()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,u-w,f,w*c),u=l(d))){b=u;break a}u=w;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Nk(b,q,c,k,b.l,b.h),b=(b=l(null))?b:void 0;w=b}q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.b);q.disableVertexAttribArray(r.f);return w}\nfunction Nk(b,c,d,e,f,g){var h=d.f?5125:5123;d=d.f?4:2;if($a(e)){var k;b=0;e=f.length;for(k=0;b<e;++b){c.bindTexture(3553,f[b]);var l=g[b];c.drawElements(4,l-k,h,k*d);k=l}}else{k=0;var m,l=0;for(m=f.length;l<m;++l){c.bindTexture(3553,f[l]);for(var n=0<l?g[l-1]:0,q=g[l],r=n;k<b.f.length&&b.f[k]<=q;){var u=I(b.A[k]).toString();void 0!==e[u]?(r!==n&&c.drawElements(4,n-r,h,r*d),n=r=k===b.f.length-1?q:b.f[k+1]):n=k===b.f.length-1?q:b.f[k+1];k++}r!==n&&c.drawElements(4,n-r,h,r*d)}}}\nHk.prototype.Ha=function(b){var c=b.jb(),d=b.T(1),e=b.wc(),f=b.Xb(1),g=b.l,h=b.ka(),k=b.i,l=b.Z(),m=b.Qa();b=b.gb;var n;0===this.g.length?this.g.push(d):(n=this.g[this.g.length-1],I(n)!=I(d)&&(this.s.push(this.b.length),this.g.push(d)));0===this.c.length?this.c.push(f):(n=this.c[this.c.length-1],I(n)!=I(f)&&(this.h.push(this.b.length),this.c.push(f)));this.u=c[0];this.H=c[1];this.B=m[1];this.K=e[1];this.D=e[0];this.G=g;this.P=h[0];this.S=h[1];this.Y=l;this.ba=k;this.ja=b;this.aa=m[0]};\nfunction Ok(b,c,d){this.l=c;this.i=b;this.h=d;this.b={}}function Pk(b,c){var d=[],e;for(e in b.b)d.push(Ik(b.b[e],c));return function(){for(var b=d.length,c,e=0;e<b;e++)c=d[e].apply(this,arguments);return c}}function Qk(b,c){for(var d in b.b)Kk(b.b[d],c)}Ok.prototype.a=function(b,c){var d=this.b[c];void 0===d&&(d=new Rk[c](this.i,this.l),this.b[c]=d);return d};Ok.prototype.c=function(){return $a(this.b)};\nOk.prototype.f=function(b,c,d,e,f,g,h,k){var l,m;g=0;for(l=$i.length;g<l;++g)m=this.b[$i[g]],void 0!==m&&Mk(m,b,c,d,e,f,h,k,void 0,!1)};function Sk(b,c,d,e,f,g,h,k,l,m){var n=Tk,q,r;for(q=$i.length-1;0<=q;--q)if(r=b.b[$i[q]],void 0!==r&&(r=Mk(r,c,d,e,f,n,g,h,k,l,m)))return r}\nOk.prototype.g=function(b,c,d,e,f,g,h,k,l,m){var n=c.a;n.bindFramebuffer(n.FRAMEBUFFER,Bk(c));var q;void 0!==this.h&&(q=Lb(Qb(b),e*this.h));return Sk(this,c,b,e,f,k,l,function(b){var c=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,c);if(0<c[3]&&(b=m(b)))return b},!0,q)};function Uk(b,c,d,e,f,g,h){var k=d.a;k.bindFramebuffer(k.FRAMEBUFFER,Bk(d));return void 0!==Sk(b,d,c,e,f,g,h,function(){var b=new Uint8Array(4);k.readPixels(0,0,1,1,k.RGBA,k.UNSIGNED_BYTE,b);return 0<b[3]},!1)}\nvar Rk={Image:Hk},Tk=[1,1];function Vk(b,c,d,e,f,g){this.a=b;this.f=c;this.c=g;this.l=f;this.h=e;this.g=d;this.b=null}M(Vk,Eg);Vk.prototype.$a=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,\"Image\");e.Ha(this.b);e.$a(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Za=function(b,c){var d=this.a,e=(new Ok(1,this.c)).a(0,\"Image\");e.Ha(this.b);e.Za(b,c);Kk(e,d);Mk(e,this.a,this.f,this.g,this.h,this.l,1,{},void 0,!1);Ik(e,d)()};Vk.prototype.Ha=function(b){this.b=b};function Wk(){this.a=\"precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}\"}M(Wk,sk);aa(Wk);function Xk(){this.a=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}\"}M(Xk,tk);aa(Xk);\nfunction Yk(b,c){this.f=b.getUniformLocation(c,\"f\");this.c=b.getUniformLocation(c,\"e\");this.h=b.getUniformLocation(c,\"d\");this.g=b.getUniformLocation(c,\"g\");this.a=b.getAttribLocation(c,\"b\");this.b=b.getAttribLocation(c,\"c\")};function Zk(b,c){Lg.call(this,c);this.c=b;this.G=new xk([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.ya=null;this.j=void 0;this.D=zb();this.P=Bb();this.o=null}M(Zk,Lg);\nfunction $k(b,c,d){var e=b.c.c;if(void 0===b.j||b.j!=d){c.postRenderFunctions.push(na(function(b,c,d){b.isContextLost()||(b.deleteFramebuffer(c),b.deleteTexture(d))},e,b.i,b.ya));c=Ck(e,d,d);var f=e.createFramebuffer();e.bindFramebuffer(36160,f);e.framebufferTexture2D(36160,36064,3553,c,0);b.ya=c;b.i=f;b.j=d}else e.bindFramebuffer(36160,b.i)}\nZk.prototype.Nc=function(b,c,d){al(this,\"precompose\",d,b);zk(d,34962,this.G);var e=d.a,f=Wk.ua(),g=Xk.ua(),f=Ek(d,f,g);this.o?g=this.o:this.o=g=new Yk(e,f);Fk(d,f)&&(e.enableVertexAttribArray(g.a),e.vertexAttribPointer(g.a,2,5126,!1,16,0),e.enableVertexAttribArray(g.b),e.vertexAttribPointer(g.b,2,5126,!1,16,8),e.uniform1i(g.g,0));e.uniformMatrix4fv(g.h,!1,this.D);e.uniformMatrix4fv(g.c,!1,this.P);e.uniform1f(g.f,c.opacity);e.bindTexture(3553,this.ya);e.drawArrays(5,0,4);al(this,\"postcompose\",d,b)};\nfunction al(b,c,d,e){b=b.a;if(nb(b,c)){var f=e.viewState;S(b,new Fg(c,b,new Vk(d,f.center,f.resolution,f.rotation,e.size,e.extent),e,null,d))}}Zk.prototype.s=function(){this.i=this.ya=null;this.j=void 0};function bl(){this.a=\"precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}\"}M(bl,sk);aa(bl);function cl(){this.a=\"varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}\"}M(cl,tk);aa(cl);function dl(b,c){this.f=b.getUniformLocation(c,\"e\");this.c=b.getUniformLocation(c,\"d\");this.a=b.getAttribLocation(c,\"b\");this.b=b.getAttribLocation(c,\"c\")};function el(b,c){Zk.call(this,b,c);this.B=bl.ua();this.S=cl.ua();this.b=null;this.w=new xk([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.u=this.g=null;this.h=-1;this.K=[0,0]}M(el,Zk);el.prototype.J=function(){Ak(this.c.g,this.w);el.X.J.call(this)};el.prototype.l=function(b,c,d){var e=this.c;return function(f,g){return We(b,c,f,g,function(b){var c=we(e.b,b.getKey());c&&(d[f]||(d[f]={}),d[f][b.L.toString()]=b);return c})}};el.prototype.s=function(){el.X.s.call(this);this.b=null};\nel.prototype.Oc=function(b,c,d){var e=this.c,f=d.a,g=b.viewState,h=g.projection,k=this.a,l=k.V(),m=l.la(h),n=Qe(m,g.resolution),q=m.I(n),r=Xe(l,n,b.pixelRatio,h),u=r[0]/tb(Pe(m,n),this.K)[0],w=q/u,y=l.kb(h),z=g.center,D;q==g.resolution?(z=Rg(z,q,b.size),D=Zb(z,q,g.rotation,b.size)):D=b.extent;q=Me(m,D,q);if(this.g&&hd(this.g,q)&&this.h==l.f)w=this.u;else{var t=[q.ha(),q.c-q.b+1],v=Math.pow(2,Math.ceil(Math.log(Math.max(t[0]*r[0],t[1]*r[1]))/Math.LN2)),t=w*v,B=m.ka(n),E=B[0]+q.a*r[0]*w,w=B[1]+q.b*\nr[1]*w,w=[E,w,E+t,w+t];$k(this,b,v);f.viewport(0,0,v,v);f.clearColor(0,0,0,0);f.clear(16384);f.disable(3042);v=Ek(d,this.B,this.S);Fk(d,v);this.b||(this.b=new dl(f,v));zk(d,34962,this.w);f.enableVertexAttribArray(this.b.a);f.vertexAttribPointer(this.b.a,2,5126,!1,16,0);f.enableVertexAttribArray(this.b.b);f.vertexAttribPointer(this.b.b,2,5126,!1,16,8);f.uniform1i(this.b.f,0);d={};d[n]={};var C=this.l(l,h,d),G=ti(k),v=!0,E=Jb(),J=new fd(0,0,0,0),A,H,O;for(H=q.a;H<=q.f;++H)for(O=q.b;O<=q.c;++O){B=Tg(l,\nn,H,O,u,h);if(void 0!==c.extent&&(A=Je(m,B.L,E),!ac(A,c.extent)))continue;A=B.N();A=2==A||4==A||3==A&&!G;!A&&B.a&&(B=B.a);A=B.N();if(2==A){if(we(e.b,B.getKey())){d[n][B.L.toString()]=B;continue}}else if(4==A||3==A&&!G)continue;v=!1;A=Ie(m,B.L,C,J,E);A||(B=Le(m,B.L,J,E))&&C(n+1,B)}c=Object.keys(d).map(Number);c.sort(Ha);for(var C=new Float32Array(4),P,L,K,G=0,J=c.length;G<J;++G)for(P in L=d[c[G]],L)B=L[P],A=Je(m,B.L,E),H=2*(A[2]-A[0])/t,O=2*(A[3]-A[1])/t,K=2*(A[0]-w[0])/t-1,A=2*(A[1]-w[1])/t-1,yb(C,\nH,O,K,A),f.uniform4fv(this.b.c,C),fl(e,B,r,y*u),f.drawArrays(5,0,4);v?(this.g=q,this.u=w,this.h=l.f):(this.u=this.g=null,this.h=-1,b.animate=!0)}Qg(b.usedTiles,l,n,q);var fa=e.i;Sg(b,l,m,u,h,D,n,k.get(\"preload\"),function(b){var c;(c=2!=b.N()||we(e.b,b.getKey()))||(c=b.getKey()in fa.f);c||fa.c([b,Oe(m,b.L),m.I(b.L[0]),r,y*u])},this);Ng(b,l);Pg(b,l);f=this.D;Db(f);Fb(f,(z[0]-w[0])/(w[2]-w[0]),(z[1]-w[1])/(w[3]-w[1]));0!==g.rotation&&Hb(f,g.rotation);Gb(f,b.size[0]*g.resolution/(w[2]-w[0]),b.size[1]*\ng.resolution/(w[3]-w[1]));Fb(f,-.5,-.5);return!0};function gl(b,c){Zk.call(this,b,c);this.h=!1;this.K=-1;this.B=NaN;this.u=Jb();this.g=this.b=this.w=null}M(gl,Zk);p=gl.prototype;p.Nc=function(b,c,d){this.g=c;var e=b.viewState,f=this.b;f&&!f.c()&&f.f(d,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,c.opacity,c.eb?b.skippedFeatureUids:{})};p.J=function(){var b=this.b;b&&(Pk(b,this.c.g)(),this.b=null);gl.X.J.call(this)};\np.fb=function(b,c,d,e){if(this.b&&this.g){var f=c.viewState,g=this.a,h={};return this.b.g(b,this.c.g,f.center,f.resolution,f.rotation,c.size,c.pixelRatio,this.g.opacity,{},function(b){var c=I(b).toString();if(!(c in h))return h[c]=!0,d.call(e,b,g)})}};p.Ic=function(b,c){if(this.b&&this.g){var d=c.viewState;return Uk(this.b,b,this.c.g,d.resolution,d.rotation,this.g.opacity,c.skippedFeatureUids)}return!1};p.Pc=function(){Mg(this)};\np.Oc=function(b,c,d){function e(b){var c,d=b.c;d?c=d.call(b,m):(d=f.g)&&(c=d(b,m));if(c){if(c){d=!1;if(Array.isArray(c))for(var e=0,g=c.length;e<g;++e)d=vj(r,b,c[e],uj(m,n),this.Pc,this)||d;else d=vj(r,b,c,uj(m,n),this.Pc,this)||d;b=d}else b=!1;this.h=this.h||b}}var f=this.a;c=f.V();Og(b.attributions,c.i);Pg(b,c);var g=b.viewHints[0],h=b.viewHints[1],k=f.i,l=f.j;if(!this.h&&!k&&g||!l&&h)return!0;var h=b.extent,k=b.viewState,g=k.projection,m=k.resolution,n=b.pixelRatio,k=f.f,q=f.a,l=f.get(\"renderOrder\");\nvoid 0===l&&(l=tj);h=Lb(h,q*m);if(!this.h&&this.B==m&&this.K==k&&this.w==l&&Nb(this.u,h))return!0;this.b&&b.postRenderFunctions.push(Pk(this.b,d));this.h=!1;var r=new Ok(.5*m/n,h,f.a);Zj(c,h,m,g);if(l){var u=[];Xj(c,h,function(b){u.push(b)},this);u.sort(l);u.forEach(e,this)}else Xj(c,h,e,this);Qk(r,d);this.B=m;this.K=k;this.w=l;this.u=h;this.b=r;return!0};function hl(b,c){Zg.call(this,0,c);this.a=document.createElement(\"CANVAS\");this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.className=\"ol-unselectable\";fe(b,this.a,0);this.s=this.u=0;this.H=rf();this.j=!0;this.c=xf(this.a,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.g=new yk(this.a,this.c);Q(this.a,\"webglcontextlost\",this.ne,this);Q(this.a,\"webglcontextrestored\",this.oe,this);this.b=new ve;this.o=null;this.i=new dh(function(b){var c=\nb[1];b=b[2];var f=c[0]-this.o[0],c=c[1]-this.o[1];return 65536*Math.log(b)+Math.sqrt(f*f+c*c)/b}.bind(this),function(b){return b[0].getKey()});this.w=function(){if(0!==this.i.a.length){hh(this.i);var b=eh(this.i);fl(this,b[0],b[3],b[4])}return!1}.bind(this);this.l=0;il(this)}M(hl,Zg);\nfunction fl(b,c,d,e){var f=b.c,g=c.getKey();if(we(b.b,g))b=b.b.get(g),f.bindTexture(3553,b.ya),9729!=b.Cc&&(f.texParameteri(3553,10240,9729),b.Cc=9729),9729!=b.Dc&&(f.texParameteri(3553,10240,9729),b.Dc=9729);else{var h=f.createTexture();f.bindTexture(3553,h);if(0<e){var k=b.H.canvas,l=b.H;b.u!==d[0]||b.s!==d[1]?(k.width=d[0],k.height=d[1],b.u=d[0],b.s=d[1]):l.clearRect(0,0,d[0],d[1]);l.drawImage(c.T(),e,e,d[0],d[1],0,0,d[0],d[1]);f.texImage2D(3553,0,6408,6408,5121,k)}else f.texImage2D(3553,0,6408,\n6408,5121,c.T());f.texParameteri(3553,10240,9729);f.texParameteri(3553,10241,9729);f.texParameteri(3553,10242,33071);f.texParameteri(3553,10243,33071);b.b.set(g,{ya:h,Cc:9729,Dc:9729})}}p=hl.prototype;p.Jb=function(b){return b instanceof X?new el(this,b):b instanceof Y?new gl(this,b):null};function jl(b,c,d){var e=b.h;if(nb(e,c)){b=b.g;var f=d.viewState;S(e,new Fg(c,e,new Vk(b,f.center,f.resolution,f.rotation,d.size,d.extent),d,null,b))}}\np.J=function(){var b=this.c;b.isContextLost()||xe(this.b,function(c){c&&b.deleteTexture(c.ya)});jb(this.g);hl.X.J.call(this)};p.md=function(b,c){for(var d=this.c,e;1024<this.b.f-this.l;){if(e=this.b.a.Ia)d.deleteTexture(e.ya);else if(+this.b.a.Rb==c.index)break;else--this.l;this.b.pop()}};p.U=function(){return\"webgl\"};p.ne=function(b){b.preventDefault();this.b.clear();this.l=0;b=this.f;for(var c in b)b[c].s()};p.oe=function(){il(this);this.h.render()};\nfunction il(b){b=b.c;b.activeTexture(33984);b.blendFuncSeparate(770,771,1,771);b.disable(2884);b.disable(2929);b.disable(3089);b.disable(2960)}\np.sb=function(b){var c=this.g,d=this.c;if(d.isContextLost())return!1;if(!b)return this.j&&(oe(this.a,!1),this.j=!1),!1;this.o=b.focus;this.b.set((-b.index).toString(),null);++this.l;jl(this,\"precompose\",b);var e=[],f=b.layerStatesArray;Na(f);var g=b.viewState.resolution,h,k,l,m;h=0;for(k=f.length;h<k;++h)m=f[h],Hg(m,g)&&\"ready\"==m.$b&&(l=bh(this,m.layer),l.Oc(b,m,c)&&e.push(m));f=b.size[0]*b.pixelRatio;g=b.size[1]*b.pixelRatio;if(this.a.width!=f||this.a.height!=g)this.a.width=f,this.a.height=g;d.bindFramebuffer(36160,\nnull);d.clearColor(0,0,0,0);d.clear(16384);d.enable(3042);d.viewport(0,0,this.a.width,this.a.height);h=0;for(k=e.length;h<k;++h)m=e[h],l=bh(this,m.layer),l.Nc(b,m,c);this.j||(oe(this.a,!0),this.j=!0);$g(b);1024<this.b.f-this.l&&b.postRenderFunctions.push(this.md.bind(this));0!==this.i.a.length&&(b.postRenderFunctions.push(this.w),b.animate=!0);jl(this,\"postcompose\",b);ch(this,b);b.postRenderFunctions.push(ah)};\np.Wb=function(b,c,d,e,f,g){var h;if(this.c.isContextLost())return!1;var k=c.viewState,l=c.layerStatesArray,m;for(m=l.length-1;0<=m;--m){h=l[m];var n=h.layer;if(Hg(h,k.resolution)&&f.call(g,n)&&(h=bh(this,n).fb(b,c,d,e)))return h}};p.Jc=function(b,c,d,e){var f=!1;if(this.c.isContextLost())return!1;var g=c.viewState,h=c.layerStatesArray,k;for(k=h.length-1;0<=k;--k){var l=h[k],m=l.layer;if(Hg(l,g.resolution)&&d.call(e,m)&&(f=bh(this,m).Ic(b,c)))return!0}return f};var kl=[\"canvas\",\"webgl\",\"dom\"];\nfunction Z(b){T.call(this);var c=ll(b);this.Ja=void 0!==b.loadTilesWhileAnimating?b.loadTilesWhileAnimating:!1;this.wb=void 0!==b.loadTilesWhileInteracting?b.loadTilesWhileInteracting:!1;this.yb=void 0!==b.pixelRatio?b.pixelRatio:Df;this.xb=c.logos;this.pa=function(){this.h=void 0;this.Ce.call(this,Date.now())}.bind(this);this.Aa=zb();this.zb=zb();this.Ba=0;this.b=null;this.ea=Jb();this.u=this.G=null;this.a=document.createElement(\"DIV\");this.a.className=\"ol-viewport\"+(Gf?\" ol-touch\":\"\");this.a.style.position=\n\"relative\";this.a.style.overflow=\"hidden\";this.a.style.width=\"100%\";this.a.style.height=\"100%\";this.a.style.msTouchAction=\"none\";this.a.style.touchAction=\"none\";this.o=document.createElement(\"DIV\");this.o.className=\"ol-overlaycontainer\";this.a.appendChild(this.o);this.j=document.createElement(\"DIV\");this.j.className=\"ol-overlaycontainer-stopevent\";b=[\"click\",\"dblclick\",\"mousedown\",\"touchstart\",\"mspointerdown\",yg,\"mousewheel\",\"wheel\"];for(var d=0,e=b.length;d<e;++d)Q(this.j,b[d],kb);this.a.appendChild(this.j);\nthis.Y=new qg(this);for(var f in Bg)Q(this.Y,Bg[f],this.yc,this);this.S=c.keyboardEventTarget;this.i=null;Q(this.a,\"wheel\",this.Oa,this);Q(this.a,\"mousewheel\",this.Oa,this);this.s=c.controls;this.g=c.interactions;this.w=c.overlays;this.Tc={};this.D=new c.De(this.a,this);this.P=null;this.B=[];this.aa=[];this.na=new ih(this.vd.bind(this),this.Qd.bind(this));this.Ab={};Q(this,rb(\"layergroup\"),this.Ad,this);Q(this,rb(\"view\"),this.Rd,this);Q(this,rb(\"size\"),this.Nd,this);Q(this,rb(\"target\"),this.Pd,this);\nthis.l(c.values);nd(this.s,function(b){b.setMap(this)},this);Q(this.s,\"add\",function(b){b.element.setMap(this)},this);Q(this.s,\"remove\",function(b){b.element.setMap(null)},this);nd(this.g,function(b){b.setMap(this)},this);Q(this.g,\"add\",function(b){b.element.setMap(this)},this);Q(this.g,\"remove\",function(b){b.element.setMap(null)},this);nd(this.w,this.gc,this);Q(this.w,\"add\",function(b){this.gc(b.element)},this);Q(this.w,\"remove\",function(b){var c=b.element.La();void 0!==c&&delete this.Tc[c.toString()];\nb.element.setMap(null)},this)}M(Z,T);p=Z.prototype;p.hd=function(b){this.s.push(b)};p.jd=function(b){this.g.push(b)};p.kd=function(b){ml(this).get(\"layers\").push(b)};p.ld=function(b){this.w.push(b)};p.gc=function(b){var c=b.La();void 0!==c&&(this.Tc[c.toString()]=b);b.setMap(this)};p.fa=function(b){this.render();Array.prototype.push.apply(this.B,arguments)};\np.J=function(){jb(this.Y);jb(this.D);gb(this.a,\"wheel\",this.Oa,this);gb(this.a,\"mousewheel\",this.Oa,this);void 0!==this.c&&(x.removeEventListener(\"resize\",this.c,!1),this.c=void 0);this.h&&(x.cancelAnimationFrame(this.h),this.h=void 0);this.set(\"target\",null);Z.X.J.call(this)};p.pd=function(b,c,d,e,f){if(this.b)return b=this.ta(b),this.D.Wb(b,this.b,c,void 0!==d?d:null,void 0!==e?e:cc,void 0!==f?f:null)};\np.Td=function(b,c,d){if(!this.b)return!1;b=this.ta(b);return this.D.Jc(b,this.b,void 0!==c?c:cc,void 0!==d?d:null)};p.vc=function(b){var c=this.a.getBoundingClientRect();b=b.changedTouches?b.changedTouches[0]:b;return[b.clientX-c.left,b.clientY-c.top]};p.Tb=function(){return this.get(\"target\")};p.Na=function(){var b=this.Tb();return void 0!==b?Zd(b):null};p.ta=function(b){var c=this.b;return c?(b=b.slice(),Kg(c.pixelToCoordinateMatrix,b,b)):null};function ml(b){return b.get(\"layergroup\")}\nfunction Eh(b,c){var d=b.b;if(d){var e=c.slice(0,2);return Kg(d.coordinateToPixelMatrix,e,e)}return null}p.Pa=function(){return this.get(\"size\")};p.O=function(){return this.get(\"view\")};p.vd=function(b,c,d,e){var f=this.b;if(!(f&&c in f.wantedTiles&&f.wantedTiles[c][b.L.toString()]))return Infinity;b=d[0]-f.focus[0];d=d[1]-f.focus[1];return 65536*Math.log(e)+Math.sqrt(b*b+d*d)/e};p.Oa=function(b,c){var d=new og(c||b.type,this,b);this.yc(d)};\np.yc=function(b){if(this.b){this.P=b.coordinate;b.frameState=this.b;var c=this.g.a,d;if(!1!==S(this,b))for(d=c.length-1;0<=d;d--){var e=c[d];if(e.get(\"active\")&&!e.handleEvent(b))break}}};\np.Md=function(){var b=this.b,c=this.na;if(0!==c.a.length){var d=16,e=d;if(b){var f=b.viewHints;f[0]&&(d=this.Ja?8:0,e=2);f[1]&&(d=this.wb?8:0,e=2)}if(c.h<d){hh(c);for(var f=0,g,h;c.h<d&&f<e&&0<c.a.length;)g=eh(c)[0],h=g.getKey(),0!==g.N()||h in c.g||(c.g[h]=!0,++c.h,++f,g.load())}}c=this.aa;d=0;for(e=c.length;d<e;++d)c[d](this,b);c.length=0};p.Nd=function(){this.render()};\np.Pd=function(){var b;this.Tb()&&(b=this.Na());if(this.i){for(var c=0,d=this.i.length;c<d;++c)N(this.i[c]);this.i=null}b?(b.appendChild(this.a),b=this.S?this.S:b,this.i=[Q(b,\"keydown\",this.Oa,this),Q(b,\"keypress\",this.Oa,this)],this.c||(this.c=this.vb.bind(this),x.addEventListener(\"resize\",this.c,!1))):(ge(this.a),void 0!==this.c&&(x.removeEventListener(\"resize\",this.c,!1),this.c=void 0));this.vb()};p.Qd=function(){this.render()};p.Sd=function(){this.render()};\np.Rd=function(){this.G&&(N(this.G),this.G=null);var b=this.O();b&&(this.G=Q(b,\"propertychange\",this.Sd,this));this.render()};p.Bd=function(){this.render()};p.Cd=function(){this.render()};p.Ad=function(){this.u&&(this.u.forEach(N),this.u=null);var b=ml(this);b&&(this.u=[Q(b,\"propertychange\",this.Cd,this),Q(b,\"change\",this.Bd,this)]);this.render()};p.render=function(){void 0===this.h&&(this.h=x.requestAnimationFrame(this.pa))};p.ze=function(b){return this.g.remove(b)};p.Ae=function(b){return ml(this).get(\"layers\").remove(b)};\np.Ce=function(b){var c,d,e,f=this.Pa(),g=this.O(),h=null;if(c=void 0!==f&&0<f[0]&&0<f[1]&&g)c=!!g.ia()&&void 0!==g.I();if(c){var h=g.g.slice(),k=ml(this).Lb(),l={};c=0;for(d=k.length;c<d;++c)l[I(k[c].layer)]=k[c];e=g.N();h={animate:!1,attributions:{},coordinateToPixelMatrix:this.Aa,extent:null,focus:this.P?this.P:e.center,index:this.Ba++,layerStates:l,layerStatesArray:k,logos:Wa({},this.xb),pixelRatio:this.yb,pixelToCoordinateMatrix:this.zb,postRenderFunctions:[],size:f,skippedFeatureUids:this.Ab,\ntileQueue:this.na,time:b,usedTiles:{},viewState:e,viewHints:h,wantedTiles:{}}}if(h){b=this.B;c=f=0;for(d=b.length;c<d;++c)g=b[c],g(this,h)&&(b[f++]=g);b.length=f;h.extent=Zb(e.center,e.resolution,e.rotation,h.size)}this.b=h;this.D.sb(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.aa,h.postRenderFunctions),0!==this.B.length||h.viewHints[0]||h.viewHints[1]||Rb(h.extent,this.ea)||(S(this,new te(\"moveend\",this,h)),Mb(h.extent,this.ea)));S(this,new te(\"postrender\",this,h));c=e=this.Md;\nthis&&(c=ma(e,this));!ga(x.setImmediate)||x.Window&&x.Window.prototype&&!W(\"Edge\")&&x.Window.prototype.setImmediate==x.setImmediate?(lf||(lf=mf()),lf(c)):x.setImmediate(c)};\np.vb=function(){var b=this.Na();if(b){var c=Yd(b),d=Gd&&b.currentStyle,e;if(e=d)Wd(c),e=!0;if(e&&\"auto\"!=d.width&&\"auto\"!=d.height&&!d.boxSizing)c=pe(b,d.width,\"width\",\"pixelWidth\"),b=pe(b,d.height,\"height\",\"pixelHeight\"),b=new Vd(c,b);else{d=new Vd(b.offsetWidth,b.offsetHeight);if(Gd){c=qe(b,\"paddingLeft\");e=qe(b,\"paddingRight\");var f=qe(b,\"paddingTop\"),g=qe(b,\"paddingBottom\"),c=new je(f,e,g,c)}else c=ke(b,\"paddingLeft\"),e=ke(b,\"paddingRight\"),f=ke(b,\"paddingTop\"),g=ke(b,\"paddingBottom\"),c=new je(parseFloat(f),\nparseFloat(e),parseFloat(g),parseFloat(c));!Gd||9<=Number(Sd)?(e=ke(b,\"borderLeftWidth\"),f=ke(b,\"borderRightWidth\"),g=ke(b,\"borderTopWidth\"),b=ke(b,\"borderBottomWidth\"),b=new je(parseFloat(g),parseFloat(f),parseFloat(b),parseFloat(e))):(e=se(b,\"borderLeft\"),f=se(b,\"borderRight\"),g=se(b,\"borderTop\"),b=se(b,\"borderBottom\"),b=new je(g,f,b,e));b=new Vd(d.width-b.left-c.left-c.right-b.right,d.height-b.top-c.top-c.bottom-b.bottom)}this.set(\"size\",[b.width,b.height])}else this.set(\"size\",void 0)};\nfunction ll(b){var c=null;void 0!==b.keyboardEventTarget&&(c=\"string\"===typeof b.keyboardEventTarget?document.getElementById(b.keyboardEventTarget):b.keyboardEventTarget);var d={},e={};if(void 0===b.logo||\"boolean\"===typeof b.logo&&b.logo)e[\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC\"]=\n\"http://openlayers.org/\";else{var f=b.logo;\"string\"===typeof f?e[f]=\"\":ha(f)&&(e[f.src]=f.href)}f=b.layers instanceof gi?b.layers:new gi({layers:b.layers});d.layergroup=f;d.target=b.target;d.view=void 0!==b.view?b.view:new V;var f=Zg,g;void 0!==b.renderer?Array.isArray(b.renderer)?g=b.renderer:\"string\"===typeof b.renderer&&(g=[b.renderer]):g=kl;var h,k;h=0;for(k=g.length;h<k;++h){var l=g[h];if(\"canvas\"==l){if(Ff){f=ik;break}}else if(\"dom\"==l){f=pk;break}else if(\"webgl\"==l&&yf){f=hl;break}}var m;void 0!==\nb.controls?m=Array.isArray(b.controls)?new ld(b.controls.slice()):b.controls:m=ef();if(void 0!==b.interactions)g=Array.isArray(b.interactions)?new ld(b.interactions.slice()):b.interactions;else{g={};h=new ld;k=new jh;(void 0!==g.altShiftDragRotate?g.altShiftDragRotate:1)&&h.push(new Fh);(void 0!==g.doubleClickZoom?g.doubleClickZoom:1)&&h.push(new ph({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.dragPan?g.dragPan:1)&&h.push(new Ah({kinetic:k}));(void 0!==g.pinchRotate?g.pinchRotate:1)&&\nh.push(new Zh);(void 0!==g.pinchZoom?g.pinchZoom:1)&&h.push(new ci({duration:g.zoomDuration}));if(void 0!==g.keyboard?g.keyboard:1)h.push(new Th),h.push(new Vh({delta:g.zoomDelta,duration:g.zoomDuration}));(void 0!==g.mouseWheelZoom?g.mouseWheelZoom:1)&&h.push(new Xh({duration:g.zoomDuration}));(void 0!==g.shiftDragZoom?g.shiftDragZoom:1)&&h.push(new Sh({duration:g.zoomDuration}));g=h}b=void 0!==b.overlays?Array.isArray(b.overlays)?new ld(b.overlays.slice()):b.overlays:new ld;return{controls:m,interactions:g,\nkeyboardEventTarget:c,logos:e,overlays:b,De:f,values:d}}mc(li);mc(si);si.forEach(function(b){li.forEach(function(c){nc(b,c,mi);nc(c,b,ni)})});function nl(b){T.call(this);this.j=b.id;this.i=void 0!==b.insertFirst?b.insertFirst:!0;this.o=void 0!==b.stopEvent?b.stopEvent:!0;this.b=document.createElement(\"DIV\");this.b.className=\"ol-overlay-container\";this.b.style.position=\"absolute\";this.autoPan=void 0!==b.autoPan?b.autoPan:!1;this.g=void 0!==b.autoPanAnimation?b.autoPanAnimation:{};this.h=void 0!==b.autoPanMargin?b.autoPanMargin:20;this.a={hb:\"\",pb:\"\",tb:\"\",ub:\"\",visible:!0};this.c=null;Q(this,rb(\"element\"),this.yd,this);Q(this,rb(\"map\"),\nthis.Hd,this);Q(this,rb(\"offset\"),this.Id,this);Q(this,rb(\"position\"),this.Kd,this);Q(this,rb(\"positioning\"),this.Ld,this);void 0!==b.element&&this.set(\"element\",b.element);this.set(\"offset\",void 0!==b.offset?b.offset:[0,0]);this.set(\"positioning\",void 0!==b.positioning?b.positioning:\"top-left\");void 0!==b.position&&this.Ec(b.position)}M(nl,T);p=nl.prototype;p.La=function(){return this.j};p.yd=function(){ee(this.b);var b=this.get(\"element\");b&&this.b.appendChild(b)};\np.Hd=function(){this.c&&(ge(this.b),N(this.c),this.c=null);var b=this.get(\"map\");b&&(this.c=Q(b,\"postrender\",this.render,this),pl(this),b=this.o?b.j:b.o,this.i?fe(b,this.b,0):b.appendChild(this.b))};p.render=function(){pl(this)};p.Id=function(){pl(this)};\np.Kd=function(){pl(this);if(void 0!==this.get(\"position\")&&this.autoPan){var b=this.get(\"map\");if(void 0!==b&&b.Na()){var c=ql(b.Na(),b.Pa()),d=this.get(\"element\"),e=d.offsetWidth,f=d.currentStyle||x.getComputedStyle(d),e=e+(parseInt(f.marginLeft,10)+parseInt(f.marginRight,10)),f=d.offsetHeight,g=d.currentStyle||x.getComputedStyle(d),f=f+(parseInt(g.marginTop,10)+parseInt(g.marginBottom,10)),h=ql(d,[e,f]),d=this.h;Nb(c,h)||(e=h[0]-c[0],f=c[2]-h[2],g=h[1]-c[1],h=c[3]-h[3],c=[0,0],0>e?c[0]=e-d:0>f&&\n(c[0]=Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.O().ia(),e=Eh(b,d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.fa(cd(this.g))),b.O().oa(b.ta(c)))}}};p.Ld=function(){pl(this)};p.setMap=function(b){this.set(\"map\",b)};p.Ec=function(b){this.set(\"position\",b)};\nfunction ql(b,c){var d=Yd(b),e=new Ud(0,0),f;f=d?Yd(d):document;var g;(g=!Gd||9<=Number(Sd))||(Wd(f),g=!0);b!=(g?f.documentElement:f.body)&&(f=le(b),g=Wd(d).a,d=g.scrollingElement?g.scrollingElement:Jd?g.body||g.documentElement:g.documentElement,g=g.parentWindow||g.defaultView,d=Gd&&Qd(\"10\")&&g.pageYOffset!=d.scrollTop?new Ud(d.scrollLeft,d.scrollTop):new Ud(g.pageXOffset||d.scrollLeft,g.pageYOffset||d.scrollTop),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}\nfunction rl(b,c){b.a.visible!==c&&(oe(b.b,c),b.a.visible=c)}\nfunction pl(b){var c=b.get(\"map\"),d=b.get(\"position\");if(void 0!==c&&c.b&&void 0!==d){var d=Eh(c,d),e=c.Pa(),c=b.b.style,f=b.get(\"offset\"),g=b.get(\"positioning\"),h=f[0],f=f[1];if(\"bottom-right\"==g||\"center-right\"==g||\"top-right\"==g)\"\"!==b.a.pb&&(b.a.pb=c.left=\"\"),h=Math.round(e[0]-d[0]-h)+\"px\",b.a.tb!=h&&(b.a.tb=c.right=h);else{\"\"!==b.a.tb&&(b.a.tb=c.right=\"\");if(\"bottom-center\"==g||\"center-center\"==g||\"top-center\"==g)h-=me(b.b).width/2;h=Math.round(d[0]+h)+\"px\";b.a.pb!=h&&(b.a.pb=c.left=h)}if(\"bottom-left\"==\ng||\"bottom-center\"==g||\"bottom-right\"==g)\"\"!==b.a.ub&&(b.a.ub=c.top=\"\"),d=Math.round(e[1]-d[1]-f)+\"px\",b.a.hb!=d&&(b.a.hb=c.bottom=d);else{\"\"!==b.a.hb&&(b.a.hb=c.bottom=\"\");if(\"center-left\"==g||\"center-center\"==g||\"center-right\"==g)f-=me(b.b).height/2;d=Math.round(d[1]+f)+\"px\";b.a.ub!=d&&(b.a.ub=c.top=d)}rl(b,!0)}else rl(b,!1)};function sl(){this.defaultDataProjection=null}function tl(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.f(Ij(c)),featureProjection:d.featureProjection});var f;e&&(f={featureProjection:e.featureProjection,dataProjection:e.dataProjection?e.dataProjection:b.defaultDataProjection,rightHanded:e.rightHanded},e.decimals&&(f.decimals=e.decimals));return f}\nfunction ul(b,c){var d=c?lc(c.featureProjection):null,e=c?lc(c.dataProjection):null;if(d&&e&&!wc(d,e))if(b instanceof zc)d=b.o(e,d);else{e=xc(e,d);d=[b[0],b[1],b[0],b[3],b[2],b[1],b[2],b[3]];e(d,d,2);var f=[d[0],d[2],d[4],d[6]],g=[d[1],d[3],d[5],d[7]],d=Math.min.apply(null,f),e=Math.min.apply(null,g),f=Math.max.apply(null,f),g=Math.max.apply(null,g),d=Ob(d,e,f,g,void 0)}else d=b;return d};function vl(){this.defaultDataProjection=null}M(vl,sl);function Ij(b){return ha(b)?b:\"string\"===typeof b?(b=JSON.parse(b))?b:null:null}vl.prototype.U=function(){return\"json\"};vl.prototype.g=function(b,c){return this.a(Ij(b),tl(this,b,c))};vl.prototype.b=function(b,c){return this.h(Ij(b),tl(this,b,c))};function wl(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],l=0,g=[0],m;for(m=c+e;m<d;m+=e){var n=b[m],q=b[m+1],l=l+Math.sqrt((n-h)*(n-h)+(q-k)*(q-k));g.push(l);h=n;k=q}d=.5*l;l=0;m=g.length;for(n=!1;l<m;)h=l+(m-l>>1),k=+Ha(g[h],d),0>k?l=h+1:(m=h,n=!k);h=n?l:~l;0>h?(d=(d-g[-h-2])/(g[-h-1]-g[-h-2]),c+=(-h-2)*e,g=b[c],g=g+d*(b[c+e]-g),h=b[c+1],h=h+d*(b[c+e+1]-h)):(g=b[c+h*e],h=b[c+h*e+1])}return f?\n(f[0]=g,f[1]=h,f):[g,h]};function xl(b,c){Bc.call(this);this.c=null;this.j=-1;this.W(b,c)}M(xl,Bc);p=xl.prototype;p.clone=function(){var b=new xl(null);U(b,this.g,this.a.slice());b.v();return b};p.ra=function(){return Hc(this.a,0,this.a.length,this.b)};function Ti(b){if(b.j!=b.f){var c;c=wl(b.a,0,b.a.length,b.b,b.c);b.c=c;b.j=b.f}return b.c}p.Ma=function(b){var c=[];c.length=Jc(this.a,0,this.a.length,this.b,b,c,0);b=new xl(null);U(b,\"XY\",c);b.v();return b};p.U=function(){return\"LineString\"};\np.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,\"XY\",null);this.v()};function yl(b,c){Bc.call(this);this.c=[];this.W(b,c)}M(yl,Bc);p=yl.prototype;p.clone=function(){var b=new yl(null),c=this.c.slice();U(b,this.g,this.a.slice());b.c=c;b.v();return b};p.ra=function(){return Ic(this.a,0,this.c,this.b)};p.ab=function(){return this.c};function Ui(b){var c=[],d=b.a,e=0,f=b.c;b=b.b;var g,h;g=0;for(h=f.length;g<h;++g){var k=f[g],e=wl(d,e,k,b);Ka(c,e);e=k}return c}\np.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b,h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],k=Jc(e,h,n,g,b,c,k);d.push(k);h=n}c.length=k;b=new yl(null);U(b,\"XY\",c);b.c=d;b.v();return b};p.U=function(){return\"MultiLineString\"};p.W=function(b,c){if(b){Dc(this,c,b,2);this.a||(this.a=[]);var d=Gc(this.a,0,b,this.b,this.c);this.a.length=0===d.length?0:d[d.length-1]}else d=this.c,U(this,\"XY\",null),this.c=d;this.v()};function zl(b,c){Bc.call(this);this.W(b,c)}M(zl,Bc);zl.prototype.clone=function(){var b=new zl(null);U(b,this.g,this.a.slice());b.v();return b};zl.prototype.ra=function(){return Hc(this.a,0,this.a.length,this.b)};zl.prototype.U=function(){return\"MultiPoint\"};zl.prototype.W=function(b,c){b?(Dc(this,c,b,1),this.a||(this.a=[]),this.a.length=Fc(this.a,0,b,this.b)):U(this,\"XY\",null);this.v()};function Al(b,c){Bc.call(this);this.c=[];this.B=-1;this.D=null;this.G=-1;this.j=null;this.W(b,c)}M(Al,Bc);p=Al.prototype;p.clone=function(){for(var b=new Al(null),c=this.c.length,d=Array(c),e=0;e<c;++e)d[e]=this.c[e].slice();U(b,this.g,this.a.slice());b.c=d;b.v();return b};p.ra=function(b){var c;void 0!==b?(c=Vi(this).slice(),Sc(c,this.c,this.b,b)):c=this.a;b=c;c=this.c;var d=this.b,e=0,f=[],g=0,h,k;h=0;for(k=c.length;h<k;++h){var l=c[h];f[g++]=Ic(b,e,l,d,f[g]);e=l[l.length-1]}f.length=g;return f};\nfunction Wi(b){if(b.B!=b.f){var c=b.a,d=b.c,e=b.b,f=0,g=[],h,k,l=Jb();h=0;for(k=d.length;h<k;++h){var m=d[h],l=c,n=m[0],q=e,r=Pb(void 0),l=Tb(r,l,f,n,q);g.push((l[0]+l[2])/2,(l[1]+l[3])/2);f=m[m.length-1]}c=Vi(b);d=b.c;e=b.b;h=0;k=[];m=0;for(l=d.length;m<l;++m)f=d[m],k=Oc(c,h,f,e,g,2*m,k),h=f[f.length-1];b.D=k;b.B=b.f}return b.D}\nfunction Vi(b){if(b.G!=b.f){var c=b.a,d;a:{d=b.c;var e,f;e=0;for(f=d.length;e<f;++e)if(!Qc(c,d[e],b.b,void 0)){d=!1;break a}d=!0}d?b.j=c:(b.j=c.slice(),b.j.length=Sc(b.j,b.c,b.b));b.G=b.f}return b.j}p.Ma=function(b){var c=[],d=[],e=this.a,f=this.c,g=this.b;b=Math.sqrt(b);var h=0,k=0,l,m;l=0;for(m=f.length;l<m;++l){var n=f[l],q=[],k=Kc(e,h,n,g,b,c,k,q);d.push(q);h=n[n.length-1]}c.length=k;e=new Al(null);U(e,\"XY\",c);e.c=d;e.v();return e};p.U=function(){return\"MultiPolygon\"};\np.W=function(b,c){if(b){Dc(this,c,b,3);this.a||(this.a=[]);var d=this.a,e=this.b,f=this.c,g=0,f=f?f:[],h=0,k,l;k=0;for(l=b.length;k<l;++k)g=Gc(d,g,b[k],e,f[h]),f[h++]=g,g=g[g.length-1];f.length=h;0===f.length?this.a.length=0:(d=f[f.length-1],this.a.length=0===d.length?0:d[d.length-1])}else d=this.c,U(this,\"XY\",null),this.c=d;this.v()};function Bl(b){b=b?b:{};this.defaultDataProjection=null;this.c=b.geometryName}M(Bl,vl);function Cl(b){var c=\"XY\";!0===b.hasZ&&!0===b.hasM?c=\"XYZM\":!0===b.hasZ?c=\"XYZ\":!0===b.hasM&&(c=\"XYM\");return c}\nvar Dl={Point:function(b){return void 0!==b.m&&void 0!==b.z?new Mc([b.x,b.y,b.z,b.m],\"XYZM\"):void 0!==b.z?new Mc([b.x,b.y,b.z],\"XYZ\"):void 0!==b.m?new Mc([b.x,b.y,b.m],\"XYM\"):new Mc([b.x,b.y])},LineString:function(b){return new xl(b.paths[0],Cl(b))},Polygon:function(b){return new Tc(b.rings,Cl(b))},MultiPoint:function(b){return new zl(b.points,Cl(b))},MultiLineString:function(b){return new yl(b.paths,Cl(b))},MultiPolygon:function(b){return new Al(b.rings,Cl(b))}};\nBl.prototype.a=function(b,c){var d;if(d=b.geometry){var e;if(ea(d.x)&&ea(d.y))e=\"Point\";else if(d.points)e=\"MultiPoint\";else if(d.paths)e=1===d.paths.length?\"LineString\":\"MultiLineString\";else if(d.rings){var f=d.rings,g=Cl(d),h=[];e=[];var k,l;k=0;for(l=f.length;k<l;++k){var m=Ja(f[k]);Pc(m,0,m.length,g.length)?h.push([f[k]]):e.push(f[k])}for(;e.length;){f=e.shift();g=!1;for(k=h.length-1;0<=k;k--)if(Nb((new Lc(h[k][0])).C(),(new Lc(f)).C())){h[k].push(f);g=!0;break}g||h.push([f.reverse()])}d=Wa({},\nd);1===h.length?(e=\"Polygon\",d.rings=h[0]):(e=\"MultiPolygon\",d.rings=h)}d=ul((0,Dl[e])(d),c)}else d=null;h=new Dj;this.c&&Fj(h,this.c);Ej(h,d);c&&c.Qb&&b.attributes[c.Qb]&&(h.g=b.attributes[c.Qb],h.v());b.attributes&&h.l(b.attributes);return h};Bl.prototype.h=function(b,c){var d=c?c:{};if(b.features){var e=[],f=b.features,g,h;d.Qb=b.objectIdFieldName;g=0;for(h=f.length;g<h;++g)e.push(this.a(f[g],d));return e}return[this.a(b,d)]};\nBl.prototype.f=function(b){return b.spatialReference&&b.spatialReference.wkid?lc(\"EPSG:\"+b.spatialReference.wkid):null};function El(b){zc.call(this);this.a=b?b:null;Fl(this)}M(El,zc);function Gl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)gb(b.a[c],\"change\",b.v,b)}function Fl(b){var c,d;if(b.a)for(c=0,d=b.a.length;c<d;++c)Q(b.a[c],\"change\",b.v,b)}p=El.prototype;p.clone=function(){var b=new El(null),c=this.a,d=[],e,f;e=0;for(f=c.length;e<f;++e)d.push(c[e].clone());Gl(b);b.a=d;Fl(b);b.v();return b};p.ib=function(b){Pb(b);for(var c=this.a,d=0,e=c.length;d<e;++d)Sb(b,c[d].C());return b};\np.Ob=function(b){this.s!=this.f&&(Ya(this.h),this.i=0,this.s=this.f);if(0>b||0!==this.i&&b<this.i)return this;var c=b.toString();if(this.h.hasOwnProperty(c))return this.h[c];var d=[],e=this.a,f=!1,g,h;g=0;for(h=e.length;g<h;++g){var k=e[g],l=k.Ob(b);d.push(l);l!==k&&(f=!0)}if(f)return b=new El(null),Gl(b),b.a=d,Fl(b),b.v(),this.h[c]=b;this.i=b;return this};p.U=function(){return\"GeometryCollection\"};p.rotate=function(b,c){for(var d=this.a,e=0,f=d.length;e<f;++e)d[e].rotate(b,c);this.v()};\np.Eb=function(b){var c=this.a,d,e;d=0;for(e=c.length;d<e;++d)c[d].Eb(b);this.v()};p.J=function(){Gl(this);El.X.J.call(this)};function Hl(b){b=b?b:{};this.defaultDataProjection=null;this.defaultDataProjection=lc(b.defaultDataProjection?b.defaultDataProjection:\"EPSG:4326\");this.c=b.geometryName}M(Hl,vl);function Il(b,c){return b?ul((0,Jl[b.type])(b),c):null}\nvar Jl={Point:function(b){return new Mc(b.coordinates)},LineString:function(b){return new xl(b.coordinates)},Polygon:function(b){return new Tc(b.coordinates)},MultiPoint:function(b){return new zl(b.coordinates)},MultiLineString:function(b){return new yl(b.coordinates)},MultiPolygon:function(b){return new Al(b.coordinates)},GeometryCollection:function(b,c){var d=b.geometries.map(function(b){return Il(b,c)});return new El(d)}};\nHl.prototype.a=function(b,c){var d=Il(b.geometry,c),e=new Dj;this.c&&Fj(e,this.c);Ej(e,d);void 0!==b.id&&(e.g=b.id,e.v());b.properties&&e.l(b.properties);return e};Hl.prototype.h=function(b,c){if(\"Feature\"==b.type)return[this.a(b,c)];if(\"FeatureCollection\"==b.type){var d=[],e=b.features,f,g;f=0;for(g=e.length;f<g;++f)d.push(this.a(e[f],c));return d}return[]};Hl.prototype.f=function(b){return(b=b.crs)?\"name\"==b.type?lc(b.properties.name):\"EPSG\"==b.type?lc(\"EPSG:\"+b.properties.code):null:this.defaultDataProjection};function Kl(b,c,d){if(\"array\"==ba(c))for(var e=0;e<c.length;e++)Kl(b,String(c[e]),d);else null!=c&&d.push(\"&\",b,\"\"===c?\"\":\"=\",encodeURIComponent(String(c)))};function Ll(b,c,d){Bc.call(this);Ml(this,b,c?c:0,d)}M(Ll,Bc);Ll.prototype.clone=function(){var b=new Ll(null);U(b,this.g,this.a.slice());b.v();return b};Ll.prototype.ib=function(b){var c=this.a,d=c[this.b]-c[0];return Ob(c[0]-d,c[1]-d,c[0]+d,c[1]+d,b)};Ll.prototype.U=function(){return\"Circle\"};function Ml(b,c,d,e){if(c){Dc(b,e,c,0);b.a||(b.a=[]);e=b.a;c=Ec(e,c);e[c++]=e[0]+d;var f;d=1;for(f=b.b;d<f;++d)e[c++]=e[d];e.length=c}else U(b,\"XY\",null);b.v()};function Nl(b,c,d,e,f){Be.call(this,b,c);this.g=d;this.b=new Image;null!==e&&(this.b.crossOrigin=e);this.f={};this.c=null;this.h=f}M(Nl,Be);p=Nl.prototype;p.J=function(){1==this.state&&Ol(this);this.a&&jb(this.a);this.state=5;Ce(this);Nl.X.J.call(this)};p.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.b:this.b.cloneNode(!1);return this.f[c]=b}return this.b};p.getKey=function(){return this.g};p.ie=function(){this.state=3;Ol(this);Ce(this)};\np.je=function(){this.state=this.b.naturalWidth&&this.b.naturalHeight?2:4;Ol(this);Ce(this)};p.load=function(){0==this.state&&(this.state=1,Ce(this),this.c=[Q(this.b,\"error\",this.ie,this,!0),Q(this.b,\"load\",this.je,this,!0)],this.h(this,this.g))};function Ol(b){b.c.forEach(N);b.c=null};function Pl(b,c){R.call(this,b);this.feature=c}M(Pl,R);\nfunction Ql(b){xh.call(this,{handleDownEvent:Rl,handleEvent:Sl,handleUpEvent:Tl});this.P=null;this.o=!1;this.Ba=b.source?b.source:null;this.pa=b.features?b.features:null;this.Zc=b.snapTolerance?b.snapTolerance:12;this.D=b.type;this.b=Ul(this.D);this.na=b.minPoints?b.minPoints:this.b===Vl?3:2;this.ea=b.maxPoints?b.maxPoints:Infinity;var c=b.geometryFunction;if(!c)if(\"Circle\"===this.D)c=function(b,c){var d=c?c:new Ll([NaN,NaN]),h=b[0],k=b[1],l=h[0]-k[0],h=h[1]-k[1];Ml(d,b[0],Math.sqrt(l*l+h*h));return d};\nelse{var d,c=this.b;c===Xl?d=Mc:c===Yl?d=xl:c===Vl&&(d=Tc);c=function(b,c){var g=c;g?g.W(b):g=new d(b);return g}}this.u=c;this.B=this.i=this.a=this.j=this.g=this.h=null;this.gd=b.clickTolerance?b.clickTolerance*b.clickTolerance:36;this.Y=new Y({source:new Rj({useSpatialIndex:!1,wrapX:b.wrapX?b.wrapX:!1}),style:b.style?b.style:Zl()});this.Aa=b.geometryName;this.Ab=b.condition?b.condition:th;this.aa=b.freehandCondition?b.freehandCondition:uh;Q(this,rb(\"active\"),this.Ja,this)}M(Ql,xh);\nfunction Zl(){var b=Li();return function(c){return b[c.M().U()]}}Ql.prototype.setMap=function(b){Ql.X.setMap.call(this,b);this.Ja()};function Sl(b){this.b!==Yl&&this.b!==Vl||!this.aa(b)||(this.o=!0);var c=!this.o;this.o&&b.type===Ag?($l(this,b),c=!1):b.type===zg?c=am(this,b):b.type===tg&&(c=!1);return yh.call(this,b)&&c}function Rl(b){return this.Ab(b)?(this.P=b.pixel,!0):this.o?(this.P=b.pixel,this.h||bm(this,b),!0):!1}\nfunction Tl(b){this.o=!1;var c=this.P,d=b.pixel,e=c[0]-d[0],c=c[1]-d[1],d=!0;e*e+c*c<=this.gd&&(am(this,b),this.h?this.b===cm?dm(this):em(this,b)?dm(this):$l(this,b):(bm(this,b),this.b===Xl&&dm(this)),d=!1);return d}\nfunction am(b,c){if(b.h){var d=c.coordinate,e=b.g.M(),f;b.b===Xl?f=b.a:b.b===Vl?(f=b.a[0],f=f[f.length-1],em(b,c)&&(d=b.h.slice())):(f=b.a,f=f[f.length-1]);f[0]=d[0];f[1]=d[1];b.u(b.a,e);b.j&&b.j.M().W(d);e instanceof Tc&&b.b!==Vl?(b.i||(b.i=new Dj(new xl(null))),0>=e.c.length?e=null:(d=new Lc(null),U(d,e.g,e.a.slice(0,e.c[0])),d.v(),e=d),d=b.i.M(),U(d,e.g,e.a),d.v()):b.B&&(d=b.i.M(),d.W(b.B));fm(b)}else e=c.coordinate.slice(),b.j?b.j.M().W(e):(b.j=new Dj(new Mc(e)),fm(b));return!0}\nfunction em(b,c){var d=!1;if(b.g){var e=!1,f=[b.h];b.b===Yl?e=b.a.length>b.na:b.b===Vl&&(e=b.a[0].length>b.na,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;g<h;g++){var k=f[g],l=Eh(e,k),m=c.pixel,d=m[0]-l[0],l=m[1]-l[1],m=b.o&&b.aa(c)?1:b.Zc;if(d=Math.sqrt(d*d+l*l)<=m){b.h=k;break}}}return d}\nfunction bm(b,c){var d=c.coordinate;b.h=d;b.b===Xl?b.a=d.slice():b.b===Vl?(b.a=[[d.slice(),d.slice()]],b.B=b.a[0]):(b.a=[d.slice(),d.slice()],b.b===cm&&(b.B=b.a));b.B&&(b.i=new Dj(new xl(b.B)));d=b.u(b.a);b.g=new Dj;b.Aa&&Fj(b.g,b.Aa);Ej(b.g,d);fm(b);S(b,new Pl(\"drawstart\",b.g))}\nfunction $l(b,c){var d=c.coordinate,e=b.g.M(),f,g;if(b.b===Yl)b.h=d.slice(),g=b.a,g.push(d.slice()),f=g.length>b.ea,b.u(g,e);else if(b.b===Vl){g=b.a[0];g.push(d.slice());if(f=g.length>b.ea)b.h=g[0];b.u(b.a,e)}fm(b);f&&dm(b)}\nfunction dm(b){var c=gm(b),d=b.a,e=c.M();b.b===Yl?(d.pop(),b.u(d,e)):b.b===Vl&&(d[0].pop(),d[0].push(d[0][0]),b.u(d,e));\"MultiPoint\"===b.D?Ej(c,new zl([d])):\"MultiLineString\"===b.D?Ej(c,new yl([d])):\"MultiPolygon\"===b.D&&Ej(c,new Al([d]));S(b,new Pl(\"drawend\",c));b.pa&&b.pa.push(c);b.Ba&&b.Ba.Cb(c)}function gm(b){b.h=null;var c=b.g;c&&(b.g=null,b.j=null,b.i=null,b.Y.V().clear(!0));return c}Ql.prototype.w=dc;\nfunction fm(b){var c=[];b.g&&c.push(b.g);b.i&&c.push(b.i);b.j&&c.push(b.j);b=b.Y.V();b.clear(!0);b.Db(c)}Ql.prototype.Ja=function(){var b=this.S,c=this.get(\"active\");b&&c||gm(this);this.Y.setMap(c?b:null)};function Ul(b){var c;\"Point\"===b||\"MultiPoint\"===b?c=Xl:\"LineString\"===b||\"MultiLineString\"===b?c=Yl:\"Polygon\"===b||\"MultiPolygon\"===b?c=Vl:\"Circle\"===b&&(c=cm);return c}var Xl=\"Point\",Yl=\"LineString\",Vl=\"Polygon\",cm=\"Circle\";function hm(b,c,d,e,f,g,h,k,l,m,n){Be.call(this,f,0);this.u=void 0!==n?n:!1;this.s=h;this.o=k;this.c=null;this.f={};this.g=c;this.l=e;this.i=g?g:f;this.b=[];this.Sa=null;this.h=0;g=Je(e,this.i);k=this.l.C();f=this.g.C();g=k?$b(g,k):g;if(0===Ub(g))this.state=4;else if((k=b.C())&&(f?f=$b(f,k):f=k),k=e.I(this.i[0]),n=Yb(g),e=xc(d,b)(n,void 0,n.length),k=d.getPointResolution(k,n),n=pc(d),void 0!==n&&(k*=n),n=pc(b),void 0!==n&&(k/=n),e=b.getPointResolution(k,e)/k,isFinite(e)&&0<e&&(k/=e),e=k,!isFinite(e)||\n0>=e)this.state=4;else if(this.j=new Aj(b,d,g,f,e*(void 0!==m?m:.5)),0===this.j.c.length)this.state=4;else if(this.h=Qe(c,e),d=Cj(this.j),f&&(b.a?(d[1]=Ca(d[1],f[1],f[3]),d[3]=Ca(d[3],f[1],f[3])):d=$b(d,f)),Ub(d))if(b=Ke(c,d,this.h),100>b.ha()*(b.c-b.b+1)){for(c=b.a;c<=b.f;c++)for(d=b.b;d<=b.c;d++)(m=l(this.h,c,d,h))&&this.b.push(m);0===this.b.length&&(this.state=4)}else this.state=3;else this.state=4}M(hm,Be);hm.prototype.J=function(){1==this.state&&(this.Sa.forEach(N),this.Sa=null);hm.X.J.call(this)};\nhm.prototype.T=function(b){if(void 0!==b){var c=I(b);if(c in this.f)return this.f[c];b=$a(this.f)?this.c:this.c.cloneNode(!1);return this.f[c]=b}return this.c};\nhm.prototype.Uc=function(){var b=[];this.b.forEach(function(c){c&&2==c.N()&&b.push({extent:Je(this.g,c.L),image:c.T()})},this);this.b.length=0;if(0===b.length)this.state=3;else{var c=this.i[0],d=Pe(this.l,c),e=ea(d)?d:d[0],d=ea(d)?d:d[1],c=this.l.I(c),f=this.g.I(this.h),g=Je(this.l,this.i);this.c=zj(e,d,this.s,f,this.g.C(),c,g,this.j,b,this.o,this.u);this.state=2}Ce(this)};\nhm.prototype.load=function(){if(0==this.state){this.state=1;Ce(this);var b=0;this.Sa=[];this.b.forEach(function(c){var d=c.N();if(0==d||1==d){b++;var e;e=Q(c,\"change\",function(){var d=c.N();if(2==d||3==d||4==d)N(e),b--,0===b&&(this.Sa.forEach(N),this.Sa=null,this.Uc())},this);this.Sa.push(e)}},this);this.b.forEach(function(b){0==b.N()&&b.load()});0===b&&x.setTimeout(this.Uc.bind(this),0)}};function im(b){gk.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,extent:b.extent,logo:b.logo,opaque:b.opaque,projection:b.projection,state:b.state,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction?b.tileLoadFunction:jm,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:b.wrapX});this.crossOrigin=void 0!==b.crossOrigin?b.crossOrigin:null;this.tileClass=void 0!==b.tileClass?b.tileClass:Nl;this.b={};this.o={};this.S=b.reprojectionErrorThreshold}\nM(im,gk);p=im.prototype;p.Qc=function(){if(ze(this.a))return!0;for(var b in this.b)if(ze(this.b[b]))return!0;return!1};p.Rc=function(b,c){var d=this.bb(b);Ae(this.a,this.a==d?c:{});for(var e in this.b){var f=this.b[e];Ae(f,f==d?c:{})}};p.kb=function(){return 0};p.Mb=function(b){return this.c&&b&&!wc(this.c,b)?!1:im.X.Mb.call(this,b)};p.la=function(b){var c=this.c;return!this.tileGrid||c&&!wc(c,b)?(c=I(b).toString(),c in this.o||(this.o[c]=Se(b)),this.o[c]):this.tileGrid};\np.bb=function(b){var c=this.c;if(!c||wc(c,b))return this.a;b=I(b).toString();b in this.b||(this.b[b]=new ye);return this.b[b]};function km(b,c,d,e,f,g){c=[c,d,e];f=(d=Ye(b,c,g))?b.tileUrlFunction(d,f,g):void 0;f=new b.tileClass(c,void 0!==f?0:4,void 0!==f?f:\"\",b.crossOrigin,b.tileLoadFunction);f.key=\"\";Q(f,\"change\",b.D,b);return f}\nfunction Tg(b,c,d,e,f,g){if(b.c&&g&&!wc(b.c,g)){var h=b.bb(g);d=[c,d,e];c=b.lb.apply(b,d);if(we(h,c))return h.get(c);var k=b.c;e=b.la(k);var l=b.la(g),m=Ye(b,d,g);b=new hm(k,e,g,l,d,m,b.mb(f),0,function(b,c,d,e){return lm(this,b,c,d,e,k)}.bind(b),b.S,!1);h.set(c,b);return b}return lm(b,c,d,e,f,g)}\nfunction lm(b,c,d,e,f,g){var h=null,k=b.lb(c,d,e);if(we(b.a,k)){if(h=b.a.get(k),\"\"!=h.key){var l=h;h.a&&\"\"==h.a.key?(h=h.a,2==l.N()&&(h.a=l)):(h=km(b,c,d,e,f,g),2==l.N()?h.a=l:l.a&&2==l.a.N()&&(h.a=l.a,l.a=null));h.a&&(h.a.a=null);b.a.replace(k,h)}}else h=km(b,c,d,e,f,g),b.a.set(k,h);return h}function jm(b,c){b.T().src=c};function mm(b){var c=void 0!==b.projection?b.projection:\"EPSG:3857\",d;if(void 0!==b.tileGrid)d=b.tileGrid;else{d={extent:Te(c),maxZoom:b.maxZoom,minZoom:b.minZoom,tileSize:b.tileSize};var e={};Wa(e,void 0!==d?d:{});void 0===e.extent&&(e.extent=lc(\"EPSG:3857\").C());e.resolutions=Ue(e.extent,e.maxZoom,e.tileSize);delete e.maxZoom;d=new Fe(e)}im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,opaque:b.opaque,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,\ntileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}M(mm,im);function nm(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[om];mm.call(this,{attributions:c,cacheSize:b.cacheSize,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:\"anonymous\",opaque:void 0!==b.opaque?b.opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:\"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png\",wrapX:b.wrapX})}M(nm,mm);var om=new jd({html:'&copy; <a href=\"http://www.openstreetmap.org/copyright\">OpenStreetMap</a> contributors.'});function pm(b){b=b||{};var c=qm[b.layer];this.u=b.layer;mm.call(this,{attributions:c.attributions,cacheSize:b.cacheSize,crossOrigin:\"anonymous\",logo:\"https://developer.mapquest.com/content/osm/mq_logo.png\",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:c.opaque,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:\"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/\"+this.u+\"/{z}/{x}/{y}.jpg\"})}M(pm,mm);\nvar rm=new jd({html:'Tiles Courtesy of <a href=\"http://www.mapquest.com/\">MapQuest</a>'}),qm={osm:{maxZoom:19,opaque:!0,attributions:[rm,om]},sat:{maxZoom:18,opaque:!0,attributions:[rm,new jd({html:\"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency\"})]},hyb:{maxZoom:18,opaque:!1,attributions:[rm,om]}};function sm(b){b=b||{};im.call(this,{attributions:b.attributions,cacheSize:b.cacheSize,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.P=b.params||{};this.u=Jb()}M(sm,im);sm.prototype.mb=function(b){return b};\nsm.prototype.g=function(b,c,d){var e=this.tileGrid;e||(e=this.la(d));if(!(e.Nb().length<=b[0])){var f=Je(e,b,this.u),g=tb(Pe(e,b[0]),this.h);1!=c&&(g=sb(g,c,this.h));e={F:\"image\",FORMAT:\"PNG32\",TRANSPARENT:!0};Wa(e,this.P);var h;var k=this.urls;if(k){d=d.qa.split(\":\").pop();e.SIZE=g[0]+\",\"+g[1];e.BBOX=f.join(\",\");e.BBOXSR=d;e.IMAGESR=d;e.DPI=Math.round(e.DPI?e.DPI*c:90*c);b=[(1==k.length?k[0]:k[Ea((b[1]<<b[0])+b[2],k.length)]).replace(/MapServer\\/?$/,\"MapServer/export\").replace(/ImageServer\\/?$/,\n\"ImageServer/exportImage\")];for(h in e)Kl(h,e[h],b);b[1]&&(h=b[0],c=h.indexOf(\"#\"),0<=c&&(b.push(h.substr(c)),b[0]=h=h.substr(0,c)),c=h.indexOf(\"?\"),0>c?b[1]=\"?\":c==h.length-1&&(b[1]=void 0));h=b.join(\"\")}else h=void 0;return h}};F(\"ol.format.GeoJSON\",Hl,OPENLAYERS);Hl.prototype.readFeatures=Hl.prototype.b;Hl.prototype.readFeature=Hl.prototype.g;F(\"ol.format.EsriJSON\",Bl,OPENLAYERS);Bl.prototype.readFeatures=Bl.prototype.b;Bl.prototype.readFeature=Bl.prototype.g;F(\"ol.style.Style\",Fi,OPENLAYERS);F(\"ol.style.Circle\",Ei,OPENLAYERS);F(\"ol.style.Fill\",yi,OPENLAYERS);F(\"ol.style.Stroke\",Di,OPENLAYERS);F(\"ol.style.Icon\",Vg,OPENLAYERS);F(\"ol.View\",V,OPENLAYERS);V.prototype.on=V.prototype.ba;V.prototype.getZoom=V.prototype.wd;\nV.prototype.setZoom=V.prototype.Ee;V.prototype.getCenter=V.prototype.ia;V.prototype.setCenter=V.prototype.oa;V.prototype.calculateExtent=V.prototype.jc;V.prototype.getProjection=V.prototype.le;V.prototype.fit=V.prototype.nd;F(\"ol.control.defaults\",ef,OPENLAYERS);F(\"ol.layer.Tile\",X,OPENLAYERS);X.prototype.getVisible=X.prototype.cb;X.prototype.setVisible=X.prototype.Gc;X.prototype.getZIndex=X.prototype.Vb;X.prototype.setZIndex=X.prototype.Hc;X.prototype.getOpacity=X.prototype.Ub;\nX.prototype.setOpacity=X.prototype.Fc;X.prototype.getSource=X.prototype.V;X.prototype.setSource=X.prototype.Zb;F(\"ol.layer.Vector\",Y,OPENLAYERS);Y.prototype.getVisible=Y.prototype.cb;Y.prototype.setVisible=Y.prototype.Gc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setStyle=Y.prototype.s;Y.prototype.getZIndex=Y.prototype.Vb;Y.prototype.setZIndex=Y.prototype.Hc;Y.prototype.getOpacity=Y.prototype.Ub;Y.prototype.setOpacity=Y.prototype.Fc;Y.prototype.getSource=Y.prototype.V;Y.prototype.setSource=Y.prototype.Zb;\nF(\"ol.source.OSM\",nm,OPENLAYERS);nm.prototype.refresh=nm.prototype.wa;F(\"ol.source.MapQuest\",pm,OPENLAYERS);pm.prototype.refresh=pm.prototype.wa;F(\"ol.source.XYZ\",mm,OPENLAYERS);mm.prototype.refresh=mm.prototype.wa;mm.prototype.setUrl=mm.prototype.s;mm.prototype.refresh=mm.prototype.wa;F(\"ol.Map\",Z,OPENLAYERS);Z.prototype.on=Z.prototype.ba;Z.prototype.getTarget=Z.prototype.Tb;Z.prototype.getTargetElement=Z.prototype.Na;Z.prototype.getView=Z.prototype.O;Z.prototype.addOverlay=Z.prototype.ld;\nZ.prototype.addLayer=Z.prototype.kd;Z.prototype.removeLayer=Z.prototype.Ae;Z.prototype.getEventPixel=Z.prototype.vc;Z.prototype.hasFeatureAtPixel=Z.prototype.Td;Z.prototype.getSize=Z.prototype.Pa;Z.prototype.updateSize=Z.prototype.vb;Z.prototype.forEachFeatureAtPixel=Z.prototype.pd;Z.prototype.addInteraction=Z.prototype.jd;Z.prototype.removeInteraction=Z.prototype.ze;Z.prototype.beforeRender=Z.prototype.fa;Z.prototype.addControl=Z.prototype.hd;F(\"ol.source.Vector\",Rj,OPENLAYERS);\nRj.prototype.getFeatures=Rj.prototype.pe;Rj.prototype.getExtent=Rj.prototype.C;Rj.prototype.refresh=Rj.prototype.wa;Rj.prototype.addFeatures=Rj.prototype.Db;Rj.prototype.addFeature=Rj.prototype.Cb;Rj.prototype.clear=Rj.prototype.clear;Rj.prototype.forEachFeature=Rj.prototype.od;Rj.prototype.refresh=Rj.prototype.wa;F(\"ol.source.TileArcGISRest\",sm,OPENLAYERS);sm.prototype.refresh=sm.prototype.wa;F(\"ol.Overlay\",nl,OPENLAYERS);nl.prototype.setPosition=nl.prototype.Ec;F(\"ol.Feature\",Dj,OPENLAYERS);\nDj.prototype.getProperties=Dj.prototype.za;Dj.prototype.setProperties=Dj.prototype.l;Dj.prototype.getGeometry=Dj.prototype.M;F(\"ol.geom.Point\",Mc,OPENLAYERS);Mc.prototype.transform=Mc.prototype.o;Mc.prototype.getCoordinates=Mc.prototype.ra;Mc.prototype.getExtent=Mc.prototype.C;F(\"ol.geom.Polygon\",Tc,OPENLAYERS);Tc.prototype.getCoordinates=Tc.prototype.ra;Tc.prototype.getExtent=Tc.prototype.C;Tc.prototype.transform=Tc.prototype.o;F(\"ol.geom.LineString\",xl,OPENLAYERS);xl.prototype.getCoordinates=xl.prototype.ra;\nxl.prototype.getExtent=xl.prototype.C;xl.prototype.transform=xl.prototype.o;F(\"ol.proj.Projection\",ic,OPENLAYERS);ic.prototype.getCode=ic.prototype.l;F(\"ol.interaction.Draw\",Ql,OPENLAYERS);Ql.prototype.on=Ql.prototype.ba;F(\"ol.animation.pan\",cd,OPENLAYERS);F(\"ol.control.FullScreen\",kf,OPENLAYERS);\n  return OPENLAYERS.ol;\n}));\n\n","const ol = require('./ol-build');\n\nexport default ol;","/**\r\n * Created by gavorhes on 12/11/2015.\r\n */\r\nimport provide from './provide';\r\nlet nm = provide('util.checkDefined');\r\n\r\n/**\r\n * check if the input is undefined or null\r\n * @param {*} input - input pointer\r\n * @returns {boolean} true undefined or null\r\n */\r\nexport function undefinedOrNull (input){\r\n    \"use strict\";\r\n\r\n    return (typeof input === 'undefined' || input === null);\r\n}\r\n\r\nnm.undefinedOrNull = undefinedOrNull;\r\n\r\n\r\n/**\r\n * check if the input is defined and not null\r\n * @param {*} input - input pointer\r\n * @returns {boolean} true defined and not null\r\n */\r\nexport function definedAndNotNull (input){\r\n    \"use strict\";\r\n\r\n    return !(undefinedOrNull(input));\r\n}\r\n\r\nnm.definedAndNotNull = definedAndNotNull;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\nimport provide from './provide';\r\nimport * as chk from './checkDefined';\r\nlet nm = provide('util.colors');\r\n\r\n\r\n/**\r\n * helper function to convert to hex\r\n * @param {number|string} x - the number to convert to hex\r\n * @returns {string} number as hex\r\n * @private\r\n */\r\nfunction _hex(x) {\r\n    let hexDigits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\r\n\r\n    return isNaN(x) ? \"00\" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];\r\n}\r\n\r\n/**\r\n * converts an RGB string to hex\r\n * @param {string} rgb - rgb color\r\n * @returns {string} rbg as hex\r\n */\r\nexport function rgb2hex(rgb) {\r\n    let rgb1 = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\r\n\r\n    return (\"#\" + _hex(rgb1[1]) + _hex(rgb1[2]) + _hex(rgb1[3])).toUpperCase();\r\n}\r\n\r\nnm.rgb2hex = rgb2hex;\r\n\r\n\r\n/**\r\n * Convert hex string to RGB or RGBA string\r\n * @param {string} hexString - hex color string\r\n * @param {number} [alphaVal=undefined] Alpha value\r\n * @returns {string} - rgb or rgba color\r\n */\r\nexport function hexAlphaToRgbOrRgba(hexString, alphaVal) {\r\n    hexString = ((hexString.charAt(0) == \"#\") ? hexString.substring(1, 7) : hexString);\r\n    let r = parseInt(hexString.substring(0, 2), 16).toString() || '0';\r\n    let g = parseInt(hexString.substring(2, 4), 16).toString() || '0';\r\n    let b = parseInt(hexString.substring(4, 6), 16).toString() || '0';\r\n    if (alphaVal) {\r\n        return `rgba(${r},${g},${b},${alphaVal})`;\r\n    } else {\r\n        return `rgba(${r},${g},${b})`;\r\n    }\r\n}\r\n\r\nnm.hexAlphaToRgbOrRgba = hexAlphaToRgbOrRgba;\r\n\r\n\r\n/**\r\n * adds alpha value to rgb string 'rgb(r, b, g)', returns 'rgba(r, g, b, a)'\r\n * @param {string} rgb - rgb color\r\n * @param {number} alpha - alpha value 0 to 1\r\n * @returns {string} rgba color\r\n */\r\nexport function rgbToRgba(rgb, alpha) {\r\n    let pieces = rgb.split(',');\r\n    pieces[0] = pieces[0].replace('rgb', 'rgba');\r\n    pieces[2] = pieces[2].replace(')', '');\r\n    pieces.push(' ' + alpha.toFixed(1) + ')');\r\n\r\n    return pieces.join(',');\r\n}\r\n\r\nnm.rgbToRgba = rgbToRgba;\r\n\r\n\r\n/**\r\n * @typedef {function} colorLookupByNumber\r\n * @param {number} num - the number to use to retrieve the color\r\n * @returns {string} rgb color\r\n */\r\n\r\n\r\n/**\r\n * Make a blue green red gradient\r\n * @param {number} minVal - minimum value\r\n * @param {number} maxVal - maximum value\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradient(minVal, maxVal, flipColors) {\r\n\r\n    if (typeof flipColors != \"boolean\") {\r\n        flipColors = false;\r\n    }\r\n\r\n    return function (theVal) {\r\n        let r, g, b;\r\n        let ratio;\r\n\r\n        if (chk.undefinedOrNull(theVal)) {\r\n            return 'rgb(100,100,100)';\r\n        }\r\n\r\n        let percent = (theVal - minVal) / (maxVal - minVal);\r\n\r\n        if (flipColors == true) {\r\n            percent = 1 - percent;\r\n        }\r\n\r\n        if (percent >= 1) {\r\n            r = 255;\r\n            g = 0;\r\n            b = 0;\r\n        } else if (percent <= 0) {\r\n            r = 0;\r\n            g = 0;\r\n            b = 255;\r\n        } else if (percent < .25) {\r\n            // green up, blue constant\r\n            r = 0;\r\n            g = Math.floor(255 * percent / 0.25);\r\n            b = 255;\r\n        } else if (percent < 0.50) {\r\n            //blue down, green constant\r\n            ratio = (percent - 0.25) / 0.25;\r\n            r = 0;\r\n            g = 255;\r\n            b = 255 - Math.floor(255 * ratio);\r\n        } else if (percent < 0.75) {\r\n            // red up, green constant\r\n            ratio = (percent - 0.5) / 0.25;\r\n            r = Math.floor(255 * ratio);\r\n            g = 255;\r\n            b = 0;\r\n        } else {\r\n            // green down, red constant\r\n            ratio = (percent - 0.75) / 0.25;\r\n            r = 255;\r\n            g = 255 - Math.floor(255 * ratio);\r\n            b = 0;\r\n        }\r\n\r\n        r = r.toFixed();\r\n        g = g.toFixed();\r\n        b = b.toFixed();\r\n\r\n        return 'rgb(' + r + ',' + g + ',' + b + ')';\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradient = makeBlueGreenRedGradient;\r\n\r\n\r\n/**\r\n * Create a function that will return colors based on a gradient\r\n * @param {number} median - median value\r\n * @param {number} stdDev - standard deviation\r\n * @param {boolean} flipColors - if the colors should be flipped\r\n * @returns {colorLookupByNumber} color lookup function\r\n */\r\nexport function makeBlueGreenRedGradientZScore(median, stdDev, flipColors) {\r\n\r\n    let grd = makeBlueGreenRedGradient(-2.5, 2.5, flipColors);\r\n\r\n    return function (theVal) {\r\n\r\n        let zScore;\r\n        if (theVal == null) {\r\n            zScore = null;\r\n        } else {\r\n            zScore = (theVal - median) / stdDev;\r\n        }\r\n\r\n        return grd(zScore);\r\n    };\r\n}\r\n\r\nnm.makeBlueGreenRedGradientZScore = makeBlueGreenRedGradientZScore;\r\n","/**\r\n * Created by gavorhes on 11/3/2015.\r\n */\r\n\r\nimport provide from './provide';\r\nlet nm = provide('util');\r\n\r\n\r\n/**\r\n * guids are used to uniquely identify groups and features\r\n * @returns {string} a new guid\r\n */\r\nfunction makeGuid() {\r\n        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\r\n            .replace(/[xy]/g, function (c) {\r\n                let r = Math.random() * 16 | 0, v = c == 'x' ? r : r & 0x3 | 0x8;\r\n\r\n                return v.toString(16);\r\n            });\r\n\r\n}\r\nnm.makeGuid = makeGuid;\r\nexport default makeGuid;\r\n\r\n\r\n","/**\r\n * Created by gavorhes on 12/10/2015.\r\n */\r\n\r\n\r\n/**\r\n * create a namespace on the gv object\r\n * @param {string} namespace to create\r\n * @returns {object} object representing the namespace\r\n */\r\nfunction provide(namespace){\r\n    \"use strict\";\r\n    if (typeof window.gv == 'undefined'){\r\n        window.gv = {};\r\n    }\r\n\r\n    let parts = namespace.split('.');\r\n    let nameSpace = window.gv;\r\n\r\n    for (let i=0; i< parts.length; i++){\r\n        let newObject = nameSpace[parts[i]];\r\n\r\n        if (typeof newObject == 'undefined'){\r\n            nameSpace[parts[i]] = {};\r\n        }\r\n\r\n        nameSpace = nameSpace[parts[i]];\r\n    }\r\n\r\n    return nameSpace;\r\n}\r\n\r\nprovide('util');\r\nwindow.gv.util.provide = provide;\r\n\r\nexport default provide;\r\n","/**\r\n * Created by gavorhes on 5/19/2016.\r\n */\r\n\r\nimport 'babel-polyfill';\r\nimport quickMap from '../src/olHelpers/quickMap';\r\nimport ItsLayerCollection from '../src/collections/ItsLayerCollection';\r\nimport LayerLegend from '../src/collections/LayerLegend';\r\nimport LayerItsInventory from '../src/layers/LayerItsInventory';\r\nimport LayerBaseVectorGeoJson from '../src/layers/LayerBaseVectorGeoJson';\r\nimport LayerEsriMapServer from '../src/layers/LayerEsriMapServer';\r\n\r\nlet map = quickMap({fullScreen: true});\r\n\r\n//\r\n// let inventLyr = new LayerItsInventory({name: 'Camera', itsType: 'cctv', minZoom: 4, itsIcon: 'cctv.png'});\r\n// map.addLayer(inventLyr.olLayer);\r\n//\r\n// inventLyr.visible = true;\r\n//\r\n// let newLayer = new LayerBaseVectorGeoJson('', {});\r\n//\r\n//\r\n//         let metamanagerSegments = new LayerEsriMapServer(\r\n//             'http://transportal.cee.wisc.edu/applications/arcgis2/rest/services/MetaManager/MM_All_Segments/MapServer',\r\n//             {\r\n//                 minZoom: 3,\r\n//                 visible: true,\r\n//                 name: 'Metamanager Segments',\r\n//                 opacity: 0.6\r\n//             });\r\n//\r\n// // console.log(metamanagerSegments.visible);\r\n//\r\n// map.addLayer(metamanagerSegments.olLayer);\r\n\r\n\r\n\r\n\r\nlet itsLayerCollection = new ItsLayerCollection(map);\r\n\r\nfor (let l of itsLayerCollection.layers){\r\n    console.log(l.visible);\r\n    console.log(l);\r\n}\r\n\r\n\r\nlet layerArray = [\r\n    {\r\n        groupName: 'ITS Inventory Layers',\r\n        collapse: false,\r\n        addCheck: true,\r\n        items: itsLayerCollection.layers\r\n    }\r\n];\r\n\r\nlet legend = new LayerLegend(layerArray, 'legend-container', {});\r\n\r\n\r\n\r\n","/**\r\n * Created by gavorhes on 5/5/2016.\r\n */\r\n\r\nimport quickMap from '../src/olHelpers/quickMap';\r\nimport cat from '../src/layers/LayerBaseVectorEsri';\r\n\r\nlet chai = require('chai');\r\n\r\ndescribe('karma test with Chai', function() {\r\n  it('should expose the Chai assert method', function() {\r\n    let map = quickMap();\r\n    // console.log(map);\r\n    assert.ok('everything', 'everything is ok');\r\n  });\r\n\r\n  it('should expose the Chai expect method', function() {\r\n    expect('foo').to.not.equal('bar');\r\n  });\r\n\r\n  it('should expose the Chai should property', function() {\r\n    should.exist(123);\r\n    (1).should.not.equal(2);\r\n  });\r\n\r\n  it('should work with ES6 fat arrow function', () => {\r\n    (1).should.not.equal(2);\r\n    (1).should.not.equal(2);\r\n    (2).should.not.equal(3);\r\n    (11).should.not.equal(12);\r\n    (11).should.not.equal(15);\r\n    (11).should.not.equal(12);\r\n    (11).should.not.equal(15);\r\n    // (11).should.not.equal(11);\r\n    // (11).should.not.equal(11);\r\n    // (2).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n  });\r\n});\r\n\r\n\r\n\r\ndescribe('karma test with 2', function() {\r\n  it('should expose the Chai assert method', function() {\r\n    assert.ok('everything', 'everything is ok');\r\n  });\r\n\r\n  it('should expose the Chai expect method', function() {\r\n    expect('foo').to.not.equal('bar');\r\n  });\r\n\r\n  it('should expose the Chai should property', function() {\r\n    should.exist(123);\r\n    (1).should.not.equal(2);\r\n  });\r\n\r\n  it('should work with ES6 fat arrow function', () => {\r\n    (1).should.not.equal(2);\r\n    (1).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n  });\r\n});\r\n\r\n\r\n\r\n","/**\r\n * Created by gavorhes on 5/5/2016.\r\n */\r\n\r\n\r\nimport quickMap from '../src/olHelpers/quickMap';\r\n\r\n// import quickMap from '../src/olHelpers/quickMap';\r\nlet chai = require('chai');\r\n\r\ndescribe('karma test with Chaiadfadf', function() {\r\n  it('should expose the Chai assert method', function() {\r\n    let map = quickMap();\r\n    // console.log(map);\r\n    assert.ok('everything', 'everything is ok');\r\n  });\r\n\r\n  it('should expose the Chai expect method', function() {\r\n    'foo'.should.not.equals('t');\r\n  });\r\n\r\n  it('should expose the Chai should property', function() {\r\n    should.exist(123);\r\n    (1).should.not.equal(2);\r\n  });\r\n\r\n  it('should work with ES6 fat arrow function', () => {\r\n    (1).should.not.equal(2);\r\n    (1).should.not.equal(2);\r\n    (2).should.not.equal(3);\r\n    (2).should.not.equal(3);\r\n    (2).should.not.equal(10);\r\n    (2).should.not.equal(10);\r\n    (2).should.not.equal(2);\r\n  });\r\n});\r\n\r\n\r\n\r\ndescribe('karma test with 2adfaasdf', function() {\r\n  it('should expose the Chai assert method', function() {\r\n    assert.ok('everything', 'everything is ok');\r\n  });\r\n\r\n  it('should expose the Chai expect method', function() {\r\n    \r\n    expect('foo').to.not.equal('bar');\r\n    expect('cat').to.equal('cat');\r\n    expect('cat').to.equal('bird');\r\n  });\r\n\r\n  it('should expose the Chai should property', function() {\r\n    should.exist(123);\r\n    (1).should.not.equal(2);\r\n  });\r\n\r\n  it('should work with ES6 fat arrow function', () => {\r\n    (1).should.not.equal(2);\r\n    (1).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n    // (2).should.not.equal(2);\r\n  });\r\n});\r\n\r\n\r\n\r\n"]}