{
  "version": 3,
  "sources": [
    "node_modules/browser-pack-flat/_prelude",
    "node_modules/d-bootstrap/contextMenu/index.js",
    "node_modules/d-bootstrap/alert/index.js",
    "node_modules/d-bootstrap/tabs/index.js",
    "node_modules/d-bootstrap/modal/index.js",
    "node_modules/d-bootstrap/dropdown/index.js",
    "node_modules/derby/lib/documentListeners.js",
    "node_modules/derby-templates/lib/templates.js",
    "node_modules/derby-templates/lib/options.js",
    "node_modules/serialize-object/index.js",
    "node_modules/timers-browserify/main.js",
    "node_modules/events/events.js",
    "node_modules/uuid/rng-browser.js",
    "node_modules/uuid/uuid.js",
    "node_modules/racer/lib/Model/Model.js",
    "node_modules/fast-deep-equal/index.js",
    "node_modules/process/browser.js",
    "node_modules/racer/lib/util.js",
    "node_modules/racer/lib/Model/unbundle.js",
    "node_modules/racer/lib/Model/events.js",
    "node_modules/racer/lib/Model/paths.js",
    "node_modules/racer/lib/Model/Doc.js",
    "node_modules/racer/lib/Model/LocalDoc.js",
    "node_modules/racer/lib/Model/collections.js",
    "node_modules/racer/lib/Model/mutators.js",
    "node_modules/arraydiff/index.js",
    "node_modules/racer/lib/Model/setDiff.js",
    "node_modules/sharedb/lib/emitter.js",
    "node_modules/sharedb/lib/logger/logger.js",
    "node_modules/sharedb/lib/logger/index.js",
    "node_modules/sharedb/lib/error.js",
    "node_modules/ot-json0/lib/bootstrapTransform.js",
    "node_modules/ot-json0/lib/text0.js",
    "node_modules/ot-json0/lib/json0.js",
    "node_modules/ot-json0/lib/index.js",
    "node_modules/sharedb/lib/types.js",
    "node_modules/sharedb/lib/util.js",
    "node_modules/sharedb/lib/client/doc.js",
    "node_modules/sharedb/lib/client/query.js",
    "node_modules/sharedb/lib/client/presence/local-presence.js",
    "node_modules/sharedb/lib/client/presence/remote-presence.js",
    "node_modules/async/dist/async.js",
    "node_modules/hat/index.js",
    "node_modules/sharedb/lib/client/presence/presence.js",
    "node_modules/sharedb/lib/client/presence/local-doc-presence.js",
    "node_modules/sharedb/lib/ot.js",
    "node_modules/sharedb/lib/client/presence/remote-doc-presence.js",
    "node_modules/sharedb/lib/client/presence/doc-presence.js",
    "node_modules/sharedb/lib/snapshot.js",
    "node_modules/sharedb/lib/client/snapshot-request/snapshot-request.js",
    "node_modules/sharedb/lib/client/snapshot-request/snapshot-version-request.js",
    "node_modules/sharedb/lib/client/snapshot-request/snapshot-timestamp-request.js",
    "node_modules/sharedb/lib/client/connection.js",
    "node_modules/sharedb/lib/client/index.js",
    "node_modules/racer/lib/Model/RemoteDoc.js",
    "node_modules/racer/lib/Model/connection.js",
    "node_modules/racer/lib/Model/Query.js",
    "node_modules/racer/lib/Model/CollectionCounter.js",
    "node_modules/racer/lib/Model/subscriptions.js",
    "node_modules/racer/lib/Model/contexts.js",
    "node_modules/racer/lib/Model/defaultFns.js",
    "node_modules/racer/lib/Model/fn.js",
    "node_modules/racer/lib/Model/filter.js",
    "node_modules/racer/lib/Model/refList.js",
    "node_modules/racer/lib/Model/ref.js",
    "node_modules/racer/lib/Model/index.js",
    "node_modules/racer/lib/Racer.js",
    "node_modules/racer/lib/index.js",
    "node_modules/browserchannel/dist/bcsocket-uncompressed.js",
    "node_modules/racer-highway/lib/browser/socket.js",
    "node_modules/racer-highway/lib/browser/index.js",
    "node_modules/path-browserify/index.js",
    "node_modules/tracks/vendor/express/utils.js",
    "node_modules/tracks/vendor/express/router/route.js",
    "node_modules/es-errors/index.js",
    "node_modules/es-errors/eval.js",
    "node_modules/es-errors/range.js",
    "node_modules/es-errors/ref.js",
    "node_modules/es-errors/syntax.js",
    "node_modules/es-errors/type.js",
    "node_modules/es-errors/uri.js",
    "node_modules/has-symbols/shams.js",
    "node_modules/has-symbols/index.js",
    "node_modules/has-proto/index.js",
    "node_modules/function-bind/implementation.js",
    "node_modules/function-bind/index.js",
    "node_modules/hasown/index.js",
    "node_modules/get-intrinsic/index.js",
    "node_modules/es-define-property/index.js",
    "node_modules/gopd/index.js",
    "node_modules/define-data-property/index.js",
    "node_modules/has-property-descriptors/index.js",
    "node_modules/set-function-length/index.js",
    "node_modules/call-bind/index.js",
    "node_modules/call-bind/callBound.js",
    "node_modules/browser-resolve/empty.js",
    "node_modules/object-inspect/index.js",
    "node_modules/side-channel/index.js",
    "node_modules/qs/lib/formats.js",
    "node_modules/qs/lib/utils.js",
    "node_modules/qs/lib/stringify.js",
    "node_modules/qs/lib/parse.js",
    "node_modules/qs/lib/index.js",
    "node_modules/punycode/punycode.js",
    "node_modules/url/url.js",
    "node_modules/tracks/lib/router.js",
    "node_modules/tracks/lib/History.js",
    "node_modules/tracks/lib/browser.js",
    "node_modules/derby-templates/lib/contexts.js",
    "node_modules/derby-templates/lib/operatorFns.js",
    "node_modules/saddle/index.js",
    "node_modules/derby-templates/lib/util.js",
    "node_modules/derby-templates/lib/expressions.js",
    "node_modules/derby-templates/index.js",
    "node_modules/derby/lib/Dom.js",
    "node_modules/derby/lib/Controller.js",
    "node_modules/derby/lib/components.js",
    "node_modules/derby/lib/eventmodel.js",
    "node_modules/derby/lib/textDiff.js",
    "node_modules/derby/lib/Page.js",
    "node_modules/derby/lib/_views.js",
    "node_modules/derby/lib/App.js",
    "node_modules/derby/lib/Derby.js",
    "node_modules/derby",
    "node_modules/derby-debug/index.js",
    "node_modules/d-bootstrap/index.js",
    "node_modules/d-connection-alert/index.js",
    "node_modules/d-before-unload/index.js",
    "node_modules/browser-pack-flat/_postlude",
    "widgets/index.js"
  ],
  "names": [
    "require",
    "exposedRequire",
    "e",
    "r",
    "m",
    "hasOwnProperty",
    "createModuleFactory",
    "t",
    "exports",
    "parent",
    "_$ContextMenu_9",
    "module",
    "ContextMenu",
    "prototype",
    "view",
    "__dirname",
    "create",
    "model",
    "dom",
    "contextMenu",
    "this",
    "on",
    "menu",
    "contains",
    "target",
    "set",
    "open",
    "Error",
    "preventDefault",
    "x",
    "clientX",
    "y",
    "clientY",
    "args",
    "Array",
    "slice",
    "call",
    "arguments",
    "unshift",
    "push",
    "style",
    "top",
    "left",
    "emitDelayable",
    "apply",
    "select",
    "option",
    "value",
    "content",
    "optionValue",
    "action",
    "emit",
    "Alert",
    "setNull",
    "show",
    "hide",
    "setTimeout",
    "Tabs",
    "init",
    "index",
    "Modal",
    "modal",
    "get",
    "keyCode",
    "document",
    "body",
    "classList",
    "add",
    "emitCancellable",
    "remove",
    "Dropdown",
    "dropdown",
    "toggleButton",
    "toggle",
    "label",
    "options",
    "getAttribute",
    "i",
    "len",
    "length",
    "inputSupportsSelection",
    "input",
    "type",
    "inputIsNumberValue",
    "multiple",
    "doc",
    "addEventListener",
    "documentInput",
    "documentChange",
    "parseFloat",
    "window",
    "navigator",
    "appVersion",
    "split",
    "activeElement",
    "createElement",
    "valueAsNumber",
    "oldInputValue",
    "inputValue",
    "tagName",
    "setInputValue",
    "setBoundProperty",
    "setOptionBindings",
    "node",
    "firstChild",
    "nextSibling",
    "hasChildNodes",
    "property",
    "binding",
    "$bindAttributes",
    "isUnbound",
    "template",
    "expression",
    "context",
    "pass",
    "$event",
    "segments",
    "pathSegments",
    "controller",
    "_$textDiff_33",
    "onTextInput",
    "textDiffBinding",
    "serializeObject",
    "_$serializeObject_93",
    "DependencyOptions",
    "_$options_21",
    "concat",
    "_$util_23",
    "hasKeys",
    "traverseAndCreate",
    "concatArrayDependencies",
    "dependencies",
    "expressions",
    "concatDependencies",
    "expressionDependencies",
    "getDependencies",
    "key",
    "_$saddle_92",
    "Marker",
    "View",
    "ViewInstance",
    "DynamicViewInstance",
    "ViewParent",
    "ContextClosure",
    "Views",
    "MarkupHook",
    "ElementOn",
    "ComponentOn",
    "AsProperty",
    "AsObject",
    "AsObjectComponent",
    "AsArray",
    "AsArrayComponent",
    "emptyTemplate",
    "Template",
    "unbound",
    "Binding",
    "resolve",
    "shouldIgnoreTemplate",
    "Doctype",
    "Text",
    "DynamicText",
    "Comment",
    "DynamicComment",
    "Html",
    "DynamicHtml",
    "Element",
    "concatMapDependencies",
    "attributes",
    "DynamicElement",
    "Block",
    "meta",
    "blockType",
    "blockContext",
    "child",
    "ConditionalBlock",
    "condition",
    "getCondition",
    "end",
    "concatSubArrayDependencies",
    "contents",
    "EachBlock",
    "items",
    "itemContext",
    "eachChild",
    "elseContent",
    "Attribute",
    "DynamicAttribute",
    "markerHooks",
    "$component",
    "markerNode",
    "data",
    "ViewAttributesMap",
    "source",
    "ViewArraysMap",
    "item",
    "views",
    "name",
    "nameSegments",
    "lastSegment",
    "pop",
    "namespace",
    "join",
    "registeredName",
    "attributesMap",
    "arraysMap",
    "arrays",
    "unminified",
    "string",
    "literal",
    "componentFactory",
    "fromSerialized",
    "hooks",
    "initHooks",
    "nameExpression",
    "ViewsMap",
    "nameMap",
    "tagMap",
    "elementMap",
    "keyExpression",
    "Object",
    "constructor",
    "serialize",
    "instance",
    "_isComponent",
    "extend",
    "_initComponent",
    "_queueCreate",
    "viewContext",
    "queue",
    "unescaped",
    "parse",
    "getFragment",
    "fragment",
    "appendTo",
    "attachTo",
    "componentChild",
    "_parse",
    "marker",
    "_find",
    "viewChild",
    "contextView",
    "getView",
    "find",
    "message",
    "findErrorMessage",
    "nameDependencies",
    "viewDependencies",
    "parentContext",
    "forViewParent",
    "closureContext",
    "closureChild",
    "equals",
    "other",
    "map",
    "match",
    "segmentsDepth",
    "testSegments",
    "splice",
    "register",
    "mapName",
    "replace",
    "tag",
    "element",
    "deserialize",
    "setTemplate",
    "forServer",
    "server",
    "minify",
    "serverOnly",
    "names",
    "keys",
    "elementOn",
    "$destroyListeners",
    "event",
    "modelData",
    "$element",
    "out",
    "component",
    "object",
    "addListeners",
    "addDestroyListener",
    "listener",
    "array",
    "comparePosition",
    "indexOf",
    "compareDocumentPosition",
    "templates",
    "_$templates_22",
    "setIgnoreTemplate",
    "ignoreTemplate",
    "serializeArgs",
    "serializeValue",
    "formatString",
    "isArray",
    "nextTick",
    "_$browser_60",
    "Function",
    "immediateIds",
    "nextImmediateId",
    "Timeout",
    "id",
    "clearFn",
    "_id",
    "_clearFn",
    "clearTimeout",
    "setInterval",
    "clearInterval",
    "timeout",
    "close",
    "unref",
    "ref",
    "enroll",
    "msecs",
    "_idleTimeoutId",
    "_idleTimeout",
    "unenroll",
    "_unrefActive",
    "active",
    "_onTimeout",
    "setImmediate",
    "fn",
    "clearImmediate",
    "objectCreate",
    "objectCreatePolyfill",
    "objectKeys",
    "objectKeysPolyfill",
    "bind",
    "functionBindPolyfill",
    "EventEmitter",
    "_events",
    "_eventsCount",
    "_maxListeners",
    "undefined",
    "_$EventEmitter_42",
    "defaultMaxListeners",
    "hasDefineProperty",
    "o",
    "defineProperty",
    "err",
    "$getMaxListeners",
    "that",
    "emitNone",
    "handler",
    "isFn",
    "self",
    "listeners",
    "arrayClone",
    "emitOne",
    "arg1",
    "emitTwo",
    "arg2",
    "emitThree",
    "arg3",
    "emitMany",
    "_addListener",
    "prepend",
    "events",
    "existing",
    "TypeError",
    "newListener",
    "warned",
    "w",
    "String",
    "emitter",
    "count",
    "console",
    "warn",
    "onceWrapper",
    "fired",
    "removeListener",
    "wrapFn",
    "_onceWrap",
    "state",
    "wrapped",
    "_listeners",
    "unwrap",
    "evlistener",
    "unwrapListeners",
    "listenerCount",
    "spliceOne",
    "list",
    "k",
    "n",
    "arr",
    "copy",
    "ret",
    "proto",
    "F",
    "obj",
    "enumerable",
    "arg",
    "setMaxListeners",
    "isNaN",
    "getMaxListeners",
    "er",
    "doError",
    "error",
    "addListener",
    "prependListener",
    "once",
    "prependOnceListener",
    "position",
    "originalListener",
    "shift",
    "removeAllListeners",
    "rawListeners",
    "eventNames",
    "Reflect",
    "ownKeys",
    "rng",
    "crypto",
    "global",
    "msCrypto",
    "getRandomValues",
    "_rnds8",
    "Uint8Array",
    "_rnds",
    "Math",
    "random",
    "_$rng_124",
    "_byteToHex",
    "_hexToByte",
    "toString",
    "substr",
    "s",
    "buf",
    "offset",
    "ii",
    "toLowerCase",
    "oct",
    "unparse",
    "bth",
    "_seedBytes",
    "_nodeId",
    "_clockseq",
    "_lastMSecs",
    "_lastNSecs",
    "v1",
    "b",
    "clockseq",
    "Date",
    "getTime",
    "nsecs",
    "dt",
    "tl",
    "tmh",
    "v4",
    "rnds",
    "uuid",
    "_$uuid_125",
    "Model",
    "INITS",
    "_$Model_72",
    "root",
    "inits",
    "debug",
    "ChildModel",
    "_context",
    "_at",
    "_pass",
    "_silent",
    "_eventContext",
    "_preventCompose",
    "_child",
    "keyList",
    "hasProp",
    "_$equal_43",
    "equal",
    "a",
    "arrA",
    "arrB",
    "dateA",
    "dateB",
    "regexpA",
    "RegExp",
    "regexpB",
    "process",
    "cachedSetTimeout",
    "cachedClearTimeout",
    "defaultSetTimout",
    "defaultClearTimeout",
    "runTimeout",
    "fun",
    "runClearTimeout",
    "draining",
    "currentQueue",
    "queueIndex",
    "cleanUpNextTick",
    "drainQueue",
    "run",
    "Item",
    "noop",
    "title",
    "browser",
    "env",
    "argv",
    "version",
    "versions",
    "off",
    "cwd",
    "chdir",
    "dir",
    "umask",
    "isServer",
    "AsyncGroup",
    "cb",
    "isDone",
    "copyObject",
    "equalsNaN",
    "isArrayIndex",
    "segment",
    "test",
    "mayImpact",
    "min",
    "_$util_91",
    "asyncGroup",
    "group",
    "castSegments",
    "deepCopy",
    "deepEqual",
    "lookup",
    "mergeInto",
    "to",
    "from",
    "mayImpactAny",
    "segmentsList",
    "serverRequire",
    "serverUse",
    "plugin",
    "use",
    "plugins",
    "_plugins",
    "unbundle",
    "collectionName",
    "connection",
    "startBulk",
    "_initQueries",
    "queries",
    "collections",
    "collection",
    "getOrCreateDoc",
    "contextId",
    "contexts",
    "contextData",
    "contextModel",
    "fetchedDocs",
    "fetchDoc",
    "_fetchedDocs",
    "increment",
    "subscribedDocs",
    "subscribeDoc",
    "createdDocs",
    "createDoc",
    "endBulk",
    "refs",
    "refLists",
    "refList",
    "fns",
    "start",
    "filters",
    "_filters",
    "__EventEmitter_79",
    "patternContained",
    "pattern",
    "listenerSegments",
    "patternSegments",
    "Passed",
    "previous",
    "eventListener",
    "eventType",
    "arg4",
    "subpattern",
    "isPath",
    "useEventObjects",
    "path",
    "modelEventListener",
    "modelEventListenerLegacy",
    "eventContext",
    "testFn",
    "testPatternFn",
    "modelListener",
    "eventArgs",
    "captures",
    "eventFactory",
    "getEventFactory",
    "ChangeEvent",
    "InsertEvent",
    "RemoveEvent",
    "MoveEvent",
    "LoadEvent",
    "UnloadEvent",
    "concreteEventFactory",
    "passed",
    "values",
    "removed",
    "howMany",
    "previousDocument",
    "endingRest",
    "stripRestWildcard",
    "patternLen",
    "patternSegment",
    "remainder",
    "lastIndex",
    "exec",
    "MUTATOR_EVENTS",
    "change",
    "insert",
    "move",
    "load",
    "unload",
    "_defaultCallback",
    "_emitError",
    "_mutatorEventQueue",
    "wrapCallback",
    "JSON",
    "stringify",
    "stringifyErr",
    "_emit",
    "queued",
    "_on",
    "g",
    "_removeAllListeners",
    "invert",
    "silent",
    "removeContextListeners",
    "createScoped",
    "scoped",
    "_$paths_84",
    "mixin",
    "_splitPath",
    "subpath",
    "scope",
    "at",
    "levels",
    "max",
    "leaf",
    "lastIndexOf",
    "_$Doc_70",
    "Doc",
    "collectionData",
    "_errorMessage",
    "description",
    "_$LocalDoc_71",
    "LocalDoc",
    "_updateCollectionData",
    "nodeCreateArray",
    "_apply",
    "del",
    "byNumber",
    "_validatedApply",
    "_arrayApply",
    "stringInsert",
    "stringRemove",
    "_createImplied",
    "nextKey",
    "validate",
    "CollectionMap",
    "ModelData",
    "DocMap",
    "CollectionData",
    "Collection",
    "docs",
    "noKeys",
    "getCollection",
    "getDoc",
    "_get",
    "getCopy",
    "_getCopy",
    "getDeepCopy",
    "_getDeepCopy",
    "getOrCreateCollection",
    "_getDocConstructor",
    "destroy",
    "silentModel",
    "_removeAllRefs",
    "_stopAll",
    "_removeAllFilters",
    "_del",
    "_mutate",
    "docSegments",
    "shareDoc",
    "oldPreventCompose",
    "preventCompose",
    "_set",
    "_dereference",
    "fnCb",
    "_setNull",
    "setEach",
    "_setEach",
    "_create",
    "createNull",
    "_createNull",
    "_add",
    "_increment",
    "_push",
    "_unshift",
    "_insert",
    "inserted",
    "_pop",
    "_shift",
    "_remove",
    "_move",
    "moved",
    "text",
    "_stringInsert",
    "$stringInsert",
    "_stringRemove",
    "$stringRemove",
    "subtypeSubmit",
    "subtype",
    "subtypeOp",
    "_subtypeSubmit",
    "$subtype",
    "op",
    "_$arrayDiff_1",
    "arrayDiff",
    "InsertDiff",
    "RemoveDiff",
    "MoveDiff",
    "strictEqual",
    "before",
    "after",
    "equalFn",
    "beforeLength",
    "afterLength",
    "moves",
    "beforeMarked",
    "afterMarked",
    "beforeIndex",
    "beforeItem",
    "afterIndex",
    "removes",
    "inserts",
    "j",
    "insertsLength",
    "removesLength",
    "movesLength",
    "earlier",
    "outputMoves",
    "later",
    "toJSON",
    "diffDeep",
    "diff",
    "itemSegments",
    "_applyArrayDiff",
    "_setDiff",
    "setDiff",
    "setDiffDeep",
    "_setDiffDeep",
    "finished",
    "setArrayDiff",
    "_setArrayDiff",
    "setArrayDiffDeep",
    "_setArrayDiffDeep",
    "_equalFn",
    "__EventEmitter_108",
    "Constructor",
    "_$emitter_108",
    "SUPPORTED_METHODS",
    "Logger",
    "defaultMethods",
    "forEach",
    "method",
    "setMethods",
    "_$Logger_111",
    "overrides",
    "logger",
    "_$logger_110",
    "ShareDBError",
    "code",
    "captureStackTrace",
    "stack",
    "CODES",
    "ERR_APPLY_OP_VERSION_DOES_NOT_MATCH_SNAPSHOT",
    "ERR_APPLY_SNAPSHOT_NOT_PROVIDED",
    "ERR_CLIENT_ID_BADLY_FORMED",
    "ERR_CONNECTION_SEQ_INTEGER_OVERFLOW",
    "ERR_CONNECTION_STATE_TRANSITION_INVALID",
    "ERR_DATABASE_ADAPTER_NOT_FOUND",
    "ERR_DATABASE_DOES_NOT_SUPPORT_SUBSCRIBE",
    "ERR_DATABASE_METHOD_NOT_IMPLEMENTED",
    "ERR_DEFAULT_TYPE_MISMATCH",
    "ERR_DOC_MISSING_VERSION",
    "ERR_DOC_ALREADY_CREATED",
    "ERR_DOC_DOES_NOT_EXIST",
    "ERR_DOC_TYPE_NOT_RECOGNIZED",
    "ERR_DOC_WAS_DELETED",
    "ERR_INFLIGHT_OP_MISSING",
    "ERR_INGESTED_SNAPSHOT_HAS_NO_VERSION",
    "ERR_MAX_SUBMIT_RETRIES_EXCEEDED",
    "ERR_MESSAGE_BADLY_FORMED",
    "ERR_MILESTONE_ARGUMENT_INVALID",
    "ERR_OP_ALREADY_SUBMITTED",
    "ERR_OP_NOT_ALLOWED_IN_PROJECTION",
    "ERR_OP_SUBMIT_REJECTED",
    "ERR_OP_VERSION_MISMATCH_AFTER_TRANSFORM",
    "ERR_OP_VERSION_MISMATCH_DURING_TRANSFORM",
    "ERR_OP_VERSION_NEWER_THAN_CURRENT_SNAPSHOT",
    "ERR_OT_LEGACY_JSON0_OP_CANNOT_BE_NORMALIZED",
    "ERR_OT_OP_BADLY_FORMED",
    "ERR_OT_OP_NOT_APPLIED",
    "ERR_OT_OP_NOT_PROVIDED",
    "ERR_PRESENCE_TRANSFORM_FAILED",
    "ERR_PROTOCOL_VERSION_NOT_SUPPORTED",
    "ERR_QUERY_EMITTER_LISTENER_NOT_ASSIGNED",
    "ERR_SNAPSHOT_READ_SILENT_REJECTION",
    "ERR_SNAPSHOT_READS_REJECTED",
    "ERR_SUBMIT_TRANSFORM_OPS_NOT_FOUND",
    "ERR_TYPE_CANNOT_BE_PROJECTED",
    "ERR_TYPE_DOES_NOT_SUPPORT_PRESENCE",
    "ERR_UNKNOWN_ERROR",
    "_$ShareDBError_109",
    "_$bootstrapTransform_55",
    "bootstrapTransform",
    "transformComponent",
    "checkValidOp",
    "append",
    "transformX",
    "leftOp",
    "rightOp",
    "right",
    "destRight",
    "newRightOp",
    "rightComponent",
    "newLeftOp",
    "nextC",
    "pair",
    "l",
    "transform",
    "otherOp",
    "_$text0_58",
    "uri",
    "initial",
    "strInject",
    "s1",
    "pos",
    "s2",
    "checkValidComponent",
    "c",
    "p",
    "d",
    "snapshot",
    "deleted",
    "_append",
    "newOp",
    "last",
    "compose",
    "op1",
    "op2",
    "normalize",
    "transformPosition",
    "insertAfter",
    "transformCursor",
    "side",
    "_tc",
    "dest",
    "otherC",
    "newC",
    "intersectStart",
    "intersectEnd",
    "invertComponent",
    "reverse",
    "__isArray_57",
    "isObject",
    "clone",
    "json",
    "subtypes",
    "convertFromText",
    "si",
    "sd",
    "convertToText",
    "registerSubtype",
    "c_",
    "oi",
    "od",
    "li",
    "ld",
    "na",
    "lm",
    "op_",
    "iop",
    "checkList",
    "elem",
    "checkObj",
    "container",
    "shatter",
    "results",
    "incrementalApply",
    "_yield",
    "smallOp",
    "pathMatches",
    "p1",
    "p2",
    "ignoreLast",
    "commonLengthForOps",
    "alen",
    "blen",
    "canOpAffectPath",
    "common",
    "common2",
    "cplength",
    "otherCplength",
    "oc",
    "commonOperand",
    "res",
    "otherFrom",
    "otherTo",
    "_$json_57",
    "_$lib_56",
    "_$types_114",
    "defaultType",
    "_$util_115",
    "doNothing",
    "isInteger",
    "Number",
    "isFinite",
    "floor",
    "isValidVersion",
    "isValidTimestamp",
    "timestamp",
    "MAX_SAFE_INTEGER",
    "dig",
    "digOrCreate",
    "createCallback",
    "digAndRemove",
    "objects",
    "supportsPresence",
    "transformPresence",
    "callEach",
    "callbacks",
    "called",
    "callback",
    "truthy",
    "ERROR_CODE",
    "_$Doc_96",
    "__Doc_96",
    "inflightFetch",
    "inflightSubscribe",
    "pendingFetch",
    "pendingSubscribe",
    "subscribed",
    "wantSubscribe",
    "inflightOp",
    "pendingOps",
    "applyStack",
    "submitSource",
    "paused",
    "pushActionCallback",
    "inflight",
    "isDuplicate",
    "lastCallback",
    "combineCallbacks",
    "filter",
    "setNoOp",
    "client",
    "result",
    "clientOp",
    "serverOp",
    "whenNothingPending",
    "unsubscribe",
    "_destroyDoc",
    "_setType",
    "newType",
    "ingestSnapshot",
    "v",
    "hasWritePending",
    "fetch",
    "hasPending",
    "_emitNothingPending",
    "_emitResponseError",
    "_handleFetch",
    "_handleSubscribe",
    "request",
    "_flushSubscribe",
    "_handleOp",
    "_rollback",
    "src",
    "seq",
    "_opAcknowledged",
    "transformErr",
    "_hardRollback",
    "_otApply",
    "_onConnectionStateChanged",
    "canSend",
    "flush",
    "_resubscribe",
    "subscribe",
    "some",
    "sendFetch",
    "_queueSubscribe",
    "lastRequest",
    "sendSubscribe",
    "sendUnsubscribe",
    "_sendOp",
    "stackLength",
    "componentOp",
    "_popApplyStack",
    "createDeserialized",
    "oldData",
    "sentAt",
    "now",
    "retries",
    "sendOp",
    "_submit",
    "_pushOp",
    "composed",
    "_tryCompose",
    "ops",
    "submitOp",
    "pause",
    "resume",
    "_clearInflightOp",
    "allOpsHadCallbacks",
    "_$Query_104",
    "Query",
    "query",
    "extra",
    "ready",
    "sent",
    "send",
    "q",
    "_destroyQuery",
    "_handleResponse",
    "_finishResponse",
    "wait",
    "finish",
    "_ingestSnapshots",
    "snapshots",
    "_handleError",
    "_handleDiff",
    "newDocs",
    "_handleExtra",
    "_$LocalPresence_100",
    "LocalPresence",
    "presence",
    "presenceId",
    "presenceVersion",
    "_pendingMessages",
    "_callbacksByPresenceVersion",
    "submit",
    "_message",
    "pv",
    "_sendPending",
    "_callbackOrEmit",
    "localPresences",
    "_ack",
    "_getCallback",
    "ch",
    "channel",
    "_$RemotePresence_103",
    "RemotePresence",
    "receiveUpdate",
    "_updateRemotePresence",
    "_remotePresenceInstances",
    "remotePresences",
    "factory",
    "_$async_2",
    "define",
    "amd",
    "async",
    "arrayLike",
    "newLen",
    "newArr",
    "idx",
    "callArgs",
    "initialParams",
    "hasSetImmediate",
    "hasNextTick",
    "fallback",
    "wrap",
    "defer",
    "setImmediate$1",
    "asyncify",
    "func",
    "then",
    "invokeCallback",
    "rethrow",
    "supportsSymbol",
    "Symbol",
    "isAsync",
    "toStringTag",
    "wrapAsync",
    "asyncFn",
    "applyEach$1",
    "eachfn",
    "go",
    "freeGlobal",
    "freeSelf",
    "Symbol$1",
    "objectProto",
    "nativeObjectToString",
    "symToStringTag$1",
    "nativeObjectToString$1",
    "nullTag",
    "undefinedTag",
    "symToStringTag",
    "baseGetTag",
    "isOwn",
    "unmasked",
    "getRawTag",
    "objectToString",
    "asyncTag",
    "funcTag",
    "genTag",
    "proxyTag",
    "isLength",
    "isArrayLike",
    "isFunction",
    "breakLoop",
    "callFn",
    "iteratorSymbol",
    "iterator",
    "getIterator",
    "coll",
    "isObjectLike",
    "argsTag",
    "baseIsArguments",
    "objectProto$3",
    "hasOwnProperty$2",
    "propertyIsEnumerable",
    "isArguments",
    "freeExports",
    "nodeType",
    "freeModule",
    "Buffer",
    "isBuffer",
    "MAX_SAFE_INTEGER$1",
    "reIsUint",
    "isIndex",
    "typedArrayTags",
    "freeExports$1",
    "freeModule$1",
    "freeProcess",
    "nodeUtil",
    "types",
    "nodeIsTypedArray",
    "isTypedArray",
    "hasOwnProperty$1",
    "arrayLikeKeys",
    "inherited",
    "isArr",
    "isArg",
    "isBuff",
    "isType",
    "skipIndexes",
    "iteratee",
    "baseTimes",
    "objectProto$5",
    "nativeKeys",
    "overArg",
    "hasOwnProperty$3",
    "baseKeys",
    "Ctor",
    "createArrayIterator",
    "okeys",
    "next",
    "done",
    "createES2015Iterator",
    "onlyOnce",
    "_eachOfLimit",
    "limit",
    "nextElem",
    "running",
    "looping",
    "iterateeCallback",
    "replenish",
    "eachOfLimit",
    "doLimit",
    "iterable",
    "eachOfArrayLike",
    "completed",
    "iteratorCallback",
    "eachOfGeneric",
    "Infinity",
    "eachOf",
    "doParallel",
    "_asyncMap",
    "counter",
    "_iteratee",
    "_",
    "applyEach",
    "doParallelLimit",
    "mapLimit",
    "mapSeries",
    "applyEachSeries",
    "arrayEach",
    "fromRight",
    "baseFor",
    "keysFunc",
    "props",
    "baseForOwn",
    "baseIsNaN",
    "baseIndexOf",
    "fromIndex",
    "strictIndexOf",
    "predicate",
    "baseFindIndex",
    "auto",
    "tasks",
    "concurrency",
    "numTasks",
    "runningTasks",
    "hasError",
    "readyTasks",
    "readyToCheck",
    "uncheckedDependencies",
    "enqueueTask",
    "task",
    "taskCallback",
    "safeResults",
    "val",
    "rkey",
    "processQueue",
    "taskFn",
    "runTask",
    "getDependents",
    "taskName",
    "remainingDependencies",
    "dependencyName",
    "taskListeners",
    "currentTask",
    "dependent",
    "checkForDeadlocks",
    "arrayMap",
    "symbolTag",
    "INFINITY",
    "symbolProto",
    "symbolToString",
    "baseToString",
    "isSymbol",
    "castSlice",
    "baseSlice",
    "reHasUnicode",
    "rsAstral",
    "rsCombo",
    "rsFitz",
    "rsNonAstral",
    "rsRegional",
    "rsSurrPair",
    "reOptMod",
    "rsSeq",
    "rsSymbol",
    "reUnicode",
    "stringToArray",
    "hasUnicode",
    "unicodeToArray",
    "asciiToArray",
    "reTrim",
    "trim",
    "chars",
    "guard",
    "strSymbols",
    "chrSymbols",
    "charsStartIndex",
    "charsEndIndex",
    "FN_ARGS",
    "FN_ARG_SPLIT",
    "FN_ARG",
    "STRIP_COMMENTS",
    "autoInject",
    "newTasks",
    "params",
    "fnIsAsync",
    "hasNoDeps",
    "newTask",
    "taskCb",
    "newArgs",
    "DLL",
    "head",
    "tail",
    "setInitial",
    "dll",
    "worker",
    "payload",
    "_worker",
    "numRunning",
    "workersList",
    "processingScheduled",
    "insertAtFront",
    "started",
    "idle",
    "drain",
    "_tasks",
    "_next",
    "buffer",
    "unsaturated",
    "isProcessing",
    "saturated",
    "empty",
    "kill",
    "cargo",
    "removeLink",
    "prev",
    "newNode",
    "insertBefore",
    "toArray",
    "curr",
    "eachOfSeries",
    "reduce",
    "memo",
    "_functions",
    "newargs",
    "nextargs",
    "_concat",
    "concatLimit",
    "mapResults",
    "concatSeries",
    "constant",
    "identity",
    "_createTester",
    "check",
    "getResult",
    "testResult",
    "testPassed",
    "_findGetResult",
    "detect",
    "detectLimit",
    "detectSeries",
    "consoleFunc",
    "doDuring",
    "_fn",
    "_test",
    "truth",
    "doWhilst",
    "doUntil",
    "during",
    "_withoutIndex",
    "eachLimit",
    "eachLimit$1",
    "eachSeries",
    "ensureAsync",
    "sync",
    "innerArgs",
    "notId",
    "every",
    "everyLimit",
    "everySeries",
    "baseProperty",
    "filterArray",
    "truthValues",
    "filterGeneric",
    "sort",
    "_filter",
    "filterLimit",
    "filterSeries",
    "forever",
    "errback",
    "groupByLimit",
    "groupBy",
    "groupBySeries",
    "log",
    "mapValuesLimit",
    "newObj",
    "mapValues",
    "mapValuesSeries",
    "has",
    "memoize",
    "hasher",
    "queues",
    "memoized",
    "unmemoized",
    "_parallel",
    "parallelLimit",
    "parallelLimit$1",
    "queue$1",
    "priorityQueue",
    "priority",
    "nextNode",
    "race",
    "reduceRight",
    "reflect",
    "reflectCallback",
    "cbArg",
    "reflectAll",
    "reject$1",
    "reject",
    "rejectLimit",
    "rejectSeries",
    "constant$1",
    "retry",
    "opts",
    "DEFAULT_TIMES",
    "DEFAULT_INTERVAL",
    "times",
    "intervalFunc",
    "acc",
    "interval",
    "errorFilter",
    "parseTimes",
    "_task",
    "attempt",
    "retryAttempt",
    "retryable",
    "series",
    "Boolean",
    "someLimit",
    "someSeries",
    "sortBy",
    "comparator",
    "criteria",
    "milliseconds",
    "info",
    "timer",
    "timedOut",
    "nativeCeil",
    "ceil",
    "nativeMax",
    "timeLimit",
    "step",
    "baseRange",
    "timesSeries",
    "accumulator",
    "tryEach",
    "unmemoize",
    "whilst",
    "until",
    "waterfall",
    "taskIndex",
    "nextTask",
    "each",
    "parallel",
    "timesLimit",
    "all",
    "allLimit",
    "allSeries",
    "any",
    "anyLimit",
    "anySeries",
    "findLimit",
    "findSeries",
    "forEachSeries",
    "forEachLimit",
    "forEachOf",
    "forEachOfSeries",
    "forEachOfLimit",
    "inject",
    "foldl",
    "foldr",
    "selectLimit",
    "selectSeries",
    "wrapSync",
    "hat",
    "_$hat_53",
    "bits",
    "base",
    "digits",
    "pow",
    "rem",
    "parsed",
    "parseInt",
    "rack",
    "expandBy",
    "iters",
    "hats",
    "_$Presence_101",
    "Presence",
    "_subscriptionCallbacksBySeq",
    "_sendSubscriptionAction",
    "localPresence",
    "_createLocalPresence",
    "localIds",
    "remoteIds",
    "_presences",
    "_presenceSeq",
    "_sendPresenceAction",
    "_subscriptionCallback",
    "_handleUnsubscribe",
    "_receiveUpdate",
    "_createRemotePresence",
    "remotePresence",
    "_removeRemotePresence",
    "_broadcastAllLocalPresence",
    "_callEachOrEmit",
    "__ERROR_CODE_99",
    "_$LocalDocPresence_99",
    "LocalDocPresence",
    "_doc",
    "_isSending",
    "_opHandler",
    "_transformAgainstOp",
    "_createOrDelHandler",
    "_handleCreateOrDel",
    "_loadHandler",
    "_handleLoad",
    "_destroyHandler",
    "_registerWithDoc",
    "_transformPresence",
    "__ERROR_CODE_112",
    "applyOpEdit",
    "edit",
    "normalizeLegacyJson0Ops",
    "json0Op",
    "components",
    "_$ot_112",
    "checkOp",
    "typeName",
    "normalizeType",
    "appliedOp",
    "applyOps",
    "_normalizeLegacyJson0Ops",
    "isOwnOp",
    "opError",
    "_$RemoteDocPresence_102",
    "RemoteDocPresence",
    "_pending",
    "_opCache",
    "_pendingSetPending",
    "_createDelHandler",
    "_handleCreateDel",
    "DocPresence",
    "_setPendingPresence",
    "_catchUpStalePresence",
    "connectionId",
    "_cacheOp",
    "_startCachingOps",
    "hasCaughtUp",
    "_stopCachingOps",
    "_$DocPresence_98",
    "_$Snapshot_113",
    "Snapshot",
    "_$SnapshotRequest_105",
    "SnapshotRequest",
    "requestId",
    "metadata",
    "_$SnapshotVersionRequest_107",
    "SnapshotVersionRequest",
    "_$SnapshotTimestampRequest_106",
    "SnapshotTimestampRequest",
    "ts",
    "__ERROR_CODE_95",
    "connectionState",
    "socket",
    "readyState",
    "_$Connection_95",
    "Connection",
    "nextQueryId",
    "nextSnapshotRequestId",
    "_snapshotRequests",
    "agent",
    "bindToSocket",
    "wrapErrorData",
    "errorData",
    "fullMessage",
    "onmessage",
    "onopen",
    "onerror",
    "onclose",
    "newState",
    "_setState",
    "handleMessage",
    "_initializeHandshake",
    "reason",
    "_handleLegacyInit",
    "_handleHandshake",
    "_handleBulkMessage",
    "_handleSnapshotFetch",
    "getExisting",
    "_handlePresence",
    "_handlePresenceSubscribe",
    "_handlePresenceUnsubscribe",
    "_handlePresenceRequest",
    "dataForId",
    "_reset",
    "bulk",
    "actions",
    "_sendBulk",
    "f",
    "u",
    "versionId",
    "ids",
    "versionsCount",
    "_sendAction",
    "_addDoc",
    "_createQuery",
    "createFetchQuery",
    "createSubscribeQuery",
    "_firstDoc",
    "_firstQuery",
    "_firstSnapshotRequest",
    "_nothingPendingRetry",
    "snapshotRequest",
    "fetchSnapshot",
    "fetchSnapshotByTimestamp",
    "protocolMinor",
    "_initialize",
    "protocol",
    "getPresence",
    "getDocPresence",
    "_addPresence",
    "_$client_97",
    "_$RemoteDoc_74",
    "RemoteDoc",
    "$remote",
    "debugMutations",
    "remoteMutations",
    "_initShareDoc",
    "createInsertOp",
    "ListInsertOp",
    "ImpliedOp",
    "ObjectReplaceOp",
    "ObjectInsertOp",
    "ObjectDeleteOp",
    "ListReplaceOp",
    "ListRemoveOp",
    "ListMoveOp",
    "StringInsertOp",
    "StringRemoveOp",
    "IncrementOp",
    "SubtypeOp",
    "defined",
    "disableSubmit",
    "isLocal",
    "_onOp",
    "__Connection_76",
    "allowCompose",
    "createConnection",
    "bundle",
    "_createSocket",
    "_finishCreateConnection",
    "connect",
    "disconnect",
    "reconnect",
    "getAgent",
    "_isLocal",
    "firstCharcter",
    "charAt",
    "Queries",
    "$query",
    "hash",
    "queryHash",
    "idsSegments",
    "extraSegments",
    "_pendingSubscribeCallbacks",
    "subscribeCount",
    "fetchCount",
    "created",
    "shareQuery",
    "idMap",
    "resultsIds",
    "_$Query_73",
    "_queries",
    "db",
    "_getOrCreateQuery",
    "QueryConstructor",
    "sanitizeQuery",
    "counts",
    "_setExtra",
    "resultIndex",
    "_addMapIds",
    "countIndex",
    "fetched",
    "setContext",
    "fetchQuery",
    "getIds",
    "_maybeUnloadDocs",
    "_setResults",
    "subscribeQuery",
    "_getShareResults",
    "fetchOnly",
    "_shareFetchedSubscribe",
    "_shareSubscribe",
    "_subscribeCb",
    "_flushSubscribeCallbacks",
    "shareDocs",
    "_removeMapIds",
    "unloadDelay",
    "_diffMapIds",
    "addedIds",
    "removedIds",
    "newMap",
    "_setResultIds",
    "_maybeUnloadDoc",
    "pendingCallback",
    "unfetch",
    "unfetchQuery",
    "finishUnfetchQuery",
    "unsubscribeQuery",
    "finishUnsubscribeQuery",
    "unsubscribeQueryCallback",
    "getExtra",
    "idsPath",
    "refIds",
    "refExtra",
    "relPath",
    "extraPath",
    "_contexts",
    "subscribedQueries",
    "fetchedQueries",
    "serialized",
    "_$CollectionCounter_69",
    "CollectionCounter",
    "reset",
    "decrement",
    "_subscribedDocs",
    "_forSubscribable",
    "argumentsObject",
    "docMethod",
    "unfetchDoc",
    "finishUnfetchDoc",
    "unsubscribeDoc",
    "finishUnsubscribeDoc",
    "unsubscribeDocCallback",
    "_hasDocReferences",
    "Contexts",
    "FetchedQueries",
    "SubscribedQueries",
    "Context",
    "mapIncrement",
    "mapDecrement",
    "getOrCreateContext",
    "unloadAll",
    "defaultFns",
    "_$defaultFns_78",
    "DefaultFns",
    "FnPair",
    "getReverse",
    "setReverse",
    "0",
    "asc",
    "desc",
    "NamedFns",
    "parseStartArguments",
    "hasPath",
    "inputs",
    "inputPaths",
    "FromMap",
    "Fns",
    "_namedFns",
    "fromMap",
    "Fn",
    "$fn",
    "getFn",
    "setFn",
    "fromSegments",
    "inputsSegments",
    "copyInput",
    "copyOutput",
    "mode",
    "eventPending",
    "_fns",
    "onInput",
    "onOutput",
    "evaluate",
    "stop",
    "_stop",
    "fromPath",
    "stopAll",
    "_onInput",
    "_setValue",
    "parseFilterArguments",
    "Filters",
    "Filter",
    "filterFn",
    "sortFn",
    "$filter",
    "filterName",
    "sortName",
    "skip",
    "update",
    "removeAllFilters",
    "_slice",
    "begin",
    "getInputs",
    "callFilter",
    "_removeRef",
    "_refLists",
    "$refList",
    "onMutation",
    "patchFromEvent",
    "fromLength",
    "segmentsLength",
    "toSegments",
    "toSegmentsByItem",
    "updateIdForValue",
    "setNewToValues",
    "deleteRemoved",
    "itemById",
    "idByItem",
    "outSegments",
    "patchToEvent",
    "toLength",
    "indices",
    "indicesByItem",
    "removeIndex",
    "indicesLen",
    "remaining",
    "dereferenced",
    "newIndices",
    "oldIndices",
    "equivalentArrays",
    "patchIdsEvent",
    "idsLength",
    "idByIndex",
    "RefList",
    "__FromMap_86",
    "RefLists",
    "toPath",
    "dereference",
    "addIndexListeners",
    "onIndexChange",
    "patch",
    "_refs",
    "updateIndices",
    "patched",
    "refIndex",
    "refChange",
    "parentSegments",
    "refLoad",
    "refUnload",
    "refInsert",
    "refRemove",
    "refMove",
    "__addListener_85",
    "toMap",
    "numRefs",
    "setterModel",
    "noopDereference",
    "parentToMap",
    "Ref",
    "$ref",
    "parentTos",
    "parentTo",
    "__FromMap_85",
    "ToMap",
    "Refs",
    "listMapAdd",
    "listMapRemove",
    "_canRefTo",
    "removeRef",
    "removeAllRefs",
    "_removeMapRefs",
    "forArrayMutator",
    "ignore",
    "doAgain",
    "_$Model_82",
    "__EventEmitter_90",
    "Racer",
    "_$Racer_90",
    "util",
    "createModel",
    "_$lib_racer",
    "aa",
    "ba",
    "ca",
    "da",
    "ea",
    "fa",
    "ga",
    "ha",
    "ia",
    "ja",
    "pa",
    "Hc",
    "h",
    "ka",
    "la",
    "ma",
    "oa",
    "qa",
    "ra",
    "ua",
    "va",
    "wa",
    "ya",
    "sa",
    "abs",
    "ta",
    "xa",
    "userAgent",
    "za",
    "product",
    "Aa",
    "Ba",
    "z",
    "Da",
    "Ca",
    "documentMode",
    "Ea",
    "Fa",
    "opera",
    "Ga",
    "Ha",
    "Ia",
    "Ja",
    "A",
    "K",
    "La",
    "Ma",
    "compatMode",
    "Na",
    "Oa",
    "Pa",
    "Qa",
    "Ra",
    "Sa",
    "location",
    "href",
    "decodeURIComponent",
    "hostname",
    "Ta",
    "Ua",
    "Va",
    "Wa",
    "B",
    "Xa",
    "Ya",
    "Za",
    "$a",
    "ab",
    "bb",
    "O",
    "N",
    "C",
    "eb",
    "D",
    "E",
    "fb",
    "gb",
    "hb",
    "ib",
    "I",
    "jb",
    "R",
    "kb",
    "ub",
    "lb",
    "qb",
    "G",
    "rb",
    "sb",
    "H",
    "tb",
    "encodeURI",
    "vb",
    "charCodeAt",
    "mb",
    "encodeURIComponent",
    "nb",
    "ob",
    "pb",
    "substring",
    "J",
    "wb",
    "eval",
    "xb",
    "yb",
    "zb",
    "Ab",
    "Bb",
    "Cb",
    "\"",
    "\\",
    "/",
    "\b",
    "\f",
    "\n",
    "\r",
    "\t",
    "\u000b",
    "Db",
    "Eb",
    "Fb",
    "callee",
    "caller",
    "Gb",
    "Hb",
    "Ib",
    "Jb",
    "L",
    "rc",
    "Kb",
    "qc",
    "$b",
    "Lb",
    "Mb",
    "Nb",
    "Ob",
    "Pb",
    "Qb",
    "getParent",
    "mc",
    "timeStamp",
    "markTimeline",
    "msWriteProfilerMark",
    "lineNumber",
    "fileName",
    "Ic",
    "filename",
    "sourceURL",
    "$googDebugFname",
    "Ka",
    "Z",
    "Rb",
    "Sb",
    "Tb",
    "M",
    "Ub",
    "Vb",
    "Wb",
    "Xb",
    "Yb",
    "P",
    "Zb",
    "ac",
    "bc",
    "cc",
    "dc",
    "capture",
    "ec",
    "gc",
    "fc",
    "hc",
    "ic",
    "Q",
    "currentTarget",
    "jc",
    "kc",
    "relatedTarget",
    "charCode",
    "button",
    "screenY",
    "screenX",
    "offsetY",
    "offsetX",
    "metaKey",
    "shiftKey",
    "altKey",
    "ctrlKey",
    "srcElement",
    "nodeName",
    "fromElement",
    "toElement",
    "layerX",
    "layerY",
    "pageX",
    "pageY",
    "defaultPrevented",
    "returnValue",
    "lc",
    "nc",
    "pc",
    "attachEvent",
    "sc",
    "tc",
    "uc",
    "W",
    "removeEventListener",
    "detachEvent",
    "vc",
    "wc",
    "parentNode",
    "xc",
    "handleEvent",
    "yc",
    "zc",
    "Gc",
    "dispatchEvent",
    "enabled",
    "Ac",
    "Fc",
    "Bc",
    "Cc",
    "Dc",
    "Ec",
    "ActiveXObject",
    "XMLHttpRequest",
    "headers",
    "T",
    "Jc",
    "Kc",
    "Lc",
    "Oc",
    "ontimeout",
    "Mc",
    "abort",
    "Pc",
    "Qc",
    "Rc",
    "Sc",
    "S",
    "statusText",
    "Nc",
    "onreadystatechange",
    "status",
    "Tc",
    "responseText",
    "Uc",
    "Vc",
    "toUpperCase",
    "FormData",
    "setRequestHeader",
    "responseType",
    "withCredentials",
    "isActive",
    "Wc",
    "Xc",
    "Yc",
    "U",
    "Y",
    "Zc",
    "$c",
    "X",
    "$",
    "ad",
    "bd",
    "dd",
    "ed",
    "fd",
    "gd",
    "hd",
    "jd",
    "nd",
    "qd",
    "V",
    "pd",
    "rd",
    "write",
    "parentWindow",
    "rpcClose",
    "appendChild",
    "innerHTML",
    "td",
    "md",
    "ud",
    "vd",
    "onload",
    "onabort",
    "Image",
    "wd",
    "yd",
    "Ad",
    "zd",
    "Bd",
    "Cd",
    "Ed",
    "Fd",
    "Gd",
    "kd",
    "cancel",
    "xd",
    "correctHostPrefix",
    "Dd",
    "Hd",
    "Id",
    "Jd",
    "size",
    "Kd",
    "Yd",
    "Md",
    "Pd",
    "Qd",
    "Sd",
    "Rd",
    "Nd",
    "round",
    "getAdditionalParams",
    "badMapError",
    "Td",
    "Ud",
    "Vd",
    "Ld",
    "okToMakeRequest",
    "getNetworkTestImageUri",
    "Wd",
    "channelError",
    "Od",
    "channelClosed",
    "port",
    "Xd",
    "OSID",
    "OAID",
    "channelHandleMultipleArrays",
    "channelOpened",
    "channelHandleArray",
    "4",
    "6",
    "7",
    "8",
    "2",
    "9",
    "5",
    "10",
    "11",
    "cd",
    "reconnectTime",
    "extraHeaders",
    "extraParams",
    "affinity",
    "affinityParam",
    "CLOSED",
    "OPEN",
    "CONNECTING",
    "crossDomainXhr",
    "failFast",
    "sendMap",
    "_S",
    "canSendWhileConnecting",
    "canSendJSON",
    "CLOSING",
    "_$bcsocketUncompressed_4",
    "BCSocket",
    "_$Socket_68",
    "Socket",
    "_options",
    "_messageQueue",
    "_connectedOnce",
    "_attemptNum",
    "_url",
    "getWebSocketURL",
    "supportWebSockets",
    "browserChannelOnly",
    "_createWebSocket",
    "_createBrowserChannel",
    "getRandom",
    "WebSocket",
    "srvPort",
    "srvSecurePort",
    "srvHost",
    "srvProtocol",
    "_type",
    "_socket",
    "_syncState",
    "_ws_onmessage",
    "_ws_onopen",
    "_ws_onclose",
    "_bc_onmessage",
    "_bc_onopen",
    "_bc_onclose",
    "_flushQueue",
    "wasClean",
    "_getTimeout",
    "maxTimeout",
    "timeoutIncrement",
    "_send",
    "CLIENT_OPTIONS",
    "normalizeArray",
    "parts",
    "allowAboveRoot",
    "up",
    "xs",
    "_$pathBrowserify_59",
    "resolvedPath",
    "resolvedAbsolute",
    "isAbsolute",
    "trailingSlash",
    "paths",
    "relative",
    "fromParts",
    "toParts",
    "samePartsLength",
    "outputParts",
    "sep",
    "delimiter",
    "dirname",
    "hasRoot",
    "matchedSlash",
    "basename",
    "ext",
    "extname",
    "startDot",
    "startPart",
    "preDotState",
    "str",
    "paramsEqual",
    "acceptParams",
    "quality",
    "originalIndex",
    "pms",
    "_$utils_122",
    "etag",
    "crc32",
    "signed",
    "locals",
    "flatten",
    "mime",
    "normalizeTypes",
    "acceptsArray",
    "accepted",
    "parseAccept",
    "normalized",
    "jlen",
    "accept",
    "accepts",
    "parseParams",
    "escape",
    "html",
    "pathRegexp",
    "sensitive",
    "strict",
    "slash",
    "format",
    "optional",
    "star",
    "_$Route_121",
    "Route",
    "regexp",
    "_$Error_36",
    "_$EvalError_35",
    "EvalError",
    "_$RangeError_37",
    "RangeError",
    "_$ReferenceError_38",
    "ReferenceError",
    "_$SyntaxError_39",
    "SyntaxError",
    "_$TypeError_40",
    "_$URIError_41",
    "URIError",
    "_$hasSymbols_51",
    "getOwnPropertySymbols",
    "sym",
    "symObj",
    "getOwnPropertyNames",
    "syms",
    "getOwnPropertyDescriptor",
    "descriptor",
    "origSymbol",
    "_$hasNativeSymbols_50",
    "__proto__",
    "foo",
    "$Object",
    "_$hasProto_49",
    "ERROR_MESSAGE",
    "toStr",
    "funcType",
    "concatty",
    "slicy",
    "arrLike",
    "joiny",
    "joiner",
    "_$bind_44",
    "bound",
    "boundLength",
    "boundArgs",
    "Empty",
    "_$functionBind_45",
    "$hasOwn",
    "_$hasown_52",
    "__undefined_46",
    "$Function",
    "getEvalledConstructor",
    "expressionSyntax",
    "$gOPD",
    "throwTypeError",
    "ThrowTypeError",
    "calleeThrows",
    "gOPDthrows",
    "hasSymbols",
    "hasProto",
    "getProto",
    "getPrototypeOf",
    "needsEval",
    "TypedArray",
    "INTRINSICS",
    "%AggregateError%",
    "AggregateError",
    "%Array%",
    "%ArrayBuffer%",
    "ArrayBuffer",
    "%ArrayIteratorPrototype%",
    "%AsyncFromSyncIteratorPrototype%",
    "%AsyncFunction%",
    "%AsyncGenerator%",
    "%AsyncGeneratorFunction%",
    "%AsyncIteratorPrototype%",
    "%Atomics%",
    "Atomics",
    "%BigInt%",
    "BigInt",
    "%BigInt64Array%",
    "BigInt64Array",
    "%BigUint64Array%",
    "BigUint64Array",
    "%Boolean%",
    "%DataView%",
    "DataView",
    "%Date%",
    "%decodeURI%",
    "decodeURI",
    "%decodeURIComponent%",
    "%encodeURI%",
    "%encodeURIComponent%",
    "%Error%",
    "%eval%",
    "%EvalError%",
    "%Float32Array%",
    "Float32Array",
    "%Float64Array%",
    "Float64Array",
    "%FinalizationRegistry%",
    "FinalizationRegistry",
    "%Function%",
    "%GeneratorFunction%",
    "%Int8Array%",
    "Int8Array",
    "%Int16Array%",
    "Int16Array",
    "%Int32Array%",
    "Int32Array",
    "%isFinite%",
    "%isNaN%",
    "%IteratorPrototype%",
    "%JSON%",
    "%Map%",
    "Map",
    "%MapIteratorPrototype%",
    "%Math%",
    "%Number%",
    "%Object%",
    "%parseFloat%",
    "%parseInt%",
    "%Promise%",
    "Promise",
    "%Proxy%",
    "Proxy",
    "%RangeError%",
    "%ReferenceError%",
    "%Reflect%",
    "%RegExp%",
    "%Set%",
    "Set",
    "%SetIteratorPrototype%",
    "%SharedArrayBuffer%",
    "SharedArrayBuffer",
    "%String%",
    "%StringIteratorPrototype%",
    "%Symbol%",
    "%SyntaxError%",
    "%ThrowTypeError%",
    "%TypedArray%",
    "%TypeError%",
    "%Uint8Array%",
    "%Uint8ClampedArray%",
    "Uint8ClampedArray",
    "%Uint16Array%",
    "Uint16Array",
    "%Uint32Array%",
    "Uint32Array",
    "%URIError%",
    "%WeakMap%",
    "WeakMap",
    "%WeakRef%",
    "WeakRef",
    "%WeakSet%",
    "WeakSet",
    "errorProto",
    "doEval",
    "gen",
    "LEGACY_ALIASES",
    "%ArrayBufferPrototype%",
    "%ArrayPrototype%",
    "%ArrayProto_entries%",
    "%ArrayProto_forEach%",
    "%ArrayProto_keys%",
    "%ArrayProto_values%",
    "%AsyncFunctionPrototype%",
    "%AsyncGeneratorPrototype%",
    "%BooleanPrototype%",
    "%DataViewPrototype%",
    "%DatePrototype%",
    "%ErrorPrototype%",
    "%EvalErrorPrototype%",
    "%Float32ArrayPrototype%",
    "%Float64ArrayPrototype%",
    "%FunctionPrototype%",
    "%Generator%",
    "%GeneratorPrototype%",
    "%Int8ArrayPrototype%",
    "%Int16ArrayPrototype%",
    "%Int32ArrayPrototype%",
    "%JSONParse%",
    "%JSONStringify%",
    "%MapPrototype%",
    "%NumberPrototype%",
    "%ObjectPrototype%",
    "%ObjProto_toString%",
    "%ObjProto_valueOf%",
    "%PromisePrototype%",
    "%PromiseProto_then%",
    "%Promise_all%",
    "%Promise_reject%",
    "%Promise_resolve%",
    "%RangeErrorPrototype%",
    "%ReferenceErrorPrototype%",
    "%RegExpPrototype%",
    "%SetPrototype%",
    "%SharedArrayBufferPrototype%",
    "%StringPrototype%",
    "%SymbolPrototype%",
    "%SyntaxErrorPrototype%",
    "%TypedArrayPrototype%",
    "%TypeErrorPrototype%",
    "%Uint8ArrayPrototype%",
    "%Uint8ClampedArrayPrototype%",
    "%Uint16ArrayPrototype%",
    "%Uint32ArrayPrototype%",
    "%URIErrorPrototype%",
    "%WeakMapPrototype%",
    "%WeakSetPrototype%",
    "$concat",
    "$spliceApply",
    "$replace",
    "$strSlice",
    "$exec",
    "rePropName",
    "reEscapeChar",
    "stringToPath",
    "first",
    "number",
    "quote",
    "subString",
    "getBaseIntrinsic",
    "allowMissing",
    "alias",
    "intrinsicName",
    "_$GetIntrinsic_46",
    "intrinsicBaseName",
    "intrinsic",
    "intrinsicRealName",
    "skipFurtherCaching",
    "part",
    "$defineProperty",
    "_$$defineProperty_34",
    "__$gOPD_47",
    "_$$gOPD_47",
    "_$defineDataProperty_15",
    "nonEnumerable",
    "nonWritable",
    "nonConfigurable",
    "loose",
    "configurable",
    "writable",
    "hasPropertyDescriptors",
    "hasArrayLengthDefineBug",
    "_$hasPropertyDescriptors_48",
    "hasDescriptors",
    "$floor",
    "_$setFunctionLength_94",
    "functionLengthIsConfigurable",
    "functionLengthIsWritable",
    "$apply",
    "$call",
    "$reflectApply",
    "$max",
    "_$callBind_6",
    "originalFunction",
    "applyBind",
    "$indexOf",
    "_$callBoundIntrinsic_5",
    "_$empty_3",
    "_$inspect__54",
    "hasMap",
    "mapSizeDescriptor",
    "mapSize",
    "mapForEach",
    "hasSet",
    "setSizeDescriptor",
    "setSize",
    "setForEach",
    "weakMapHas",
    "weakSetHas",
    "weakRefDeref",
    "deref",
    "booleanValueOf",
    "valueOf",
    "functionToString",
    "$match",
    "$slice",
    "$toUpperCase",
    "$toLowerCase",
    "$test",
    "$join",
    "$arrSlice",
    "bigIntValueOf",
    "gOPS",
    "symToString",
    "hasShammedSymbols",
    "isEnumerable",
    "gPO",
    "addNumericSeparator",
    "num",
    "sepRegex",
    "int",
    "intStr",
    "dec",
    "inspectCustom",
    "custom",
    "inspectSymbol",
    "wrapQuotes",
    "defaultStyle",
    "quoteChar",
    "quoteStyle",
    "isRegExp",
    "inspect_",
    "depth",
    "seen",
    "maxStringLength",
    "customInspect",
    "indent",
    "numericSeparator",
    "inspectString",
    "trailer",
    "lowbyte",
    "bigIntStr",
    "maxDepth",
    "baseIndent",
    "getIndent",
    "inspect",
    "noIndent",
    "newOpts",
    "nameOf",
    "arrObjKeys",
    "symString",
    "markBoxed",
    "HTMLElement",
    "isElement",
    "attrs",
    "childNodes",
    "singleLineValues",
    "indentedJoin",
    "isError",
    "cause",
    "isMap",
    "mapParts",
    "collectionOf",
    "isSet",
    "setParts",
    "isWeakMap",
    "weakCollectionOf",
    "isWeakSet",
    "isWeakRef",
    "isNumber",
    "isBigInt",
    "isBoolean",
    "isString",
    "isDate",
    "ys",
    "isPlainObject",
    "protoTag",
    "stringTag",
    "hasOwn",
    "12",
    "13",
    "entries",
    "lineJoiner",
    "symMap",
    "$WeakMap",
    "$Map",
    "$weakMapGet",
    "$weakMapSet",
    "$weakMapHas",
    "$mapGet",
    "$mapSet",
    "$mapHas",
    "listGetNode",
    "listGet",
    "listSet",
    "listHas",
    "_$getSideChannel_116",
    "$wm",
    "$m",
    "$o",
    "assert",
    "percentTwenties",
    "Format",
    "RFC1738",
    "RFC3986",
    "_$formats_62",
    "default",
    "formatters",
    "__isArray_66",
    "hexTable",
    "compactQueue",
    "prop",
    "compacted",
    "arrayToObject",
    "plainObjects",
    "merge",
    "allowPrototypes",
    "mergeTarget",
    "targetItem",
    "assign",
    "decode",
    "decoder",
    "charset",
    "strWithoutPlus",
    "unescape",
    "encode",
    "defaultEncoder",
    "kind",
    "$0",
    "compact",
    "combine",
    "maybeMap",
    "mapped",
    "_$utils_66",
    "__has_65",
    "arrayPrefixGenerators",
    "brackets",
    "prefix",
    "comma",
    "repeat",
    "__isArray_65",
    "pushToArray",
    "valueOrArray",
    "toISO",
    "toISOString",
    "defaultFormat",
    "defaults",
    "addQueryPrefix",
    "allowDots",
    "allowEmptyArrays",
    "arrayFormat",
    "charsetSentinel",
    "encodeDotInKeys",
    "encoder",
    "encodeValuesOnly",
    "formatter",
    "serializeDate",
    "date",
    "skipNulls",
    "strictNullHandling",
    "isNonNullishPrimitive",
    "sentinel",
    "generateArrayPrefix",
    "commaRoundTrip",
    "sideChannel",
    "tmpSc",
    "findFlag",
    "objKeys",
    "encodedPrefix",
    "adjustedPrefix",
    "encodedKey",
    "keyPrefix",
    "valueSideChannel",
    "normalizeStringifyOptions",
    "_$stringify_65",
    "joined",
    "__has_64",
    "__isArray_64",
    "__defaults_64",
    "allowSparse",
    "arrayLimit",
    "decodeDotInKeys",
    "duplicates",
    "ignoreQueryPrefix",
    "interpretNumericEntities",
    "parameterLimit",
    "parseArrays",
    "numberStr",
    "fromCharCode",
    "parseArrayValue",
    "isoSentinel",
    "parseValues",
    "cleanStr",
    "skipIndex",
    "bracketEqualsPos",
    "encodedVal",
    "parseObject",
    "chain",
    "valuesParsed",
    "cleanRoot",
    "decodedRoot",
    "parseKeys",
    "givenKey",
    "normalizeParseOptions",
    "_$parse_64",
    "tempObj",
    "_$lib_63",
    "formats",
    "_$punycode_61",
    "punycode",
    "maxInt",
    "tMin",
    "tMax",
    "skew",
    "damp",
    "initialBias",
    "initialN",
    "regexPunycode",
    "regexNonASCII",
    "regexSeparators",
    "errors",
    "overflow",
    "not-basic",
    "invalid-input",
    "baseMinusTMin",
    "stringFromCharCode",
    "mapDomain",
    "ucs2decode",
    "output",
    "ucs2encode",
    "digitToBasic",
    "digit",
    "flag",
    "adapt",
    "delta",
    "numPoints",
    "firstTime",
    "basic",
    "oldi",
    "baseMinusT",
    "codePoint",
    "inputLength",
    "bias",
    "handledCPCount",
    "basicLength",
    "currentValue",
    "handledCPCountPlusOne",
    "qMinusT",
    "ucs2",
    "toASCII",
    "toUnicode",
    "Url",
    "slashes",
    "auth",
    "host",
    "search",
    "pathname",
    "protocolPattern",
    "portPattern",
    "simplePathPattern",
    "delims",
    "unwise",
    "autoEscape",
    "nonHostChars",
    "hostEndingChars",
    "hostnameMaxLen",
    "hostnamePartPattern",
    "hostnamePartStart",
    "unsafeProtocol",
    "javascript",
    "javascript:",
    "hostlessProtocol",
    "slashedProtocol",
    "http",
    "https",
    "ftp",
    "gopher",
    "file",
    "http:",
    "https:",
    "ftp:",
    "gopher:",
    "file:",
    "urlParse",
    "url",
    "parseQueryString",
    "slashesDenoteHost",
    "urlFormat",
    "urlResolve",
    "urlResolveObject",
    "resolveObject",
    "queryIndex",
    "splitter",
    "uSplit",
    "rest",
    "simplePath",
    "lowerProto",
    "atSign",
    "hostEnd",
    "hec",
    "parseHost",
    "ipv6Hostname",
    "hostparts",
    "newpart",
    "validParts",
    "notHost",
    "bit",
    "ae",
    "esc",
    "qm",
    "rel",
    "tkeys",
    "tk",
    "tkey",
    "rkeys",
    "rk",
    "isSourceAbs",
    "isRelAbs",
    "mustEndAbs",
    "removeAllDots",
    "srcPath",
    "psychotic",
    "authInHost",
    "hasTrailingSlash",
    "_$url_123",
    "_$router_120",
    "render",
    "isTransitional",
    "mapRoute",
    "queryString",
    "history",
    "req",
    "RenderReq",
    "app",
    "page",
    "routes",
    "routeTransitional",
    "routeQueue",
    "setUrl",
    "setPrevious",
    "transitional",
    "noNavigate",
    "form",
    "setAttribute",
    "previousPath",
    "routeParams",
    "onMatch",
    "route",
    "onRoute",
    "parseUrl",
    "resolveUrl",
    "currentPath",
    "replaceState",
    "$render",
    "$method",
    "_$History_118",
    "History",
    "pushState",
    "routePath",
    "renderOptions",
    "el",
    "elements",
    "override",
    "link",
    "_tracksLink",
    "which",
    "hasAttribute",
    "hashIndex",
    "enctype",
    "getElementById",
    "getElementsByName",
    "scrollIntoView",
    "_update",
    "refresh",
    "back",
    "forward",
    "historyMethod",
    "relativeUrl",
    "createPage",
    "redirect",
    "__router_119",
    "_$browser_119",
    "setup",
    "fromRoute",
    "toRoute",
    "__noop_18",
    "ContextMeta",
    "addBinding",
    "removeBinding",
    "removeNode",
    "addItemContext",
    "removeItemContext",
    "idNamespace",
    "idCount",
    "pending",
    "pauseCount",
    "__Context_18",
    "as",
    "keyAlias",
    "keyAs",
    "closure",
    "_$contexts_18",
    "itemFor",
    "forRelative",
    "forAlias",
    "forAttribute",
    "attribute",
    "inherit",
    "unpause",
    "!U",
    "-U",
    "+U",
    "~U",
    "typeofU",
    "||",
    "&&",
    "|",
    "^",
    "&",
    "==",
    "!=",
    "===",
    "!==",
    "<",
    ">",
    "<=",
    ">=",
    "instanceof",
    "in",
    "<<",
    ">>",
    ">>>",
    "+",
    "-",
    "*",
    "%",
    "?",
    "consequent",
    "alternate",
    ",",
    "1",
    "BOOLEAN_PROPERTIES",
    "checked",
    "disabled",
    "indeterminate",
    "readonly",
    "selected",
    "INTEGER_PROPERTIES",
    "colspan",
    "maxlength",
    "rowspan",
    "tabindex",
    "STRING_PROPERTIES",
    "cellpadding",
    "cellspacing",
    "class",
    "contenteditable",
    "for",
    "frameborder",
    "usemap",
    "UPDATE_PROPERTIES",
    "CREATE_PROPERTIES",
    "VOID_ELEMENTS",
    "area",
    "br",
    "col",
    "embed",
    "hr",
    "img",
    "keygen",
    "menuitem",
    "param",
    "track",
    "wbr",
    "NAMESPACE_URIS",
    "svg",
    "xlink",
    "xmlns",
    "publicId",
    "systemId",
    "escaped",
    "escapeHtml",
    "attachText",
    "createTextNode",
    "addNodeBinding",
    "splitData",
    "normalizeLineBreaks",
    "attachError",
    "attachComment",
    "createComment",
    "NodeBinding",
    "emitHooks",
    "ending",
    "createHtmlFragment",
    "range",
    "createRange",
    "selectNodeContents",
    "createContextualFragment",
    "div",
    "extractContents",
    "attachHtml",
    "ns",
    "elementNs",
    "getUnescapedValue",
    "selfClosing",
    "notClosed",
    "endTag",
    "getEndTag",
    "startClose",
    "getStartClose",
    "lowerTagName",
    "unescapedContent",
    "bindContentToValue",
    "getAttributeValue",
    "propertyName",
    "beginning",
    "indexStartNode",
    "$bindItemStart",
    "updateRange",
    "setNodeBounds",
    "RangeBinding",
    "setNodeProperty",
    "appendContent",
    "attachContent",
    "contentHtml",
    "replaceRange",
    "innerOnly",
    "replaceChild",
    "emitRemoved",
    "removeChild",
    "emitRemovedBinding",
    "AttributeBindingsMap",
    "AttributeBinding",
    "__noop_92",
    "escapeAttribute",
    "equalConditions",
    "cloneNode",
    "deleteData",
    "createDocumentFragment",
    "publicText",
    "systemText",
    "_blockUpdate",
    "getBound",
    "propertyValue",
    "setAttributeNS",
    "removeAttributeNS",
    "removeAttribute",
    "getTagName",
    "tagItems",
    "startTag",
    "createElementNS",
    "_bindContent",
    "NaN",
    "appendItemTo",
    "lastChild",
    "attachItemTo",
    "oldPrevious",
    "previousSibling",
    "windowsLength",
    "unixLength",
    "newLines",
    "defaultValue",
    "$try",
    "proxyNode",
    "$bindProxy",
    "templateTruthy",
    "renderValue",
    "renderTemplate",
    "hasTemplateProperty",
    "renderArrayProperties",
    "renderArray",
    "renderObjectProperties",
    "renderObject",
    "ExpressionMeta",
    "isEnd",
    "bindType",
    "valueType",
    "Expression",
    "LiteralExpression",
    "PathExpression",
    "RelativePathExpression",
    "AliasPathExpression",
    "AttributePathExpression",
    "BracketsExpression",
    "inside",
    "afterSegments",
    "DeferRenderExpression",
    "ArrayExpression",
    "ObjectExpression",
    "properties",
    "FnExpression",
    "NewExpression",
    "OperatorExpression",
    "_$operatorFns_20",
    "SequenceExpression",
    "ViewParentExpression",
    "ScopedModelExpression",
    "appendDependency",
    "swapLastDependency",
    "_$expressions_19",
    "_resolvePatch",
    "_lookupAndContextifyValue",
    "_scope",
    "relativeContext",
    "aliasContext",
    "attributeContext",
    "inner",
    "itemDependencies",
    "propertyDependencies",
    "extraInputs",
    "_lookupParent",
    "_applyFn",
    "_getInputs",
    "thisArg",
    "argDependencies",
    "jLen",
    "_$derbyTemplates_17",
    "operatorFns",
    "_$Dom_27",
    "Dom",
    "DomListener",
    "useCapture",
    "DestroyListener",
    "_initListeners",
    "_listenerIndex",
    "domListener",
    "wrappedListener",
    "__EventEmitter_25",
    "_$Controller_25",
    "Controller",
    "$controller",
    "cancelled",
    "delayed",
    "__templates_30",
    "Component",
    "_components",
    "isDestroyed",
    "ComponentAttribute",
    "ComponentAttributeBinding",
    "setModelAttributes",
    "setModelAttribute",
    "createFactory",
    "singleton",
    "SingletonComponentFactory",
    "ComponentFactory",
    "emitInitHooks",
    "ComponentModelData",
    "__noop_30",
    "isBasePrototype",
    "getRootPrototype",
    "_$components_30",
    "extendComponent",
    "_eventModel",
    "$components",
    "throttle",
    "delayArg",
    "delay",
    "boundCallback",
    "nextArgs",
    "queueCall",
    "debounce",
    "debounceAsync",
    "applyArguments",
    "viewName",
    "setNullAttribute",
    "DataConstructor",
    "isSingleton",
    "_extendComponent",
    "setPrototypeOf",
    "rootPrototype",
    "__expressions_32",
    "_$EventModel_32",
    "EventModel",
    "nextId",
    "ModelRef",
    "outside",
    "refChild",
    "RefOutMap",
    "RefChildrenMap",
    "BindingsMap",
    "ItemContextsMap",
    "EventModelsMap",
    "arrayByReference",
    "refOut",
    "refChildren",
    "bindings",
    "itemContexts",
    "__hasKeys_32",
    "childSetWildcard",
    "newItem",
    "arrayLookup",
    "segmentsBefore",
    "segmentsInside",
    "eventModel",
    "isEmpty",
    "dependancies",
    "_addItemContext",
    "_removeItemContext",
    "_addBinding",
    "eventModels",
    "_each",
    "localUpdate",
    "_updateChildItemContexts",
    "_updateArray",
    "_updateObject",
    "mutate",
    "wildcardSegments",
    "onStringInsert",
    "replaceText",
    "cursor",
    "onStringRemove",
    "newText",
    "selectionStart",
    "selectionEnd",
    "scrollTop",
    "__expressions_28",
    "__templates_28",
    "__DependencyOptions_28",
    "documentListeners",
    "_$documentListeners_31",
    "_$Page_28",
    "Page",
    "_createContext",
    "_removeModelListeners",
    "_addListeners",
    "useLegacyListeners",
    "useLegacy",
    "addDependencies",
    "BindingWrapper",
    "updateDependencies",
    "$bodyClass",
    "classNames",
    "className",
    "$preventDefault",
    "$stopPropagation",
    "stopPropagation",
    "_setRenderParams",
    "_setRenderPrefix",
    "titleFragment",
    "bodyFragment",
    "titleElement",
    "getElementsByTagName",
    "attach",
    "titleView",
    "bodyView",
    "contextMeta",
    "_addModelListeners",
    "_addContextListeners",
    "_addModelListenersLegacy",
    "changeListener",
    "loadListener",
    "unloadListener",
    "insertListener",
    "moveListener",
    "patchTextBinding",
    "bindingWrappers",
    "destroyListeners",
    "__nextId_28",
    "ignoreTemplateDependency",
    "equalDependencies",
    "lenA",
    "itemA",
    "itemB",
    "lenItemA",
    "lenItemB",
    "textInputUpdate",
    "textUpdate",
    "dependencyOptions",
    "dependency",
    "_$_views_29",
    "derbyTemplates",
    "role",
    "selectedIndex",
    "panes",
    "aria-labelledby",
    "aria-hidden",
    "__EventEmitter_24",
    "__templates_24",
    "_$App_24",
    "App",
    "derby",
    "scriptHash",
    "bundledAt",
    "createAppPage",
    "tracksRoutes",
    "_pendingComponentMap",
    "_init",
    "AppPage",
    "_waitForAttach",
    "_cancelAttach",
    "_contentReady",
    "_finishInit",
    "script",
    "_getScript",
    "isProduction",
    "nodeEnv",
    "_autoRefresh",
    "isReady",
    "onDOMContentLoaded",
    "onDOMReady",
    "toplevel",
    "frameElement",
    "documentElement",
    "doScroll",
    "doScrollCheck",
    "querySelector",
    "loadViews",
    "loadStyles",
    "addViews",
    "isDependency",
    "viewIs",
    "viewFilename",
    "viewSource",
    "viewProp",
    "is",
    "currentView",
    "_handleMessage",
    "styleElement",
    "css",
    "_$Derby_26",
    "Derby",
    "createApp",
    "__Derby_derby",
    "_$derby_derby",
    "_$derbyDebug_16",
    "MODEL",
    "APP",
    "findComponent",
    "componentCommand",
    "logEvents",
    "commentIterator",
    "createTreeWalker",
    "comment",
    "_$dBootstrap_11",
    "_$Dropdown_10",
    "_$Modal_12",
    "_$Tabs_13",
    "_$Alert_8",
    "ConnectionAlert",
    "_$ConnectionAlert_14",
    "reload",
    "sentenceCase",
    "_$BeforeUnload_7",
    "BeforeUnload",
    "listenerFn",
    "confirmationMessage",
    "_$widgets_126",
    "__filename",
    "color",
    "hideModal",
    "confirm"
  ],
  "mappings": "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",
  "sourcesContent": [
    "require = (function (require) {\nvar exposedRequire = function exposedRequire(e,r){return exposedRequire.m.hasOwnProperty(e)?exposedRequire.m[e]:\"function\"!=typeof require||r?\"function\"==typeof exposedRequire.r?exposedRequire.r(e,1):void 0:require(e,1)};\nexposedRequire.m = {};\nexposedRequire.r = require;var createModuleFactory = function createModuleFactory(t){var e;return function(r){return e||t(e={exports:{},parent:r},e.exports),e.exports}};\n",
    "module.exports = ContextMenu;\nfunction ContextMenu() {}\nContextMenu.prototype.view = __dirname;\n\nContextMenu.prototype.create = function(model, dom) {\n  // Close when clicking outside of the context menu\n  var contextMenu = this;\n  dom.on('click', function(e) {\n    if(contextMenu.menu.contains(e.target)) return;\n    model.set('open', false);\n  });\n};\n\nContextMenu.prototype.open = function(e)Â {\n  if(!e) throw new Error('You must provide a click event as the first argument to open() when opening the context menu.');\n\n  e.preventDefault();\n  var contextMenu = this;\n  var model = this.model;\n  var x = e.clientX + 'px';\n  var y = e.clientY + 'px';\n\n  var args = Array.prototype.slice.call(arguments);\n  args.unshift('open');\n  args.push(function() {\n    contextMenu.menu.style.top = y;\n    contextMenu.menu.style.left = x;\n    model.set('open', true);\n  });\n\n  this.emitDelayable.apply(this, args);\n};\n\nContextMenu.prototype.select = function(option) {\n  this.model.set('value', optionValue(option));\n  this.model.set('open', false);\n  if(option.hasOwnProperty('action') && typeof option.action === 'function') option.action();\n  this.emit('select');\n};\n\nfunction optionValue(option) {\n  return (option.hasOwnProperty('value')) ? option.value : option.content;\n}",
    "module.exports = Alert\n\nfunction Alert() {}\n\nAlert.prototype.view = __dirname;\n\nAlert.prototype.create = function(model, dom) {\n  this.model.setNull('hidden', false);\n};\n\nAlert.prototype.show = function(model, dom) {\n  this.model.set('faded', false);\n  this.model.set('hidden', false);\n};\n\nAlert.prototype.hide = function() {\n  var model = this.model;\n  model.set('faded', true);\n  setTimeout(function() {\n    model.set('hidden', true);\n  }, 300);\n};",
    "module.exports = Tabs;\nfunction Tabs() {}\nTabs.prototype.view = __dirname;\n\nTabs.prototype.init = function(model) {\n  model.setNull('selectedIndex', 0);\n};\n\nTabs.prototype.select = function(index) {\n  this.model.set('selectedIndex', index);\n};\n",
    "module.exports = Modal;\nfunction Modal() {}\nModal.prototype.view = __dirname;\n\nModal.prototype.create = function(model, dom) {\n  var modal = this;\n  dom.on('keydown', function(e) {\n    if (!model.get('show')) return;\n    if (e.keyCode === 27) {  // Escape\n      modal.hide('escape');\n    }\n  });\n};\n\nModal.prototype.show = function() {\n  var model = this.model;\n  this.emitDelayable('show', function() {\n    document.body.classList.add('modal-open');\n    model.set('show', true);\n    setTimeout(function() {\n      model.set('faded', true);\n    }, 0);\n  });\n};\n\nModal.prototype.hide = function(action) {\n  var cancelled = this.emitCancellable('hide', action);\n  if (cancelled) return;\n  var model = this.model;\n  model.set('faded', false);\n  setTimeout(function() {\n    document.body.classList.remove('modal-open');\n    model.set('show', false);\n  }, 300);\n};\n",
    "module.exports = Dropdown;\nfunction Dropdown() {}\nDropdown.prototype.view = __dirname;\n\nDropdown.prototype.create = function(model, dom) {\n  // Close on click outside of the dropdown\n  var dropdown = this;\n  dom.on('click', function(e) {\n    if (dropdown.toggleButton.contains(e.target)) return;\n    if (dropdown.menu.contains(e.target)) return;\n    model.set('open', false);\n  });\n  // Watch the change of the options and update the selected element if needed\n  model.on('change', 'options', function() {\n    model.set('value', model.get('value'));\n  });\n};\n\nDropdown.prototype.toggle = function() {\n  this.model.set('open', !this.model.get('open'));\n};\n\nDropdown.prototype.select = function(option) {\n  this.model.set('value', optionValue(option));\n  this.model.set('open', false);\n};\n\nDropdown.prototype.label = function(value) {\n  var options = this.getAttribute('options') || [];\n  for (var i = 0, len = options.length; i < len; i++) {\n    var option = options[i];\n    if (value === optionValue(option)) {\n      return option.content;\n    }\n  }\n  return this.getAttribute('prompt') || 'Select';\n};\n\nfunction optionValue(option) {\n  return (option.hasOwnProperty('value')) ? option.value : option.content;\n}\n",
    "var textDiff = require('./textDiff');\n\nexports.add = addDocumentListeners;\nexports.inputSupportsSelection = inputSupportsSelection;\n\n// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#do-not-apply\n// TODO: Date types support\nfunction inputSupportsSelection(input) {\n  var type = input.type;\n  return (\n    type === 'text' ||\n    type === 'textarea' ||\n    type === 'search' ||\n    type === 'url' ||\n    type === 'tel' ||\n    type === 'password'\n  );\n}\nfunction inputIsNumberValue(input) {\n  var type = input.type;\n  return (type === 'number' || (type === 'range' && !input.multiple));\n}\nvar inputValue = function(input) {\n  return inputIsNumberValue(input) ? input.valueAsNumber : input.value;\n};\n\nfunction addDocumentListeners(doc) {\n  doc.addEventListener('input', documentInput, true);\n  doc.addEventListener('change', documentChange, true);\n\n  // Listen to more events for versions of IE with buggy input event implementations\n  if (parseFloat(window.navigator.appVersion.split('MSIE ')[1]) <= 9) {\n    // We're listening on selectionchange because there's no other event emitted when\n    // the user clicks 'delete' from a context menu when right clicking on selected text.\n    // So although this event fires overly aggressively, it's the only real way\n    // to ensure that we can detect all changes to the input value in IE <= 9\n    doc.addEventListener('selectionchange', function(e){\n      if (document.activeElement) {\n        documentInput({target: document.activeElement}); // selectionchange evts don't have the e.target we need\n      }\n    }, true);\n  }\n\n  // For some reason valueAsNumber returns NaN for number inputs in IE\n  // until a new IE version that handles this is released, parse input.value as a fallback\n  var input = document.createElement('input');\n  input.type = 'number';\n  input.value = '7';\n  if (input.valueAsNumber !== input.valueAsNumber) {\n    var oldInputValue = inputValue;\n    inputValue = function(input) {\n      if (input.type === 'number') {\n        return inputIsNumberValue(input) ? parseFloat(input.value) : input.value;\n      } else {\n        return oldInputValue.apply(this, arguments);\n      }\n    };\n  }\n}\n\nfunction documentInput(e) {\n  var target = e.target;\n\n  if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\n    setInputValue(e, target);\n  }\n}\n\nfunction documentChange(e) {\n  var target = e.target;\n\n  if (target.tagName === 'INPUT') {\n    setBoundProperty(target, 'checked');\n    setInputValue(e, target);\n\n  } else if (target.tagName === 'SELECT') {\n    setOptionBindings(target);\n\n  } else if (target.tagName === 'TEXTAREA') {\n    setInputValue(e, target);\n  }\n}\n\nfunction setBoundProperty(node, property) {\n  var binding = node.$bindAttributes && node.$bindAttributes[property];\n  if (!binding || binding.isUnbound()) return;\n\n  var value = node[property];\n  binding.template.expression.set(binding.context, value);\n}\n\nfunction setInputValue(e, target) {\n  var binding = target.$bindAttributes && target.$bindAttributes.value;\n  if (!binding || binding.isUnbound()) return;\n\n  if (inputSupportsSelection(target)) {\n    var pass = {$event: e};\n    textDiffBinding(binding, target.value, pass);\n  } else {\n    var value = inputValue(target);\n    binding.template.expression.set(binding.context, value);\n  }\n}\n\nfunction textDiffBinding(binding, value, pass) {\n  var expression = binding.template.expression;\n  var segments = expression.pathSegments(binding.context);\n  if (segments) {\n    var model = binding.context.controller.model.pass(pass);\n    textDiff.onTextInput(model, segments, value);\n  } else if (expression.set) {\n    expression.set(binding.context, value);\n  }\n}\n\nfunction setOptionBindings(parent) {\n  for (var node = parent.firstChild; node; node = node.nextSibling) {\n    if (node.tagName === 'OPTION') {\n      setBoundProperty(node, 'selected');\n    } else if (node.hasChildNodes()) {\n      setOptionBindings(node);\n    }\n  }\n}\n",
    "var saddle = require('saddle');\nvar serializeObject = require('serialize-object');\nvar DependencyOptions = require('./options').DependencyOptions;\nvar util = require('./util');\nvar concat = util.concat;\nvar hasKeys = util.hasKeys;\nvar traverseAndCreate = util.traverseAndCreate;\n\n(function() {\n  for (var key in saddle) {\n    exports[key] = saddle[key];\n  }\n})();\n\nexports.Marker = Marker;\nexports.View = View;\nexports.ViewInstance = ViewInstance;\nexports.DynamicViewInstance = DynamicViewInstance;\nexports.ViewParent = ViewParent;\nexports.ContextClosure = ContextClosure;\n\nexports.Views = Views;\n\nexports.MarkupHook = MarkupHook;\nexports.ElementOn = ElementOn;\nexports.ComponentOn = ComponentOn;\nexports.AsProperty = AsProperty;\nexports.AsObject = AsObject;\nexports.AsObjectComponent = AsObjectComponent;\nexports.AsArray = AsArray;\nexports.AsArrayComponent = AsArrayComponent;\n\nexports.emptyTemplate = new saddle.Template([]);\n\n// Add ::isUnbound to Template && Binding\nsaddle.Template.prototype.isUnbound = function(context) {\n  return context.unbound;\n};\nsaddle.Binding.prototype.isUnbound = function() {\n  return this.template.expression.isUnbound(this.context);\n};\n\n// Add Template::resolve\nsaddle.Template.prototype.resolve = function() {};\n\n// The Template::dependencies method is specific to how Derby bindings work,\n// so extend all of the Saddle Template types here\nsaddle.Template.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  return concatArrayDependencies(null, this.content, context, options);\n};\nsaddle.Doctype.prototype.dependencies = function() {};\nsaddle.Text.prototype.dependencies = function() {};\nsaddle.DynamicText.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  return getDependencies(this.expression, context, options);\n};\nsaddle.Comment.prototype.dependencies = function() {};\nsaddle.DynamicComment.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  return getDependencies(this.expression, context, options);\n};\nsaddle.Html.prototype.dependencies = function() {};\nsaddle.DynamicHtml.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  return getDependencies(this.expression, context, options);\n};\nsaddle.Element.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  var dependencies = concatMapDependencies(null, this.attributes, context, options);\n  if (!this.content) return dependencies;\n  return concatArrayDependencies(dependencies, this.content, context, options);\n};\nsaddle.DynamicElement.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  var dependencies = saddle.Element.prototype.dependencies(context, options);\n  return concatDependencies(dependencies, this.tagName, context, options);\n};\nsaddle.Block.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  var dependencies = (this.expression.meta && this.expression.meta.blockType === 'on') ?\n    getDependencies(this.expression, context, options) : null;\n  var blockContext = context.child(this.expression);\n  return concatArrayDependencies(dependencies, this.content, blockContext, options);\n};\nsaddle.ConditionalBlock.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  var condition = this.getCondition(context);\n  if (condition == null) {\n    return getDependencies(this.expressions[0], context, options);\n  }\n  var dependencies = concatSubArrayDependencies(null, this.expressions, context, options, condition);\n  var expression = this.expressions[condition];\n  var content = this.contents[condition];\n  var blockContext = context.child(expression);\n  return concatArrayDependencies(dependencies, content, blockContext, options);\n};\nsaddle.EachBlock.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  var dependencies = getDependencies(this.expression, context, options);\n  var items = this.expression.get(context);\n  if (items && items.length) {\n    for (var i = 0; i < items.length; i++) {\n      var itemContext = context.eachChild(this.expression, i);\n      dependencies = concatArrayDependencies(dependencies, this.content, itemContext, options);\n    }\n  } else if (this.elseContent) {\n    dependencies = concatArrayDependencies(dependencies, this.elseContent, context, options);\n  }\n  return dependencies;\n};\nsaddle.Attribute.prototype.dependencies = function() {};\nsaddle.DynamicAttribute.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  return getDependencies(this.expression, context, options);\n};\n\nfunction concatSubArrayDependencies(dependencies, expressions, context, options, end) {\n  for (var i = 0; i <= end; i++) {\n    dependencies = concatDependencies(dependencies, expressions[i], context, options);\n  }\n  return dependencies;\n}\nfunction concatArrayDependencies(dependencies, expressions, context, options) {\n  for (var i = 0; i < expressions.length; i++) {\n    dependencies = concatDependencies(dependencies, expressions[i], context, options);\n  }\n  return dependencies;\n}\nfunction concatMapDependencies(dependencies, expressions, context, options) {\n  for (var key in expressions) {\n    dependencies = concatDependencies(dependencies, expressions[key], context, options);\n  }\n  return dependencies;\n}\nfunction concatDependencies(dependencies, expression, context, options) {\n  var expressionDependencies = getDependencies(expression, context, options);\n  return concat(dependencies, expressionDependencies);\n}\nfunction getDependencies(expression, context, options) {\n  return expression.dependencies(context, options);\n}\n\nvar markerHooks = [{\n  emit: function(context, node) {\n    node.$component = context.controller;\n    context.controller.markerNode = node;\n  }\n}];\nfunction Marker(data) {\n  saddle.Comment.call(this, data, markerHooks);\n}\nMarker.prototype = Object.create(saddle.Comment.prototype);\nMarker.prototype.constructor = Marker;\nMarker.prototype.type = 'Marker';\nMarker.prototype.serialize = function() {\n  return serializeObject.instance(this, this.data);\n};\nMarker.prototype.get = function() {\n  return '';\n};\n\nfunction ViewAttributesMap(source) {\n  var items = source.split(/\\s+/);\n  for (var i = 0, len = items.length; i < len; i++) {\n    this[items[i]] = true;\n  }\n}\nfunction ViewArraysMap(source) {\n  var items = source.split(/\\s+/);\n  for (var i = 0, len = items.length; i < len; i++) {\n    var item = items[i].split('/');\n    this[item[0]] = item[1] || item[0];\n  }\n}\nfunction View(views, name, source, options) {\n  this.views = views;\n  this.name = name;\n  this.source = source;\n  this.options = options;\n\n  var nameSegments = (this.name || '').split(':');\n  var lastSegment = nameSegments.pop();\n  this.namespace = nameSegments.join(':');\n  this.registeredName = (lastSegment === 'index') ? this.namespace : this.name;\n\n  this.attributesMap = options && options.attributes &&\n    new ViewAttributesMap(options.attributes);\n  this.arraysMap = options && options.arrays &&\n    new ViewArraysMap(options.arrays);\n  // The empty string is considered true for easier HTML attribute parsing\n  this.unminified = options && (options.unminified || options.unminified === '');\n  this.string = options && (options.string || options.string === '');\n  this.literal = options && (options.literal || options.literal === '');\n  this.template = null;\n  this.componentFactory = null;\n  this.fromSerialized = false;\n}\nView.prototype = Object.create(saddle.Template.prototype);\nView.prototype.constructor = View;\nView.prototype.type = 'View';\nView.prototype.serialize = function() {\n  return null;\n};\nView.prototype._isComponent = function(context) {\n  if (!this.componentFactory) return false;\n  if (context.attributes && context.attributes.extend) return false;\n  return true;\n};\nView.prototype._initComponent = function(context) {\n  return (this._isComponent(context)) ?\n    this.componentFactory.init(context) : context;\n};\nView.prototype._queueCreate = function(context, viewContext) {\n  if (this._isComponent(context)) {\n    var componentFactory = this.componentFactory;\n    context.queue(function queuedCreate() {\n      componentFactory.create(viewContext);\n    });\n\n    if (!context.hooks) return;\n    context.queue(function queuedComponentHooks() {\n      // Kick off hooks if view instance specified `on` or `as` attributes\n      for (var i = 0, len = context.hooks.length; i < len; i++) {\n        context.hooks[i].emit(context, viewContext.controller);\n      }\n    });\n  }\n};\nView.prototype.get = function(context, unescaped) {\n  var viewContext = this._initComponent(context);\n  var template = this.template || this.parse();\n  return template.get(viewContext, unescaped);\n};\nView.prototype.getFragment = function(context, binding) {\n  var viewContext = this._initComponent(context);\n  var template = this.template || this.parse();\n  var fragment = template.getFragment(viewContext, binding);\n  this._queueCreate(context, viewContext);\n  return fragment;\n};\nView.prototype.appendTo = function(parent, context) {\n  var viewContext = this._initComponent(context);\n  var template = this.template || this.parse();\n  template.appendTo(parent, viewContext);\n  this._queueCreate(context, viewContext);\n};\nView.prototype.attachTo = function(parent, node, context) {\n  var viewContext = this._initComponent(context);\n  var template = this.template || this.parse();\n  var node = template.attachTo(parent, node, viewContext);\n  this._queueCreate(context, viewContext);\n  return node;\n};\nView.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  var template = this.template || this.parse();\n  // We can't figure out relative path dependencies within a component without\n  // rendering it, because each component instance's scope is dynamically set\n  // based on its unique `id` property. To represent this, set the context\n  // controller to `null`.\n  //\n  // Under normal rendering conditions, contexts should always have reference\n  // to a controller. Expression::get() methods use the reference to\n  // `context.controller.model.data` to lookup values, and paths are resolved\n  // based on `context.controller.model._scope`.\n  //\n  // To handle this, Expression methods guard against a null controller by not\n  // returning any dependencies for model paths. In addition, they return\n  // `undefined` from get, which affect dependencies computed for\n  // ConditionalBlock and EachBlock, as their dependencies will differ based\n  // on the value of model data.\n  //\n  // TODO: This likely under-estimates the true dependencies within a\n  // template. However, to provide a more complete view of dependencies, we'd\n  // need information we only have at render time, namely, the scope and data\n  // within the component model. This may indicate that Derby should use a\n  // more Functional Reactive Programming (FRP)-like approach of having\n  // dependencies be returned from getFragment and attach methods along with\n  // DOM nodes rather than computing dependencies separately from rendering.\n  var viewContext = (this._isComponent(context)) ?\n    context.componentChild(null) : context;\n  return template.dependencies(viewContext, options);\n};\nView.prototype.parse = function() {\n  this._parse();\n  if (this.componentFactory) {\n    var marker = new Marker(this.name);\n    this.template.content.unshift(marker);\n  }\n  return this.template;\n};\n// View.prototype._parse is defined in parsing.js, so that it doesn't have to\n// be included in the client if templates are all parsed server-side\nView.prototype._parse = function() {\n  throw new Error('View parsing not available');\n};\n\nfunction ViewInstance(name, attributes, hooks, initHooks) {\n  this.name = name;\n  this.attributes = attributes;\n  this.hooks = hooks;\n  this.initHooks = initHooks;\n  this.view = null;\n}\nViewInstance.prototype = Object.create(saddle.Template.prototype);\nViewInstance.prototype.constructor = ViewInstance;\nViewInstance.prototype.type = 'ViewInstance';\nViewInstance.prototype.serialize = function() {\n  return serializeObject.instance(this, this.name, this.attributes, this.hooks, this.initHooks);\n};\nViewInstance.prototype.get = function(context, unescaped) {\n  var view = this._find(context);\n  var viewContext = context.viewChild(view, this.attributes, this.hooks, this.initHooks);\n  return view.get(viewContext, unescaped);\n};\nViewInstance.prototype.getFragment = function(context, binding) {\n  var view = this._find(context);\n  var viewContext = context.viewChild(view, this.attributes, this.hooks, this.initHooks);\n  return view.getFragment(viewContext, binding);\n};\nViewInstance.prototype.appendTo = function(parent, context) {\n  var view = this._find(context);\n  var viewContext = context.viewChild(view, this.attributes, this.hooks, this.initHooks);\n  view.appendTo(parent, viewContext);\n};\nViewInstance.prototype.attachTo = function(parent, node, context) {\n  var view = this._find(context);\n  var viewContext = context.viewChild(view, this.attributes, this.hooks, this.initHooks);\n  return view.attachTo(parent, node, viewContext);\n};\nViewInstance.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  var view = this._find(context);\n  var viewContext = context.viewChild(view, this.attributes, this.hooks, this.initHooks);\n  return view.dependencies(viewContext, options);\n};\nViewInstance.prototype._find = function(context) {\n  if (this.view) return this.view;\n  var contextView = context.getView();\n  var namespace = contextView && contextView.namespace;\n  this.view = context.meta.views.find(this.name, namespace);\n  if (!this.view) {\n    var message = context.meta.views.findErrorMessage(this.name, contextView);\n    throw new Error(message);\n  }\n  return this.view;\n};\n\nfunction DynamicViewInstance(nameExpression, attributes, hooks, initHooks) {\n  this.nameExpression = nameExpression;\n  this.attributes = attributes;\n  this.hooks = hooks;\n  this.initHooks = initHooks;\n}\nDynamicViewInstance.prototype = Object.create(ViewInstance.prototype);\nDynamicViewInstance.prototype.constructor = DynamicViewInstance;\nDynamicViewInstance.prototype.type = 'DynamicViewInstance';\nDynamicViewInstance.prototype.serialize = function() {\n  return serializeObject.instance(this, this.nameExpression, this.attributes, this.hooks, this.initHooks);\n};\nDynamicViewInstance.prototype._find = function(context) {\n  var name = this.nameExpression.get(context);\n  var contextView = context.getView();\n  var namespace = contextView && contextView.namespace;\n  var view = name && context.meta.views.find(name, namespace);\n  return view || exports.emptyTemplate;\n};\nDynamicViewInstance.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  var nameDependencies = this.nameExpression.dependencies(context);\n  var viewDependencies = ViewInstance.prototype.dependencies.call(this, context, options);\n  return concat(nameDependencies, viewDependencies);\n};\n\n// Without a ContextClosure, ViewParent will return the nearest context that\n// is the parent of a view instance. When a context with a `closure` property\n// is encountered first, ViewParent will find the specific referenced context,\n// even if it is further up the context hierarchy.\nfunction ViewParent(template) {\n  this.template = template;\n}\nViewParent.prototype = Object.create(saddle.Template.prototype);\nViewParent.prototype.constructor = ViewParent;\nViewParent.prototype.type = 'ViewParent';\nViewParent.prototype.serialize = function() {\n  return serializeObject.instance(this, this.template);\n};\nViewParent.prototype.get = function(context, unescaped) {\n  var parentContext = context.forViewParent();\n  return this.template.get(parentContext, unescaped);\n};\nViewParent.prototype.getFragment = function(context, binding) {\n  var parentContext = context.forViewParent();\n  return this.template.getFragment(parentContext, binding);\n};\nViewParent.prototype.appendTo = function(parent, context) {\n  var parentContext = context.forViewParent();\n  this.template.appendTo(parent, parentContext);\n};\nViewParent.prototype.attachTo = function(parent, node, context) {\n  var parentContext = context.forViewParent();\n  return this.template.attachTo(parent, node, parentContext);\n};\nViewParent.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this, options)) return;\n  var parentContext = context.forViewParent();\n  return this.template.dependencies(parentContext, options);\n};\n\n// At render time, this template creates a context child and sets its\n// `closure` property to a fixed reference. It is used in combination with\n// ViewParent in order to control which context is returned.\n//\n// Instances of this template cannot be serialized. It is intended for use\n// dynamically during rendering only.\nfunction ContextClosure(template, context) {\n  this.template = template;\n  this.context = context;\n}\nContextClosure.prototype = Object.create(saddle.Template.prototype);\nContextClosure.prototype.constructor = ContextClosure;\nContextClosure.prototype.serialize = function() {\n  throw new Error('ContextClosure cannot be serialized');\n};\nContextClosure.prototype.get = function(context, unescaped) {\n  var closureContext = context.closureChild(this.context);\n  return this.template.get(closureContext, unescaped);\n};\nContextClosure.prototype.getFragment = function(context, binding) {\n  var closureContext = context.closureChild(this.context);\n  return this.template.getFragment(closureContext, binding);\n};\nContextClosure.prototype.appendTo = function(parent, context) {\n  var closureContext = context.closureChild(this.context);\n  this.template.appendTo(parent, closureContext);\n};\nContextClosure.prototype.attachTo = function(parent, node, context) {\n  var closureContext = context.closureChild(this.context);\n  return this.template.attachTo(parent, node, closureContext);\n};\nContextClosure.prototype.dependencies = function(context, options) {\n  if (DependencyOptions.shouldIgnoreTemplate(this.template, options)) return;\n  var closureContext = context.closureChild(this.context);\n  return this.template.dependencies(closureContext, options);\n};\nContextClosure.prototype.equals = function(other) {\n  return (other instanceof ContextClosure) &&\n    (this.context === other.context) &&\n    (this.template.equals(other.template));\n};\n\nfunction ViewsMap() {}\nfunction Views() {\n  this.nameMap = new ViewsMap();\n  this.tagMap = new ViewsMap();\n  // TODO: elementMap is deprecated and should be removed with Derby 0.6.0\n  this.elementMap = this.tagMap;\n}\nViews.prototype.find = function(name, namespace) {\n  var map = this.nameMap;\n\n  // Exact match lookup\n  var exactName = (namespace) ? namespace + ':' + name : name;\n  var match = map[exactName];\n  if (match) return match;\n\n  // Relative lookup\n  var segments = name.split(':');\n  var segmentsDepth = segments.length;\n  if (namespace) segments = namespace.split(':').concat(segments);\n  // Iterate through segments, leaving the `segmentsDepth` segments and\n  // removing the second to `segmentsDepth` segment to traverse up the\n  // namespaces. Decrease `segmentsDepth` if not found and repeat again.\n  while (segmentsDepth > 0) {\n    var testSegments = segments.slice();\n    while (testSegments.length > segmentsDepth) {\n      testSegments.splice(-1 - segmentsDepth, 1);\n      var testName = testSegments.join(':');\n      var match = map[testName];\n      if (match) return match;\n    }\n    segmentsDepth--;\n  }\n};\nViews.prototype.register = function(name, source, options) {\n  var mapName = name.replace(/:index$/, '');\n  var view = this.nameMap[mapName];\n  if (view) {\n    // Recreate the view if it already exists. We re-apply the constructor\n    // instead of creating a new view object so that references to object\n    // can be cached after finding the first time\n    var componentFactory = view.componentFactory;\n    View.call(view, this, name, source, options);\n    view.componentFactory = componentFactory;\n  } else {\n    view = new View(this, name, source, options);\n  }\n  this.nameMap[mapName] = view;\n  // TODO: element is deprecated and should be removed with Derby 0.6.0\n  var tagName = options && (options.tag || options.element);\n  if (tagName) this.tagMap[tagName] = view;\n  return view;\n};\nViews.prototype.deserialize = function(items) {\n  for (var i = 0; i < items.length; i++) {\n    var item = items[i];\n    var setTemplate = item[0];\n    var name = item[1];\n    var source = item[2];\n    var options = item[3];\n    var view = this.register(name, source, options);\n    view.parse = setTemplate;\n    view.fromSerialized = true;\n  }\n};\nViews.prototype.serialize = function(options) {\n  var forServer = options && options.server;\n  var minify = options && options.minify;\n  var items = [];\n  for (var name in this.nameMap) {\n    var view = this.nameMap[name];\n    var template = view.template || view.parse();\n    if (!forServer && view.options) {\n      // Do not serialize views with the `serverOnly` option, except when\n      // serializing for a server script\n      if (view.options.serverOnly) continue;\n      // For views with the `server` option, serialize them with a blank\n      // template body. This allows them to be used from other views on the\n      // browser, but they will output nothing on the browser\n      if (view.options.server) template = exports.emptyTemplate;\n    }\n    // Serializing views as a function allows them to be constructed lazily upon\n    // first use. This can improve initial load times of the application when\n    // there are many views\n    items.push(\n      '[function(){return this.template=' +\n        template.serialize() + '},' +\n        serializeObject.args([\n          view.name,\n          (minify) ? null : view.source,\n          (hasKeys(view.options)) ? view.options : null\n        ]) +\n      ']'\n    );\n  }\n  return 'function(derbyTemplates, views){' +\n    'var expressions = derbyTemplates.expressions,' +\n    'templates = derbyTemplates.templates;' +\n    'views.deserialize([' + items.join(',') + '])}';\n};\nViews.prototype.findErrorMessage = function(name, contextView) {\n  var names = Object.keys(this.nameMap);\n  var message = 'Cannot find view \"' + name + '\" in' +\n    [''].concat(names).join('\\n  ') + '\\n';\n  if (contextView) {\n    message += '\\nWithin template \"' + contextView.name + '\":\\n' + contextView.source;\n  }\n  return message;\n};\n\n\nfunction MarkupHook() {}\nMarkupHook.prototype.module = saddle.Template.prototype.module;\n\nfunction ElementOn(name, expression) {\n  this.name = name;\n  this.expression = expression;\n}\nElementOn.prototype = Object.create(MarkupHook.prototype);\nElementOn.prototype.constructor = ElementOn;\nElementOn.prototype.type = 'ElementOn';\nElementOn.prototype.serialize = function() {\n  return serializeObject.instance(this, this.name, this.expression);\n};\nElementOn.prototype.emit = function(context, element) {\n  var elementOn = this;\n  if (this.name === 'create') {\n    this.apply(context, element);\n\n  } else if (this.name === 'destroy') {\n    var destroyListeners = element.$destroyListeners || (element.$destroyListeners = []);\n    destroyListeners.push(function elementOnDestroy() {\n      elementOn.apply(context, element);\n    });\n\n  } else {\n    element.addEventListener(this.name, function elementOnListener(event) {\n      return elementOn.apply(context, element, event);\n    }, false);\n  }\n};\nElementOn.prototype.apply = function(context, element, event) {\n  var modelData = context.controller.model.data;\n  modelData.$event = event;\n  modelData.$element = element;\n  var out = this.expression.apply(context);\n  delete modelData.$event;\n  delete modelData.$element;\n  return out;\n};\n\nfunction ComponentOn(name, expression) {\n  this.name = name;\n  this.expression = expression;\n}\nComponentOn.prototype = Object.create(MarkupHook.prototype);\nComponentOn.prototype.constructor = ComponentOn;\nComponentOn.prototype.type = 'ComponentOn';\nComponentOn.prototype.serialize = function() {\n  return serializeObject.instance(this, this.name, this.expression);\n};\nComponentOn.prototype.emit = function(context, component) {\n  var expression = this.expression;\n  component.on(this.name, function componentOnListener() {\n    var args = arguments.length && Array.prototype.slice.call(arguments);\n    return expression.apply(context, args);\n  });\n};\n\nfunction AsProperty(segments) {\n  this.segments = segments;\n  this.lastSegment = segments.pop();\n}\nAsProperty.prototype = Object.create(MarkupHook.prototype);\nAsProperty.prototype.constructor = AsProperty;\nAsProperty.prototype.type = 'AsProperty';\nAsProperty.prototype.serialize = function() {\n  var segments = this.segments.concat(this.lastSegment);\n  return serializeObject.instance(this, segments);\n};\nAsProperty.prototype.emit = function(context, target) {\n  var node = traverseAndCreate(context.controller, this.segments);\n  node[this.lastSegment] = target;\n};\n\nfunction AsObject(segments, keyExpression) {\n  AsProperty.call(this, segments);\n  this.keyExpression = keyExpression;\n}\nAsObject.prototype = Object.create(AsProperty.prototype);\nAsObject.prototype.constructor = AsObject;\nAsObject.prototype.type = 'AsObject';\nAsObject.prototype.serialize = function() {\n  var segments = this.segments.concat(this.lastSegment);\n  return serializeObject.instance(this, segments, this.keyExpression);\n};\nAsObject.prototype.emit = function(context, target) {\n  var node = traverseAndCreate(context.controller, this.segments);\n  var object = node[this.lastSegment] || (node[this.lastSegment] = {});\n  var key = this.keyExpression.get(context);\n  object[key] = target;\n  this.addListeners(target, object, key);\n};\nAsObject.prototype.addListeners = function(target, object, key) {\n  this.addDestroyListener(target, function asObjectDestroy() {\n    delete object[key];\n  });\n};\nAsObject.prototype.addDestroyListener = function(target, listener) {\n  var listeners = target.$destroyListeners || (target.$destroyListeners = []);\n  listeners.push(listener);\n};\n\nfunction AsObjectComponent(segments, keyExpression) {\n  AsObject.call(this, segments, keyExpression);\n}\nAsObjectComponent.prototype = Object.create(AsObject.prototype);\nAsObjectComponent.prototype.constructor = AsObjectComponent;\nAsObjectComponent.prototype.type = 'AsObjectComponent';\nAsObjectComponent.prototype.addDestroyListener = function(target, listener) {\n  target.on('destroy', listener);\n};\n\nfunction AsArray(segments) {\n  AsProperty.call(this, segments);\n}\nAsArray.prototype = Object.create(AsProperty.prototype);\nAsArray.prototype.constructor = AsArray;\nAsArray.prototype.type = 'AsArray';\nAsArray.prototype.emit = function(context, target) {\n  var node = traverseAndCreate(context.controller, this.segments);\n  var array = node[this.lastSegment] || (node[this.lastSegment] = []);\n\n  // Iterate backwards, since rendering will usually append\n  for (var i = array.length; i--;) {\n    var item = array[i];\n    // Don't add an item if already in the array\n    if (item === target) return;\n    var mask = this.comparePosition(target, item);\n    // If the emitted target is after the current item in the document,\n    // insert it next in the array\n    // Node.DOCUMENT_POSITION_FOLLOWING = 4\n    if (mask & 4) {\n      array.splice(i + 1, 0, target);\n      this.addListeners(target, array);\n      return;\n    }\n  }\n  // Add to the beginning if before all items\n  array.unshift(target);\n  this.addListeners(target, array);\n};\nAsArray.prototype.addListeners = function(target, array) {\n  this.addDestroyListener(target, function asArrayDestroy() {\n    var index = array.indexOf(target);\n    if (index !== -1) array.splice(index, 1);\n  });\n};\nAsArray.prototype.comparePosition = function(target, item) {\n  return item.compareDocumentPosition(target);\n};\nAsArray.prototype.addDestroyListener = AsObject.prototype.addDestroyListener;\n\nfunction AsArrayComponent(segments) {\n  AsArray.call(this, segments);\n}\nAsArrayComponent.prototype = Object.create(AsArray.prototype);\nAsArrayComponent.prototype.constructor = AsArrayComponent;\nAsArrayComponent.prototype.type = 'AsArrayComponent';\nAsArrayComponent.prototype.comparePosition = function(target, item) {\n  return item.markerNode.compareDocumentPosition(target.markerNode);\n};\nAsArrayComponent.prototype.addDestroyListener = AsObjectComponent.prototype.addDestroyListener;\n",
    "var templates = require('./templates');\n\nexports.DependencyOptions = DependencyOptions;\n\nfunction DependencyOptions(options) {\n  this.setIgnoreTemplate(options && options.ignoreTemplate);\n}\nDependencyOptions.shouldIgnoreTemplate = function(template, options) {\n  return (options) ? options.ignoreTemplate === template : false;\n};\nDependencyOptions.prototype.setIgnoreTemplate = function(template) {\n  while (template instanceof templates.ContextClosure) {\n    template = template.template;\n  }\n  this.ignoreTemplate = template;\n};\n",
    "exports.instance = serializeInstance;\nexports.args = serializeArgs;\nexports.value = serializeValue;\n\nfunction serializeInstance(instance) {\n  var args = Array.prototype.slice.call(arguments, 1);\n  return 'new ' + instance.module + '.' + instance.type +\n    '(' + serializeArgs(args) + ')';\n}\n\nfunction serializeArgs(args) {\n  // Map each argument into its string representation\n  var items = [];\n  for (var i = args.length; i--;) {\n    var item = serializeValue(args[i]);\n    items.unshift(item);\n  }\n  // Remove trailing null values, assuming they are optional\n  for (var i = items.length; i--;) {\n    var item = items[i];\n    if (item !== 'void 0' && item !== 'null') break;\n    items.pop();\n  }\n  return items.join(', ');\n}\n\nfunction serializeValue(input) {\n  if (input && input.serialize) {\n    return input.serialize();\n\n  } else if (typeof input === 'undefined') {\n    return 'void 0';\n\n  } else if (input === null) {\n    return 'null';\n\n  } else if (typeof input === 'string') {\n    return formatString(input);\n\n  } else if (typeof input === 'number' || typeof input === 'boolean') {\n    return input + '';\n\n  } else if (Array.isArray(input)) {\n    var items = [];\n    for (var i = 0; i < input.length; i++) {\n      var value = serializeValue(input[i]);\n      items.push(value);\n    }\n    return '[' + items.join(', ') + ']';\n\n  } else if (typeof input === 'object') {\n    var items = [];\n    for (var key in input) {\n      var value = serializeValue(input[key]);\n      items.push(formatString(key) + ': ' + value);\n    }\n    return '{' + items.join(', ') + '}';\n  }\n}\nfunction formatString(value) {\n  var escaped = value.replace(/['\\r\\n\\\\]/g, function(match) {\n    return (match === '\\'') ? '\\\\\\'' :\n      (match === '\\r') ? '\\\\r' :\n      (match === '\\n') ? '\\\\n' :\n      (match === '\\\\') ? '\\\\\\\\' :\n      '';\n  });\n  return '\\'' + escaped + '\\'';\n}\n",
    "var nextTick = require('process/browser.js').nextTick;\nvar apply = Function.prototype.apply;\nvar slice = Array.prototype.slice;\nvar immediateIds = {};\nvar nextImmediateId = 0;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) { timeout.close(); };\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// That's not how node.js implements it but the exposed api is the same.\nexports.setImmediate = typeof setImmediate === \"function\" ? setImmediate : function(fn) {\n  var id = nextImmediateId++;\n  var args = arguments.length < 2 ? false : slice.call(arguments, 1);\n\n  immediateIds[id] = true;\n\n  nextTick(function onNextTick() {\n    if (immediateIds[id]) {\n      // fn.call() is faster so we optimize for the common use-case\n      // @see http://jsperf.com/call-apply-segu\n      if (args) {\n        fn.apply(null, args);\n      } else {\n        fn.call(null);\n      }\n      // Prevent ids from leaking\n      exports.clearImmediate(id);\n    }\n  });\n\n  return id;\n};\n\nexports.clearImmediate = typeof clearImmediate === \"function\" ? clearImmediate : function(id) {\n  delete immediateIds[id];\n};",
    "// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar objectCreate = Object.create || objectCreatePolyfill\nvar objectKeys = Object.keys || objectKeysPolyfill\nvar bind = Function.prototype.bind || functionBindPolyfill\n\nfunction EventEmitter() {\n  if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) {\n    this._events = objectCreate(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nvar hasDefineProperty;\ntry {\n  var o = {};\n  if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 });\n  hasDefineProperty = o.x === 0;\n} catch (err) { hasDefineProperty = false }\nif (hasDefineProperty) {\n  Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n    enumerable: true,\n    get: function() {\n      return defaultMaxListeners;\n    },\n    set: function(arg) {\n      // check whether the input is a positive number (whose value is zero or\n      // greater and not a NaN).\n      if (typeof arg !== 'number' || arg < 0 || arg !== arg)\n        throw new TypeError('\"defaultMaxListeners\" must be a positive number');\n      defaultMaxListeners = arg;\n    }\n  });\n} else {\n  EventEmitter.defaultMaxListeners = defaultMaxListeners;\n}\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || isNaN(n))\n    throw new TypeError('\"n\" argument must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nfunction $getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n  if (isFn)\n    handler.call(self);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self);\n  }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n  if (isFn)\n    handler.call(self, arg1);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1);\n  }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n  if (isFn)\n    handler.call(self, arg1, arg2);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2);\n  }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n  if (isFn)\n    handler.call(self, arg1, arg2, arg3);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2, arg3);\n  }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n  if (isFn)\n    handler.apply(self, args);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].apply(self, args);\n  }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n  var er, handler, len, args, i, events;\n  var doError = (type === 'error');\n\n  events = this._events;\n  if (events)\n    doError = (doError && events.error == null);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    if (arguments.length > 1)\n      er = arguments[1];\n    if (er instanceof Error) {\n      throw er; // Unhandled 'error' event\n    } else {\n      // At least give some kind of context to the user\n      var err = new Error('Unhandled \"error\" event. (' + er + ')');\n      err.context = er;\n      throw err;\n    }\n    return false;\n  }\n\n  handler = events[type];\n\n  if (!handler)\n    return false;\n\n  var isFn = typeof handler === 'function';\n  len = arguments.length;\n  switch (len) {\n      // fast cases\n    case 1:\n      emitNone(handler, isFn, this);\n      break;\n    case 2:\n      emitOne(handler, isFn, this, arguments[1]);\n      break;\n    case 3:\n      emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n      break;\n    case 4:\n      emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n      break;\n      // slower\n    default:\n      args = new Array(len - 1);\n      for (i = 1; i < len; i++)\n        args[i - 1] = arguments[i];\n      emitMany(handler, isFn, this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n\n  events = target._events;\n  if (!events) {\n    events = target._events = objectCreate(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener) {\n      target.emit('newListener', type,\n          listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (!existing) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n          prepend ? [listener, existing] : [existing, listener];\n    } else {\n      // If we've already got an array, just append.\n      if (prepend) {\n        existing.unshift(listener);\n      } else {\n        existing.push(listener);\n      }\n    }\n\n    // Check for listener leak\n    if (!existing.warned) {\n      m = $getMaxListeners(target);\n      if (m && m > 0 && existing.length > m) {\n        existing.warned = true;\n        var w = new Error('Possible EventEmitter memory leak detected. ' +\n            existing.length + ' \"' + String(type) + '\" listeners ' +\n            'added. Use emitter.setMaxListeners() to ' +\n            'increase limit.');\n        w.name = 'MaxListenersExceededWarning';\n        w.emitter = target;\n        w.type = type;\n        w.count = existing.length;\n        if (typeof console === 'object' && console.warn) {\n          console.warn('%s: %s', w.name, w.message);\n        }\n      }\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    switch (arguments.length) {\n      case 0:\n        return this.listener.call(this.target);\n      case 1:\n        return this.listener.call(this.target, arguments[0]);\n      case 2:\n        return this.listener.call(this.target, arguments[0], arguments[1]);\n      case 3:\n        return this.listener.call(this.target, arguments[0], arguments[1],\n            arguments[2]);\n      default:\n        var args = new Array(arguments.length);\n        for (var i = 0; i < args.length; ++i)\n          args[i] = arguments[i];\n        this.listener.apply(this.target, args);\n    }\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = bind.call(onceWrapper, state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      list = events[type];\n      if (!list)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = objectCreate(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else\n          spliceOne(list, position);\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (!events.removeListener) {\n        if (arguments.length === 0) {\n          this._events = objectCreate(null);\n          this._eventsCount = 0;\n        } else if (events[type]) {\n          if (--this._eventsCount === 0)\n            this._events = objectCreate(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = objectKeys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = objectCreate(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (!events)\n    return [];\n\n  var evlistener = events[type];\n  if (!evlistener)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n    list[i] = list[k];\n  list.pop();\n}\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction objectCreatePolyfill(proto) {\n  var F = function() {};\n  F.prototype = proto;\n  return new F;\n}\nfunction objectKeysPolyfill(obj) {\n  var keys = [];\n  for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) {\n    keys.push(k);\n  }\n  return k;\n}\nfunction functionBindPolyfill(context) {\n  var fn = this;\n  return function () {\n    return fn.apply(context, arguments);\n  };\n}\n",
    "\nvar rng;\n\nvar crypto = global.crypto || global.msCrypto; // for IE 11\nif (crypto && crypto.getRandomValues) {\n  // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\n  // Moderately fast, high quality\n  var _rnds8 = new Uint8Array(16);\n  rng = function whatwgRNG() {\n    crypto.getRandomValues(_rnds8);\n    return _rnds8;\n  };\n}\n\nif (!rng) {\n  // Math.random()-based (RNG)\n  //\n  // If all else fails, use Math.random().  It's fast, but is of unspecified\n  // quality.\n  var  _rnds = new Array(16);\n  rng = function() {\n    for (var i = 0, r; i < 16; i++) {\n      if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n      _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n    }\n\n    return _rnds;\n  };\n}\n\nmodule.exports = rng;\n\n",
    "//     uuid.js\n//\n//     Copyright (c) 2010-2012 Robert Kieffer\n//     MIT License - http://opensource.org/licenses/mit-license.php\n\n// Unique ID creation requires a high quality random # generator.  We feature\n// detect to determine the best RNG source, normalizing to a function that\n// returns 128-bits of randomness, since that's what's usually required\nvar _rng = require('./rng');\n\n// Maps for number <-> hex string conversion\nvar _byteToHex = [];\nvar _hexToByte = {};\nfor (var i = 0; i < 256; i++) {\n  _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n  _hexToByte[_byteToHex[i]] = i;\n}\n\n// **`parse()` - Parse a UUID into it's component bytes**\nfunction parse(s, buf, offset) {\n  var i = (buf && offset) || 0, ii = 0;\n\n  buf = buf || [];\n  s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\n    if (ii < 16) { // Don't overflow!\n      buf[i + ii++] = _hexToByte[oct];\n    }\n  });\n\n  // Zero out remaining bytes if string was short\n  while (ii < 16) {\n    buf[i + ii++] = 0;\n  }\n\n  return buf;\n}\n\n// **`unparse()` - Convert UUID byte array (ala parse()) into a string**\nfunction unparse(buf, offset) {\n  var i = offset || 0, bth = _byteToHex;\n  return  bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] + '-' +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]] +\n          bth[buf[i++]] + bth[buf[i++]];\n}\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\n// random #'s we need to init node and clockseq\nvar _seedBytes = _rng();\n\n// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\nvar _nodeId = [\n  _seedBytes[0] | 0x01,\n  _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n];\n\n// Per 4.2.2, randomize (14 bit) clockseq\nvar _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n// Previous uuid creation time\nvar _lastMSecs = 0, _lastNSecs = 0;\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v1(options, buf, offset) {\n  var i = buf && offset || 0;\n  var b = buf || [];\n\n  options = options || {};\n\n  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n  // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so\n  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n  // Per 4.2.1.2, use count of uuid's generated during the current clock\n  // cycle to simulate higher resolution clock\n  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n  // Time since last uuid creation (in msecs)\n  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n  // Per 4.2.1.2, Bump clockseq on clock regression\n  if (dt < 0 && options.clockseq === undefined) {\n    clockseq = clockseq + 1 & 0x3fff;\n  }\n\n  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n  // time interval\n  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n    nsecs = 0;\n  }\n\n  // Per 4.2.1.2 Throw error if too many uuids are requested\n  if (nsecs >= 10000) {\n    throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n  }\n\n  _lastMSecs = msecs;\n  _lastNSecs = nsecs;\n  _clockseq = clockseq;\n\n  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n  msecs += 12219292800000;\n\n  // `time_low`\n  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n  b[i++] = tl >>> 24 & 0xff;\n  b[i++] = tl >>> 16 & 0xff;\n  b[i++] = tl >>> 8 & 0xff;\n  b[i++] = tl & 0xff;\n\n  // `time_mid`\n  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n  b[i++] = tmh >>> 8 & 0xff;\n  b[i++] = tmh & 0xff;\n\n  // `time_high_and_version`\n  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n  b[i++] = tmh >>> 16 & 0xff;\n\n  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n  b[i++] = clockseq >>> 8 | 0x80;\n\n  // `clock_seq_low`\n  b[i++] = clockseq & 0xff;\n\n  // `node`\n  var node = options.node || _nodeId;\n  for (var n = 0; n < 6; n++) {\n    b[i + n] = node[n];\n  }\n\n  return buf ? buf : unparse(b);\n}\n\n// **`v4()` - Generate random UUID**\n\n// See https://github.com/broofa/node-uuid for API details\nfunction v4(options, buf, offset) {\n  // Deprecated - 'format' argument, as supported in v1.2\n  var i = buf && offset || 0;\n\n  if (typeof(options) == 'string') {\n    buf = options == 'binary' ? new Array(16) : null;\n    options = null;\n  }\n  options = options || {};\n\n  var rnds = options.random || (options.rng || _rng)();\n\n  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n  rnds[6] = (rnds[6] & 0x0f) | 0x40;\n  rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n  // Copy bytes to buffer, if provided\n  if (buf) {\n    for (var ii = 0; ii < 16; ii++) {\n      buf[i + ii] = rnds[ii];\n    }\n  }\n\n  return buf || unparse(rnds);\n}\n\n// Export public API\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\nuuid.parse = parse;\nuuid.unparse = unparse;\n\nmodule.exports = uuid;\n",
    "var uuid = require('uuid');\n\nModel.INITS = [];\n\nmodule.exports = Model;\n\nfunction Model(options) {\n  this.root = this;\n\n  var inits = Model.INITS;\n  if (!options) options = {};\n  this.debug = options.debug || {};\n  for (var i = 0; i < inits.length; i++) {\n    inits[i](this, options);\n  }\n}\n\nModel.prototype.id = function() {\n  return uuid.v4();\n};\n\nModel.prototype._child = function() {\n  return new ChildModel(this);\n};\n\nModel.ChildModel = ChildModel;\n\nfunction ChildModel(model) {\n  // Shared properties should be accessed via the root. This makes inheritance\n  // cheap and easily extensible\n  this.root = model.root;\n\n  // EventEmitter methods access these properties directly, so they must be\n  // inherited manually instead of via the root\n  this._events = model._events;\n  this._maxListeners = model._maxListeners;\n\n  // Properties specific to a child instance\n  this._context = model._context;\n  this._at = model._at;\n  this._pass = model._pass;\n  this._silent = model._silent;\n  this._eventContext = model._eventContext;\n  this._preventCompose = model._preventCompose;\n}\nChildModel.prototype = new Model();\n",
    "'use strict';\n\nvar isArray = Array.isArray;\nvar keyList = Object.keys;\nvar hasProp = Object.prototype.hasOwnProperty;\n\nmodule.exports = function equal(a, b) {\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    var arrA = isArray(a)\n      , arrB = isArray(b)\n      , i\n      , length\n      , key;\n\n    if (arrA && arrB) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    if (arrA != arrB) return false;\n\n    var dateA = a instanceof Date\n      , dateB = b instanceof Date;\n    if (dateA != dateB) return false;\n    if (dateA && dateB) return a.getTime() == b.getTime();\n\n    var regexpA = a instanceof RegExp\n      , regexpB = b instanceof RegExp;\n    if (regexpA != regexpB) return false;\n    if (regexpA && regexpB) return a.toString() == b.toString();\n\n    var keys = keyList(a);\n    length = keys.length;\n\n    if (length !== keyList(b).length)\n      return false;\n\n    for (i = length; i-- !== 0;)\n      if (!hasProp.call(b, keys[i])) return false;\n\n    for (i = length; i-- !== 0;) {\n      key = keys[i];\n      if (!equal(a[key], b[key])) return false;\n    }\n\n    return true;\n  }\n\n  return a!==a && b!==b;\n};\n",
    "// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n",
    "var deepEqual = require('fast-deep-equal');\n\nvar isServer = process.title !== 'browser';\nexports.isServer = isServer;\n\nexports.asyncGroup = asyncGroup;\nexports.castSegments = castSegments;\nexports.contains = contains;\nexports.copy = copy;\nexports.copyObject = copyObject;\nexports.deepCopy = deepCopy;\nexports.deepEqual = deepEqual;\nexports.equal = equal;\nexports.equalsNaN = equalsNaN;\nexports.isArrayIndex = isArrayIndex;\nexports.lookup = lookup;\nexports.mergeInto = mergeInto;\nexports.mayImpact = mayImpact;\nexports.mayImpactAny = mayImpactAny;\nexports.serverRequire = serverRequire;\nexports.serverUse = serverUse;\nexports.use = use;\n\nfunction asyncGroup(cb) {\n  var group = new AsyncGroup(cb);\n  return function asyncGroupAdd() {\n    return group.add();\n  };\n}\n\n/**\n * @constructor\n * @param {Function} cb(err)\n */\nfunction AsyncGroup(cb) {\n  this.cb = cb;\n  this.isDone = false;\n  this.count = 0;\n}\nAsyncGroup.prototype.add = function() {\n  this.count++;\n  var self = this;\n  return function(err) {\n    self.count--;\n    if (self.isDone) return;\n    if (err) {\n      self.isDone = true;\n      self.cb(err);\n      return;\n    }\n    if (self.count > 0) return;\n    self.isDone = true;\n    self.cb();\n  };\n};\n\n/**\n * @param {Array<string | number>} segments\n * @return {Array<string | number>}\n */\nfunction castSegments(segments) {\n  // Cast number path segments from strings to numbers\n  for (var i = segments.length; i--;) {\n    var segment = segments[i];\n    if (typeof segment === 'string' && isArrayIndex(segment)) {\n      segments[i] = +segment;\n    }\n  }\n  return segments;\n}\n\nfunction contains(segments, testSegments) {\n  for (var i = 0; i < segments.length; i++) {\n    if (segments[i] !== testSegments[i]) return false;\n  }\n  return true;\n}\n\nfunction copy(value) {\n  if (value instanceof Date) return new Date(value);\n  if (typeof value === 'object') {\n    if (value === null) return null;\n    if (Array.isArray(value)) return value.slice();\n    return copyObject(value);\n  }\n  return value;\n}\n\nfunction copyObject(object) {\n  var out = new object.constructor();\n  for (var key in object) {\n    if (object.hasOwnProperty(key)) {\n      out[key] = object[key];\n    }\n  }\n  return out;\n}\n\nfunction deepCopy(value) {\n  if (value instanceof Date) return new Date(value);\n  if (typeof value === 'object') {\n    if (value === null) return null;\n    if (Array.isArray(value)) {\n      var array = [];\n      for (var i = value.length; i--;) {\n        array[i] = deepCopy(value[i]);\n      }\n      return array;\n    }\n    var object = new value.constructor();\n    for (var key in value) {\n      if (value.hasOwnProperty(key)) {\n        object[key] = deepCopy(value[key]);\n      }\n    }\n    return object;\n  }\n  return value;\n}\n\nfunction equal(a, b) {\n  return (a === b) || (equalsNaN(a) && equalsNaN(b));\n}\n\nfunction equalsNaN(x) {\n  // eslint-disable-next-line no-self-compare\n  return x !== x;\n}\n\nfunction isArrayIndex(segment) {\n  return (/^[0-9]+$/).test(segment);\n}\n\nfunction lookup(segments, value) {\n  if (!segments) return value;\n\n  for (var i = 0, len = segments.length; i < len; i++) {\n    if (value == null) return value;\n    value = value[segments[i]];\n  }\n  return value;\n}\n\nfunction mayImpactAny(segmentsList, testSegments) {\n  for (var i = 0, len = segmentsList.length; i < len; i++) {\n    if (mayImpact(segmentsList[i], testSegments)) return true;\n  }\n  return false;\n}\n\nfunction mayImpact(segments, testSegments) {\n  var len = Math.min(segments.length, testSegments.length);\n  for (var i = 0; i < len; i++) {\n    if (segments[i] !== testSegments[i]) return false;\n  }\n  return true;\n}\n\nfunction mergeInto(to, from) {\n  for (var key in from) {\n    to[key] = from[key];\n  }\n  return to;\n}\n\nfunction serverRequire(module, id) {\n  if (!isServer) return;\n  return module.require(id);\n}\n\nfunction serverUse(module, id, options) {\n  if (!isServer) return this;\n  var plugin = module.require(id);\n  return this.use(plugin, options);\n}\n\nfunction use(plugin, options) {\n  // Don't include a plugin more than once\n  var plugins = this._plugins || (this._plugins = []);\n  if (plugins.indexOf(plugin) === -1) {\n    plugins.push(plugin);\n    plugin(this, options);\n  }\n  return this;\n}\n",
    "var Model = require('./Model');\n\nModel.prototype.unbundle = function(data) {\n  if (this.connection) this.connection.startBulk();\n\n  // Re-create and subscribe queries; re-create documents associated with queries\n  this._initQueries(data.queries);\n\n  // Re-create other documents\n  for (var collectionName in data.collections) {\n    var collection = data.collections[collectionName];\n    for (var id in collection) {\n      this.getOrCreateDoc(collectionName, id, collection[id]);\n    }\n  }\n\n  for (var contextId in data.contexts) {\n    var contextData = data.contexts[contextId];\n    var contextModel = this.context(contextId);\n    // Re-init fetchedDocs counts\n    for (var collectionName in contextData.fetchedDocs) {\n      var collection = contextData.fetchedDocs[collectionName];\n      for (var id in collection) {\n        var count = collection[id];\n        while (count--) {\n          contextModel._context.fetchDoc(collectionName, id);\n          this._fetchedDocs.increment(collectionName, id);\n        }\n      }\n    }\n    // Subscribe to document subscriptions\n    for (var collectionName in contextData.subscribedDocs) {\n      var collection = contextData.subscribedDocs[collectionName];\n      for (var id in collection) {\n        var count = collection[id];\n        while (count--) {\n          contextModel.subscribeDoc(collectionName, id);\n        }\n      }\n    }\n    // Re-init createdDocs counts\n    for (var collectionName in contextData.createdDocs) {\n      var collection = contextData.createdDocs[collectionName];\n      for (var id in collection) {\n        // Count value doesn't matter for tracking creates\n        contextModel._context.createDoc(collectionName, id);\n      }\n    }\n  }\n\n  if (this.connection) this.connection.endBulk();\n\n  // Re-create refs\n  for (var i = 0; i < data.refs.length; i++) {\n    var item = data.refs[i];\n    this.ref(item[0], item[1]);\n  }\n  // Re-create refLists\n  for (var i = 0; i < data.refLists.length; i++) {\n    var item = data.refLists[i];\n    this.refList(item[0], item[1], item[2], item[3]);\n  }\n  // Re-create fns\n  for (var i = 0; i < data.fns.length; i++) {\n    var item = data.fns[i];\n    this.start.apply(this, item);\n  }\n  // Re-create filters\n  for (var i = 0; i < data.filters.length; i++) {\n    var item = data.filters[i];\n    var filter = this._filters.add(item[1], item[2], item[3], item[4], item[5]);\n    filter.ref(item[0]);\n  }\n};\n",
    "// @ts-check\n\nvar EventEmitter = require('events').EventEmitter;\nvar util = require('../util');\n/** @type any */\nvar Model = require('./Model');\n\n// These events are re-emitted as 'all' events, and they are queued up and\n// emitted in sequence, so that events generated by other events are not\n// seen in a different order by later listeners\nModel.MUTATOR_EVENTS = {\n  change: true,\n  insert: true,\n  remove: true,\n  move: true,\n  load: true,\n  unload: true\n};\n\nModel.INITS.push(function(model) {\n  EventEmitter.call(this);\n\n  // Set max listeners to unlimited\n  model.setMaxListeners(0);\n\n  // Used in async methods to emit an error event if a callback is not supplied.\n  // This will throw if there is no handler for model.on('error')\n  model.root._defaultCallback = defaultCallback;\n  function defaultCallback(err) {\n    if (err) model._emitError(err);\n  }\n\n  model.root._mutatorEventQueue = null;\n  model.root._pass = new Passed({}, {});\n  model.root._silent = null;\n  model.root._eventContext = null;\n});\n\nutil.mergeInto(Model.prototype, EventEmitter.prototype);\n\nModel.prototype.wrapCallback = function(cb) {\n  if (!cb) return this.root._defaultCallback;\n  var model = this;\n  return function wrappedCallback() {\n    try {\n      return cb.apply(this, arguments);\n    } catch (err) {\n      model._emitError(err);\n    }\n  };\n};\n\nModel.prototype._emitError = function(err, context) {\n  var message = (err.message) ? err.message :\n    (typeof err === 'string') ? err :\n      'Unknown model error';\n  if (context) {\n    message += ' ' + context;\n  }\n  if (err.data) {\n    try {\n      message += ' ' + JSON.stringify(err.data);\n    } catch (stringifyErr) {}\n  }\n  if (err instanceof Error) {\n    err.message = message;\n  } else {\n    err = new Error(message);\n  }\n  this.emit('error', err);\n};\n\n// EventEmitter.prototype.on, EventEmitter.prototype.addListener, and\n// EventEmitter.prototype.once return `this`. The Model equivalents return\n// the listener instead, since it is made internally for method subscriptions\n// and may need to be passed to removeListener.\n\nModel.prototype._emit = EventEmitter.prototype.emit;\nModel.prototype.emit = function(type) {\n  if (type === 'error') {\n    return this._emit.apply(this, arguments);\n  }\n  if (Model.MUTATOR_EVENTS[type]) {\n    if (this._silent) return this;\n    // `segments` is almost definitely an array of strings.\n    //\n    // A search for `.emit(` shows that `segments` is generated from either\n    // `Model#_splitPath` or `Model#_dereference`, both of which return an array\n    // of strings.\n    var segments = arguments[1];\n    var eventArgs = arguments[2];\n    this._emit(type + 'Immediate', segments, eventArgs);\n    if (this.root._mutatorEventQueue) {\n      this.root._mutatorEventQueue.push([type, segments, eventArgs]);\n      return this;\n    }\n    this.root._mutatorEventQueue = [];\n    this._emit(type, segments, eventArgs);\n    this._emit('all', segments, [type].concat(eventArgs));\n    while (this.root._mutatorEventQueue.length) {\n      var queued = this.root._mutatorEventQueue.shift();\n      type = queued[0];\n      segments = queued[1];\n      eventArgs = queued[2];\n      this._emit(type, segments, eventArgs);\n      this._emit('all', segments, [type].concat(eventArgs));\n    }\n    this.root._mutatorEventQueue = null;\n    return this;\n  }\n  return this._emit.apply(this, arguments);\n};\n\nModel.prototype._on = EventEmitter.prototype.on;\nModel.prototype.addListener =\nModel.prototype.on = function(type, pattern, options, cb) {\n  var listener = eventListener(this, type, pattern, options, cb);\n  this._on(type, listener);\n  return listener;\n};\n\nModel.prototype.once = function(type, pattern, options, cb) {\n  var listener = eventListener(this, type, pattern, options, cb);\n  function g() {\n    var matches = listener.apply(null, arguments);\n    if (matches) this.removeListener(type, g);\n  }\n  this._on(type, g);\n  return g;\n};\n\n/**\n * @typedef {Object} ModelOnOptions\n * @property {boolean} [useEventObjects] - If true, the listener is called with\n *   `cb(event: ___Event, captures: string[])`, instead of the legacy var-args\n *   style `cb(captures..., [eventType], eventArgs..., passed)`.\n */\n\nModel.prototype._removeAllListeners = EventEmitter.prototype.removeAllListeners;\nModel.prototype.removeAllListeners = function(type, subpattern) {\n  // If a pattern is specified without an event type, remove all model event\n  // listeners under that pattern for all events\n  if (!type) {\n    for (var key in this._events) {\n      this.removeAllListeners(key, subpattern);\n    }\n    return this;\n  }\n\n  var pattern = this.path(subpattern);\n  // If no pattern is specified, remove all listeners like normal\n  if (!pattern) {\n    if (arguments.length === 0) {\n      return this._removeAllListeners();\n    }\n    return this._removeAllListeners(type);\n  }\n\n  // Remove all listeners for an event under a pattern\n  var listeners = this.listeners(type);\n  var segments = pattern.split('.');\n  // Make sure to iterate in reverse, since the array might be\n  // mutated as listeners are removed\n  for (var i = listeners.length; i--;) {\n    var listener = listeners[i];\n    if (patternContained(pattern, segments, listener)) {\n      this.removeListener(type, listener);\n    }\n  }\n  return this;\n};\n\nfunction patternContained(pattern, segments, listener) {\n  var listenerSegments = listener.patternSegments;\n  if (!listenerSegments) return false;\n  if (pattern === listener.pattern || pattern === '**') return true;\n  var len = segments.length;\n  if (len > listenerSegments.length) return false;\n  for (var i = 0; i < len; i++) {\n    if (segments[i] !== listenerSegments[i]) return false;\n  }\n  return true;\n}\n\nModel.prototype.pass = function(object, invert) {\n  var model = this._child();\n  model._pass = (invert) ?\n    new Passed(object, this._pass) :\n    new Passed(this._pass, object);\n  return model;\n};\n\nfunction Passed(previous, value) {\n  for (var key in previous) {\n    this[key] = previous[key];\n  }\n  for (var key in value) {\n    this[key] = value[key];\n  }\n}\n\n/**\n * The returned Model will or won't trigger event handlers when the model emits\n * events, depending on `value`\n * @param {Boolean|Null} value defaults to true\n * @return {Model}\n */\nModel.prototype.silent = function(value) {\n  var model = this._child();\n  model._silent = (value == null) ? true : value;\n  return model;\n};\n\nModel.prototype.eventContext = function(value) {\n  var model = this._child();\n  model._eventContext = value;\n  return model;\n};\n\nModel.prototype.removeContextListeners = function(value) {\n  if (arguments.length === 0) {\n    value = this._eventContext;\n  }\n  // Remove all events created within a given context\n  for (var type in this._events) {\n    var listeners = this.listeners(type);\n    // Make sure to iterate in reverse, since the array might be\n    // mutated as listeners are removed\n    for (var i = listeners.length; i--;) {\n      var listener = listeners[i];\n      if (listener.eventContext === value) {\n        this.removeListener(type, listener);\n      }\n    }\n  }\n  return this;\n};\n\n/**\n * @param {Model} model\n * @param {string} eventType\n */\nfunction eventListener(model, eventType, arg2, arg3, arg4) {\n  var subpattern, options, cb;\n  if (arg4) {\n    // on(eventType, path, options, cb)\n    subpattern = arg2;\n    options = arg3;\n    cb = arg4;\n  } else if (arg3) {\n    // on(eventType, path, cb)\n    // on(eventType, options, cb)\n    cb = arg3;\n    if (model.isPath(arg2)) {\n      subpattern = arg2;\n    } else {\n      options = arg2;\n    }\n  } else { // if (arg2)\n    // on(eventType, cb)\n    cb = arg2;\n  }\n  if (options) {\n    if (options.useEventObjects) {\n      var useEventObjects = true;\n    }\n  }\n\n  if (subpattern) {\n    // For signatures with pattern:\n    // model.on('change', 'example.subpath.**', callback)\n    // model.at('example').on('change', 'subpath', callback)\n    var pattern = model.path(subpattern);\n    return (useEventObjects) ?\n      modelEventListener(eventType, pattern, cb, model._eventContext) :\n      modelEventListenerLegacy(pattern, cb, model._eventContext);\n  }\n  // For signature without explicit pattern:\n  // model.at('example').on('change', callback)\n  /** @type string */\n  var path = model.path();\n  if (path) {\n    return (useEventObjects) ?\n      modelEventListener(eventType, path, cb, model._eventContext) :\n      modelEventListenerLegacy(path, cb, model._eventContext);\n  }\n  // For signature:\n  // model.on('normalEvent', callback)\n  return cb;\n}\n\n/**\n * Legacy version of `modelEventListener` that calls `cb` with var-args\n * `(captures..., [eventType], args..., passed)` instead of new-style\n * `___Event` objects.\n *\n * @param {string} pattern\n * @param {Function} cb\n * @param {*} eventContext\n * @return {ModelListenerFn & ModelListenerProps}\n */\nfunction modelEventListenerLegacy(pattern, cb, eventContext) {\n  var patternSegments = util.castSegments(pattern.split('.'));\n  var testFn = testPatternFn(pattern, patternSegments);\n\n  /** @type ModelListenerFn */\n  function modelListener(segments, eventArgs) {\n    var captures = testFn(segments);\n    if (!captures) return;\n\n    var args = (captures.length) ? captures.concat(eventArgs) : eventArgs;\n    cb.apply(null, args);\n    return true;\n  }\n\n  // Used in Model#removeAllListeners\n  modelListener.pattern = pattern;\n  modelListener.patternSegments = patternSegments;\n  modelListener.eventContext = eventContext;\n\n  return modelListener;\n}\n\n/**\n * Returns a function that can be passed to `EventEmitter#on`, with some\n * additional properties used for `Model#removeAllListeners`.\n *\n * When the function is called, it checks if the event matches `patternArg`, and\n * if there's a match, it calls `cb`.\n *\n * @param {string} eventType\n * @param {string} pattern\n * @param {Function} cb\n * @param {*} eventContext\n * @return {ModelListenerFn & ModelListenerProps}\n */\nfunction modelEventListener(eventType, pattern, cb, eventContext) {\n  var patternSegments = util.castSegments(pattern.split('.'));\n  var testFn = testPatternFn(pattern, patternSegments);\n\n  var eventFactory = getEventFactory(eventType);\n  /** @type ModelListenerFn */\n  function modelListener(segments, eventArgs) {\n    var captures = testFn(segments);\n    if (!captures) return;\n\n    var event = eventFactory(eventArgs);\n    cb(event, captures);\n    return true;\n  }\n\n  // Used in Model#removeAllListeners\n  modelListener.pattern = pattern;\n  modelListener.patternSegments = patternSegments;\n  modelListener.eventContext = eventContext;\n\n  return modelListener;\n}\n\n/** @typedef { (segments: string[], eventArgs: any[]) => (boolean | undefined) } ModelListenerFn */\n/** @typedef { {pattern: string, patternSegments: Array<string | number>, eventContext: any} } ModelListenerProps */\n\n/**\n * Returns a factory function that creates an `___Event` object based on an\n * old-style `eventArgs` array.\n *\n * @param {string} eventType\n * @return {(eventArgs: any[]) => ChangeEvent | InsertEvent | RemoveEvent | MoveEvent | LoadEvent | UnloadEvent}\n */\nfunction getEventFactory(eventType) {\n  switch (eventType) {\n    case 'change':\n      return function(eventArgs) {\n        return new ChangeEvent(eventArgs);\n      };\n    case 'insert':\n      return function(eventArgs) {\n        return new InsertEvent(eventArgs);\n      };\n    case 'remove':\n      return function(eventArgs) {\n        return new RemoveEvent(eventArgs);\n      };\n    case 'move':\n      return function(eventArgs) {\n        return new MoveEvent(eventArgs);\n      };\n    case 'load':\n      return function(eventArgs) {\n        return new LoadEvent(eventArgs);\n      };\n    case 'unload':\n      return function(eventArgs) {\n        return new UnloadEvent(eventArgs);\n      };\n    case 'all':\n      return function(eventArgs) {\n        var concreteEventType = eventArgs[0]; // 'change', 'insert', etc.\n        var concreteEventFactory = getEventFactory(concreteEventType);\n        return concreteEventFactory(eventArgs.slice(1));\n      };\n    default: throw new Error('Unknown event: ' + eventType);\n  }\n}\n\n// These constructors accept the `eventArgs` array format that Racer uses\n// internally when calling `Model#emit`.\n//\n// Eventually, Racer should switch to passing these events around directly,\n// but that will require updating all the places that parse the `eventArgs`\n// array format, to extract things like `passed`.\n\nfunction ChangeEvent(eventArgs) {\n  this.value = eventArgs[0];\n  this.previous = eventArgs[1];\n  this.passed = eventArgs[2];\n}\nChangeEvent.prototype.type = 'change';\n\nfunction InsertEvent(eventArgs) {\n  this.index = eventArgs[0];\n  this.values = eventArgs[1];\n  this.passed = eventArgs[2];\n}\nInsertEvent.prototype.type = 'insert';\n\nfunction RemoveEvent(eventArgs) {\n  this.index = eventArgs[0];\n  this.removed = eventArgs[1];\n  this.passed = eventArgs[2];\n}\nRemoveEvent.prototype.type = 'remove';\n\nfunction MoveEvent(eventArgs) {\n  this.from = eventArgs[0];\n  this.to = eventArgs[1];\n  this.howMany = eventArgs[2];\n  this.passed = eventArgs[3];\n}\nMoveEvent.prototype.type = 'move';\n\nfunction LoadEvent(eventArgs) {\n  this.document = eventArgs[0];\n  this.passed = eventArgs[1];\n}\nLoadEvent.prototype.type = 'load';\n\nfunction UnloadEvent(eventArgs) {\n  this.previousDocument = eventArgs[0];\n  this.passed = eventArgs[1];\n}\nUnloadEvent.prototype.type = 'unload';\n\n/**\n * Returns a function that tests an array of event segments against the\n * `patternSegments`. (`pattern` only matters if it's exactly `'**'`.)\n *\n * @param {string?} pattern\n * @param {Array<string | number>} patternSegments\n * @return {(segments: string[]) => (string[] | undefined)} A function to test\n *   an array of event segments. If the event segments match, an array of 0 or\n *   more segments captured by `'*'` / `'**'` is returned, one per wildcard. If\n *   the event segments don't match, `undefined` is returned.\n */\nfunction testPatternFn(pattern, patternSegments) {\n  if (pattern === '**') {\n    return function testPattern(segments) {\n      return [segments.join('.')];\n    };\n  }\n\n  var endingRest = stripRestWildcard(patternSegments);\n\n  return function testPattern(segments) {\n    // Any pattern with more segments does not match\n    var patternLen = patternSegments.length;\n    if (patternLen > segments.length) return;\n\n    // A pattern with the same number of segments matches if each\n    // of the segments are wildcards or equal. A shorter pattern matches\n    // if it ends in a rest wildcard and each of the corresponding\n    // segments are wildcards or equal.\n    if (patternLen === segments.length || endingRest) {\n      /** @type string[] */\n      var captures = [];\n      for (var i = 0; i < patternLen; i++) {\n        var patternSegment = patternSegments[i];\n        var segment = segments[i];\n        if (patternSegment === '*' || patternSegment === '**') {\n          captures.push(segment);\n          continue;\n        }\n        if (patternSegment !== segment) return;\n      }\n      if (endingRest) {\n        var remainder = segments.slice(i).join('.');\n        captures.push(remainder);\n      }\n      return captures;\n    }\n  };\n}\n\n/**\n * @param {Array<string | number>} segments\n */\nfunction stripRestWildcard(segments) {\n  // ['example', '**'] -> ['example']; return true\n  var lastIndex = segments.length - 1;\n  var lastSegment = segments[lastIndex];\n  if (lastSegment === '**') {\n    segments.pop();\n    return true;\n  }\n  // ['example', 'subpath**'] -> ['example', 'subpath']; return true\n  if (typeof lastSegment !== 'string') return false;\n  var match = /^([^\\*]+)\\*\\*$/.exec(lastSegment);\n  if (!match) return false;\n  segments[lastIndex] = match[1];\n  return true;\n}\n",
    "var Model = require('./Model');\n\nexports.mixin = {};\n\nModel.prototype._splitPath = function(subpath) {\n  var path = this.path(subpath);\n  return (path && path.split('.')) || [];\n};\n\n/**\n * Returns the path equivalent to the path of the current scoped model plus\n * (optionally) a suffix subpath\n *\n * @optional @param {String} subpath\n * @return {String} absolute path\n * @api public\n */\nModel.prototype.path = function(subpath) {\n  if (subpath == null || subpath === '') return (this._at) ? this._at : '';\n  if (typeof subpath === 'string' || typeof subpath === 'number') {\n    return (this._at) ? this._at + '.' + subpath : '' + subpath;\n  }\n  if (typeof subpath.path === 'function') return subpath.path();\n};\n\nModel.prototype.isPath = function(subpath) {\n  return this.path(subpath) != null;\n};\n\nModel.prototype.scope = function(path) {\n  if (arguments.length > 1) {\n    for (var i = 1; i < arguments.length; i++) {\n      path = path + '.' + arguments[i];\n    }\n  }\n  return createScoped(this, path);\n};\n\n/**\n * Create a model object scoped to a particular path.\n * Example:\n *     var user = model.at('users.1');\n *     user.set('username', 'brian');\n *     user.on('push', 'todos', function(todo) {\n *       // ...\n *     });\n *\n *  @param {String} segment\n *  @return {Model} a scoped model\n *  @api public\n */\nModel.prototype.at = function(subpath) {\n  if (arguments.length > 1) {\n    for (var i = 1; i < arguments.length; i++) {\n      subpath = subpath + '.' + arguments[i];\n    }\n  }\n  var path = this.path(subpath);\n  return createScoped(this, path);\n};\n\nfunction createScoped(model, path) {\n  var scoped = model._child();\n  scoped._at = path;\n  return scoped;\n}\n\n/**\n * Returns a model scope that is a number of levels above the current scoped\n * path. Number of levels defaults to 1, so this method called without\n * arguments returns the model scope's parent model scope.\n *\n * @optional @param {Number} levels\n * @return {Model} a scoped model\n */\nModel.prototype.parent = function(levels) {\n  if (levels == null) levels = 1;\n  var segments = this._splitPath();\n  var len = Math.max(0, segments.length - levels);\n  var path = segments.slice(0, len).join('.');\n  return this.scope(path);\n};\n\n/**\n * Returns the last property segment of the current model scope path\n *\n * @optional @param {String} path\n * @return {String}\n */\nModel.prototype.leaf = function(path) {\n  if (!path) path = this.path();\n  var i = path.lastIndexOf('.');\n  return path.slice(i + 1);\n};\n",
    "module.exports = Doc;\n\nfunction Doc(model, collectionName, id) {\n  this.collectionName = collectionName;\n  this.id = id;\n  this.collectionData = model && model.data[collectionName];\n}\n\nDoc.prototype.path = function(segments) {\n  var path = this.collectionName + '.' + this.id;\n  if (segments && segments.length) path += '.' + segments.join('.');\n  return path;\n};\n\nDoc.prototype._errorMessage = function(description, segments, value) {\n  return description + ' at ' + this.path(segments) + ': ' +\n    JSON.stringify(value, null, 2);\n};\n",
    "var Doc = require('./Doc');\nvar util = require('../util');\n\nmodule.exports = LocalDoc;\n\nfunction LocalDoc(model, collectionName, id, data) {\n  Doc.call(this, model, collectionName, id);\n  this.data = data;\n  this._updateCollectionData();\n}\n\nLocalDoc.prototype = new Doc();\n\nLocalDoc.prototype._updateCollectionData = function() {\n  this.collectionData[this.id] = this.data;\n};\n\nLocalDoc.prototype.create = function(value, cb) {\n  if (this.data !== undefined) {\n    var message = this._errorMessage('create on local document with data', null, this.data);\n    var err = new Error(message);\n    return cb(err);\n  }\n  this.data = value;\n  this._updateCollectionData();\n  cb();\n};\n\nLocalDoc.prototype.set = function(segments, value, cb) {\n  function set(node, key) {\n    var previous = node[key];\n    node[key] = value;\n    return previous;\n  }\n  return this._apply(segments, set, cb);\n};\n\nLocalDoc.prototype.del = function(segments, cb) {\n  // Don't do anything if the value is already undefined, since\n  // apply creates objects as it traverses, and the del method\n  // should not create anything\n  var previous = this.get(segments);\n  if (previous === undefined) {\n    cb();\n    return;\n  }\n  function del(node, key) {\n    delete node[key];\n    return previous;\n  }\n  return this._apply(segments, del, cb);\n};\n\nLocalDoc.prototype.increment = function(segments, byNumber, cb) {\n  var self = this;\n  function validate(value) {\n    if (typeof value === 'number' || value == null) return;\n    return new TypeError(self._errorMessage(\n      'increment on non-number', segments, value\n    ));\n  }\n  function increment(node, key) {\n    var value = (node[key] || 0) + byNumber;\n    node[key] = value;\n    return value;\n  }\n  return this._validatedApply(segments, validate, increment, cb);\n};\n\nLocalDoc.prototype.push = function(segments, value, cb) {\n  function push(arr) {\n    return arr.push(value);\n  }\n  return this._arrayApply(segments, push, cb);\n};\n\nLocalDoc.prototype.unshift = function(segments, value, cb) {\n  function unshift(arr) {\n    return arr.unshift(value);\n  }\n  return this._arrayApply(segments, unshift, cb);\n};\n\nLocalDoc.prototype.insert = function(segments, index, values, cb) {\n  function insert(arr) {\n    arr.splice.apply(arr, [index, 0].concat(values));\n    return arr.length;\n  }\n  return this._arrayApply(segments, insert, cb);\n};\n\nLocalDoc.prototype.pop = function(segments, cb) {\n  function pop(arr) {\n    return arr.pop();\n  }\n  return this._arrayApply(segments, pop, cb);\n};\n\nLocalDoc.prototype.shift = function(segments, cb) {\n  function shift(arr) {\n    return arr.shift();\n  }\n  return this._arrayApply(segments, shift, cb);\n};\n\nLocalDoc.prototype.remove = function(segments, index, howMany, cb) {\n  function remove(arr) {\n    return arr.splice(index, howMany);\n  }\n  return this._arrayApply(segments, remove, cb);\n};\n\nLocalDoc.prototype.move = function(segments, from, to, howMany, cb) {\n  function move(arr) {\n    // Remove from old location\n    var values = arr.splice(from, howMany);\n    // Insert in new location\n    arr.splice.apply(arr, [to, 0].concat(values));\n    return values;\n  }\n  return this._arrayApply(segments, move, cb);\n};\n\nLocalDoc.prototype.stringInsert = function(segments, index, value, cb) {\n  var self = this;\n  function validate(value) {\n    if (typeof value === 'string' || value == null) return;\n    return new TypeError(self._errorMessage(\n      'stringInsert on non-string', segments, value\n    ));\n  }\n  function stringInsert(node, key) {\n    var previous = node[key];\n    if (previous == null) {\n      node[key] = value;\n      return previous;\n    }\n    node[key] = previous.slice(0, index) + value + previous.slice(index);\n    return previous;\n  }\n  return this._validatedApply(segments, validate, stringInsert, cb);\n};\n\nLocalDoc.prototype.stringRemove = function(segments, index, howMany, cb) {\n  var self = this;\n  function validate(value) {\n    if (typeof value === 'string' || value == null) return;\n    return new TypeError(self._errorMessage(\n      'stringRemove on non-string', segments, value\n    ));\n  }\n  function stringRemove(node, key) {\n    var previous = node[key];\n    if (previous == null) return previous;\n    if (index < 0) index += previous.length;\n    node[key] = previous.slice(0, index) + previous.slice(index + howMany);\n    return previous;\n  }\n  return this._validatedApply(segments, validate, stringRemove, cb);\n};\n\nLocalDoc.prototype.get = function(segments) {\n  return util.lookup(segments, this.data);\n};\n\n/**\n * @param {Array} segments is the array representing a path\n * @param {Function} fn(node, key) applies a mutation on node[key]\n * @return {Object} returns the return value of fn(node, key)\n */\nLocalDoc.prototype._createImplied = function(segments, fn) {\n  var node = this;\n  var key = 'data';\n  var i = 0;\n  var nextKey = segments[i++];\n  while (nextKey != null) {\n    // Get or create implied object or array\n    node = node[key] || (node[key] = /^\\d+$/.test(nextKey) ? [] : {});\n    key = nextKey;\n    nextKey = segments[i++];\n  }\n  return fn(node, key);\n};\n\nLocalDoc.prototype._apply = function(segments, fn, cb) {\n  var out = this._createImplied(segments, fn);\n  this._updateCollectionData();\n  cb();\n  return out;\n};\n\nLocalDoc.prototype._validatedApply = function(segments, validate, fn, cb) {\n  var out = this._createImplied(segments, function(node, key) {\n    var err = validate(node[key]);\n    if (err) return cb(err);\n    return fn(node, key);\n  });\n  this._updateCollectionData();\n  cb();\n  return out;\n};\n\nLocalDoc.prototype._arrayApply = function(segments, fn, cb) {\n  // Lookup a pointer to the property or nested property &\n  // return the current value or create a new array\n  var arr = this._createImplied(segments, nodeCreateArray);\n\n  if (!Array.isArray(arr)) {\n    var message = this._errorMessage(fn.name + ' on non-array', segments, arr);\n    var err = new TypeError(message);\n    return cb(err);\n  }\n  var out = fn(arr);\n  this._updateCollectionData();\n  cb();\n  return out;\n};\n\nfunction nodeCreateArray(node, key) {\n  var node = node[key] || (node[key] = []);\n  return node;\n}\n",
    "var Model = require('./Model');\nvar LocalDoc = require('./LocalDoc');\nvar util = require('../util');\n\nfunction CollectionMap() {}\nfunction ModelData() {}\nfunction DocMap() {}\nfunction CollectionData() {}\n\nModel.INITS.push(function(model) {\n  model.root.collections = new CollectionMap();\n  model.root.data = new ModelData();\n});\n\nModel.prototype.getCollection = function(collectionName) {\n  return this.root.collections[collectionName];\n};\nModel.prototype.getDoc = function(collectionName, id) {\n  var collection = this.root.collections[collectionName];\n  return collection && collection.docs[id];\n};\nModel.prototype.get = function(subpath) {\n  var segments = this._splitPath(subpath);\n  return this._get(segments);\n};\nModel.prototype._get = function(segments) {\n  return util.lookup(segments, this.root.data);\n};\nModel.prototype.getCopy = function(subpath) {\n  var segments = this._splitPath(subpath);\n  return this._getCopy(segments);\n};\nModel.prototype._getCopy = function(segments) {\n  var value = this._get(segments);\n  return util.copy(value);\n};\nModel.prototype.getDeepCopy = function(subpath) {\n  var segments = this._splitPath(subpath);\n  return this._getDeepCopy(segments);\n};\nModel.prototype._getDeepCopy = function(segments) {\n  var value = this._get(segments);\n  return util.deepCopy(value);\n};\nModel.prototype.getOrCreateCollection = function(name) {\n  var collection = this.root.collections[name];\n  if (collection) return collection;\n  var Doc = this._getDocConstructor(name);\n  collection = new Collection(this.root, name, Doc);\n  this.root.collections[name] = collection;\n  return collection;\n};\nModel.prototype._getDocConstructor = function() {\n  // Only create local documents. This is overriden in ./connection.js, so that\n  // the RemoteDoc behavior can be selectively included\n  return LocalDoc;\n};\n\n/**\n * Returns an existing document with id in a collection. If the document does\n * not exist, then creates the document with id in a collection and returns the\n * new document.\n * @param {String} collectionName\n * @param {String} id\n * @param {Object} [data] data to create if doc with id does not exist in collection\n */\nModel.prototype.getOrCreateDoc = function(collectionName, id, data) {\n  var collection = this.getOrCreateCollection(collectionName);\n  return collection.docs[id] || collection.add(id, data);\n};\n\n/**\n * @param {String} subpath\n */\nModel.prototype.destroy = function(subpath) {\n  var segments = this._splitPath(subpath);\n  // Silently remove all types of listeners within subpath\n  var silentModel = this.silent();\n  silentModel.removeAllListeners(null, subpath);\n  silentModel._removeAllRefs(segments);\n  silentModel._stopAll(segments);\n  silentModel._removeAllFilters(segments);\n  // Silently remove all model data within subpath\n  if (segments.length === 0) {\n    this.root.collections = new CollectionMap();\n    // Delete each property of data instead of creating a new object so that\n    // it is possible to continue using a reference to the original data object\n    var data = this.root.data;\n    for (var key in data) {\n      delete data[key];\n    }\n  } else if (segments.length === 1) {\n    var collection = this.getCollection(segments[0]);\n    collection && collection.destroy();\n  } else {\n    silentModel._del(segments);\n  }\n};\n\nfunction Collection(model, name, Doc) {\n  this.model = model;\n  this.name = name;\n  this.Doc = Doc;\n  this.docs = new DocMap();\n  this.data = model.data[name] = new CollectionData();\n}\n\n/**\n * Adds a document with `id` and `data` to `this` Collection.\n * @param {String} id\n * @param {Object} data\n * @return {LocalDoc|RemoteDoc} doc\n */\nCollection.prototype.add = function(id, data) {\n  var doc = new this.Doc(this.model, this.name, id, data, this);\n  this.docs[id] = doc;\n  return doc;\n};\nCollection.prototype.destroy = function() {\n  delete this.model.collections[this.name];\n  delete this.model.data[this.name];\n};\n\n/**\n * Removes the document with `id` from `this` Collection. If there are no more\n * documents in the Collection after the given document is removed, then this\n * also destroys the Collection.\n * @param {String} id\n */\nCollection.prototype.remove = function(id) {\n  delete this.docs[id];\n  delete this.data[id];\n  if (noKeys(this.docs)) this.destroy();\n};\n\n/**\n * Returns an object that maps doc ids to fully resolved documents.\n * @return {Object}\n */\nCollection.prototype.get = function() {\n  return this.data;\n};\n\nfunction noKeys(object) {\n  // eslint-disable-next-line no-unused-vars\n  for (var key in object) {\n    return false;\n  }\n  return true;\n}\n",
    "var util = require('../util');\nvar Model = require('./Model');\n\nModel.prototype._mutate = function(segments, fn, cb) {\n  cb = this.wrapCallback(cb);\n  var collectionName = segments[0];\n  var id = segments[1];\n  if (!collectionName || !id) {\n    var message = fn.name + ' must be performed under a collection ' +\n      'and document id. Invalid path: ' + segments.join('.');\n    return cb(new Error(message));\n  }\n  var doc = this.getOrCreateDoc(collectionName, id);\n  var docSegments = segments.slice(2);\n  if (this._preventCompose && doc.shareDoc) {\n    var oldPreventCompose = doc.shareDoc.preventCompose;\n    doc.shareDoc.preventCompose = true;\n    var out = fn(doc, docSegments, cb);\n    doc.shareDoc.preventCompose = oldPreventCompose;\n    return out;\n  }\n  return fn(doc, docSegments, cb);\n};\n\nModel.prototype.set = function() {\n  var subpath, value, cb;\n  if (arguments.length === 1) {\n    value = arguments[0];\n  } else if (arguments.length === 2) {\n    subpath = arguments[0];\n    value = arguments[1];\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._set(segments, value, cb);\n};\nModel.prototype._set = function(segments, value, cb) {\n  segments = this._dereference(segments);\n  var model = this;\n  function set(doc, docSegments, fnCb) {\n    var previous = doc.set(docSegments, value, fnCb);\n    // On setting the entire doc, remote docs sometimes do a copy to add the\n    // id without it being stored in the database by ShareJS\n    if (docSegments.length === 0) value = doc.get(docSegments);\n    model.emit('change', segments, [value, previous, model._pass]);\n    return previous;\n  }\n  return this._mutate(segments, set, cb);\n};\n\nModel.prototype.setNull = function() {\n  var subpath, value, cb;\n  if (arguments.length === 1) {\n    value = arguments[0];\n  } else if (arguments.length === 2) {\n    subpath = arguments[0];\n    value = arguments[1];\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._setNull(segments, value, cb);\n};\nModel.prototype._setNull = function(segments, value, cb) {\n  segments = this._dereference(segments);\n  var model = this;\n  function setNull(doc, docSegments, fnCb) {\n    var previous = doc.get(docSegments);\n    if (previous != null) {\n      fnCb();\n      return previous;\n    }\n    doc.set(docSegments, value, fnCb);\n    model.emit('change', segments, [value, previous, model._pass]);\n    return value;\n  }\n  return this._mutate(segments, setNull, cb);\n};\n\nModel.prototype.setEach = function() {\n  var subpath, object, cb;\n  if (arguments.length === 1) {\n    object = arguments[0];\n  } else if (arguments.length === 2) {\n    subpath = arguments[0];\n    object = arguments[1];\n  } else {\n    subpath = arguments[0];\n    object = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._setEach(segments, object, cb);\n};\nModel.prototype._setEach = function(segments, object, cb) {\n  segments = this._dereference(segments);\n  var group = util.asyncGroup(this.wrapCallback(cb));\n  for (var key in object) {\n    var value = object[key];\n    this._set(segments.concat(key), value, group());\n  }\n};\n\nModel.prototype.create = function() {\n  var subpath, value, cb;\n  if (arguments.length === 0) {\n    value = {};\n  } else if (arguments.length === 1) {\n    if (typeof arguments[0] === 'function') {\n      value = {};\n      cb = arguments[0];\n    } else {\n      value = arguments[0];\n    }\n  } else if (arguments.length === 2) {\n    if (typeof arguments[1] === 'function') {\n      value = arguments[0];\n      cb = arguments[1];\n    } else {\n      subpath = arguments[0];\n      value = arguments[1];\n    }\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._create(segments, value, cb);\n};\nModel.prototype._create = function(segments, value, cb) {\n  segments = this._dereference(segments);\n  if (segments.length !== 2) {\n    var message = 'create may only be used on a document path. ' +\n      'Invalid path: ' + segments.join('.');\n    cb = this.wrapCallback(cb);\n    return cb(new Error(message));\n  }\n  var model = this;\n  function create(doc, docSegments, fnCb) {\n    var previous;\n    doc.create(value, fnCb);\n    // On creating the doc, remote docs do a copy to add the id without\n    // it being stored in the database by ShareJS\n    value = doc.get();\n    model.emit('change', segments, [value, previous, model._pass]);\n  }\n  this._mutate(segments, create, cb);\n};\n\nModel.prototype.createNull = function() {\n  var subpath, value, cb;\n  if (arguments.length === 0) {\n    value = {};\n  } else if (arguments.length === 1) {\n    if (typeof arguments[0] === 'function') {\n      value = {};\n      cb = arguments[0];\n    } else {\n      value = arguments[0];\n    }\n  } else if (arguments.length === 2) {\n    if (typeof arguments[1] === 'function') {\n      value = arguments[0];\n      cb = arguments[1];\n    } else {\n      subpath = arguments[0];\n      value = arguments[1];\n    }\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._createNull(segments, value, cb);\n};\nModel.prototype._createNull = function(segments, value, cb) {\n  segments = this._dereference(segments);\n  var doc = this.getDoc(segments[0], segments[1]);\n  if (doc && doc.get() != null) return;\n  this._create(segments, value, cb);\n};\n\nModel.prototype.add = function() {\n  var subpath, value, cb;\n  if (arguments.length === 0) {\n    value = {};\n  } else if (arguments.length === 1) {\n    if (typeof arguments[0] === 'function') {\n      value = {};\n      cb = arguments[0];\n    } else {\n      value = arguments[0];\n    }\n  } else if (arguments.length === 2) {\n    if (typeof arguments[1] === 'function') {\n      value = arguments[0];\n      cb = arguments[1];\n    } else {\n      subpath = arguments[0];\n      value = arguments[1];\n    }\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._add(segments, value, cb);\n};\nModel.prototype._add = function(segments, value, cb) {\n  if (typeof value !== 'object') {\n    var message = 'add requires an object value. Invalid value: ' + value;\n    cb = this.wrapCallback(cb);\n    return cb(new Error(message));\n  }\n  var id = value.id || this.id();\n  value.id = id;\n  segments = this._dereference(segments.concat(id));\n  var model = this;\n  function add(doc, docSegments, fnCb) {\n    var previous;\n    if (docSegments.length) {\n      previous = doc.set(docSegments, value, fnCb);\n    } else {\n      doc.create(value, fnCb);\n      // On creating the doc, remote docs do a copy to add the id without\n      // it being stored in the database by ShareJS\n      value = doc.get();\n    }\n    model.emit('change', segments, [value, previous, model._pass]);\n  }\n  this._mutate(segments, add, cb);\n  return id;\n};\n\nModel.prototype.del = function() {\n  var subpath, cb;\n  if (arguments.length === 1) {\n    if (typeof arguments[0] === 'function') {\n      cb = arguments[0];\n    } else {\n      subpath = arguments[0];\n    }\n  } else {\n    subpath = arguments[0];\n    cb = arguments[1];\n  }\n  var segments = this._splitPath(subpath);\n  return this._del(segments, cb);\n};\nModel.prototype._del = function(segments, cb) {\n  segments = this._dereference(segments);\n  var model = this;\n  function del(doc, docSegments, fnCb) {\n    var previous = doc.del(docSegments, fnCb);\n    // When deleting an entire document, also remove the reference to the\n    // document object from its collection\n    if (segments.length === 2) {\n      var collectionName = segments[0];\n      var id = segments[1];\n      model.root.collections[collectionName].remove(id);\n    }\n    model.emit('change', segments, [undefined, previous, model._pass]);\n    return previous;\n  }\n  return this._mutate(segments, del, cb);\n};\n\nModel.prototype.increment = function() {\n  var subpath, byNumber, cb;\n  if (arguments.length === 1) {\n    if (typeof arguments[0] === 'function') {\n      cb = arguments[0];\n    } else if (typeof arguments[0] === 'number') {\n      byNumber = arguments[0];\n    } else {\n      subpath = arguments[0];\n    }\n  } else if (arguments.length === 2) {\n    if (typeof arguments[1] === 'function') {\n      cb = arguments[1];\n      if (typeof arguments[0] === 'number') {\n        byNumber = arguments[0];\n      } else {\n        subpath = arguments[0];\n      }\n    } else {\n      subpath = arguments[0];\n      byNumber = arguments[1];\n    }\n  } else {\n    subpath = arguments[0];\n    byNumber = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._increment(segments, byNumber, cb);\n};\nModel.prototype._increment = function(segments, byNumber, cb) {\n  segments = this._dereference(segments);\n  if (byNumber == null) byNumber = 1;\n  var model = this;\n  function increment(doc, docSegments, fnCb) {\n    var value = doc.increment(docSegments, byNumber, fnCb);\n    var previous = value - byNumber;\n    model.emit('change', segments, [value, previous, model._pass]);\n    return value;\n  }\n  return this._mutate(segments, increment, cb);\n};\n\nModel.prototype.push = function() {\n  var subpath, value, cb;\n  if (arguments.length === 1) {\n    value = arguments[0];\n  } else if (arguments.length === 2) {\n    subpath = arguments[0];\n    value = arguments[1];\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._push(segments, value, cb);\n};\nModel.prototype._push = function(segments, value, cb) {\n  var forArrayMutator = true;\n  segments = this._dereference(segments, forArrayMutator);\n  var model = this;\n  function push(doc, docSegments, fnCb) {\n    var length = doc.push(docSegments, value, fnCb);\n    model.emit('insert', segments, [length - 1, [value], model._pass]);\n    return length;\n  }\n  return this._mutate(segments, push, cb);\n};\n\nModel.prototype.unshift = function() {\n  var subpath, value, cb;\n  if (arguments.length === 1) {\n    value = arguments[0];\n  } else if (arguments.length === 2) {\n    subpath = arguments[0];\n    value = arguments[1];\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._unshift(segments, value, cb);\n};\nModel.prototype._unshift = function(segments, value, cb) {\n  var forArrayMutator = true;\n  segments = this._dereference(segments, forArrayMutator);\n  var model = this;\n  function unshift(doc, docSegments, fnCb) {\n    var length = doc.unshift(docSegments, value, fnCb);\n    model.emit('insert', segments, [0, [value], model._pass]);\n    return length;\n  }\n  return this._mutate(segments, unshift, cb);\n};\n\nModel.prototype.insert = function() {\n  var subpath, index, values, cb;\n  if (arguments.length < 2) {\n    throw new Error('Not enough arguments for insert');\n  } else if (arguments.length === 2) {\n    index = arguments[0];\n    values = arguments[1];\n  } else if (arguments.length === 3) {\n    subpath = arguments[0];\n    index = arguments[1];\n    values = arguments[2];\n  } else {\n    subpath = arguments[0];\n    index = arguments[1];\n    values = arguments[2];\n    cb = arguments[3];\n  }\n  var segments = this._splitPath(subpath);\n  return this._insert(segments, +index, values, cb);\n};\nModel.prototype._insert = function(segments, index, values, cb) {\n  var forArrayMutator = true;\n  segments = this._dereference(segments, forArrayMutator);\n  var model = this;\n  function insert(doc, docSegments, fnCb) {\n    var inserted = (Array.isArray(values)) ? values : [values];\n    var length = doc.insert(docSegments, index, inserted, fnCb);\n    model.emit('insert', segments, [index, inserted, model._pass]);\n    return length;\n  }\n  return this._mutate(segments, insert, cb);\n};\n\nModel.prototype.pop = function() {\n  var subpath, cb;\n  if (arguments.length === 1) {\n    if (typeof arguments[0] === 'function') {\n      cb = arguments[0];\n    } else {\n      subpath = arguments[0];\n    }\n  } else {\n    subpath = arguments[0];\n    cb = arguments[1];\n  }\n  var segments = this._splitPath(subpath);\n  return this._pop(segments, cb);\n};\nModel.prototype._pop = function(segments, cb) {\n  var forArrayMutator = true;\n  segments = this._dereference(segments, forArrayMutator);\n  var model = this;\n  function pop(doc, docSegments, fnCb) {\n    var arr = doc.get(docSegments);\n    var length = arr && arr.length;\n    if (!length) {\n      fnCb();\n      return;\n    }\n    var value = doc.pop(docSegments, fnCb);\n    model.emit('remove', segments, [length - 1, [value], model._pass]);\n    return value;\n  }\n  return this._mutate(segments, pop, cb);\n};\n\nModel.prototype.shift = function() {\n  var subpath, cb;\n  if (arguments.length === 1) {\n    if (typeof arguments[0] === 'function') {\n      cb = arguments[0];\n    } else {\n      subpath = arguments[0];\n    }\n  } else {\n    subpath = arguments[0];\n    cb = arguments[1];\n  }\n  var segments = this._splitPath(subpath);\n  return this._shift(segments, cb);\n};\nModel.prototype._shift = function(segments, cb) {\n  var forArrayMutator = true;\n  segments = this._dereference(segments, forArrayMutator);\n  var model = this;\n  function shift(doc, docSegments, fnCb) {\n    var arr = doc.get(docSegments);\n    var length = arr && arr.length;\n    if (!length) {\n      fnCb();\n      return;\n    }\n    var value = doc.shift(docSegments, fnCb);\n    model.emit('remove', segments, [0, [value], model._pass]);\n    return value;\n  }\n  return this._mutate(segments, shift, cb);\n};\n\nModel.prototype.remove = function() {\n  var subpath, index, howMany, cb;\n  if (arguments.length < 2) {\n    index = arguments[0];\n  } else if (arguments.length === 2) {\n    if (typeof arguments[1] === 'function') {\n      cb = arguments[1];\n      if (typeof arguments[0] === 'number') {\n        index = arguments[0];\n      } else {\n        subpath = arguments[0];\n      }\n    } else {\n      // eslint-disable-next-line no-lonely-if\n      if (typeof arguments[0] === 'number') {\n        index = arguments[0];\n        howMany = arguments[1];\n      } else {\n        subpath = arguments[0];\n        index = arguments[1];\n      }\n    }\n  } else if (arguments.length === 3) {\n    if (typeof arguments[2] === 'function') {\n      cb = arguments[2];\n      if (typeof arguments[0] === 'number') {\n        index = arguments[0];\n        howMany = arguments[1];\n      } else {\n        subpath = arguments[0];\n        index = arguments[1];\n      }\n    } else {\n      subpath = arguments[0];\n      index = arguments[1];\n      howMany = arguments[2];\n    }\n  } else {\n    subpath = arguments[0];\n    index = arguments[1];\n    howMany = arguments[2];\n    cb = arguments[3];\n  }\n  var segments = this._splitPath(subpath);\n  if (index == null) index = segments.pop();\n  return this._remove(segments, +index, howMany, cb);\n};\nModel.prototype._remove = function(segments, index, howMany, cb) {\n  var forArrayMutator = true;\n  segments = this._dereference(segments, forArrayMutator);\n  if (howMany == null) howMany = 1;\n  var model = this;\n  function remove(doc, docSegments, fnCb) {\n    var removed = doc.remove(docSegments, index, howMany, fnCb);\n    model.emit('remove', segments, [index, removed, model._pass]);\n    return removed;\n  }\n  return this._mutate(segments, remove, cb);\n};\n\nModel.prototype.move = function() {\n  var subpath, from, to, howMany, cb;\n  if (arguments.length < 2) {\n    throw new Error('Not enough arguments for move');\n  } else if (arguments.length === 2) {\n    from = arguments[0];\n    to = arguments[1];\n  } else if (arguments.length === 3) {\n    if (typeof arguments[2] === 'function') {\n      from = arguments[0];\n      to = arguments[1];\n      cb = arguments[2];\n    } else if (typeof arguments[0] === 'number') {\n      from = arguments[0];\n      to = arguments[1];\n      howMany = arguments[2];\n    } else {\n      subpath = arguments[0];\n      from = arguments[1];\n      to = arguments[2];\n    }\n  } else if (arguments.length === 4) {\n    if (typeof arguments[3] === 'function') {\n      cb = arguments[3];\n      if (typeof arguments[0] === 'number') {\n        from = arguments[0];\n        to = arguments[1];\n        howMany = arguments[2];\n      } else {\n        subpath = arguments[0];\n        from = arguments[1];\n        to = arguments[2];\n      }\n    } else {\n      subpath = arguments[0];\n      from = arguments[1];\n      to = arguments[2];\n      howMany = arguments[3];\n    }\n  } else {\n    subpath = arguments[0];\n    from = arguments[1];\n    to = arguments[2];\n    howMany = arguments[3];\n    cb = arguments[4];\n  }\n  var segments = this._splitPath(subpath);\n  return this._move(segments, from, to, howMany, cb);\n};\nModel.prototype._move = function(segments, from, to, howMany, cb) {\n  var forArrayMutator = true;\n  segments = this._dereference(segments, forArrayMutator);\n  if (howMany == null) howMany = 1;\n  var model = this;\n  function move(doc, docSegments, fnCb) {\n    // Cast to numbers\n    from = +from;\n    to = +to;\n    // Convert negative indices into positive\n    if (from < 0 || to < 0) {\n      var len = doc.get(docSegments).length;\n      if (from < 0) from += len;\n      if (to < 0) to += len;\n    }\n    var moved = doc.move(docSegments, from, to, howMany, fnCb);\n    model.emit('move', segments, [from, to, moved.length, model._pass]);\n    return moved;\n  }\n  return this._mutate(segments, move, cb);\n};\n\nModel.prototype.stringInsert = function() {\n  var subpath, index, text, cb;\n  if (arguments.length < 2) {\n    throw new Error('Not enough arguments for stringInsert');\n  } else if (arguments.length === 2) {\n    index = arguments[0];\n    text = arguments[1];\n  } else if (arguments.length === 3) {\n    if (typeof arguments[2] === 'function') {\n      index = arguments[0];\n      text = arguments[1];\n      cb = arguments[2];\n    } else {\n      subpath = arguments[0];\n      index = arguments[1];\n      text = arguments[2];\n    }\n  } else {\n    subpath = arguments[0];\n    index = arguments[1];\n    text = arguments[2];\n    cb = arguments[3];\n  }\n  var segments = this._splitPath(subpath);\n  return this._stringInsert(segments, index, text, cb);\n};\nModel.prototype._stringInsert = function(segments, index, text, cb) {\n  segments = this._dereference(segments);\n  var model = this;\n  function stringInsert(doc, docSegments, fnCb) {\n    var previous = doc.stringInsert(docSegments, index, text, fnCb);\n    var value = doc.get(docSegments);\n    var pass = model.pass({$stringInsert: {index: index, text: text}})._pass;\n    model.emit('change', segments, [value, previous, pass]);\n    return;\n  }\n  return this._mutate(segments, stringInsert, cb);\n};\n\nModel.prototype.stringRemove = function() {\n  var subpath, index, howMany, cb;\n  if (arguments.length < 2) {\n    throw new Error('Not enough arguments for stringRemove');\n  } else if (arguments.length === 2) {\n    index = arguments[0];\n    howMany = arguments[1];\n  } else if (arguments.length === 3) {\n    if (typeof arguments[2] === 'function') {\n      index = arguments[0];\n      howMany = arguments[1];\n      cb = arguments[2];\n    } else {\n      subpath = arguments[0];\n      index = arguments[1];\n      howMany = arguments[2];\n    }\n  } else {\n    subpath = arguments[0];\n    index = arguments[1];\n    howMany = arguments[2];\n    cb = arguments[3];\n  }\n  var segments = this._splitPath(subpath);\n  return this._stringRemove(segments, index, howMany, cb);\n};\nModel.prototype._stringRemove = function(segments, index, howMany, cb) {\n  segments = this._dereference(segments);\n  var model = this;\n  function stringRemove(doc, docSegments, fnCb) {\n    var previous = doc.stringRemove(docSegments, index, howMany, fnCb);\n    var value = doc.get(docSegments);\n    var pass = model.pass({$stringRemove: {index: index, howMany: howMany}})._pass;\n    model.emit('change', segments, [value, previous, pass]);\n    return;\n  }\n  return this._mutate(segments, stringRemove, cb);\n};\n\nModel.prototype.subtypeSubmit = function() {\n  var subpath, subtype, subtypeOp, cb;\n  if (arguments.length < 2) {\n    throw new Error('Not enough arguments for subtypeSubmit');\n  } else if (arguments.length === 2) {\n    subtype = arguments[0];\n    subtypeOp = arguments[1];\n  } else if (arguments.length === 3) {\n    if (typeof arguments[2] === 'function') {\n      subtype = arguments[0];\n      subtypeOp = arguments[1];\n      cb = arguments[2];\n    } else {\n      subpath = arguments[0];\n      subtype = arguments[1];\n      subtypeOp = arguments[2];\n    }\n  } else {\n    subpath = arguments[0];\n    subtype = arguments[1];\n    subtypeOp = arguments[2];\n    cb = arguments[3];\n  }\n  var segments = this._splitPath(subpath);\n  return this._subtypeSubmit(segments, subtype, subtypeOp, cb);\n};\n\nModel.prototype._subtypeSubmit = function(segments, subtype, subtypeOp, cb) {\n  segments = this._dereference(segments);\n  var model = this;\n  function subtypeSubmit(doc, docSegments, fnCb) {\n    var previous = doc.subtypeSubmit(docSegments, subtype, subtypeOp, fnCb);\n    var value = doc.get(docSegments);\n    var pass = model.pass({$subtype: {type: subtype, op: subtypeOp}})._pass;\n    // Emit undefined for the previous value, since we don't really know\n    // whether or not the previous value returned by the subtypeSubmit is the\n    // same object returned by reference or not. This may cause change\n    // listeners to over-trigger, but that is usually going to be better than\n    // under-triggering\n    model.emit('change', segments, [value, undefined, pass]);\n    return previous;\n  }\n  return this._mutate(segments, subtypeSubmit, cb);\n};\n",
    "module.exports = arrayDiff;\n\n// Based on some rough benchmarking, this algorithm is about O(2n) worst case,\n// and it can compute diffs on random arrays of length 1024 in about 34ms,\n// though just a few changes on an array of length 1024 takes about 0.5ms\n\narrayDiff.InsertDiff = InsertDiff;\narrayDiff.RemoveDiff = RemoveDiff;\narrayDiff.MoveDiff = MoveDiff;\n\nfunction InsertDiff(index, values) {\n  this.index = index;\n  this.values = values;\n}\nInsertDiff.prototype.type = 'insert';\nInsertDiff.prototype.toJSON = function() {\n  return {\n    type: this.type,\n    index: this.index,\n    values: this.values\n  };\n};\n\nfunction RemoveDiff(index, howMany) {\n  this.index = index;\n  this.howMany = howMany;\n}\nRemoveDiff.prototype.type = 'remove';\nRemoveDiff.prototype.toJSON = function() {\n  return {\n    type: this.type,\n    index: this.index,\n    howMany: this.howMany\n  };\n};\n\nfunction MoveDiff(from, to, howMany) {\n  this.from = from;\n  this.to = to;\n  this.howMany = howMany;\n}\nMoveDiff.prototype.type = 'move';\nMoveDiff.prototype.toJSON = function() {\n  return {\n    type: this.type,\n    from: this.from,\n    to: this.to,\n    howMany: this.howMany\n  };\n};\n\nfunction strictEqual(a, b) {\n  return a === b;\n}\n\nfunction arrayDiff(before, after, equalFn) {\n  if (!equalFn) equalFn = strictEqual;\n\n  // Find all items in both the before and after array, and represent them\n  // as moves. Many of these \"moves\" may end up being discarded in the last\n  // pass if they are from an index to the same index, but we don't know this\n  // up front, since we haven't yet offset the indices.\n  //\n  // Also keep a map of all the indices accounted for in the before and after\n  // arrays. These maps are used next to create insert and remove diffs.\n  var beforeLength = before.length;\n  var afterLength = after.length;\n  var moves = [];\n  var beforeMarked = {};\n  var afterMarked = {};\n  for (var beforeIndex = 0; beforeIndex < beforeLength; beforeIndex++) {\n    var beforeItem = before[beforeIndex];\n    for (var afterIndex = 0; afterIndex < afterLength; afterIndex++) {\n      if (afterMarked[afterIndex]) continue;\n      if (!equalFn(beforeItem, after[afterIndex])) continue;\n      var from = beforeIndex;\n      var to = afterIndex;\n      var howMany = 0;\n      do {\n        beforeMarked[beforeIndex++] = afterMarked[afterIndex++] = true;\n        howMany++;\n      } while (\n        beforeIndex < beforeLength &&\n        afterIndex < afterLength &&\n        equalFn(before[beforeIndex], after[afterIndex]) &&\n        !afterMarked[afterIndex]\n      );\n      moves.push(new MoveDiff(from, to, howMany));\n      beforeIndex--;\n      break;\n    }\n  }\n\n  // Create a remove for all of the items in the before array that were\n  // not marked as being matched in the after array as well\n  var removes = [];\n  for (beforeIndex = 0; beforeIndex < beforeLength;) {\n    if (beforeMarked[beforeIndex]) {\n      beforeIndex++;\n      continue;\n    }\n    var index = beforeIndex;\n    var howMany = 0;\n    while (beforeIndex < beforeLength && !beforeMarked[beforeIndex++]) {\n      howMany++;\n    }\n    removes.push(new RemoveDiff(index, howMany));\n  }\n\n  // Create an insert for all of the items in the after array that were\n  // not marked as being matched in the before array as well\n  var inserts = [];\n  for (var afterIndex = 0; afterIndex < afterLength;) {\n    if (afterMarked[afterIndex]) {\n      afterIndex++;\n      continue;\n    }\n    var index = afterIndex;\n    var howMany = 0;\n    while (afterIndex < afterLength && !afterMarked[afterIndex++]) {\n      howMany++;\n    }\n    var values = after.slice(index, index + howMany);\n    inserts.push(new InsertDiff(index, values));\n  }\n\n  var insertsLength = inserts.length;\n  var removesLength = removes.length;\n  var movesLength = moves.length;\n  var i, j;\n\n  // Offset subsequent removes and moves by removes\n  var count = 0;\n  for (i = 0; i < removesLength; i++) {\n    var remove = removes[i];\n    remove.index -= count;\n    count += remove.howMany;\n    for (j = 0; j < movesLength; j++) {\n      var move = moves[j];\n      if (move.from >= remove.index) move.from -= remove.howMany;\n    }\n  }\n\n  // Offset moves by inserts\n  for (i = insertsLength; i--;) {\n    var insert = inserts[i];\n    var howMany = insert.values.length;\n    for (j = movesLength; j--;) {\n      var move = moves[j];\n      if (move.to >= insert.index) move.to -= howMany;\n    }\n  }\n\n  // Offset the to of moves by later moves\n  for (i = movesLength; i-- > 1;) {\n    var move = moves[i];\n    if (move.to === move.from) continue;\n    for (j = i; j--;) {\n      var earlier = moves[j];\n      if (earlier.to >= move.to) earlier.to -= move.howMany;\n      if (earlier.to >= move.from) earlier.to += move.howMany;\n    }\n  }\n\n  // Only output moves that end up having an effect after offsetting\n  var outputMoves = [];\n\n  // Offset the from of moves by earlier moves\n  for (i = 0; i < movesLength; i++) {\n    var move = moves[i];\n    if (move.to === move.from) continue;\n    outputMoves.push(move);\n    for (j = i + 1; j < movesLength; j++) {\n      var later = moves[j];\n      if (later.from >= move.from) later.from -= move.howMany;\n      if (later.from >= move.to) later.from += move.howMany;\n    }\n  }\n\n  return removes.concat(outputMoves, inserts);\n}\n",
    "var util = require('../util');\nvar Model = require('./Model');\nvar arrayDiff = require('arraydiff');\n\nModel.prototype.setDiff = function() {\n  var subpath, value, cb;\n  if (arguments.length === 1) {\n    value = arguments[0];\n  } else if (arguments.length === 2) {\n    subpath = arguments[0];\n    value = arguments[1];\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._setDiff(segments, value, cb);\n};\nModel.prototype._setDiff = function(segments, value, cb) {\n  segments = this._dereference(segments);\n  var model = this;\n  function setDiff(doc, docSegments, fnCb) {\n    var previous = doc.get(docSegments);\n    if (util.equal(previous, value)) {\n      fnCb();\n      return previous;\n    }\n    doc.set(docSegments, value, fnCb);\n    model.emit('change', segments, [value, previous, model._pass]);\n    return previous;\n  }\n  return this._mutate(segments, setDiff, cb);\n};\n\nModel.prototype.setDiffDeep = function() {\n  var subpath, value, cb;\n  if (arguments.length === 1) {\n    value = arguments[0];\n  } else if (arguments.length === 2) {\n    subpath = arguments[0];\n    value = arguments[1];\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._setDiffDeep(segments, value, cb);\n};\nModel.prototype._setDiffDeep = function(segments, value, cb) {\n  var before = this._get(segments);\n  cb = this.wrapCallback(cb);\n  var group = util.asyncGroup(cb);\n  var finished = group();\n  diffDeep(this, segments, before, value, group);\n  finished();\n};\nfunction diffDeep(model, segments, before, after, group) {\n  if (typeof before !== 'object' || !before ||\n      typeof after !== 'object' || !after) {\n    // Diff the entire value if not diffable objects\n    model._setDiff(segments, after, group());\n    return;\n  }\n  if (Array.isArray(before) && Array.isArray(after)) {\n    var diff = arrayDiff(before, after, util.deepEqual);\n    if (!diff.length) return;\n    // If the only change is a single item replacement, diff the item instead\n    if (\n      diff.length === 2 &&\n      diff[0].index === diff[1].index &&\n      diff[0] instanceof arrayDiff.RemoveDiff &&\n      diff[0].howMany === 1 &&\n      diff[1] instanceof arrayDiff.InsertDiff &&\n      diff[1].values.length === 1\n    ) {\n      var index = diff[0].index;\n      var itemSegments = segments.concat(index);\n      diffDeep(model, itemSegments, before[index], after[index], group);\n      return;\n    }\n    model._applyArrayDiff(segments, diff, group());\n    return;\n  }\n\n  // Delete keys that were in before but not after\n  for (var key in before) {\n    if (key in after) continue;\n    var itemSegments = segments.concat(key);\n    model._del(itemSegments, group());\n  }\n\n  // Diff each property in after\n  for (var key in after) {\n    if (util.deepEqual(before[key], after[key])) continue;\n    var itemSegments = segments.concat(key);\n    diffDeep(model, itemSegments, before[key], after[key], group);\n  }\n}\n\nModel.prototype.setArrayDiff = function() {\n  var subpath, value, cb;\n  if (arguments.length === 1) {\n    value = arguments[0];\n  } else if (arguments.length === 2) {\n    subpath = arguments[0];\n    value = arguments[1];\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._setArrayDiff(segments, value, cb);\n};\nModel.prototype.setArrayDiffDeep = function() {\n  var subpath, value, cb;\n  if (arguments.length === 1) {\n    value = arguments[0];\n  } else if (arguments.length === 2) {\n    subpath = arguments[0];\n    value = arguments[1];\n  } else {\n    subpath = arguments[0];\n    value = arguments[1];\n    cb = arguments[2];\n  }\n  var segments = this._splitPath(subpath);\n  return this._setArrayDiffDeep(segments, value, cb);\n};\nModel.prototype._setArrayDiffDeep = function(segments, value, cb) {\n  return this._setArrayDiff(segments, value, cb, util.deepEqual);\n};\nModel.prototype._setArrayDiff = function(segments, value, cb, _equalFn) {\n  var before = this._get(segments);\n  if (before === value) return this.wrapCallback(cb)();\n  if (!Array.isArray(before) || !Array.isArray(value)) {\n    this._set(segments, value, cb);\n    return;\n  }\n  var diff = arrayDiff(before, value, _equalFn);\n  this._applyArrayDiff(segments, diff, cb);\n};\nModel.prototype._applyArrayDiff = function(segments, diff, cb) {\n  if (!diff.length) return this.wrapCallback(cb)();\n  segments = this._dereference(segments);\n  var model = this;\n  function applyArrayDiff(doc, docSegments, fnCb) {\n    var group = util.asyncGroup(fnCb);\n    for (var i = 0, len = diff.length; i < len; i++) {\n      var item = diff[i];\n      if (item instanceof arrayDiff.InsertDiff) {\n        // Insert\n        doc.insert(docSegments, item.index, item.values, group());\n        model.emit('insert', segments, [item.index, item.values, model._pass]);\n      } else if (item instanceof arrayDiff.RemoveDiff) {\n        // Remove\n        var removed = doc.remove(docSegments, item.index, item.howMany, group());\n        model.emit('remove', segments, [item.index, removed, model._pass]);\n      } else if (item instanceof arrayDiff.MoveDiff) {\n        // Move\n        var moved = doc.move(docSegments, item.from, item.to, item.howMany, group());\n        model.emit('move', segments, [item.from, item.to, moved.length, model._pass]);\n      }\n    }\n  }\n  return this._mutate(segments, applyArrayDiff, cb);\n};\n",
    "var EventEmitter = require('events').EventEmitter;\n\nexports.EventEmitter = EventEmitter;\nexports.mixin = mixin;\n\nfunction mixin(Constructor) {\n  for (var key in EventEmitter.prototype) {\n    Constructor.prototype[key] = EventEmitter.prototype[key];\n  }\n}\n",
    "var SUPPORTED_METHODS = [\n  'info',\n  'warn',\n  'error'\n];\n\nfunction Logger() {\n  var defaultMethods = {};\n  SUPPORTED_METHODS.forEach(function(method) {\n    // Deal with Chrome issue: https://bugs.chromium.org/p/chromium/issues/detail?id=179628\n    defaultMethods[method] = console[method].bind(console);\n  });\n  this.setMethods(defaultMethods);\n}\nmodule.exports = Logger;\n\nLogger.prototype.setMethods = function(overrides) {\n  overrides = overrides || {};\n  var logger = this;\n\n  SUPPORTED_METHODS.forEach(function(method) {\n    if (typeof overrides[method] === 'function') {\n      logger[method] = overrides[method];\n    }\n  });\n};\n",
    "var Logger = require('./logger');\nvar logger = new Logger();\nmodule.exports = logger;\n",
    "function ShareDBError(code, message) {\n  this.code = code;\n  this.message = message || '';\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(this, ShareDBError);\n  } else {\n    this.stack = new Error().stack;\n  }\n}\n\nShareDBError.prototype = Object.create(Error.prototype);\nShareDBError.prototype.constructor = ShareDBError;\nShareDBError.prototype.name = 'ShareDBError';\n\nShareDBError.CODES = {\n  ERR_APPLY_OP_VERSION_DOES_NOT_MATCH_SNAPSHOT: 'ERR_APPLY_OP_VERSION_DOES_NOT_MATCH_SNAPSHOT',\n  ERR_APPLY_SNAPSHOT_NOT_PROVIDED: 'ERR_APPLY_SNAPSHOT_NOT_PROVIDED',\n  ERR_CLIENT_ID_BADLY_FORMED: 'ERR_CLIENT_ID_BADLY_FORMED',\n  ERR_CONNECTION_SEQ_INTEGER_OVERFLOW: 'ERR_CONNECTION_SEQ_INTEGER_OVERFLOW',\n  ERR_CONNECTION_STATE_TRANSITION_INVALID: 'ERR_CONNECTION_STATE_TRANSITION_INVALID',\n  ERR_DATABASE_ADAPTER_NOT_FOUND: 'ERR_DATABASE_ADAPTER_NOT_FOUND',\n  ERR_DATABASE_DOES_NOT_SUPPORT_SUBSCRIBE: 'ERR_DATABASE_DOES_NOT_SUPPORT_SUBSCRIBE',\n  ERR_DATABASE_METHOD_NOT_IMPLEMENTED: 'ERR_DATABASE_METHOD_NOT_IMPLEMENTED',\n  ERR_DEFAULT_TYPE_MISMATCH: 'ERR_DEFAULT_TYPE_MISMATCH',\n  ERR_DOC_MISSING_VERSION: 'ERR_DOC_MISSING_VERSION',\n  ERR_DOC_ALREADY_CREATED: 'ERR_DOC_ALREADY_CREATED',\n  ERR_DOC_DOES_NOT_EXIST: 'ERR_DOC_DOES_NOT_EXIST',\n  ERR_DOC_TYPE_NOT_RECOGNIZED: 'ERR_DOC_TYPE_NOT_RECOGNIZED',\n  ERR_DOC_WAS_DELETED: 'ERR_DOC_WAS_DELETED',\n  ERR_INFLIGHT_OP_MISSING: 'ERR_INFLIGHT_OP_MISSING',\n  ERR_INGESTED_SNAPSHOT_HAS_NO_VERSION: 'ERR_INGESTED_SNAPSHOT_HAS_NO_VERSION',\n  ERR_MAX_SUBMIT_RETRIES_EXCEEDED: 'ERR_MAX_SUBMIT_RETRIES_EXCEEDED',\n  ERR_MESSAGE_BADLY_FORMED: 'ERR_MESSAGE_BADLY_FORMED',\n  ERR_MILESTONE_ARGUMENT_INVALID: 'ERR_MILESTONE_ARGUMENT_INVALID',\n  ERR_OP_ALREADY_SUBMITTED: 'ERR_OP_ALREADY_SUBMITTED',\n  ERR_OP_NOT_ALLOWED_IN_PROJECTION: 'ERR_OP_NOT_ALLOWED_IN_PROJECTION',\n  ERR_OP_SUBMIT_REJECTED: 'ERR_OP_SUBMIT_REJECTED',\n  ERR_OP_VERSION_MISMATCH_AFTER_TRANSFORM: 'ERR_OP_VERSION_MISMATCH_AFTER_TRANSFORM',\n  ERR_OP_VERSION_MISMATCH_DURING_TRANSFORM: 'ERR_OP_VERSION_MISMATCH_DURING_TRANSFORM',\n  ERR_OP_VERSION_NEWER_THAN_CURRENT_SNAPSHOT: 'ERR_OP_VERSION_NEWER_THAN_CURRENT_SNAPSHOT',\n  ERR_OT_LEGACY_JSON0_OP_CANNOT_BE_NORMALIZED: 'ERR_OT_LEGACY_JSON0_OP_CANNOT_BE_NORMALIZED',\n  ERR_OT_OP_BADLY_FORMED: 'ERR_OT_OP_BADLY_FORMED',\n  ERR_OT_OP_NOT_APPLIED: 'ERR_OT_OP_NOT_APPLIED',\n  ERR_OT_OP_NOT_PROVIDED: 'ERR_OT_OP_NOT_PROVIDED',\n  ERR_PRESENCE_TRANSFORM_FAILED: 'ERR_PRESENCE_TRANSFORM_FAILED',\n  ERR_PROTOCOL_VERSION_NOT_SUPPORTED: 'ERR_PROTOCOL_VERSION_NOT_SUPPORTED',\n  ERR_QUERY_EMITTER_LISTENER_NOT_ASSIGNED: 'ERR_QUERY_EMITTER_LISTENER_NOT_ASSIGNED',\n  /**\n   * A special error that a \"readSnapshots\" middleware implementation can use to indicate that it\n   * wishes for the ShareDB client to treat it as a silent rejection, not passing the error back to\n   * user code.\n   *\n   * For subscribes, the ShareDB client will still cancel the document subscription.\n   */\n  ERR_SNAPSHOT_READ_SILENT_REJECTION: 'ERR_SNAPSHOT_READ_SILENT_REJECTION',\n  /**\n   * A \"readSnapshots\" middleware rejected the reads of specific snapshots.\n   *\n   * This error code is mostly for server use and generally will not be encountered on the client.\n   * Instead, each specific doc that encountered an error will receive its specific error.\n   *\n   * The one exception is for queries, where a \"readSnapshots\" rejection of specific snapshots will\n   * cause the client to receive this error for the whole query, since queries don't support\n   * doc-specific errors.\n   */\n  ERR_SNAPSHOT_READS_REJECTED: 'ERR_SNAPSHOT_READS_REJECTED',\n  ERR_SUBMIT_TRANSFORM_OPS_NOT_FOUND: 'ERR_SUBMIT_TRANSFORM_OPS_NOT_FOUND',\n  ERR_TYPE_CANNOT_BE_PROJECTED: 'ERR_TYPE_CANNOT_BE_PROJECTED',\n  ERR_TYPE_DOES_NOT_SUPPORT_PRESENCE: 'ERR_TYPE_DOES_NOT_SUPPORT_PRESENCE',\n  ERR_UNKNOWN_ERROR: 'ERR_UNKNOWN_ERROR'\n};\n\nmodule.exports = ShareDBError;\n",
    "// These methods let you build a transform function from a transformComponent\n// function for OT types like JSON0 in which operations are lists of components\n// and transforming them requires N^2 work. I find it kind of nasty that I need\n// this, but I'm not really sure what a better solution is. Maybe I should do\n// this automatically to types that don't have a compose function defined.\n\n// Add transform and transformX functions for an OT type which has\n// transformComponent defined.  transformComponent(destination array,\n// component, other component, side)\nmodule.exports = bootstrapTransform\nfunction bootstrapTransform(type, transformComponent, checkValidOp, append) {\n  var transformComponentX = function(left, right, destLeft, destRight) {\n    transformComponent(destLeft, left, right, 'left');\n    transformComponent(destRight, right, left, 'right');\n  };\n\n  var transformX = type.transformX = function(leftOp, rightOp) {\n    checkValidOp(leftOp);\n    checkValidOp(rightOp);\n    var newRightOp = [];\n\n    for (var i = 0; i < rightOp.length; i++) {\n      var rightComponent = rightOp[i];\n\n      // Generate newLeftOp by composing leftOp by rightComponent\n      var newLeftOp = [];\n      var k = 0;\n      while (k < leftOp.length) {\n        var nextC = [];\n        transformComponentX(leftOp[k], rightComponent, newLeftOp, nextC);\n        k++;\n\n        if (nextC.length === 1) {\n          rightComponent = nextC[0];\n        } else if (nextC.length === 0) {\n          for (var j = k; j < leftOp.length; j++) {\n            append(newLeftOp, leftOp[j]);\n          }\n          rightComponent = null;\n          break;\n        } else {\n          // Recurse.\n          var pair = transformX(leftOp.slice(k), nextC);\n          for (var l = 0; l < pair[0].length; l++) {\n            append(newLeftOp, pair[0][l]);\n          }\n          for (var r = 0; r < pair[1].length; r++) {\n            append(newRightOp, pair[1][r]);\n          }\n          rightComponent = null;\n          break;\n        }\n      }\n\n      if (rightComponent != null) {\n        append(newRightOp, rightComponent);\n      }\n      leftOp = newLeftOp;\n    }\n    return [leftOp, newRightOp];\n  };\n\n  // Transforms op with specified type ('left' or 'right') by otherOp.\n  type.transform = function(op, otherOp, type) {\n    if (!(type === 'left' || type === 'right'))\n      throw new Error(\"type must be 'left' or 'right'\");\n\n    if (otherOp.length === 0) return op;\n\n    if (op.length === 1 && otherOp.length === 1)\n      return transformComponent([], op[0], otherOp[0], type);\n\n    if (type === 'left')\n      return transformX(op, otherOp)[0];\n    else\n      return transformX(otherOp, op)[1];\n  };\n};\n",
    "// DEPRECATED!\n//\n// This type works, but is not exported. Its included here because the JSON0\n// embedded string operations use this library.\n\n\n// A simple text implementation\n//\n// Operations are lists of components. Each component either inserts or deletes\n// at a specified position in the document.\n//\n// Components are either:\n//  {i:'str', p:100}: Insert 'str' at position 100 in the document\n//  {d:'str', p:100}: Delete 'str' at position 100 in the document\n//\n// Components in an operation are executed sequentially, so the position of components\n// assumes previous components have already executed.\n//\n// Eg: This op:\n//   [{i:'abc', p:0}]\n// is equivalent to this op:\n//   [{i:'a', p:0}, {i:'b', p:1}, {i:'c', p:2}]\n\nvar text = module.exports = {\n  name: 'text0',\n  uri: 'http://sharejs.org/types/textv0',\n  create: function(initial) {\n    if ((initial != null) && typeof initial !== 'string') {\n      throw new Error('Initial data must be a string');\n    }\n    return initial || '';\n  }\n};\n\n/** Insert s2 into s1 at pos. */\nvar strInject = function(s1, pos, s2) {\n  return s1.slice(0, pos) + s2 + s1.slice(pos);\n};\n\n/** Check that an operation component is valid. Throws if its invalid. */\nvar checkValidComponent = function(c) {\n  if (typeof c.p !== 'number')\n    throw new Error('component missing position field');\n\n  if ((typeof c.i === 'string') === (typeof c.d === 'string'))\n    throw new Error('component needs an i or d field');\n\n  if (c.p < 0)\n    throw new Error('position cannot be negative');\n};\n\n/** Check that an operation is valid */\nvar checkValidOp = function(op) {\n  for (var i = 0; i < op.length; i++) {\n    checkValidComponent(op[i]);\n  }\n};\n\n/** Apply op to snapshot */\ntext.apply = function(snapshot, op) {\n  var deleted;\n\n  checkValidOp(op);\n  for (var i = 0; i < op.length; i++) {\n    var component = op[i];\n    if (component.i != null) {\n      snapshot = strInject(snapshot, component.p, component.i);\n    } else {\n      deleted = snapshot.slice(component.p, component.p + component.d.length);\n      if (component.d !== deleted)\n        throw new Error(\"Delete component '\" + component.d + \"' does not match deleted text '\" + deleted + \"'\");\n\n      snapshot = snapshot.slice(0, component.p) + snapshot.slice(component.p + component.d.length);\n    }\n  }\n  return snapshot;\n};\n\n/**\n * Append a component to the end of newOp. Exported for use by the random op\n * generator and the JSON0 type.\n */\nvar append = text._append = function(newOp, c) {\n  if (c.i === '' || c.d === '') return;\n\n  if (newOp.length === 0) {\n    newOp.push(c);\n  } else {\n    var last = newOp[newOp.length - 1];\n\n    if (last.i != null && c.i != null && last.p <= c.p && c.p <= last.p + last.i.length) {\n      // Compose the insert into the previous insert\n      newOp[newOp.length - 1] = {i:strInject(last.i, c.p - last.p, c.i), p:last.p};\n\n    } else if (last.d != null && c.d != null && c.p <= last.p && last.p <= c.p + c.d.length) {\n      // Compose the deletes together\n      newOp[newOp.length - 1] = {d:strInject(c.d, last.p - c.p, last.d), p:c.p};\n\n    } else {\n      newOp.push(c);\n    }\n  }\n};\n\n/** Compose op1 and op2 together */\ntext.compose = function(op1, op2) {\n  checkValidOp(op1);\n  checkValidOp(op2);\n  var newOp = op1.slice();\n  for (var i = 0; i < op2.length; i++) {\n    append(newOp, op2[i]);\n  }\n  return newOp;\n};\n\n/** Clean up an op */\ntext.normalize = function(op) {\n  var newOp = [];\n\n  // Normalize should allow ops which are a single (unwrapped) component:\n  // {i:'asdf', p:23}.\n  // There's no good way to test if something is an array:\n  // http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/\n  // so this is probably the least bad solution.\n  if (op.i != null || op.p != null) op = [op];\n\n  for (var i = 0; i < op.length; i++) {\n    var c = op[i];\n    if (c.p == null) c.p = 0;\n\n    append(newOp, c);\n  }\n\n  return newOp;\n};\n\n// This helper method transforms a position by an op component.\n//\n// If c is an insert, insertAfter specifies whether the transform\n// is pushed after the insert (true) or before it (false).\n//\n// insertAfter is optional for deletes.\nvar transformPosition = function(pos, c, insertAfter) {\n  // This will get collapsed into a giant ternary by uglify.\n  if (c.i != null) {\n    if (c.p < pos || (c.p === pos && insertAfter)) {\n      return pos + c.i.length;\n    } else {\n      return pos;\n    }\n  } else {\n    // I think this could also be written as: Math.min(c.p, Math.min(c.p -\n    // otherC.p, otherC.d.length)) but I think its harder to read that way, and\n    // it compiles using ternary operators anyway so its no slower written like\n    // this.\n    if (pos <= c.p) {\n      return pos;\n    } else if (pos <= c.p + c.d.length) {\n      return c.p;\n    } else {\n      return pos - c.d.length;\n    }\n  }\n};\n\n// Helper method to transform a cursor position as a result of an op.\n//\n// Like transformPosition above, if c is an insert, insertAfter specifies\n// whether the cursor position is pushed after an insert (true) or before it\n// (false).\ntext.transformCursor = function(position, op, side) {\n  var insertAfter = side === 'right';\n  for (var i = 0; i < op.length; i++) {\n    position = transformPosition(position, op[i], insertAfter);\n  }\n\n  return position;\n};\n\n// Transform an op component by another op component. Asymmetric.\n// The result will be appended to destination.\n//\n// exported for use in JSON type\nvar transformComponent = text._tc = function(dest, c, otherC, side) {\n  //var cIntersect, intersectEnd, intersectStart, newC, otherIntersect, s;\n\n  checkValidComponent(c);\n  checkValidComponent(otherC);\n\n  if (c.i != null) {\n    // Insert.\n    append(dest, {i:c.i, p:transformPosition(c.p, otherC, side === 'right')});\n  } else {\n    // Delete\n    if (otherC.i != null) {\n      // Delete vs insert\n      var s = c.d;\n      if (c.p < otherC.p) {\n        append(dest, {d:s.slice(0, otherC.p - c.p), p:c.p});\n        s = s.slice(otherC.p - c.p);\n      }\n      if (s !== '')\n        append(dest, {d: s, p: c.p + otherC.i.length});\n\n    } else {\n      // Delete vs delete\n      if (c.p >= otherC.p + otherC.d.length)\n        append(dest, {d: c.d, p: c.p - otherC.d.length});\n      else if (c.p + c.d.length <= otherC.p)\n        append(dest, c);\n      else {\n        // They overlap somewhere.\n        var newC = {d: '', p: c.p};\n\n        if (c.p < otherC.p)\n          newC.d = c.d.slice(0, otherC.p - c.p);\n\n        if (c.p + c.d.length > otherC.p + otherC.d.length)\n          newC.d += c.d.slice(otherC.p + otherC.d.length - c.p);\n\n        // This is entirely optional - I'm just checking the deleted text in\n        // the two ops matches\n        var intersectStart = Math.max(c.p, otherC.p);\n        var intersectEnd = Math.min(c.p + c.d.length, otherC.p + otherC.d.length);\n        var cIntersect = c.d.slice(intersectStart - c.p, intersectEnd - c.p);\n        var otherIntersect = otherC.d.slice(intersectStart - otherC.p, intersectEnd - otherC.p);\n        if (cIntersect !== otherIntersect)\n          throw new Error('Delete ops delete different text in the same region of the document');\n\n        if (newC.d !== '') {\n          newC.p = transformPosition(newC.p, otherC);\n          append(dest, newC);\n        }\n      }\n    }\n  }\n\n  return dest;\n};\n\nvar invertComponent = function(c) {\n  return (c.i != null) ? {d:c.i, p:c.p} : {i:c.d, p:c.p};\n};\n\n// No need to use append for invert, because the components won't be able to\n// cancel one another.\ntext.invert = function(op) {\n  // Shallow copy & reverse that sucka.\n  op = op.slice().reverse();\n  for (var i = 0; i < op.length; i++) {\n    op[i] = invertComponent(op[i]);\n  }\n  return op;\n};\n\nrequire('./bootstrapTransform')(text, transformComponent, checkValidOp, append);\n",
    "/*\n This is the implementation of the JSON OT type.\n\n Spec is here: https://github.com/josephg/ShareJS/wiki/JSON-Operations\n\n Note: This is being made obsolete. It will soon be replaced by the JSON2 type.\n*/\n\n/**\n * UTILITY FUNCTIONS\n */\n\n/**\n * Checks if the passed object is an Array instance. Can't use Array.isArray\n * yet because its not supported on IE8.\n *\n * @param obj\n * @returns {boolean}\n */\nvar isArray = function(obj) {\n  return Object.prototype.toString.call(obj) == '[object Array]';\n};\n\n/**\n * Checks if the passed object is an Object instance.\n * No function call (fast) version\n *\n * @param obj\n * @returns {boolean}\n */\nvar isObject = function(obj) {\n  return (!!obj) && (obj.constructor === Object);\n};\n\n/**\n * Clones the passed object using JSON serialization (which is slow).\n *\n * hax, copied from test/types/json. Apparently this is still the fastest way\n * to deep clone an object, assuming we have browser support for JSON.  @see\n * http://jsperf.com/cloning-an-object/12\n */\nvar clone = function(o) {\n  return JSON.parse(JSON.stringify(o));\n};\n\n/**\n * JSON OT Type\n * @type {*}\n */\nvar json = {\n  name: 'json0',\n  uri: 'http://sharejs.org/types/JSONv0'\n};\n\n// You can register another OT type as a subtype in a JSON document using\n// the following function. This allows another type to handle certain\n// operations instead of the builtin JSON type.\nvar subtypes = {};\njson.registerSubtype = function(subtype) {\n  subtypes[subtype.name] = subtype;\n};\n\njson.create = function(data) {\n  // Null instead of undefined if you don't pass an argument.\n  return data === undefined ? null : clone(data);\n};\n\njson.invertComponent = function(c) {\n  var c_ = {p: c.p};\n\n  // handle subtype ops\n  if (c.t && subtypes[c.t]) {\n    c_.t = c.t;\n    c_.o = subtypes[c.t].invert(c.o);\n  }\n\n  if (c.si !== void 0) c_.sd = c.si;\n  if (c.sd !== void 0) c_.si = c.sd;\n  if (c.oi !== void 0) c_.od = c.oi;\n  if (c.od !== void 0) c_.oi = c.od;\n  if (c.li !== void 0) c_.ld = c.li;\n  if (c.ld !== void 0) c_.li = c.ld;\n  if (c.na !== void 0) c_.na = -c.na;\n\n  if (c.lm !== void 0) {\n    c_.lm = c.p[c.p.length-1];\n    c_.p = c.p.slice(0,c.p.length-1).concat([c.lm]);\n  }\n\n  return c_;\n};\n\njson.invert = function(op) {\n  var op_ = op.slice().reverse();\n  var iop = [];\n  for (var i = 0; i < op_.length; i++) {\n    iop.push(json.invertComponent(op_[i]));\n  }\n  return iop;\n};\n\njson.checkValidOp = function(op) {\n  for (var i = 0; i < op.length; i++) {\n    if (!isArray(op[i].p)) throw new Error('Missing path');\n  }\n};\n\njson.checkList = function(elem) {\n  if (!isArray(elem))\n    throw new Error('Referenced element not a list');\n};\n\njson.checkObj = function(elem) {\n  if (!isObject(elem)) {\n    throw new Error(\"Referenced element not an object (it was \" + JSON.stringify(elem) + \")\");\n  }\n};\n\n// helper functions to convert old string ops to and from subtype ops\nfunction convertFromText(c) {\n  c.t = 'text0';\n  var o = {p: c.p.pop()};\n  if (c.si != null) o.i = c.si;\n  if (c.sd != null) o.d = c.sd;\n  c.o = [o];\n}\n\nfunction convertToText(c) {\n  c.p.push(c.o[0].p);\n  if (c.o[0].i != null) c.si = c.o[0].i;\n  if (c.o[0].d != null) c.sd = c.o[0].d;\n  delete c.t;\n  delete c.o;\n}\n\njson.apply = function(snapshot, op) {\n  json.checkValidOp(op);\n\n  op = clone(op);\n\n  var container = {\n    data: snapshot\n  };\n\n  for (var i = 0; i < op.length; i++) {\n    var c = op[i];\n\n    // convert old string ops to use subtype for backwards compatibility\n    if (c.si != null || c.sd != null)\n      convertFromText(c);\n\n    var parent = null;\n    var parentKey = null;\n    var elem = container;\n    var key = 'data';\n\n    for (var j = 0; j < c.p.length; j++) {\n      var p = c.p[j];\n\n      parent = elem;\n      parentKey = key;\n      elem = elem[key];\n      key = p;\n\n      if (parent == null)\n        throw new Error('Path invalid');\n    }\n\n    // handle subtype ops\n    if (c.t && c.o !== void 0 && subtypes[c.t]) {\n      elem[key] = subtypes[c.t].apply(elem[key], c.o);\n\n    // Number add\n    } else if (c.na !== void 0) {\n      if (typeof elem[key] != 'number')\n        throw new Error('Referenced element not a number');\n\n      elem[key] += c.na;\n    }\n\n    // List replace\n    else if (c.li !== void 0 && c.ld !== void 0) {\n      json.checkList(elem);\n      // Should check the list element matches c.ld\n      elem[key] = c.li;\n    }\n\n    // List insert\n    else if (c.li !== void 0) {\n      json.checkList(elem);\n      elem.splice(key,0, c.li);\n    }\n\n    // List delete\n    else if (c.ld !== void 0) {\n      json.checkList(elem);\n      // Should check the list element matches c.ld here too.\n      elem.splice(key,1);\n    }\n\n    // List move\n    else if (c.lm !== void 0) {\n      json.checkList(elem);\n      if (c.lm != key) {\n        var e = elem[key];\n        // Remove it...\n        elem.splice(key,1);\n        // And insert it back.\n        elem.splice(c.lm,0,e);\n      }\n    }\n\n    // Object insert / replace\n    else if (c.oi !== void 0) {\n      json.checkObj(elem);\n\n      // Should check that elem[key] == c.od\n      elem[key] = c.oi;\n    }\n\n    // Object delete\n    else if (c.od !== void 0) {\n      json.checkObj(elem);\n\n      // Should check that elem[key] == c.od\n      delete elem[key];\n    }\n\n    else {\n      throw new Error('invalid / missing instruction in op');\n    }\n  }\n\n  return container.data;\n};\n\n// Helper to break an operation up into a bunch of small ops.\njson.shatter = function(op) {\n  var results = [];\n  for (var i = 0; i < op.length; i++) {\n    results.push([op[i]]);\n  }\n  return results;\n};\n\n// Helper for incrementally applying an operation to a snapshot. Calls yield\n// after each op component has been applied.\njson.incrementalApply = function(snapshot, op, _yield) {\n  for (var i = 0; i < op.length; i++) {\n    var smallOp = [op[i]];\n    snapshot = json.apply(snapshot, smallOp);\n    // I'd just call this yield, but thats a reserved keyword. Bah!\n    _yield(smallOp, snapshot);\n  }\n\n  return snapshot;\n};\n\n// Checks if two paths, p1 and p2 match.\nvar pathMatches = json.pathMatches = function(p1, p2, ignoreLast) {\n  if (p1.length != p2.length)\n    return false;\n\n  for (var i = 0; i < p1.length; i++) {\n    if (p1[i] !== p2[i] && (!ignoreLast || i !== p1.length - 1))\n      return false;\n  }\n\n  return true;\n};\n\njson.append = function(dest,c) {\n  c = clone(c);\n\n  if (dest.length === 0) {\n    dest.push(c);\n    return;\n  }\n\n  var last = dest[dest.length - 1];\n\n  // convert old string ops to use subtype for backwards compatibility\n  if ((c.si != null || c.sd != null) && (last.si != null || last.sd != null)) {\n    convertFromText(c);\n    convertFromText(last);\n  }\n\n  if (pathMatches(c.p, last.p)) {\n    // handle subtype ops\n    if (c.t && last.t && c.t === last.t && subtypes[c.t]) {\n      last.o = subtypes[c.t].compose(last.o, c.o);\n\n      // convert back to old string ops\n      if (c.si != null || c.sd != null) {\n        var p = c.p;\n        for (var i = 0; i < last.o.length - 1; i++) {\n          c.o = [last.o.pop()];\n          c.p = p.slice();\n          convertToText(c);\n          dest.push(c);\n        }\n\n        convertToText(last);\n      }\n    } else if (last.na != null && c.na != null) {\n      dest[dest.length - 1] = {p: last.p, na: last.na + c.na};\n    } else if (last.li !== undefined && c.li === undefined && c.ld === last.li) {\n      // insert immediately followed by delete becomes a noop.\n      if (last.ld !== undefined) {\n        // leave the delete part of the replace\n        delete last.li;\n      } else {\n        dest.pop();\n      }\n    } else if (last.od !== undefined && last.oi === undefined && c.oi !== undefined && c.od === undefined) {\n      last.oi = c.oi;\n    } else if (last.oi !== undefined && c.od !== undefined) {\n      // The last path component inserted something that the new component deletes (or replaces).\n      // Just merge them.\n      if (c.oi !== undefined) {\n        last.oi = c.oi;\n      } else if (last.od !== undefined) {\n        delete last.oi;\n      } else {\n        // An insert directly followed by a delete turns into a no-op and can be removed.\n        dest.pop();\n      }\n    } else if (c.lm !== undefined && c.p[c.p.length - 1] === c.lm) {\n      // don't do anything\n    } else {\n      dest.push(c);\n    }\n  } else {\n    // convert string ops back\n    if ((c.si != null || c.sd != null) && (last.si != null || last.sd != null)) {\n      convertToText(c);\n      convertToText(last);\n    }\n\n    dest.push(c);\n  }\n};\n\njson.compose = function(op1,op2) {\n  json.checkValidOp(op1);\n  json.checkValidOp(op2);\n\n  var newOp = clone(op1);\n\n  for (var i = 0; i < op2.length; i++) {\n    json.append(newOp,op2[i]);\n  }\n\n  return newOp;\n};\n\njson.normalize = function(op) {\n  var newOp = [];\n\n  op = isArray(op) ? op : [op];\n\n  for (var i = 0; i < op.length; i++) {\n    var c = op[i];\n    if (c.p == null) c.p = [];\n\n    json.append(newOp,c);\n  }\n\n  return newOp;\n};\n\n// Returns the common length of the paths of ops a and b\njson.commonLengthForOps = function(a, b) {\n  var alen = a.p.length;\n  var blen = b.p.length;\n  if (a.na != null || a.t)\n    alen++;\n\n  if (b.na != null || b.t)\n    blen++;\n\n  if (alen === 0) return -1;\n  if (blen === 0) return null;\n\n  alen--;\n  blen--;\n\n  for (var i = 0; i < alen; i++) {\n    var p = a.p[i];\n    if (i >= blen || p !== b.p[i])\n      return null;\n  }\n\n  return alen;\n};\n\n// Returns true if an op can affect the given path\njson.canOpAffectPath = function(op, path) {\n  return json.commonLengthForOps({p:path}, op) != null;\n};\n\n// transform c so it applies to a document with otherC applied.\njson.transformComponent = function(dest, c, otherC, type) {\n  c = clone(c);\n\n  var common = json.commonLengthForOps(otherC, c);\n  var common2 = json.commonLengthForOps(c, otherC);\n  var cplength = c.p.length;\n  var otherCplength = otherC.p.length;\n\n  if (c.na != null || c.t)\n    cplength++;\n\n  if (otherC.na != null || otherC.t)\n    otherCplength++;\n\n  // if c is deleting something, and that thing is changed by otherC, we need to\n  // update c to reflect that change for invertibility.\n  if (common2 != null && otherCplength > cplength && c.p[common2] == otherC.p[common2]) {\n    if (c.ld !== void 0) {\n      var oc = clone(otherC);\n      oc.p = oc.p.slice(cplength);\n      c.ld = json.apply(clone(c.ld),[oc]);\n    } else if (c.od !== void 0) {\n      var oc = clone(otherC);\n      oc.p = oc.p.slice(cplength);\n      c.od = json.apply(clone(c.od),[oc]);\n    }\n  }\n\n  if (common != null) {\n    var commonOperand = cplength == otherCplength;\n\n    // backward compatibility for old string ops\n    var oc = otherC;\n    if ((c.si != null || c.sd != null) && (otherC.si != null || otherC.sd != null)) {\n      convertFromText(c);\n      oc = clone(otherC);\n      convertFromText(oc);\n    }\n\n    // handle subtype ops\n    if (oc.t && subtypes[oc.t]) {\n      if (c.t && c.t === oc.t) {\n        var res = subtypes[c.t].transform(c.o, oc.o, type);\n\n        // convert back to old string ops\n        if (c.si != null || c.sd != null) {\n          var p = c.p;\n          for (var i = 0; i < res.length; i++) {\n            c.o = [res[i]];\n            c.p = p.slice();\n            convertToText(c);\n            json.append(dest, c);\n          }\n        } else if (!isArray(res) || res.length > 0) {\n          c.o = res;\n          json.append(dest, c);\n        }\n\n        return dest;\n      }\n    }\n\n    // transform based on otherC\n    else if (otherC.na !== void 0) {\n      // this case is handled below\n    } else if (otherC.li !== void 0 && otherC.ld !== void 0) {\n      if (otherC.p[common] === c.p[common]) {\n        // noop\n\n        if (!commonOperand) {\n          return dest;\n        } else if (c.ld !== void 0) {\n          // we're trying to delete the same element, -> noop\n          if (c.li !== void 0 && type === 'left') {\n            // we're both replacing one element with another. only one can survive\n            c.ld = clone(otherC.li);\n          } else {\n            return dest;\n          }\n        }\n      }\n    } else if (otherC.li !== void 0) {\n      if (c.li !== void 0 && c.ld === undefined && commonOperand && c.p[common] === otherC.p[common]) {\n        // in li vs. li, left wins.\n        if (type === 'right')\n          c.p[common]++;\n      } else if (otherC.p[common] <= c.p[common]) {\n        c.p[common]++;\n      }\n\n      if (c.lm !== void 0) {\n        if (commonOperand) {\n          // otherC edits the same list we edit\n          if (otherC.p[common] <= c.lm)\n            c.lm++;\n          // changing c.from is handled above.\n        }\n      }\n    } else if (otherC.ld !== void 0) {\n      if (c.lm !== void 0) {\n        if (commonOperand) {\n          if (otherC.p[common] === c.p[common]) {\n            // they deleted the thing we're trying to move\n            return dest;\n          }\n          // otherC edits the same list we edit\n          var p = otherC.p[common];\n          var from = c.p[common];\n          var to = c.lm;\n          if (p < to || (p === to && from < to))\n            c.lm--;\n\n        }\n      }\n\n      if (otherC.p[common] < c.p[common]) {\n        c.p[common]--;\n      } else if (otherC.p[common] === c.p[common]) {\n        if (otherCplength < cplength) {\n          // we're below the deleted element, so -> noop\n          return dest;\n        } else if (c.ld !== void 0) {\n          if (c.li !== void 0) {\n            // we're replacing, they're deleting. we become an insert.\n            delete c.ld;\n          } else {\n            // we're trying to delete the same element, -> noop\n            return dest;\n          }\n        }\n      }\n\n    } else if (otherC.lm !== void 0) {\n      if (c.lm !== void 0 && cplength === otherCplength) {\n        // lm vs lm, here we go!\n        var from = c.p[common];\n        var to = c.lm;\n        var otherFrom = otherC.p[common];\n        var otherTo = otherC.lm;\n        if (otherFrom !== otherTo) {\n          // if otherFrom == otherTo, we don't need to change our op.\n\n          // where did my thing go?\n          if (from === otherFrom) {\n            // they moved it! tie break.\n            if (type === 'left') {\n              c.p[common] = otherTo;\n              if (from === to) // ugh\n                c.lm = otherTo;\n            } else {\n              return dest;\n            }\n          } else {\n            // they moved around it\n            if (from > otherFrom) c.p[common]--;\n            if (from > otherTo) c.p[common]++;\n            else if (from === otherTo) {\n              if (otherFrom > otherTo) {\n                c.p[common]++;\n                if (from === to) // ugh, again\n                  c.lm++;\n              }\n            }\n\n            // step 2: where am i going to put it?\n            if (to > otherFrom) {\n              c.lm--;\n            } else if (to === otherFrom) {\n              if (to > from)\n                c.lm--;\n            }\n            if (to > otherTo) {\n              c.lm++;\n            } else if (to === otherTo) {\n              // if we're both moving in the same direction, tie break\n              if ((otherTo > otherFrom && to > from) ||\n                  (otherTo < otherFrom && to < from)) {\n                if (type === 'right') c.lm++;\n              } else {\n                if (to > from) c.lm++;\n                else if (to === otherFrom) c.lm--;\n              }\n            }\n          }\n        }\n      } else if (c.li !== void 0 && c.ld === undefined && commonOperand) {\n        // li\n        var from = otherC.p[common];\n        var to = otherC.lm;\n        p = c.p[common];\n        if (p > from) c.p[common]--;\n        if (p > to) c.p[common]++;\n      } else {\n        // ld, ld+li, si, sd, na, oi, od, oi+od, any li on an element beneath\n        // the lm\n        //\n        // i.e. things care about where their item is after the move.\n        var from = otherC.p[common];\n        var to = otherC.lm;\n        p = c.p[common];\n        if (p === from) {\n          c.p[common] = to;\n        } else {\n          if (p > from) c.p[common]--;\n          if (p > to) c.p[common]++;\n          else if (p === to && from > to) c.p[common]++;\n        }\n      }\n    }\n    else if (otherC.oi !== void 0 && otherC.od !== void 0) {\n      if (c.p[common] === otherC.p[common]) {\n        if (c.oi !== void 0 && commonOperand) {\n          // we inserted where someone else replaced\n          if (type === 'right') {\n            // left wins\n            return dest;\n          } else {\n            // we win, make our op replace what they inserted\n            c.od = otherC.oi;\n          }\n        } else {\n          // -> noop if the other component is deleting the same object (or any parent)\n          return dest;\n        }\n      }\n    } else if (otherC.oi !== void 0) {\n      if (c.oi !== void 0 && c.p[common] === otherC.p[common]) {\n        // left wins if we try to insert at the same place\n        if (type === 'left') {\n          json.append(dest,{p: c.p, od:otherC.oi});\n        } else {\n          return dest;\n        }\n      }\n    } else if (otherC.od !== void 0) {\n      if (c.p[common] == otherC.p[common]) {\n        if (!commonOperand)\n          return dest;\n        if (c.oi !== void 0) {\n          delete c.od;\n        } else {\n          return dest;\n        }\n      }\n    }\n  }\n\n  json.append(dest,c);\n  return dest;\n};\n\nrequire('./bootstrapTransform')(json, json.transformComponent, json.checkValidOp, json.append);\n\n/**\n * Register a subtype for string operations, using the text0 type.\n */\nvar text = require('./text0');\n\njson.registerSubtype(text);\nmodule.exports = json;\n\n",
    "// Only the JSON type is exported, because the text type is deprecated\n// otherwise. (If you want to use it somewhere, you're welcome to pull it out\n// into a separate module that json0 can depend on).\n\nmodule.exports = {\n  type: require('./json0')\n};\n",
    "\nexports.defaultType = require('ot-json0').type;\n\nexports.map = {};\n\nexports.register = function(type) {\n  if (type.name) exports.map[type.name] = type;\n  if (type.uri) exports.map[type.uri] = type;\n};\n\nexports.register(exports.defaultType);\n",
    "\nexports.doNothing = doNothing;\nfunction doNothing() {}\n\nexports.hasKeys = function(object) {\n  for (var key in object) return true;\n  return false;\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger#Polyfill\nexports.isInteger = Number.isInteger || function(value) {\n  return typeof value === 'number' &&\n    isFinite(value) &&\n    Math.floor(value) === value;\n};\n\nexports.isValidVersion = function(version) {\n  if (version === null) return true;\n  return exports.isInteger(version) && version >= 0;\n};\n\nexports.isValidTimestamp = function(timestamp) {\n  return exports.isValidVersion(timestamp);\n};\n\nexports.MAX_SAFE_INTEGER = 9007199254740991;\n\nexports.dig = function() {\n  var obj = arguments[0];\n  for (var i = 1; i < arguments.length; i++) {\n    var key = arguments[i];\n    obj = obj[key] || (i === arguments.length - 1 ? undefined : {});\n  }\n  return obj;\n};\n\nexports.digOrCreate = function() {\n  var obj = arguments[0];\n  var createCallback = arguments[arguments.length - 1];\n  for (var i = 1; i < arguments.length - 1; i++) {\n    var key = arguments[i];\n    obj = obj[key] ||\n      (obj[key] = i === arguments.length - 2 ? createCallback() : {});\n  }\n  return obj;\n};\n\nexports.digAndRemove = function() {\n  var obj = arguments[0];\n  var objects = [obj];\n  for (var i = 1; i < arguments.length - 1; i++) {\n    var key = arguments[i];\n    if (!obj.hasOwnProperty(key)) break;\n    obj = obj[key];\n    objects.push(obj);\n  };\n\n  for (var i = objects.length - 1; i >= 0; i--) {\n    var parent = objects[i];\n    var key = arguments[i + 1];\n    var child = parent[key];\n    if (i === objects.length - 1 || !exports.hasKeys(child)) delete parent[key];\n  }\n};\n\nexports.supportsPresence = function(type) {\n  return type && typeof type.transformPresence === 'function';\n};\n\nexports.callEach = function(callbacks, error) {\n  var called = false;\n  callbacks.forEach(function(callback) {\n    if (callback) {\n      callback(error);\n      called = true;\n    }\n  });\n  return called;\n};\n\nexports.truthy = function(arg) {\n  return !!arg;\n};\n\nexports.nextTick = function(callback) {\n  if (typeof process !== 'undefined' && process.nextTick) {\n    return process.nextTick.apply(null, arguments);\n  }\n\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) {\n    args[i - 1] = arguments[i];\n  }\n\n  setTimeout(function() {\n    callback.apply(null, args);\n  });\n};\n",
    "var emitter = require('../emitter');\nvar logger = require('../logger');\nvar ShareDBError = require('../error');\nvar types = require('../types');\nvar util = require('../util');\nvar deepEqual = require('fast-deep-equal');\n\nvar ERROR_CODE = ShareDBError.CODES;\n\n/**\n * A Doc is a client's view on a sharejs document.\n *\n * It is is uniquely identified by its `id` and `collection`.  Documents\n * should not be created directly. Create them with connection.get()\n *\n *\n * Subscriptions\n * -------------\n *\n * We can subscribe a document to stay in sync with the server.\n *   doc.subscribe(function(error) {\n *     doc.subscribed // = true\n *   })\n * The server now sends us all changes concerning this document and these are\n * applied to our data. If the subscription was successful the initial\n * data and version sent by the server are loaded into the document.\n *\n * To stop listening to the changes we call `doc.unsubscribe()`.\n *\n * If we just want to load the data but not stay up-to-date, we call\n *   doc.fetch(function(error) {\n *     doc.data // sent by server\n *   })\n *\n *\n * Events\n * ------\n *\n * You can use doc.on(eventName, callback) to subscribe to the following events:\n * - `before op (op, source)` Fired before a partial operation is applied to the data.\n *   It may be used to read the old data just before applying an operation\n * - `op (op, source)` Fired after every partial operation with this operation as the\n *   first argument\n * - `create (source)` The document was created. That means its type was\n *   set and it has some initial data.\n * - `del (data, source)` Fired after the document is deleted, that is\n *   the data is null. It is passed the data before deletion as an\n *   argument\n * - `load ()` Fired when a new snapshot is ingested from a fetch, subscribe, or query\n */\n\nmodule.exports = Doc;\nfunction Doc(connection, collection, id) {\n  emitter.EventEmitter.call(this);\n\n  this.connection = connection;\n\n  this.collection = collection;\n  this.id = id;\n\n  this.version = null;\n  this.type = null;\n  this.data = undefined;\n\n  // Array of callbacks or nulls as placeholders\n  this.inflightFetch = [];\n  this.inflightSubscribe = null;\n  this.pendingFetch = [];\n  this.pendingSubscribe = [];\n\n  // Whether we think we are subscribed on the server. Synchronously set to\n  // false on calls to unsubscribe and disconnect. Should never be true when\n  // this.wantSubscribe is false\n  this.subscribed = false;\n  // Whether to re-establish the subscription on reconnect\n  this.wantSubscribe = false;\n\n  // The op that is currently roundtripping to the server, or null.\n  //\n  // When the connection reconnects, the inflight op is resubmitted.\n  //\n  // This has the same format as an entry in pendingOps\n  this.inflightOp = null;\n\n  // All ops that are waiting for the server to acknowledge this.inflightOp\n  // This used to just be a single operation, but creates & deletes can't be\n  // composed with regular operations.\n  //\n  // This is a list of {[create:{...}], [del:true], [op:...], callbacks:[...]}\n  this.pendingOps = [];\n\n  // The OT type of this document. An uncreated document has type `null`\n  this.type = null;\n\n  // The applyStack enables us to track any ops submitted while we are\n  // applying an op incrementally. This value is an array when we are\n  // performing an incremental apply and null otherwise. When it is an array,\n  // all submitted ops should be pushed onto it. The `_otApply` method will\n  // reset it back to null when all incremental apply loops are complete.\n  this.applyStack = null;\n\n  // Disable the default behavior of composing submitted ops. This is read at\n  // the time of op submit, so it may be toggled on before submitting a\n  // specifc op and toggled off afterward\n  this.preventCompose = false;\n\n  // If set to true, the source will be submitted over the connection. This\n  // will also have the side-effect of only composing ops whose sources are\n  // equal\n  this.submitSource = false;\n\n  // Prevent own ops being submitted to the server. If subscribed, remote\n  // ops are still received. Should be toggled through the pause() and\n  // resume() methods to correctly flush on resume.\n  this.paused = false;\n}\nemitter.mixin(Doc);\n\nDoc.prototype.destroy = function(callback) {\n  var doc = this;\n  doc.whenNothingPending(function() {\n    if (doc.wantSubscribe) {\n      doc.unsubscribe(function(err) {\n        if (err) {\n          if (callback) return callback(err);\n          return doc.emit('error', err);\n        }\n        doc.connection._destroyDoc(doc);\n        doc.emit('destroy');\n        if (callback) callback();\n      });\n    } else {\n      doc.connection._destroyDoc(doc);\n      doc.emit('destroy');\n      if (callback) callback();\n    }\n  });\n};\n\n\n// ****** Manipulating the document data, version and type.\n\n// Set the document's type, and associated properties. Most of the logic in\n// this function exists to update the document based on any added & removed API\n// methods.\n//\n// @param newType OT type provided by the ottypes library or its name or uri\nDoc.prototype._setType = function(newType) {\n  if (typeof newType === 'string') {\n    newType = types.map[newType];\n  }\n\n  if (newType) {\n    this.type = newType;\n  } else if (newType === null) {\n    this.type = newType;\n    // If we removed the type from the object, also remove its data\n    this.data = undefined;\n  } else {\n    var err = new ShareDBError(ERROR_CODE.ERR_DOC_TYPE_NOT_RECOGNIZED, 'Missing type ' + newType);\n    return this.emit('error', err);\n  }\n};\n\n// Ingest snapshot data. This data must include a version, snapshot and type.\n// This is used both to ingest data that was exported with a webpage and data\n// that was received from the server during a fetch.\n//\n// @param snapshot.v    version\n// @param snapshot.data\n// @param snapshot.type\n// @param callback\nDoc.prototype.ingestSnapshot = function(snapshot, callback) {\n  if (!snapshot) return callback && callback();\n\n  if (typeof snapshot.v !== 'number') {\n    var err = new ShareDBError(\n      ERROR_CODE.ERR_INGESTED_SNAPSHOT_HAS_NO_VERSION,\n      'Missing version in ingested snapshot. ' + this.collection + '.' + this.id\n    );\n    if (callback) return callback(err);\n    return this.emit('error', err);\n  }\n\n  // If the doc is already created or there are ops pending, we cannot use the\n  // ingested snapshot and need ops in order to update the document\n  if (this.type || this.hasWritePending()) {\n    // The version should only be null on a created document when it was\n    // created locally without fetching\n    if (this.version == null) {\n      if (this.hasWritePending()) {\n        // If we have pending ops and we get a snapshot for a locally created\n        // document, we have to wait for the pending ops to complete, because\n        // we don't know what version to fetch ops from. It is possible that\n        // the snapshot came from our local op, but it is also possible that\n        // the doc was created remotely (which would conflict and be an error)\n        return callback && this.once('no write pending', callback);\n      }\n      // Otherwise, we've encounted an error state\n      var err = new ShareDBError(\n        ERROR_CODE.ERR_DOC_MISSING_VERSION,\n        'Cannot ingest snapshot in doc with null version. ' + this.collection + '.' + this.id\n      );\n      if (callback) return callback(err);\n      return this.emit('error', err);\n    }\n    // If we got a snapshot for a version further along than the document is\n    // currently, issue a fetch to get the latest ops and catch us up\n    if (snapshot.v > this.version) return this.fetch(callback);\n    return callback && callback();\n  }\n\n  // Ignore the snapshot if we are already at a newer version. Under no\n  // circumstance should we ever set the current version backward\n  if (this.version > snapshot.v) return callback && callback();\n\n  this.version = snapshot.v;\n  var type = (snapshot.type === undefined) ? types.defaultType : snapshot.type;\n  this._setType(type);\n  this.data = (this.type && this.type.deserialize) ?\n    this.type.deserialize(snapshot.data) :\n    snapshot.data;\n  this.emit('load');\n  callback && callback();\n};\n\nDoc.prototype.whenNothingPending = function(callback) {\n  var doc = this;\n  util.nextTick(function() {\n    if (doc.hasPending()) {\n      doc.once('nothing pending', callback);\n      return;\n    }\n    callback();\n  });\n};\n\nDoc.prototype.hasPending = function() {\n  return !!(\n    this.inflightOp ||\n    this.pendingOps.length ||\n    this.inflightFetch.length ||\n    this.inflightSubscribe ||\n    this.pendingFetch.length ||\n    this.pendingSubscribe.length\n  );\n};\n\nDoc.prototype.hasWritePending = function() {\n  return !!(this.inflightOp || this.pendingOps.length);\n};\n\nDoc.prototype._emitNothingPending = function() {\n  if (this.hasWritePending()) return;\n  this.emit('no write pending');\n  if (this.hasPending()) return;\n  this.emit('nothing pending');\n};\n\n// **** Helpers for network messages\n\nDoc.prototype._emitResponseError = function(err, callback) {\n  if (err && err.code === ERROR_CODE.ERR_SNAPSHOT_READ_SILENT_REJECTION) {\n    this.wantSubscribe = false;\n    if (callback) {\n      callback();\n    }\n    this._emitNothingPending();\n    return;\n  }\n  if (callback) {\n    callback(err);\n    this._emitNothingPending();\n    return;\n  }\n  this._emitNothingPending();\n  this.emit('error', err);\n};\n\nDoc.prototype._handleFetch = function(error, snapshot) {\n  var callbacks = this.pendingFetch;\n  this.pendingFetch = [];\n  var callback = this.inflightFetch.shift();\n  if (callback) callbacks.push(callback);\n  if (callbacks.length) {\n    callback = function(error) {\n      util.callEach(callbacks, error);\n    };\n  }\n  if (error) return this._emitResponseError(error, callback);\n  this.ingestSnapshot(snapshot, callback);\n  this._emitNothingPending();\n};\n\nDoc.prototype._handleSubscribe = function(error, snapshot) {\n  var request = this.inflightSubscribe;\n  this.inflightSubscribe = null;\n  var callbacks = this.pendingFetch;\n  this.pendingFetch = [];\n  if (request.callback) callbacks.push(request.callback);\n  var callback;\n  if (callbacks.length) {\n    callback = function(error) {\n      util.callEach(callbacks, error);\n    };\n  }\n  if (error) return this._emitResponseError(error, callback);\n  this.subscribed = request.wantSubscribe;\n  if (this.subscribed) this.ingestSnapshot(snapshot, callback);\n  else if (callback) callback();\n  this._emitNothingPending();\n  this._flushSubscribe();\n};\n\nDoc.prototype._handleOp = function(err, message) {\n  if (err) {\n    if (this.inflightOp) {\n      // The server has rejected submission of the current operation. If we get\n      // an \"Op submit rejected\" error, this was done intentionally\n      // and we should roll back but not return an error to the user.\n      if (err.code === ERROR_CODE.ERR_OP_SUBMIT_REJECTED) err = null;\n      return this._rollback(err);\n    }\n    return this.emit('error', err);\n  }\n\n  if (this.inflightOp &&\n      message.src === this.inflightOp.src &&\n      message.seq === this.inflightOp.seq) {\n    // The op has already been applied locally. Just update the version\n    // and pending state appropriately\n    this._opAcknowledged(message);\n    return;\n  }\n\n  if (this.version == null || message.v > this.version) {\n    // This will happen in normal operation if we become subscribed to a\n    // new document via a query. It can also happen if we get an op for\n    // a future version beyond the version we are expecting next. This\n    // could happen if the server doesn't publish an op for whatever reason\n    // or because of a race condition. In any case, we can send a fetch\n    // command to catch back up.\n    //\n    // Fetch only sends a new fetch command if no fetches are inflight, which\n    // will act as a natural debouncing so we don't send multiple fetch\n    // requests for many ops received at once.\n    this.fetch();\n    return;\n  }\n\n  if (message.v < this.version) {\n    // We can safely ignore the old (duplicate) operation.\n    return;\n  }\n\n  if (this.inflightOp) {\n    var transformErr = transformX(this.inflightOp, message);\n    if (transformErr) return this._hardRollback(transformErr);\n  }\n\n  for (var i = 0; i < this.pendingOps.length; i++) {\n    var transformErr = transformX(this.pendingOps[i], message);\n    if (transformErr) return this._hardRollback(transformErr);\n  }\n\n  this.version++;\n  try {\n    this._otApply(message, false);\n  } catch (error) {\n    return this._hardRollback(error);\n  }\n};\n\n// Called whenever (you guessed it!) the connection state changes. This will\n// happen when we get disconnected & reconnect.\nDoc.prototype._onConnectionStateChanged = function() {\n  if (this.connection.canSend) {\n    this.flush();\n    this._resubscribe();\n  } else {\n    if (this.inflightOp) {\n      this.pendingOps.unshift(this.inflightOp);\n      this.inflightOp = null;\n    }\n    this.subscribed = false;\n    if (this.inflightSubscribe) {\n      if (this.inflightSubscribe.wantSubscribe) {\n        this.pendingSubscribe.unshift(this.inflightSubscribe);\n        this.inflightSubscribe = null;\n      } else {\n        this._handleSubscribe();\n      }\n    }\n    if (this.inflightFetch.length) {\n      this.pendingFetch = this.pendingFetch.concat(this.inflightFetch);\n      this.inflightFetch.length = 0;\n    }\n  }\n};\n\nDoc.prototype._resubscribe = function() {\n  if (!this.pendingSubscribe.length && this.wantSubscribe) {\n    return this.subscribe();\n  }\n  var willFetch = this.pendingSubscribe.some(function(request) {\n    return request.wantSubscribe;\n  });\n  if (!willFetch && this.pendingFetch.length) this.fetch();\n  this._flushSubscribe();\n};\n\n// Request the current document snapshot or ops that bring us up to date\nDoc.prototype.fetch = function(callback) {\n  if (this.connection.canSend) {\n    var isDuplicate = this.connection.sendFetch(this);\n    pushActionCallback(this.inflightFetch, isDuplicate, callback);\n    return;\n  }\n  this.pendingFetch.push(callback);\n};\n\n// Fetch the initial document and keep receiving updates\nDoc.prototype.subscribe = function(callback) {\n  var wantSubscribe = true;\n  this._queueSubscribe(wantSubscribe, callback);\n};\n\n// Unsubscribe. The data will stay around in local memory, but we'll stop\n// receiving updates\nDoc.prototype.unsubscribe = function(callback) {\n  var wantSubscribe = false;\n  this._queueSubscribe(wantSubscribe, callback);\n};\n\nDoc.prototype._queueSubscribe = function(wantSubscribe, callback) {\n  var lastRequest = this.pendingSubscribe[this.pendingSubscribe.length - 1] || this.inflightSubscribe;\n  var isDuplicateRequest = lastRequest && lastRequest.wantSubscribe === wantSubscribe;\n  if (isDuplicateRequest) {\n    lastRequest.callback = combineCallbacks([lastRequest.callback, callback]);\n    return;\n  }\n  this.pendingSubscribe.push({\n    wantSubscribe: !!wantSubscribe,\n    callback: callback\n  });\n  this._flushSubscribe();\n};\n\nDoc.prototype._flushSubscribe = function() {\n  if (this.inflightSubscribe || !this.pendingSubscribe.length) return;\n\n  if (this.connection.canSend) {\n    this.inflightSubscribe = this.pendingSubscribe.shift();\n    this.wantSubscribe = this.inflightSubscribe.wantSubscribe;\n    if (this.wantSubscribe) {\n      this.connection.sendSubscribe(this);\n    } else {\n      // Be conservative about our subscription state. We'll be unsubscribed\n      // some time between sending this request, and receiving the callback,\n      // so let's just set ourselves to unsubscribed now.\n      this.subscribed = false;\n      this.connection.sendUnsubscribe(this);\n    }\n\n    return;\n  }\n\n  // If we're offline, then we're already unsubscribed. Therefore, call back\n  // the next request immediately if it's an unsubscribe request.\n  if (!this.pendingSubscribe[0].wantSubscribe) {\n    this.inflightSubscribe = this.pendingSubscribe.shift();\n    var doc = this;\n    util.nextTick(function() {\n      doc._handleSubscribe();\n    });\n  }\n};\n\nfunction pushActionCallback(inflight, isDuplicate, callback) {\n  if (isDuplicate) {\n    var lastCallback = inflight.pop();\n    inflight.push(function(err) {\n      lastCallback && lastCallback(err);\n      callback && callback(err);\n    });\n  } else {\n    inflight.push(callback);\n  }\n}\n\nfunction combineCallbacks(callbacks) {\n  callbacks = callbacks.filter(util.truthy);\n  if (!callbacks.length) return null;\n  return function(error) {\n    util.callEach(callbacks, error);\n  };\n}\n\n\n// Operations //\n\n// Send the next pending op to the server, if we can.\n//\n// Only one operation can be in-flight at a time. If an operation is already on\n// its way, or we're not currently connected, this method does nothing.\nDoc.prototype.flush = function() {\n  // Ignore if we can't send or we are already sending an op\n  if (!this.connection.canSend || this.inflightOp) return;\n\n  // Send first pending op unless paused\n  if (!this.paused && this.pendingOps.length) {\n    this._sendOp();\n  }\n};\n\n// Helper function to set op to contain a no-op.\nfunction setNoOp(op) {\n  delete op.op;\n  delete op.create;\n  delete op.del;\n}\n\n// Transform server op data by a client op, and vice versa. Ops are edited in place.\nfunction transformX(client, server) {\n  // Order of statements in this function matters. Be especially careful if\n  // refactoring this function\n\n  // A client delete op should dominate if both the server and the client\n  // delete the document. Thus, any ops following the client delete (such as a\n  // subsequent create) will be maintained, since the server op is transformed\n  // to a no-op\n  if (client.del) return setNoOp(server);\n\n  if (server.del) {\n    return new ShareDBError(ERROR_CODE.ERR_DOC_WAS_DELETED, 'Document was deleted');\n  }\n  if (server.create) {\n    return new ShareDBError(ERROR_CODE.ERR_DOC_ALREADY_CREATED, 'Document already created');\n  }\n\n  // Ignore no-op coming from server\n  if (!('op' in server)) return;\n\n  // I believe that this should not occur, but check just in case\n  if (client.create) {\n    return new ShareDBError(ERROR_CODE.ERR_DOC_ALREADY_CREATED, 'Document already created');\n  }\n\n  // They both edited the document. This is the normal case for this function -\n  // as in, most of the time we'll end up down here.\n  //\n  // You should be wondering why I'm using client.type instead of this.type.\n  // The reason is, if we get ops at an old version of the document, this.type\n  // might be undefined or a totally different type. By pinning the type to the\n  // op data, we make sure the right type has its transform function called.\n  if (client.type.transformX) {\n    var result = client.type.transformX(client.op, server.op);\n    client.op = result[0];\n    server.op = result[1];\n  } else {\n    var clientOp = client.type.transform(client.op, server.op, 'left');\n    var serverOp = client.type.transform(server.op, client.op, 'right');\n    client.op = clientOp;\n    server.op = serverOp;\n  }\n};\n\n/**\n * Applies the operation to the snapshot\n *\n * If the operation is create or delete it emits `create` or `del`. Then the\n * operation is applied to the snapshot and `op` and `after op` are emitted.\n * If the type supports incremental updates and `this.incremental` is true we\n * fire `op` after every small operation.\n *\n * This is the only function to fire the above mentioned events.\n *\n * @private\n */\nDoc.prototype._otApply = function(op, source) {\n  if ('op' in op) {\n    if (!this.type) {\n      // Throw here, because all usage of _otApply should be wrapped with a try/catch\n      throw new ShareDBError(\n        ERROR_CODE.ERR_DOC_DOES_NOT_EXIST,\n        'Cannot apply op to uncreated document. ' + this.collection + '.' + this.id\n      );\n    }\n\n    // NB: If we need to add another argument to this event, we should consider\n    // the fact that the 'op' event has op.src as its 3rd argument\n    this.emit('before op batch', op.op, source);\n\n    // Iteratively apply multi-component remote operations and rollback ops\n    // (source === false) for the default JSON0 OT type. It could use\n    // type.shatter(), but since this code is so specific to use cases for the\n    // JSON0 type and ShareDB explicitly bundles the default type, we might as\n    // well write it this way and save needing to iterate through the op\n    // components twice.\n    //\n    // Ideally, we would not need this extra complexity. However, it is\n    // helpful for implementing bindings that update DOM nodes and other\n    // stateful objects by translating op events directly into corresponding\n    // mutations. Such bindings are most easily written as responding to\n    // individual op components one at a time in order, and it is important\n    // that the snapshot only include updates from the particular op component\n    // at the time of emission. Eliminating this would require rethinking how\n    // such external bindings are implemented.\n    if (!source && this.type === types.defaultType && op.op.length > 1) {\n      if (!this.applyStack) this.applyStack = [];\n      var stackLength = this.applyStack.length;\n      for (var i = 0; i < op.op.length; i++) {\n        var component = op.op[i];\n        var componentOp = {op: [component]};\n        // Transform componentOp against any ops that have been submitted\n        // sychronously inside of an op event handler since we began apply of\n        // our operation\n        for (var j = stackLength; j < this.applyStack.length; j++) {\n          var transformErr = transformX(this.applyStack[j], componentOp);\n          if (transformErr) return this._hardRollback(transformErr);\n        }\n        // Apply the individual op component\n        this.emit('before op', componentOp.op, source, op.src);\n        this.data = this.type.apply(this.data, componentOp.op);\n        this.emit('op', componentOp.op, source, op.src);\n      }\n      this.emit('op batch', op.op, source);\n      // Pop whatever was submitted since we started applying this op\n      this._popApplyStack(stackLength);\n      return;\n    }\n\n    // The 'before op' event enables clients to pull any necessary data out of\n    // the snapshot before it gets changed\n    this.emit('before op', op.op, source, op.src);\n    // Apply the operation to the local data, mutating it in place\n    this.data = this.type.apply(this.data, op.op);\n    // Emit an 'op' event once the local data includes the changes from the\n    // op. For locally submitted ops, this will be synchronously with\n    // submission and before the server or other clients have received the op.\n    // For ops from other clients, this will be after the op has been\n    // committed to the database and published\n    this.emit('op', op.op, source, op.src);\n    this.emit('op batch', op.op, source);\n    return;\n  }\n\n  if (op.create) {\n    this._setType(op.create.type);\n    this.data = (this.type.deserialize) ?\n      (this.type.createDeserialized) ?\n        this.type.createDeserialized(op.create.data) :\n        this.type.deserialize(this.type.create(op.create.data)) :\n      this.type.create(op.create.data);\n    this.emit('create', source);\n    return;\n  }\n\n  if (op.del) {\n    var oldData = this.data;\n    this._setType(null);\n    this.emit('del', oldData, source);\n    return;\n  }\n};\n\n\n// ***** Sending operations\n\n// Actually send op to the server.\nDoc.prototype._sendOp = function() {\n  if (!this.connection.canSend) return;\n  var src = this.connection.id;\n\n  // When there is no inflightOp, send the first item in pendingOps. If\n  // there is inflightOp, try sending it again\n  if (!this.inflightOp) {\n    // Send first pending op\n    this.inflightOp = this.pendingOps.shift();\n  }\n  var op = this.inflightOp;\n  if (!op) {\n    var err = new ShareDBError(ERROR_CODE.ERR_INFLIGHT_OP_MISSING, 'No op to send on call to _sendOp');\n    return this.emit('error', err);\n  }\n\n  // Track data for retrying ops\n  op.sentAt = Date.now();\n  op.retries = (op.retries == null) ? 0 : op.retries + 1;\n\n  // The src + seq number is a unique ID representing this operation. This tuple\n  // is used on the server to detect when ops have been sent multiple times and\n  // on the client to match acknowledgement of an op back to the inflightOp.\n  // Note that the src could be different from this.connection.id after a\n  // reconnect, since an op may still be pending after the reconnection and\n  // this.connection.id will change. In case an op is sent multiple times, we\n  // also need to be careful not to override the original seq value.\n  if (op.seq == null) {\n    if (this.connection.seq >= util.MAX_SAFE_INTEGER) {\n      return this.emit('error', new ShareDBError(\n        ERROR_CODE.ERR_CONNECTION_SEQ_INTEGER_OVERFLOW,\n        'Connection seq has exceeded the max safe integer, maybe from being open for too long'\n      ));\n    }\n\n    op.seq = this.connection.seq++;\n  }\n\n  this.connection.sendOp(this, op);\n\n  // src isn't needed on the first try, since the server session will have the\n  // same id, but it must be set on the inflightOp in case it is sent again\n  // after a reconnect and the connection's id has changed by then\n  if (op.src == null) op.src = src;\n};\n\n\n// Queues the operation for submission to the server and applies it locally.\n//\n// Internal method called to do the actual work for submit(), create() and del().\n// @private\n//\n// @param op\n// @param [op.op]\n// @param [op.del]\n// @param [op.create]\n// @param [callback] called when operation is submitted\nDoc.prototype._submit = function(op, source, callback) {\n  // Locally submitted ops must always have a truthy source\n  if (!source) source = true;\n\n  // The op contains either op, create, delete, or none of the above (a no-op).\n  if ('op' in op) {\n    if (!this.type) {\n      var err = new ShareDBError(\n        ERROR_CODE.ERR_DOC_DOES_NOT_EXIST,\n        'Cannot submit op. Document has not been created. ' + this.collection + '.' + this.id\n      );\n      if (callback) return callback(err);\n      return this.emit('error', err);\n    }\n    // Try to normalize the op. This removes trailing skip:0's and things like that.\n    if (this.type.normalize) op.op = this.type.normalize(op.op);\n  }\n\n  try {\n    this._pushOp(op, source, callback);\n    this._otApply(op, source);\n  } catch (error) {\n    return this._hardRollback(error);\n  }\n\n  // The call to flush is delayed so if submit() is called multiple times\n  // synchronously, all the ops are combined before being sent to the server.\n  var doc = this;\n  util.nextTick(function() {\n    doc.flush();\n  });\n};\n\nDoc.prototype._pushOp = function(op, source, callback) {\n  op.source = source;\n  if (this.applyStack) {\n    // If we are in the process of incrementally applying an operation, don't\n    // compose the op and push it onto the applyStack so it can be transformed\n    // against other components from the op or ops being applied\n    this.applyStack.push(op);\n  } else {\n    // If the type supports composes, try to compose the operation onto the\n    // end of the last pending operation.\n    var composed = this._tryCompose(op);\n    if (composed) {\n      composed.callbacks.push(callback);\n      return;\n    }\n  }\n  // Push on to the pendingOps queue of ops to submit if we didn't compose\n  op.type = this.type;\n  op.callbacks = [callback];\n  this.pendingOps.push(op);\n};\n\nDoc.prototype._popApplyStack = function(to) {\n  if (to > 0) {\n    this.applyStack.length = to;\n    return;\n  }\n  // Once we have completed the outermost apply loop, reset to null and no\n  // longer add ops to the applyStack as they are submitted\n  var op = this.applyStack[0];\n  this.applyStack = null;\n  if (!op) return;\n  // Compose the ops added since the beginning of the apply stack, since we\n  // had to skip compose when they were originally pushed\n  var i = this.pendingOps.indexOf(op);\n  if (i === -1) return;\n  var ops = this.pendingOps.splice(i);\n  for (var i = 0; i < ops.length; i++) {\n    var op = ops[i];\n    var composed = this._tryCompose(op);\n    if (composed) {\n      composed.callbacks = composed.callbacks.concat(op.callbacks);\n    } else {\n      this.pendingOps.push(op);\n    }\n  }\n};\n\n// Try to compose a submitted op into the last pending op. Returns the\n// composed op if it succeeds, undefined otherwise\nDoc.prototype._tryCompose = function(op) {\n  if (this.preventCompose) return;\n\n  // We can only compose into the last pending op. Inflight ops have already\n  // been sent to the server, so we can't modify them\n  var last = this.pendingOps[this.pendingOps.length - 1];\n  if (!last || last.sentAt) return;\n\n  // If we're submitting the op source, we can only combine ops that have\n  // a matching source\n  if (this.submitSource && !deepEqual(op.source, last.source)) return;\n\n  // Compose an op into a create by applying it. This effectively makes the op\n  // invisible, as if the document were created including the op originally\n  if (last.create && 'op' in op) {\n    last.create.data = this.type.apply(last.create.data, op.op);\n    return last;\n  }\n\n  // Compose two ops into a single op if supported by the type. Types that\n  // support compose must be able to compose any two ops together\n  if ('op' in last && 'op' in op && this.type.compose) {\n    last.op = this.type.compose(last.op, op.op);\n    return last;\n  }\n};\n\n// *** Client OT entrypoints.\n\n// Submit an operation to the document.\n//\n// @param operation handled by the OT type\n// @param options  {source: ...}\n// @param [callback] called after operation submitted\n//\n// @fires before op, op, after op\nDoc.prototype.submitOp = function(component, options, callback) {\n  if (typeof options === 'function') {\n    callback = options;\n    options = null;\n  }\n  var op = {op: component};\n  var source = options && options.source;\n  this._submit(op, source, callback);\n};\n\n// Create the document, which in ShareJS semantics means to set its type. Every\n// object implicitly exists in the database but has no data and no type. Create\n// sets the type of the object and can optionally set some initial data on the\n// object, depending on the type.\n//\n// @param data  initial\n// @param type  OT type\n// @param options  {source: ...}\n// @param callback  called when operation submitted\nDoc.prototype.create = function(data, type, options, callback) {\n  if (typeof type === 'function') {\n    callback = type;\n    options = null;\n    type = null;\n  } else if (typeof options === 'function') {\n    callback = options;\n    options = null;\n  }\n  if (!type) {\n    type = types.defaultType.uri;\n  }\n  if (this.type) {\n    var err = new ShareDBError(ERROR_CODE.ERR_DOC_ALREADY_CREATED, 'Document already exists');\n    if (callback) return callback(err);\n    return this.emit('error', err);\n  }\n  var op = {create: {type: type, data: data}};\n  var source = options && options.source;\n  this._submit(op, source, callback);\n};\n\n// Delete the document. This creates and submits a delete operation to the\n// server. Deleting resets the object's type to null and deletes its data. The\n// document still exists, and still has the version it used to have before you\n// deleted it (well, old version +1).\n//\n// @param options  {source: ...}\n// @param callback  called when operation submitted\nDoc.prototype.del = function(options, callback) {\n  if (typeof options === 'function') {\n    callback = options;\n    options = null;\n  }\n  if (!this.type) {\n    var err = new ShareDBError(ERROR_CODE.ERR_DOC_DOES_NOT_EXIST, 'Document does not exist');\n    if (callback) return callback(err);\n    return this.emit('error', err);\n  }\n  var op = {del: true};\n  var source = options && options.source;\n  this._submit(op, source, callback);\n};\n\n\n// Stops the document from sending any operations to the server.\nDoc.prototype.pause = function() {\n  this.paused = true;\n};\n\n// Continue sending operations to the server\nDoc.prototype.resume = function() {\n  this.paused = false;\n  this.flush();\n};\n\n// *** Receiving operations\n\n// This is called when the server acknowledges an operation from the client.\nDoc.prototype._opAcknowledged = function(message) {\n  if (this.inflightOp.create) {\n    this.version = message.v;\n  } else if (message.v !== this.version) {\n    // We should already be at the same version, because the server should\n    // have sent all the ops that have happened before acknowledging our op\n    logger.warn('Invalid version from server. Expected: ' + this.version + ' Received: ' + message.v, message);\n\n    // Fetching should get us back to a working document state\n    return this.fetch();\n  }\n\n  // The op was committed successfully. Increment the version number\n  this.version++;\n\n  this._clearInflightOp();\n};\n\nDoc.prototype._rollback = function(err) {\n  // The server has rejected submission of the current operation. Invert by\n  // just the inflight op if possible. If not possible to invert, cancel all\n  // pending ops and fetch the latest from the server to get us back into a\n  // working state, then call back\n  var op = this.inflightOp;\n\n  if ('op' in op && op.type.invert) {\n    op.op = op.type.invert(op.op);\n\n    // Transform the undo operation by any pending ops.\n    for (var i = 0; i < this.pendingOps.length; i++) {\n      var transformErr = transformX(this.pendingOps[i], op);\n      if (transformErr) return this._hardRollback(transformErr);\n    }\n\n    // ... and apply it locally, reverting the changes.\n    //\n    // This operation is applied to look like it comes from a remote source.\n    // I'm still not 100% sure about this functionality, because its really a\n    // local op. Basically, the problem is that if the client's op is rejected\n    // by the server, the editor window should update to reflect the undo.\n    try {\n      this._otApply(op, false);\n    } catch (error) {\n      return this._hardRollback(error);\n    }\n\n    this._clearInflightOp(err);\n    return;\n  }\n\n  this._hardRollback(err);\n};\n\nDoc.prototype._hardRollback = function(err) {\n  // Store pending ops so that we can notify their callbacks of the error.\n  // We combine the inflight op and the pending ops, because it's possible\n  // to hit a condition where we have no inflight op, but we do have pending\n  // ops. This can happen when an invalid op is submitted, which causes us\n  // to hard rollback before the pending op was flushed.\n  var pendingOps = [];\n  if (this.inflightOp) pendingOps.push(this.inflightOp);\n  pendingOps = pendingOps.concat(this.pendingOps);\n\n  // Cancel all pending ops and reset if we can't invert\n  this._setType(null);\n  this.version = null;\n  this.inflightOp = null;\n  this.pendingOps = [];\n\n  // Fetch the latest version from the server to get us back into a working state\n  var doc = this;\n  this.fetch(function() {\n    // We want to check that no errors are swallowed, so we check that:\n    // - there are callbacks to call, and\n    // - that every single pending op called a callback\n    // If there are no ops queued, or one of them didn't handle the error,\n    // then we emit the error.\n    var allOpsHadCallbacks = !!pendingOps.length;\n    for (var i = 0; i < pendingOps.length; i++) {\n      allOpsHadCallbacks = util.callEach(pendingOps[i].callbacks, err) && allOpsHadCallbacks;\n    }\n    if (err && !allOpsHadCallbacks) return doc.emit('error', err);\n  });\n};\n\nDoc.prototype._clearInflightOp = function(err) {\n  var inflightOp = this.inflightOp;\n\n  this.inflightOp = null;\n\n  var called = util.callEach(inflightOp.callbacks, err);\n\n  this.flush();\n  this._emitNothingPending();\n\n  if (err && !called) return this.emit('error', err);\n};\n",
    "var emitter = require('../emitter');\nvar util = require('../util');\n\n// Queries are live requests to the database for particular sets of fields.\n//\n// The server actively tells the client when there's new data that matches\n// a set of conditions.\nmodule.exports = Query;\nfunction Query(action, connection, id, collection, query, options, callback) {\n  emitter.EventEmitter.call(this);\n\n  // 'qf' or 'qs'\n  this.action = action;\n\n  this.connection = connection;\n  this.id = id;\n  this.collection = collection;\n\n  // The query itself. For mongo, this should look something like {\"data.x\":5}\n  this.query = query;\n\n  // A list of resulting documents. These are actual documents, complete with\n  // data and all the rest. It is possible to pass in an initial results set,\n  // so that a query can be serialized and then re-established\n  this.results = null;\n  if (options && options.results) {\n    this.results = options.results;\n    delete options.results;\n  }\n  this.extra = undefined;\n\n  // Options to pass through with the query\n  this.options = options;\n\n  this.callback = callback;\n  this.ready = false;\n  this.sent = false;\n}\nemitter.mixin(Query);\n\nQuery.prototype.hasPending = function() {\n  return !this.ready;\n};\n\n// Helper for subscribe & fetch, since they share the same message format.\n//\n// This function actually issues the query.\nQuery.prototype.send = function() {\n  if (!this.connection.canSend) return;\n\n  var message = {\n    a: this.action,\n    id: this.id,\n    c: this.collection,\n    q: this.query\n  };\n  if (this.options) {\n    message.o = this.options;\n  }\n  if (this.results) {\n    // Collect the version of all the documents in the current result set so we\n    // don't need to be sent their snapshots again.\n    var results = [];\n    for (var i = 0; i < this.results.length; i++) {\n      var doc = this.results[i];\n      results.push([doc.id, doc.version]);\n    }\n    message.r = results;\n  }\n\n  this.connection.send(message);\n  this.sent = true;\n};\n\n// Destroy the query object. Any subsequent messages for the query will be\n// ignored by the connection.\nQuery.prototype.destroy = function(callback) {\n  if (this.connection.canSend && this.action === 'qs') {\n    this.connection.send({a: 'qu', id: this.id});\n  }\n  this.connection._destroyQuery(this);\n  // There is a callback for consistency, but we don't actually wait for the\n  // server's unsubscribe message currently\n  if (callback) util.nextTick(callback);\n};\n\nQuery.prototype._onConnectionStateChanged = function() {\n  if (this.connection.canSend && !this.sent) {\n    this.send();\n  } else {\n    this.sent = false;\n  }\n};\n\nQuery.prototype._handleFetch = function(err, data, extra) {\n  // Once a fetch query gets its data, it is destroyed.\n  this.connection._destroyQuery(this);\n  this._handleResponse(err, data, extra);\n};\n\nQuery.prototype._handleSubscribe = function(err, data, extra) {\n  this._handleResponse(err, data, extra);\n};\n\nQuery.prototype._handleResponse = function(err, data, extra) {\n  var callback = this.callback;\n  this.callback = null;\n  if (err) return this._finishResponse(err, callback);\n  if (!data) return this._finishResponse(null, callback);\n\n  var query = this;\n  var wait = 1;\n  var finish = function(err) {\n    if (err) return query._finishResponse(err, callback);\n    if (--wait) return;\n    query._finishResponse(null, callback);\n  };\n\n  if (Array.isArray(data)) {\n    wait += data.length;\n    this.results = this._ingestSnapshots(data, finish);\n    this.extra = extra;\n  } else {\n    for (var id in data) {\n      wait++;\n      var snapshot = data[id];\n      var doc = this.connection.get(snapshot.c || this.collection, id);\n      doc.ingestSnapshot(snapshot, finish);\n    }\n  }\n\n  finish();\n};\n\nQuery.prototype._ingestSnapshots = function(snapshots, finish) {\n  var results = [];\n  for (var i = 0; i < snapshots.length; i++) {\n    var snapshot = snapshots[i];\n    var doc = this.connection.get(snapshot.c || this.collection, snapshot.d);\n    doc.ingestSnapshot(snapshot, finish);\n    results.push(doc);\n  }\n  return results;\n};\n\nQuery.prototype._finishResponse = function(err, callback) {\n  this.emit('ready');\n  this.ready = true;\n  if (err) {\n    this.connection._destroyQuery(this);\n    if (callback) return callback(err);\n    return this.emit('error', err);\n  }\n  if (callback) callback(null, this.results, this.extra);\n};\n\nQuery.prototype._handleError = function(err) {\n  this.emit('error', err);\n};\n\nQuery.prototype._handleDiff = function(diff) {\n  // We need to go through the list twice. First, we'll ingest all the new\n  // documents. After that we'll emit events and actually update our list.\n  // This avoids race conditions around setting documents to be subscribed &\n  // unsubscribing documents in event callbacks.\n  for (var i = 0; i < diff.length; i++) {\n    var d = diff[i];\n    if (d.type === 'insert') d.values = this._ingestSnapshots(d.values);\n  }\n\n  for (var i = 0; i < diff.length; i++) {\n    var d = diff[i];\n    switch (d.type) {\n      case 'insert':\n        var newDocs = d.values;\n        Array.prototype.splice.apply(this.results, [d.index, 0].concat(newDocs));\n        this.emit('insert', newDocs, d.index);\n        break;\n      case 'remove':\n        var howMany = d.howMany || 1;\n        var removed = this.results.splice(d.index, howMany);\n        this.emit('remove', removed, d.index);\n        break;\n      case 'move':\n        var howMany = d.howMany || 1;\n        var docs = this.results.splice(d.from, howMany);\n        Array.prototype.splice.apply(this.results, [d.to, 0].concat(docs));\n        this.emit('move', docs, d.from, d.to);\n        break;\n    }\n  }\n\n  this.emit('changed', this.results);\n};\n\nQuery.prototype._handleExtra = function(extra) {\n  this.extra = extra;\n  this.emit('extra', extra);\n};\n",
    "var emitter = require('../../emitter');\nvar util = require('../../util');\n\nmodule.exports = LocalPresence;\nfunction LocalPresence(presence, presenceId) {\n  emitter.EventEmitter.call(this);\n\n  if (!presenceId || typeof presenceId !== 'string') {\n    throw new Error('LocalPresence presenceId must be a string');\n  }\n\n  this.presence = presence;\n  this.presenceId = presenceId;\n  this.connection = presence.connection;\n  this.presenceVersion = 0;\n\n  this.value = null;\n\n  this._pendingMessages = [];\n  this._callbacksByPresenceVersion = {};\n}\nemitter.mixin(LocalPresence);\n\nLocalPresence.prototype.submit = function(value, callback) {\n  this.value = value;\n  this.send(callback);\n};\n\nLocalPresence.prototype.send = function(callback) {\n  var message = this._message();\n  this._pendingMessages.push(message);\n  this._callbacksByPresenceVersion[message.pv] = callback;\n  this._sendPending();\n};\n\nLocalPresence.prototype.destroy = function(callback) {\n  var presence = this;\n  this.submit(null, function(error) {\n    if (error) return presence._callbackOrEmit(error, callback);\n    delete presence.presence.localPresences[presence.presenceId];\n    if (callback) callback();\n  });\n};\n\nLocalPresence.prototype._sendPending = function() {\n  if (!this.connection.canSend) return;\n  var presence = this;\n  this._pendingMessages.forEach(function(message) {\n    presence.connection.send(message);\n  });\n\n  this._pendingMessages = [];\n};\n\nLocalPresence.prototype._ack = function(error, presenceVersion) {\n  var callback = this._getCallback(presenceVersion);\n  this._callbackOrEmit(error, callback);\n};\n\nLocalPresence.prototype._message = function() {\n  return {\n    a: 'p',\n    ch: this.presence.channel,\n    id: this.presenceId,\n    p: this.value,\n    pv: this.presenceVersion++\n  };\n};\n\nLocalPresence.prototype._getCallback = function(presenceVersion) {\n  var callback = this._callbacksByPresenceVersion[presenceVersion];\n  delete this._callbacksByPresenceVersion[presenceVersion];\n  return callback;\n};\n\nLocalPresence.prototype._callbackOrEmit = function(error, callback) {\n  if (callback) return util.nextTick(callback, error);\n  if (error) this.emit('error', error);\n};\n",
    "var util = require('../../util');\n\nmodule.exports = RemotePresence;\nfunction RemotePresence(presence, presenceId) {\n  this.presence = presence;\n  this.presenceId = presenceId;\n  this.connection = this.presence.connection;\n\n  this.value = null;\n  this.presenceVersion = 0;\n}\n\nRemotePresence.prototype.receiveUpdate = function(message) {\n  if (message.pv < this.presenceVersion) return;\n  this.value = message.p;\n  this.presenceVersion = message.pv;\n  this.presence._updateRemotePresence(this);\n};\n\nRemotePresence.prototype.destroy = function(callback) {\n  delete this.presence._remotePresenceInstances[this.presenceId];\n  delete this.presence.remotePresences[this.presenceId];\n  if (callback) util.nextTick(callback);\n};\n",
    "(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n  typeof define === 'function' && define.amd ? define(['exports'], factory) :\n  (factory((global.async = global.async || {})));\n}(this, (function (exports) { 'use strict';\n\nfunction slice(arrayLike, start) {\n    start = start|0;\n    var newLen = Math.max(arrayLike.length - start, 0);\n    var newArr = Array(newLen);\n    for(var idx = 0; idx < newLen; idx++)  {\n        newArr[idx] = arrayLike[start + idx];\n    }\n    return newArr;\n}\n\n/**\n * Creates a continuation function with some arguments already applied.\n *\n * Useful as a shorthand when combined with other control flow functions. Any\n * arguments passed to the returned function are added to the arguments\n * originally passed to apply.\n *\n * @name apply\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {Function} fn - The function you want to eventually apply all\n * arguments to. Invokes with (arguments...).\n * @param {...*} arguments... - Any number of arguments to automatically apply\n * when the continuation is called.\n * @returns {Function} the partially-applied function\n * @example\n *\n * // using apply\n * async.parallel([\n *     async.apply(fs.writeFile, 'testfile1', 'test1'),\n *     async.apply(fs.writeFile, 'testfile2', 'test2')\n * ]);\n *\n *\n * // the same process without using apply\n * async.parallel([\n *     function(callback) {\n *         fs.writeFile('testfile1', 'test1', callback);\n *     },\n *     function(callback) {\n *         fs.writeFile('testfile2', 'test2', callback);\n *     }\n * ]);\n *\n * // It's possible to pass any number of additional arguments when calling the\n * // continuation:\n *\n * node> var fn = async.apply(sys.puts, 'one');\n * node> fn('two', 'three');\n * one\n * two\n * three\n */\nvar apply = function(fn/*, ...args*/) {\n    var args = slice(arguments, 1);\n    return function(/*callArgs*/) {\n        var callArgs = slice(arguments);\n        return fn.apply(null, args.concat(callArgs));\n    };\n};\n\nvar initialParams = function (fn) {\n    return function (/*...args, callback*/) {\n        var args = slice(arguments);\n        var callback = args.pop();\n        fn.call(this, args, callback);\n    };\n};\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nvar hasSetImmediate = typeof setImmediate === 'function' && setImmediate;\nvar hasNextTick = typeof process === 'object' && typeof process.nextTick === 'function';\n\nfunction fallback(fn) {\n    setTimeout(fn, 0);\n}\n\nfunction wrap(defer) {\n    return function (fn/*, ...args*/) {\n        var args = slice(arguments, 1);\n        defer(function () {\n            fn.apply(null, args);\n        });\n    };\n}\n\nvar _defer;\n\nif (hasSetImmediate) {\n    _defer = setImmediate;\n} else if (hasNextTick) {\n    _defer = process.nextTick;\n} else {\n    _defer = fallback;\n}\n\nvar setImmediate$1 = wrap(_defer);\n\n/**\n * Take a sync function and make it async, passing its return value to a\n * callback. This is useful for plugging sync functions into a waterfall,\n * series, or other async functions. Any arguments passed to the generated\n * function will be passed to the wrapped function (except for the final\n * callback argument). Errors thrown will be passed to the callback.\n *\n * If the function passed to `asyncify` returns a Promise, that promises's\n * resolved/rejected state will be used to call the callback, rather than simply\n * the synchronous return value.\n *\n * This also means you can asyncify ES2017 `async` functions.\n *\n * @name asyncify\n * @static\n * @memberOf module:Utils\n * @method\n * @alias wrapSync\n * @category Util\n * @param {Function} func - The synchronous function, or Promise-returning\n * function to convert to an {@link AsyncFunction}.\n * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be\n * invoked with `(args..., callback)`.\n * @example\n *\n * // passing a regular synchronous function\n * async.waterfall([\n *     async.apply(fs.readFile, filename, \"utf8\"),\n *     async.asyncify(JSON.parse),\n *     function (data, next) {\n *         // data is the result of parsing the text.\n *         // If there was a parsing error, it would have been caught.\n *     }\n * ], callback);\n *\n * // passing a function returning a promise\n * async.waterfall([\n *     async.apply(fs.readFile, filename, \"utf8\"),\n *     async.asyncify(function (contents) {\n *         return db.model.create(contents);\n *     }),\n *     function (model, next) {\n *         // `model` is the instantiated model object.\n *         // If there was an error, this function would be skipped.\n *     }\n * ], callback);\n *\n * // es2017 example, though `asyncify` is not needed if your JS environment\n * // supports async functions out of the box\n * var q = async.queue(async.asyncify(async function(file) {\n *     var intermediateStep = await processFile(file);\n *     return await somePromise(intermediateStep)\n * }));\n *\n * q.push(files);\n */\nfunction asyncify(func) {\n    return initialParams(function (args, callback) {\n        var result;\n        try {\n            result = func.apply(this, args);\n        } catch (e) {\n            return callback(e);\n        }\n        // if result is Promise object\n        if (isObject(result) && typeof result.then === 'function') {\n            result.then(function(value) {\n                invokeCallback(callback, null, value);\n            }, function(err) {\n                invokeCallback(callback, err.message ? err : new Error(err));\n            });\n        } else {\n            callback(null, result);\n        }\n    });\n}\n\nfunction invokeCallback(callback, error, value) {\n    try {\n        callback(error, value);\n    } catch (e) {\n        setImmediate$1(rethrow, e);\n    }\n}\n\nfunction rethrow(error) {\n    throw error;\n}\n\nvar supportsSymbol = typeof Symbol === 'function';\n\nfunction isAsync(fn) {\n    return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction';\n}\n\nfunction wrapAsync(asyncFn) {\n    return isAsync(asyncFn) ? asyncify(asyncFn) : asyncFn;\n}\n\nfunction applyEach$1(eachfn) {\n    return function(fns/*, ...args*/) {\n        var args = slice(arguments, 1);\n        var go = initialParams(function(args, callback) {\n            var that = this;\n            return eachfn(fns, function (fn, cb) {\n                wrapAsync(fn).apply(that, args.concat(cb));\n            }, callback);\n        });\n        if (args.length) {\n            return go.apply(this, args);\n        }\n        else {\n            return go;\n        }\n    };\n}\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Built-in value references. */\nvar Symbol$1 = root.Symbol;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag$1),\n      tag = value[symToStringTag$1];\n\n  try {\n    value[symToStringTag$1] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag$1] = tag;\n    } else {\n      delete value[symToStringTag$1];\n    }\n  }\n  return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto$1 = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString$1 = objectProto$1.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString$1.call(value);\n}\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]';\nvar undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]';\nvar funcTag = '[object Function]';\nvar genTag = '[object GeneratorFunction]';\nvar proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n// A temporary value used to identify if the loop should be broken.\n// See #1064, #1293\nvar breakLoop = {};\n\n/**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\nfunction noop() {\n  // No operation performed.\n}\n\nfunction once(fn) {\n    return function () {\n        if (fn === null) return;\n        var callFn = fn;\n        fn = null;\n        callFn.apply(this, arguments);\n    };\n}\n\nvar iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator;\n\nvar getIterator = function (coll) {\n    return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol]();\n};\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/** Used for built-in method references. */\nvar objectProto$3 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$2 = objectProto$3.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto$3.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER$1 = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER$1 : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\n/** `Object#toString` result references. */\nvar argsTag$1 = '[object Arguments]';\nvar arrayTag = '[object Array]';\nvar boolTag = '[object Boolean]';\nvar dateTag = '[object Date]';\nvar errorTag = '[object Error]';\nvar funcTag$1 = '[object Function]';\nvar mapTag = '[object Map]';\nvar numberTag = '[object Number]';\nvar objectTag = '[object Object]';\nvar regexpTag = '[object RegExp]';\nvar setTag = '[object Set]';\nvar stringTag = '[object String]';\nvar weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]';\nvar dataViewTag = '[object DataView]';\nvar float32Tag = '[object Float32Array]';\nvar float64Tag = '[object Float64Array]';\nvar int8Tag = '[object Int8Array]';\nvar int16Tag = '[object Int16Array]';\nvar int32Tag = '[object Int32Array]';\nvar uint8Tag = '[object Uint8Array]';\nvar uint8ClampedTag = '[object Uint8ClampedArray]';\nvar uint16Tag = '[object Uint16Array]';\nvar uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag$1] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag$1] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/** Detect free variable `exports`. */\nvar freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports$1 && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule$1 && freeModule$1.require && freeModule$1.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/** Used for built-in method references. */\nvar objectProto$2 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$1 = objectProto$2.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty$1.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/** Used for built-in method references. */\nvar objectProto$5 = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$5;\n\n  return value === proto;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\n/** Used for built-in method references. */\nvar objectProto$4 = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty$3 = objectProto$4.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty$3.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nfunction createArrayIterator(coll) {\n    var i = -1;\n    var len = coll.length;\n    return function next() {\n        return ++i < len ? {value: coll[i], key: i} : null;\n    }\n}\n\nfunction createES2015Iterator(iterator) {\n    var i = -1;\n    return function next() {\n        var item = iterator.next();\n        if (item.done)\n            return null;\n        i++;\n        return {value: item.value, key: i};\n    }\n}\n\nfunction createObjectIterator(obj) {\n    var okeys = keys(obj);\n    var i = -1;\n    var len = okeys.length;\n    return function next() {\n        var key = okeys[++i];\n        if (key === '__proto__') {\n            return next();\n        }\n        return i < len ? {value: obj[key], key: key} : null;\n    };\n}\n\nfunction iterator(coll) {\n    if (isArrayLike(coll)) {\n        return createArrayIterator(coll);\n    }\n\n    var iterator = getIterator(coll);\n    return iterator ? createES2015Iterator(iterator) : createObjectIterator(coll);\n}\n\nfunction onlyOnce(fn) {\n    return function() {\n        if (fn === null) throw new Error(\"Callback was already called.\");\n        var callFn = fn;\n        fn = null;\n        callFn.apply(this, arguments);\n    };\n}\n\nfunction _eachOfLimit(limit) {\n    return function (obj, iteratee, callback) {\n        callback = once(callback || noop);\n        if (limit <= 0 || !obj) {\n            return callback(null);\n        }\n        var nextElem = iterator(obj);\n        var done = false;\n        var running = 0;\n        var looping = false;\n\n        function iterateeCallback(err, value) {\n            running -= 1;\n            if (err) {\n                done = true;\n                callback(err);\n            }\n            else if (value === breakLoop || (done && running <= 0)) {\n                done = true;\n                return callback(null);\n            }\n            else if (!looping) {\n                replenish();\n            }\n        }\n\n        function replenish () {\n            looping = true;\n            while (running < limit && !done) {\n                var elem = nextElem();\n                if (elem === null) {\n                    done = true;\n                    if (running <= 0) {\n                        callback(null);\n                    }\n                    return;\n                }\n                running += 1;\n                iteratee(elem.value, elem.key, onlyOnce(iterateeCallback));\n            }\n            looping = false;\n        }\n\n        replenish();\n    };\n}\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name eachOfLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfLimit\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`. The `key` is the item's key, or index in the case of an\n * array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n */\nfunction eachOfLimit(coll, limit, iteratee, callback) {\n    _eachOfLimit(limit)(coll, wrapAsync(iteratee), callback);\n}\n\nfunction doLimit(fn, limit) {\n    return function (iterable, iteratee, callback) {\n        return fn(iterable, limit, iteratee, callback);\n    };\n}\n\n// eachOf implementation optimized for array-likes\nfunction eachOfArrayLike(coll, iteratee, callback) {\n    callback = once(callback || noop);\n    var index = 0,\n        completed = 0,\n        length = coll.length;\n    if (length === 0) {\n        callback(null);\n    }\n\n    function iteratorCallback(err, value) {\n        if (err) {\n            callback(err);\n        } else if ((++completed === length) || value === breakLoop) {\n            callback(null);\n        }\n    }\n\n    for (; index < length; index++) {\n        iteratee(coll[index], index, onlyOnce(iteratorCallback));\n    }\n}\n\n// a generic version of eachOf which can handle array, object, and iterator cases.\nvar eachOfGeneric = doLimit(eachOfLimit, Infinity);\n\n/**\n * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument\n * to the iteratee.\n *\n * @name eachOf\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEachOf\n * @category Collection\n * @see [async.each]{@link module:Collections.each}\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each\n * item in `coll`.\n * The `key` is the item's key, or index in the case of an array.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @example\n *\n * var obj = {dev: \"/dev.json\", test: \"/test.json\", prod: \"/prod.json\"};\n * var configs = {};\n *\n * async.forEachOf(obj, function (value, key, callback) {\n *     fs.readFile(__dirname + value, \"utf8\", function (err, data) {\n *         if (err) return callback(err);\n *         try {\n *             configs[key] = JSON.parse(data);\n *         } catch (e) {\n *             return callback(e);\n *         }\n *         callback();\n *     });\n * }, function (err) {\n *     if (err) console.error(err.message);\n *     // configs is now a map of JSON data\n *     doSomethingWith(configs);\n * });\n */\nvar eachOf = function(coll, iteratee, callback) {\n    var eachOfImplementation = isArrayLike(coll) ? eachOfArrayLike : eachOfGeneric;\n    eachOfImplementation(coll, wrapAsync(iteratee), callback);\n};\n\nfunction doParallel(fn) {\n    return function (obj, iteratee, callback) {\n        return fn(eachOf, obj, wrapAsync(iteratee), callback);\n    };\n}\n\nfunction _asyncMap(eachfn, arr, iteratee, callback) {\n    callback = callback || noop;\n    arr = arr || [];\n    var results = [];\n    var counter = 0;\n    var _iteratee = wrapAsync(iteratee);\n\n    eachfn(arr, function (value, _, callback) {\n        var index = counter++;\n        _iteratee(value, function (err, v) {\n            results[index] = v;\n            callback(err);\n        });\n    }, function (err) {\n        callback(err, results);\n    });\n}\n\n/**\n * Produces a new collection of values by mapping each value in `coll` through\n * the `iteratee` function. The `iteratee` is called with an item from `coll`\n * and a callback for when it has finished processing. Each of these callback\n * takes 2 arguments: an `error`, and the transformed item from `coll`. If\n * `iteratee` passes an error to its callback, the main `callback` (for the\n * `map` function) is immediately called with the error.\n *\n * Note, that since this function applies the `iteratee` to each item in\n * parallel, there is no guarantee that the `iteratee` functions will complete\n * in order. However, the results array will be in the same order as the\n * original `coll`.\n *\n * If `map` is passed an Object, the results will be an Array.  The results\n * will roughly be in the order of the original Objects' keys (but this can\n * vary across JavaScript engines).\n *\n * @name map\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an Array of the\n * transformed items from the `coll`. Invoked with (err, results).\n * @example\n *\n * async.map(['file1','file2','file3'], fs.stat, function(err, results) {\n *     // results is now an array of stats for each file\n * });\n */\nvar map = doParallel(_asyncMap);\n\n/**\n * Applies the provided arguments to each function in the array, calling\n * `callback` after all functions have completed. If you only provide the first\n * argument, `fns`, then it will return a function which lets you pass in the\n * arguments as if it were a single function call. If more arguments are\n * provided, `callback` is required while `args` is still optional.\n *\n * @name applyEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s\n * to all call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {Function} - If only the first argument, `fns`, is provided, it will\n * return a function which lets you pass in the arguments as if it were a single\n * function call. The signature is `(..args, callback)`. If invoked with any\n * arguments, `callback` is required.\n * @example\n *\n * async.applyEach([enableSearch, updateSchema], 'bucket', callback);\n *\n * // partial application example:\n * async.each(\n *     buckets,\n *     async.applyEach([enableSearch, updateSchema]),\n *     callback\n * );\n */\nvar applyEach = applyEach$1(map);\n\nfunction doParallelLimit(fn) {\n    return function (obj, limit, iteratee, callback) {\n        return fn(_eachOfLimit(limit), obj, wrapAsync(iteratee), callback);\n    };\n}\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs a maximum of `limit` async operations at a time.\n *\n * @name mapLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n */\nvar mapLimit = doParallelLimit(_asyncMap);\n\n/**\n * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time.\n *\n * @name mapSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with the transformed item.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Results is an array of the\n * transformed items from the `coll`. Invoked with (err, results).\n */\nvar mapSeries = doLimit(mapLimit, 1);\n\n/**\n * The same as [`applyEach`]{@link module:ControlFlow.applyEach} but runs only a single async operation at a time.\n *\n * @name applyEachSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.applyEach]{@link module:ControlFlow.applyEach}\n * @category Control Flow\n * @param {Array|Iterable|Object} fns - A collection of {@link AsyncFunction}s to all\n * call with the same arguments\n * @param {...*} [args] - any number of separate arguments to pass to the\n * function.\n * @param {Function} [callback] - the final argument should be the callback,\n * called when all functions have completed processing.\n * @returns {Function} - If only the first argument is provided, it will return\n * a function which lets you pass in the arguments as if it were a single\n * function call.\n */\nvar applyEachSeries = applyEach$1(mapSeries);\n\n/**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length;\n\n  while (++index < length) {\n    if (iteratee(array[index], index, array) === false) {\n      break;\n    }\n  }\n  return array;\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n  var length = array.length,\n      index = fromIndex + (fromRight ? 1 : -1);\n\n  while ((fromRight ? index-- : ++index < length)) {\n    if (predicate(array[index], index, array)) {\n      return index;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n  return value !== value;\n}\n\n/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n  var index = fromIndex - 1,\n      length = array.length;\n\n  while (++index < length) {\n    if (array[index] === value) {\n      return index;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n  return value === value\n    ? strictIndexOf(array, value, fromIndex)\n    : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\n/**\n * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on\n * their requirements. Each function can optionally depend on other functions\n * being completed first, and each function is run as soon as its requirements\n * are satisfied.\n *\n * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence\n * will stop. Further tasks will not execute (so any other functions depending\n * on it will not run), and the main `callback` is immediately called with the\n * error.\n *\n * {@link AsyncFunction}s also receive an object containing the results of functions which\n * have completed so far as the first argument, if they have dependencies. If a\n * task function has no dependencies, it will only be passed a callback.\n *\n * @name auto\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Object} tasks - An object. Each of its properties is either a\n * function or an array of requirements, with the {@link AsyncFunction} itself the last item\n * in the array. The object's key of a property serves as the name of the task\n * defined by that property, i.e. can be used when specifying requirements for\n * other tasks. The function receives one or two arguments:\n * * a `results` object, containing the results of the previously executed\n *   functions, only passed if the task has any dependencies,\n * * a `callback(err, result)` function, which must be called when finished,\n *   passing an `error` (which can be `null`) and the result of the function's\n *   execution.\n * @param {number} [concurrency=Infinity] - An optional `integer` for\n * determining the maximum number of tasks that can be run in parallel. By\n * default, as many as possible.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback. Results are always returned; however, if an\n * error occurs, no further `tasks` will be performed, and the results object\n * will only contain partial results. Invoked with (err, results).\n * @returns undefined\n * @example\n *\n * async.auto({\n *     // this function will just be passed a callback\n *     readData: async.apply(fs.readFile, 'data.txt', 'utf-8'),\n *     showData: ['readData', function(results, cb) {\n *         // results.readData is the file's contents\n *         // ...\n *     }]\n * }, callback);\n *\n * async.auto({\n *     get_data: function(callback) {\n *         console.log('in get_data');\n *         // async code to get some data\n *         callback(null, 'data', 'converted to array');\n *     },\n *     make_folder: function(callback) {\n *         console.log('in make_folder');\n *         // async code to create a directory to store a file in\n *         // this is run at the same time as getting the data\n *         callback(null, 'folder');\n *     },\n *     write_file: ['get_data', 'make_folder', function(results, callback) {\n *         console.log('in write_file', JSON.stringify(results));\n *         // once there is some data and the directory exists,\n *         // write the data to a file in the directory\n *         callback(null, 'filename');\n *     }],\n *     email_link: ['write_file', function(results, callback) {\n *         console.log('in email_link', JSON.stringify(results));\n *         // once the file is written let's email a link to it...\n *         // results.write_file contains the filename returned by write_file.\n *         callback(null, {'file':results.write_file, 'email':'user@example.com'});\n *     }]\n * }, function(err, results) {\n *     console.log('err = ', err);\n *     console.log('results = ', results);\n * });\n */\nvar auto = function (tasks, concurrency, callback) {\n    if (typeof concurrency === 'function') {\n        // concurrency is optional, shift the args.\n        callback = concurrency;\n        concurrency = null;\n    }\n    callback = once(callback || noop);\n    var keys$$1 = keys(tasks);\n    var numTasks = keys$$1.length;\n    if (!numTasks) {\n        return callback(null);\n    }\n    if (!concurrency) {\n        concurrency = numTasks;\n    }\n\n    var results = {};\n    var runningTasks = 0;\n    var hasError = false;\n\n    var listeners = Object.create(null);\n\n    var readyTasks = [];\n\n    // for cycle detection:\n    var readyToCheck = []; // tasks that have been identified as reachable\n    // without the possibility of returning to an ancestor task\n    var uncheckedDependencies = {};\n\n    baseForOwn(tasks, function (task, key) {\n        if (!isArray(task)) {\n            // no dependencies\n            enqueueTask(key, [task]);\n            readyToCheck.push(key);\n            return;\n        }\n\n        var dependencies = task.slice(0, task.length - 1);\n        var remainingDependencies = dependencies.length;\n        if (remainingDependencies === 0) {\n            enqueueTask(key, task);\n            readyToCheck.push(key);\n            return;\n        }\n        uncheckedDependencies[key] = remainingDependencies;\n\n        arrayEach(dependencies, function (dependencyName) {\n            if (!tasks[dependencyName]) {\n                throw new Error('async.auto task `' + key +\n                    '` has a non-existent dependency `' +\n                    dependencyName + '` in ' +\n                    dependencies.join(', '));\n            }\n            addListener(dependencyName, function () {\n                remainingDependencies--;\n                if (remainingDependencies === 0) {\n                    enqueueTask(key, task);\n                }\n            });\n        });\n    });\n\n    checkForDeadlocks();\n    processQueue();\n\n    function enqueueTask(key, task) {\n        readyTasks.push(function () {\n            runTask(key, task);\n        });\n    }\n\n    function processQueue() {\n        if (readyTasks.length === 0 && runningTasks === 0) {\n            return callback(null, results);\n        }\n        while(readyTasks.length && runningTasks < concurrency) {\n            var run = readyTasks.shift();\n            run();\n        }\n\n    }\n\n    function addListener(taskName, fn) {\n        var taskListeners = listeners[taskName];\n        if (!taskListeners) {\n            taskListeners = listeners[taskName] = [];\n        }\n\n        taskListeners.push(fn);\n    }\n\n    function taskComplete(taskName) {\n        var taskListeners = listeners[taskName] || [];\n        arrayEach(taskListeners, function (fn) {\n            fn();\n        });\n        processQueue();\n    }\n\n\n    function runTask(key, task) {\n        if (hasError) return;\n\n        var taskCallback = onlyOnce(function(err, result) {\n            runningTasks--;\n            if (arguments.length > 2) {\n                result = slice(arguments, 1);\n            }\n            if (err) {\n                var safeResults = {};\n                baseForOwn(results, function(val, rkey) {\n                    safeResults[rkey] = val;\n                });\n                safeResults[key] = result;\n                hasError = true;\n                listeners = Object.create(null);\n\n                callback(err, safeResults);\n            } else {\n                results[key] = result;\n                taskComplete(key);\n            }\n        });\n\n        runningTasks++;\n        var taskFn = wrapAsync(task[task.length - 1]);\n        if (task.length > 1) {\n            taskFn(results, taskCallback);\n        } else {\n            taskFn(taskCallback);\n        }\n    }\n\n    function checkForDeadlocks() {\n        // Kahn's algorithm\n        // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm\n        // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html\n        var currentTask;\n        var counter = 0;\n        while (readyToCheck.length) {\n            currentTask = readyToCheck.pop();\n            counter++;\n            arrayEach(getDependents(currentTask), function (dependent) {\n                if (--uncheckedDependencies[dependent] === 0) {\n                    readyToCheck.push(dependent);\n                }\n            });\n        }\n\n        if (counter !== numTasks) {\n            throw new Error(\n                'async.auto cannot execute tasks due to a recursive dependency'\n            );\n        }\n    }\n\n    function getDependents(taskName) {\n        var result = [];\n        baseForOwn(tasks, function (task, key) {\n            if (isArray(task) && baseIndexOf(task, taskName, 0) >= 0) {\n                result.push(key);\n            }\n        });\n        return result;\n    }\n};\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol$1 ? Symbol$1.prototype : undefined;\nvar symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n  var index = -1,\n      length = array.length;\n\n  if (start < 0) {\n    start = -start > length ? 0 : (length + start);\n  }\n  end = end > length ? length : end;\n  if (end < 0) {\n    end += length;\n  }\n  length = start > end ? 0 : ((end - start) >>> 0);\n  start >>>= 0;\n\n  var result = Array(length);\n  while (++index < length) {\n    result[index] = array[index + start];\n  }\n  return result;\n}\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n  var length = array.length;\n  end = end === undefined ? length : end;\n  return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\nfunction charsEndIndex(strSymbols, chrSymbols) {\n  var index = strSymbols.length;\n\n  while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n  return index;\n}\n\n/**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\nfunction charsStartIndex(strSymbols, chrSymbols) {\n  var index = -1,\n      length = strSymbols.length;\n\n  while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n  return index;\n}\n\n/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n  return string.split('');\n}\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff';\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f';\nvar reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f';\nvar rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff';\nvar rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\nvar rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n  return reHasUnicode.test(string);\n}\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange$1 = '\\\\ud800-\\\\udfff';\nvar rsComboMarksRange$1 = '\\\\u0300-\\\\u036f';\nvar reComboHalfMarksRange$1 = '\\\\ufe20-\\\\ufe2f';\nvar rsComboSymbolsRange$1 = '\\\\u20d0-\\\\u20ff';\nvar rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1;\nvar rsVarRange$1 = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange$1 + ']';\nvar rsCombo = '[' + rsComboRange$1 + ']';\nvar rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]';\nvar rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')';\nvar rsNonAstral = '[^' + rsAstralRange$1 + ']';\nvar rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}';\nvar rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]';\nvar rsZWJ$1 = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?';\nvar rsOptVar = '[' + rsVarRange$1 + ']?';\nvar rsOptJoin = '(?:' + rsZWJ$1 + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*';\nvar rsSeq = rsOptVar + reOptMod + rsOptJoin;\nvar rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n  return string.match(reUnicode) || [];\n}\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n  return hasUnicode(string)\n    ? unicodeToArray(string)\n    : asciiToArray(string);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim('  abc  ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map(['  foo  ', '  bar  '], _.trim);\n * // => ['foo', 'bar']\n */\nfunction trim(string, chars, guard) {\n  string = toString(string);\n  if (string && (guard || chars === undefined)) {\n    return string.replace(reTrim, '');\n  }\n  if (!string || !(chars = baseToString(chars))) {\n    return string;\n  }\n  var strSymbols = stringToArray(string),\n      chrSymbols = stringToArray(chars),\n      start = charsStartIndex(strSymbols, chrSymbols),\n      end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n  return castSlice(strSymbols, start, end).join('');\n}\n\nvar FN_ARGS = /^(?:async\\s+)?(function)?\\s*[^\\(]*\\(\\s*([^\\)]*)\\)/m;\nvar FN_ARG_SPLIT = /,/;\nvar FN_ARG = /(=.+)?(\\s*)$/;\nvar STRIP_COMMENTS = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\n\nfunction parseParams(func) {\n    func = func.toString().replace(STRIP_COMMENTS, '');\n    func = func.match(FN_ARGS)[2].replace(' ', '');\n    func = func ? func.split(FN_ARG_SPLIT) : [];\n    func = func.map(function (arg){\n        return trim(arg.replace(FN_ARG, ''));\n    });\n    return func;\n}\n\n/**\n * A dependency-injected version of the [async.auto]{@link module:ControlFlow.auto} function. Dependent\n * tasks are specified as parameters to the function, after the usual callback\n * parameter, with the parameter names matching the names of the tasks it\n * depends on. This can provide even more readable task graphs which can be\n * easier to maintain.\n *\n * If a final callback is specified, the task results are similarly injected,\n * specified as named parameters after the initial error parameter.\n *\n * The autoInject function is purely syntactic sugar and its semantics are\n * otherwise equivalent to [async.auto]{@link module:ControlFlow.auto}.\n *\n * @name autoInject\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.auto]{@link module:ControlFlow.auto}\n * @category Control Flow\n * @param {Object} tasks - An object, each of whose properties is an {@link AsyncFunction} of\n * the form 'func([dependencies...], callback). The object's key of a property\n * serves as the name of the task defined by that property, i.e. can be used\n * when specifying requirements for other tasks.\n * * The `callback` parameter is a `callback(err, result)` which must be called\n *   when finished, passing an `error` (which can be `null`) and the result of\n *   the function's execution. The remaining parameters name other tasks on\n *   which the task is dependent, and the results from those tasks are the\n *   arguments of those parameters.\n * @param {Function} [callback] - An optional callback which is called when all\n * the tasks have been completed. It receives the `err` argument if any `tasks`\n * pass an error to their callback, and a `results` object with any completed\n * task results, similar to `auto`.\n * @example\n *\n * //  The example from `auto` can be rewritten as follows:\n * async.autoInject({\n *     get_data: function(callback) {\n *         // async code to get some data\n *         callback(null, 'data', 'converted to array');\n *     },\n *     make_folder: function(callback) {\n *         // async code to create a directory to store a file in\n *         // this is run at the same time as getting the data\n *         callback(null, 'folder');\n *     },\n *     write_file: function(get_data, make_folder, callback) {\n *         // once there is some data and the directory exists,\n *         // write the data to a file in the directory\n *         callback(null, 'filename');\n *     },\n *     email_link: function(write_file, callback) {\n *         // once the file is written let's email a link to it...\n *         // write_file contains the filename returned by write_file.\n *         callback(null, {'file':write_file, 'email':'user@example.com'});\n *     }\n * }, function(err, results) {\n *     console.log('err = ', err);\n *     console.log('email_link = ', results.email_link);\n * });\n *\n * // If you are using a JS minifier that mangles parameter names, `autoInject`\n * // will not work with plain functions, since the parameter names will be\n * // collapsed to a single letter identifier.  To work around this, you can\n * // explicitly specify the names of the parameters your task function needs\n * // in an array, similar to Angular.js dependency injection.\n *\n * // This still has an advantage over plain `auto`, since the results a task\n * // depends on are still spread into arguments.\n * async.autoInject({\n *     //...\n *     write_file: ['get_data', 'make_folder', function(get_data, make_folder, callback) {\n *         callback(null, 'filename');\n *     }],\n *     email_link: ['write_file', function(write_file, callback) {\n *         callback(null, {'file':write_file, 'email':'user@example.com'});\n *     }]\n *     //...\n * }, function(err, results) {\n *     console.log('err = ', err);\n *     console.log('email_link = ', results.email_link);\n * });\n */\nfunction autoInject(tasks, callback) {\n    var newTasks = {};\n\n    baseForOwn(tasks, function (taskFn, key) {\n        var params;\n        var fnIsAsync = isAsync(taskFn);\n        var hasNoDeps =\n            (!fnIsAsync && taskFn.length === 1) ||\n            (fnIsAsync && taskFn.length === 0);\n\n        if (isArray(taskFn)) {\n            params = taskFn.slice(0, -1);\n            taskFn = taskFn[taskFn.length - 1];\n\n            newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn);\n        } else if (hasNoDeps) {\n            // no dependencies, use the function as-is\n            newTasks[key] = taskFn;\n        } else {\n            params = parseParams(taskFn);\n            if (taskFn.length === 0 && !fnIsAsync && params.length === 0) {\n                throw new Error(\"autoInject task functions require explicit parameters.\");\n            }\n\n            // remove callback param\n            if (!fnIsAsync) params.pop();\n\n            newTasks[key] = params.concat(newTask);\n        }\n\n        function newTask(results, taskCb) {\n            var newArgs = arrayMap(params, function (name) {\n                return results[name];\n            });\n            newArgs.push(taskCb);\n            wrapAsync(taskFn).apply(null, newArgs);\n        }\n    });\n\n    auto(newTasks, callback);\n}\n\n// Simple doubly linked list (https://en.wikipedia.org/wiki/Doubly_linked_list) implementation\n// used for queues. This implementation assumes that the node provided by the user can be modified\n// to adjust the next and last properties. We implement only the minimal functionality\n// for queue support.\nfunction DLL() {\n    this.head = this.tail = null;\n    this.length = 0;\n}\n\nfunction setInitial(dll, node) {\n    dll.length = 1;\n    dll.head = dll.tail = node;\n}\n\nDLL.prototype.removeLink = function(node) {\n    if (node.prev) node.prev.next = node.next;\n    else this.head = node.next;\n    if (node.next) node.next.prev = node.prev;\n    else this.tail = node.prev;\n\n    node.prev = node.next = null;\n    this.length -= 1;\n    return node;\n};\n\nDLL.prototype.empty = function () {\n    while(this.head) this.shift();\n    return this;\n};\n\nDLL.prototype.insertAfter = function(node, newNode) {\n    newNode.prev = node;\n    newNode.next = node.next;\n    if (node.next) node.next.prev = newNode;\n    else this.tail = newNode;\n    node.next = newNode;\n    this.length += 1;\n};\n\nDLL.prototype.insertBefore = function(node, newNode) {\n    newNode.prev = node.prev;\n    newNode.next = node;\n    if (node.prev) node.prev.next = newNode;\n    else this.head = newNode;\n    node.prev = newNode;\n    this.length += 1;\n};\n\nDLL.prototype.unshift = function(node) {\n    if (this.head) this.insertBefore(this.head, node);\n    else setInitial(this, node);\n};\n\nDLL.prototype.push = function(node) {\n    if (this.tail) this.insertAfter(this.tail, node);\n    else setInitial(this, node);\n};\n\nDLL.prototype.shift = function() {\n    return this.head && this.removeLink(this.head);\n};\n\nDLL.prototype.pop = function() {\n    return this.tail && this.removeLink(this.tail);\n};\n\nDLL.prototype.toArray = function () {\n    var arr = Array(this.length);\n    var curr = this.head;\n    for(var idx = 0; idx < this.length; idx++) {\n        arr[idx] = curr.data;\n        curr = curr.next;\n    }\n    return arr;\n};\n\nDLL.prototype.remove = function (testFn) {\n    var curr = this.head;\n    while(!!curr) {\n        var next = curr.next;\n        if (testFn(curr)) {\n            this.removeLink(curr);\n        }\n        curr = next;\n    }\n    return this;\n};\n\nfunction queue(worker, concurrency, payload) {\n    if (concurrency == null) {\n        concurrency = 1;\n    }\n    else if(concurrency === 0) {\n        throw new Error('Concurrency must not be zero');\n    }\n\n    var _worker = wrapAsync(worker);\n    var numRunning = 0;\n    var workersList = [];\n\n    var processingScheduled = false;\n    function _insert(data, insertAtFront, callback) {\n        if (callback != null && typeof callback !== 'function') {\n            throw new Error('task callback must be a function');\n        }\n        q.started = true;\n        if (!isArray(data)) {\n            data = [data];\n        }\n        if (data.length === 0 && q.idle()) {\n            // call drain immediately if there are no tasks\n            return setImmediate$1(function() {\n                q.drain();\n            });\n        }\n\n        for (var i = 0, l = data.length; i < l; i++) {\n            var item = {\n                data: data[i],\n                callback: callback || noop\n            };\n\n            if (insertAtFront) {\n                q._tasks.unshift(item);\n            } else {\n                q._tasks.push(item);\n            }\n        }\n\n        if (!processingScheduled) {\n            processingScheduled = true;\n            setImmediate$1(function() {\n                processingScheduled = false;\n                q.process();\n            });\n        }\n    }\n\n    function _next(tasks) {\n        return function(err){\n            numRunning -= 1;\n\n            for (var i = 0, l = tasks.length; i < l; i++) {\n                var task = tasks[i];\n\n                var index = baseIndexOf(workersList, task, 0);\n                if (index === 0) {\n                    workersList.shift();\n                } else if (index > 0) {\n                    workersList.splice(index, 1);\n                }\n\n                task.callback.apply(task, arguments);\n\n                if (err != null) {\n                    q.error(err, task.data);\n                }\n            }\n\n            if (numRunning <= (q.concurrency - q.buffer) ) {\n                q.unsaturated();\n            }\n\n            if (q.idle()) {\n                q.drain();\n            }\n            q.process();\n        };\n    }\n\n    var isProcessing = false;\n    var q = {\n        _tasks: new DLL(),\n        concurrency: concurrency,\n        payload: payload,\n        saturated: noop,\n        unsaturated:noop,\n        buffer: concurrency / 4,\n        empty: noop,\n        drain: noop,\n        error: noop,\n        started: false,\n        paused: false,\n        push: function (data, callback) {\n            _insert(data, false, callback);\n        },\n        kill: function () {\n            q.drain = noop;\n            q._tasks.empty();\n        },\n        unshift: function (data, callback) {\n            _insert(data, true, callback);\n        },\n        remove: function (testFn) {\n            q._tasks.remove(testFn);\n        },\n        process: function () {\n            // Avoid trying to start too many processing operations. This can occur\n            // when callbacks resolve synchronously (#1267).\n            if (isProcessing) {\n                return;\n            }\n            isProcessing = true;\n            while(!q.paused && numRunning < q.concurrency && q._tasks.length){\n                var tasks = [], data = [];\n                var l = q._tasks.length;\n                if (q.payload) l = Math.min(l, q.payload);\n                for (var i = 0; i < l; i++) {\n                    var node = q._tasks.shift();\n                    tasks.push(node);\n                    workersList.push(node);\n                    data.push(node.data);\n                }\n\n                numRunning += 1;\n\n                if (q._tasks.length === 0) {\n                    q.empty();\n                }\n\n                if (numRunning === q.concurrency) {\n                    q.saturated();\n                }\n\n                var cb = onlyOnce(_next(tasks));\n                _worker(data, cb);\n            }\n            isProcessing = false;\n        },\n        length: function () {\n            return q._tasks.length;\n        },\n        running: function () {\n            return numRunning;\n        },\n        workersList: function () {\n            return workersList;\n        },\n        idle: function() {\n            return q._tasks.length + numRunning === 0;\n        },\n        pause: function () {\n            q.paused = true;\n        },\n        resume: function () {\n            if (q.paused === false) { return; }\n            q.paused = false;\n            setImmediate$1(q.process);\n        }\n    };\n    return q;\n}\n\n/**\n * A cargo of tasks for the worker function to complete. Cargo inherits all of\n * the same methods and event callbacks as [`queue`]{@link module:ControlFlow.queue}.\n * @typedef {Object} CargoObject\n * @memberOf module:ControlFlow\n * @property {Function} length - A function returning the number of items\n * waiting to be processed. Invoke like `cargo.length()`.\n * @property {number} payload - An `integer` for determining how many tasks\n * should be process per round. This property can be changed after a `cargo` is\n * created to alter the payload on-the-fly.\n * @property {Function} push - Adds `task` to the `queue`. The callback is\n * called once the `worker` has finished processing the task. Instead of a\n * single task, an array of `tasks` can be submitted. The respective callback is\n * used for every task in the list. Invoke like `cargo.push(task, [callback])`.\n * @property {Function} saturated - A callback that is called when the\n * `queue.length()` hits the concurrency and further tasks will be queued.\n * @property {Function} empty - A callback that is called when the last item\n * from the `queue` is given to a `worker`.\n * @property {Function} drain - A callback that is called when the last item\n * from the `queue` has returned from the `worker`.\n * @property {Function} idle - a function returning false if there are items\n * waiting or being processed, or true if not. Invoke like `cargo.idle()`.\n * @property {Function} pause - a function that pauses the processing of tasks\n * until `resume()` is called. Invoke like `cargo.pause()`.\n * @property {Function} resume - a function that resumes the processing of\n * queued tasks when the queue is paused. Invoke like `cargo.resume()`.\n * @property {Function} kill - a function that removes the `drain` callback and\n * empties remaining tasks from the queue forcing it to go idle. Invoke like `cargo.kill()`.\n */\n\n/**\n * Creates a `cargo` object with the specified payload. Tasks added to the\n * cargo will be processed altogether (up to the `payload` limit). If the\n * `worker` is in progress, the task is queued until it becomes available. Once\n * the `worker` has completed some tasks, each callback of those tasks is\n * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966)\n * for how `cargo` and `queue` work.\n *\n * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers\n * at a time, cargo passes an array of tasks to a single worker, repeating\n * when the worker is finished.\n *\n * @name cargo\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {AsyncFunction} worker - An asynchronous function for processing an array\n * of queued tasks. Invoked with `(tasks, callback)`.\n * @param {number} [payload=Infinity] - An optional `integer` for determining\n * how many tasks should be processed per round; if omitted, the default is\n * unlimited.\n * @returns {module:ControlFlow.CargoObject} A cargo object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the cargo and inner queue.\n * @example\n *\n * // create a cargo object with payload 2\n * var cargo = async.cargo(function(tasks, callback) {\n *     for (var i=0; i<tasks.length; i++) {\n *         console.log('hello ' + tasks[i].name);\n *     }\n *     callback();\n * }, 2);\n *\n * // add some items\n * cargo.push({name: 'foo'}, function(err) {\n *     console.log('finished processing foo');\n * });\n * cargo.push({name: 'bar'}, function(err) {\n *     console.log('finished processing bar');\n * });\n * cargo.push({name: 'baz'}, function(err) {\n *     console.log('finished processing baz');\n * });\n */\nfunction cargo(worker, payload) {\n    return queue(worker, 1, payload);\n}\n\n/**\n * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time.\n *\n * @name eachOfSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.eachOf]{@link module:Collections.eachOf}\n * @alias forEachOfSeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * Invoked with (item, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Invoked with (err).\n */\nvar eachOfSeries = doLimit(eachOfLimit, 1);\n\n/**\n * Reduces `coll` into a single value using an async `iteratee` to return each\n * successive step. `memo` is the initial state of the reduction. This function\n * only operates in series.\n *\n * For performance reasons, it may make sense to split a call to this function\n * into a parallel map, and then use the normal `Array.prototype.reduce` on the\n * results. This function is for situations where each step in the reduction\n * needs to be async; if you can get the data before reducing it, then it's\n * probably a good idea to do so.\n *\n * @name reduce\n * @static\n * @memberOf module:Collections\n * @method\n * @alias inject\n * @alias foldl\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction.\n * The `iteratee` should complete with the next state of the reduction.\n * If the iteratee complete with an error, the reduction is stopped and the\n * main `callback` is immediately called with the error.\n * Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n * @example\n *\n * async.reduce([1,2,3], 0, function(memo, item, callback) {\n *     // pointless async:\n *     process.nextTick(function() {\n *         callback(null, memo + item)\n *     });\n * }, function(err, result) {\n *     // result is now equal to the last value of memo, which is 6\n * });\n */\nfunction reduce(coll, memo, iteratee, callback) {\n    callback = once(callback || noop);\n    var _iteratee = wrapAsync(iteratee);\n    eachOfSeries(coll, function(x, i, callback) {\n        _iteratee(memo, x, function(err, v) {\n            memo = v;\n            callback(err);\n        });\n    }, function(err) {\n        callback(err, memo);\n    });\n}\n\n/**\n * Version of the compose function that is more natural to read. Each function\n * consumes the return value of the previous function. It is the equivalent of\n * [compose]{@link module:ControlFlow.compose} with the arguments reversed.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name seq\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.compose]{@link module:ControlFlow.compose}\n * @category Control Flow\n * @param {...AsyncFunction} functions - the asynchronous functions to compose\n * @returns {Function} a function that composes the `functions` in order\n * @example\n *\n * // Requires lodash (or underscore), express3 and dresende's orm2.\n * // Part of an app, that fetches cats of the logged user.\n * // This example uses `seq` function to avoid overnesting and error\n * // handling clutter.\n * app.get('/cats', function(request, response) {\n *     var User = request.models.User;\n *     async.seq(\n *         _.bind(User.get, User),  // 'User.get' has signature (id, callback(err, data))\n *         function(user, fn) {\n *             user.getCats(fn);      // 'getCats' has signature (callback(err, data))\n *         }\n *     )(req.session.user_id, function (err, cats) {\n *         if (err) {\n *             console.error(err);\n *             response.json({ status: 'error', message: err.message });\n *         } else {\n *             response.json({ status: 'ok', message: 'Cats found', data: cats });\n *         }\n *     });\n * });\n */\nfunction seq(/*...functions*/) {\n    var _functions = arrayMap(arguments, wrapAsync);\n    return function(/*...args*/) {\n        var args = slice(arguments);\n        var that = this;\n\n        var cb = args[args.length - 1];\n        if (typeof cb == 'function') {\n            args.pop();\n        } else {\n            cb = noop;\n        }\n\n        reduce(_functions, args, function(newargs, fn, cb) {\n            fn.apply(that, newargs.concat(function(err/*, ...nextargs*/) {\n                var nextargs = slice(arguments, 1);\n                cb(err, nextargs);\n            }));\n        },\n        function(err, results) {\n            cb.apply(that, [err].concat(results));\n        });\n    };\n}\n\n/**\n * Creates a function which is a composition of the passed asynchronous\n * functions. Each function consumes the return value of the function that\n * follows. Composing functions `f()`, `g()`, and `h()` would produce the result\n * of `f(g(h()))`, only this version uses callbacks to obtain the return values.\n *\n * Each function is executed with the `this` binding of the composed function.\n *\n * @name compose\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {...AsyncFunction} functions - the asynchronous functions to compose\n * @returns {Function} an asynchronous function that is the composed\n * asynchronous `functions`\n * @example\n *\n * function add1(n, callback) {\n *     setTimeout(function () {\n *         callback(null, n + 1);\n *     }, 10);\n * }\n *\n * function mul3(n, callback) {\n *     setTimeout(function () {\n *         callback(null, n * 3);\n *     }, 10);\n * }\n *\n * var add1mul3 = async.compose(mul3, add1);\n * add1mul3(4, function (err, result) {\n *     // result now equals 15\n * });\n */\nvar compose = function(/*...args*/) {\n    return seq.apply(null, slice(arguments).reverse());\n};\n\nvar _concat = Array.prototype.concat;\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time.\n *\n * @name concatLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n */\nvar concatLimit = function(coll, limit, iteratee, callback) {\n    callback = callback || noop;\n    var _iteratee = wrapAsync(iteratee);\n    mapLimit(coll, limit, function(val, callback) {\n        _iteratee(val, function(err /*, ...args*/) {\n            if (err) return callback(err);\n            return callback(null, slice(arguments, 1));\n        });\n    }, function(err, mapResults) {\n        var result = [];\n        for (var i = 0; i < mapResults.length; i++) {\n            if (mapResults[i]) {\n                result = _concat.apply(result, mapResults[i]);\n            }\n        }\n\n        return callback(err, result);\n    });\n};\n\n/**\n * Applies `iteratee` to each item in `coll`, concatenating the results. Returns\n * the concatenated list. The `iteratee`s are called in parallel, and the\n * results are concatenated as they return. There is no guarantee that the\n * results array will be returned in the original order of `coll` passed to the\n * `iteratee` function.\n *\n * @name concat\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`,\n * which should use an array as its result. Invoked with (item, callback).\n * @param {Function} [callback(err)] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n * @example\n *\n * async.concat(['dir1','dir2','dir3'], fs.readdir, function(err, files) {\n *     // files is now a list of filenames that exist in the 3 directories\n * });\n */\nvar concat = doLimit(concatLimit, Infinity);\n\n/**\n * The same as [`concat`]{@link module:Collections.concat} but runs only a single async operation at a time.\n *\n * @name concatSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.concat]{@link module:Collections.concat}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`.\n * The iteratee should complete with an array an array of results.\n * Invoked with (item, callback).\n * @param {Function} [callback(err)] - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is an array\n * containing the concatenated results of the `iteratee` function. Invoked with\n * (err, results).\n */\nvar concatSeries = doLimit(concatLimit, 1);\n\n/**\n * Returns a function that when called, calls-back with the values provided.\n * Useful as the first function in a [`waterfall`]{@link module:ControlFlow.waterfall}, or for plugging values in to\n * [`auto`]{@link module:ControlFlow.auto}.\n *\n * @name constant\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {...*} arguments... - Any number of arguments to automatically invoke\n * callback with.\n * @returns {AsyncFunction} Returns a function that when invoked, automatically\n * invokes the callback with the previous given arguments.\n * @example\n *\n * async.waterfall([\n *     async.constant(42),\n *     function (value, next) {\n *         // value === 42\n *     },\n *     //...\n * ], callback);\n *\n * async.waterfall([\n *     async.constant(filename, \"utf8\"),\n *     fs.readFile,\n *     function (fileData, next) {\n *         //...\n *     }\n *     //...\n * ], callback);\n *\n * async.auto({\n *     hostname: async.constant(\"https://server.net/\"),\n *     port: findFreePort,\n *     launchServer: [\"hostname\", \"port\", function (options, cb) {\n *         startServer(options, cb);\n *     }],\n *     //...\n * }, callback);\n */\nvar constant = function(/*...values*/) {\n    var values = slice(arguments);\n    var args = [null].concat(values);\n    return function (/*...ignoredArgs, callback*/) {\n        var callback = arguments[arguments.length - 1];\n        return callback.apply(this, args);\n    };\n};\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nfunction _createTester(check, getResult) {\n    return function(eachfn, arr, iteratee, cb) {\n        cb = cb || noop;\n        var testPassed = false;\n        var testResult;\n        eachfn(arr, function(value, _, callback) {\n            iteratee(value, function(err, result) {\n                if (err) {\n                    callback(err);\n                } else if (check(result) && !testResult) {\n                    testPassed = true;\n                    testResult = getResult(true, value);\n                    callback(null, breakLoop);\n                } else {\n                    callback();\n                }\n            });\n        }, function(err) {\n            if (err) {\n                cb(err);\n            } else {\n                cb(null, testPassed ? testResult : getResult(false));\n            }\n        });\n    };\n}\n\nfunction _findGetResult(v, x) {\n    return x;\n}\n\n/**\n * Returns the first value in `coll` that passes an async truth test. The\n * `iteratee` is applied in parallel, meaning the first iteratee to return\n * `true` will fire the detect `callback` with that result. That means the\n * result might not be the first item in the original `coll` (in terms of order)\n * that passes the test.\n\n * If order within the original `coll` is important, then look at\n * [`detectSeries`]{@link module:Collections.detectSeries}.\n *\n * @name detect\n * @static\n * @memberOf module:Collections\n * @method\n * @alias find\n * @category Collections\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n * @example\n *\n * async.detect(['file1','file2','file3'], function(filePath, callback) {\n *     fs.access(filePath, function(err) {\n *         callback(null, !err)\n *     });\n * }, function(err, result) {\n *     // result now equals the first file in the list that exists\n * });\n */\nvar detect = doParallel(_createTester(identity, _findGetResult));\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name detectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findLimit\n * @category Collections\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n */\nvar detectLimit = doParallelLimit(_createTester(identity, _findGetResult));\n\n/**\n * The same as [`detect`]{@link module:Collections.detect} but runs only a single async operation at a time.\n *\n * @name detectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.detect]{@link module:Collections.detect}\n * @alias findSeries\n * @category Collections\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`.\n * The iteratee must complete with a boolean value as its result.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the `iteratee` functions have finished.\n * Result will be the first item in the array that passes the truth test\n * (iteratee) or the value `undefined` if none passed. Invoked with\n * (err, result).\n */\nvar detectSeries = doLimit(detectLimit, 1);\n\nfunction consoleFunc(name) {\n    return function (fn/*, ...args*/) {\n        var args = slice(arguments, 1);\n        args.push(function (err/*, ...args*/) {\n            var args = slice(arguments, 1);\n            if (typeof console === 'object') {\n                if (err) {\n                    if (console.error) {\n                        console.error(err);\n                    }\n                } else if (console[name]) {\n                    arrayEach(args, function (x) {\n                        console[name](x);\n                    });\n                }\n            }\n        });\n        wrapAsync(fn).apply(null, args);\n    };\n}\n\n/**\n * Logs the result of an [`async` function]{@link AsyncFunction} to the\n * `console` using `console.dir` to display the properties of the resulting object.\n * Only works in Node.js or in browsers that support `console.dir` and\n * `console.error` (such as FF and Chrome).\n * If multiple arguments are returned from the async function,\n * `console.dir` is called on each argument in order.\n *\n * @name dir\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} function - The function you want to eventually apply\n * all arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n *     setTimeout(function() {\n *         callback(null, {hello: name});\n *     }, 1000);\n * };\n *\n * // in the node repl\n * node> async.dir(hello, 'world');\n * {hello: 'world'}\n */\nvar dir = consoleFunc('dir');\n\n/**\n * The post-check version of [`during`]{@link module:ControlFlow.during}. To reflect the difference in\n * the order of operations, the arguments `test` and `fn` are switched.\n *\n * Also a version of [`doWhilst`]{@link module:ControlFlow.doWhilst} with asynchronous `test` function.\n * @name doDuring\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.during]{@link module:ControlFlow.during}\n * @category Control Flow\n * @param {AsyncFunction} fn - An async function which is called each time\n * `test` passes. Invoked with (callback).\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `fn`. Invoked with (...args, callback), where `...args` are the\n * non-error args from the previous callback of `fn`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `fn` has stopped. `callback`\n * will be passed an error if one occurred, otherwise `null`.\n */\nfunction doDuring(fn, test, callback) {\n    callback = onlyOnce(callback || noop);\n    var _fn = wrapAsync(fn);\n    var _test = wrapAsync(test);\n\n    function next(err/*, ...args*/) {\n        if (err) return callback(err);\n        var args = slice(arguments, 1);\n        args.push(check);\n        _test.apply(this, args);\n    }\n\n    function check(err, truth) {\n        if (err) return callback(err);\n        if (!truth) return callback(null);\n        _fn(next);\n    }\n\n    check(null, true);\n\n}\n\n/**\n * The post-check version of [`whilst`]{@link module:ControlFlow.whilst}. To reflect the difference in\n * the order of operations, the arguments `test` and `iteratee` are switched.\n *\n * `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript.\n *\n * @name doWhilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - A function which is called each time `test`\n * passes. Invoked with (callback).\n * @param {Function} test - synchronous truth test to perform after each\n * execution of `iteratee`. Invoked with any non-error callback results of\n * `iteratee`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped.\n * `callback` will be passed an error and any arguments passed to the final\n * `iteratee`'s callback. Invoked with (err, [results]);\n */\nfunction doWhilst(iteratee, test, callback) {\n    callback = onlyOnce(callback || noop);\n    var _iteratee = wrapAsync(iteratee);\n    var next = function(err/*, ...args*/) {\n        if (err) return callback(err);\n        var args = slice(arguments, 1);\n        if (test.apply(this, args)) return _iteratee(next);\n        callback.apply(null, [null].concat(args));\n    };\n    _iteratee(next);\n}\n\n/**\n * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the\n * argument ordering differs from `until`.\n *\n * @name doUntil\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.doWhilst]{@link module:ControlFlow.doWhilst}\n * @category Control Flow\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` fails. Invoked with (callback).\n * @param {Function} test - synchronous truth test to perform after each\n * execution of `iteratee`. Invoked with any non-error callback results of\n * `iteratee`.\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n */\nfunction doUntil(iteratee, test, callback) {\n    doWhilst(iteratee, function() {\n        return !test.apply(this, arguments);\n    }, callback);\n}\n\n/**\n * Like [`whilst`]{@link module:ControlFlow.whilst}, except the `test` is an asynchronous function that\n * is passed a callback in the form of `function (err, truth)`. If error is\n * passed to `test` or `fn`, the main callback is immediately called with the\n * value of the error.\n *\n * @name during\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {AsyncFunction} test - asynchronous truth test to perform before each\n * execution of `fn`. Invoked with (callback).\n * @param {AsyncFunction} fn - An async function which is called each time\n * `test` passes. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `fn` has stopped. `callback`\n * will be passed an error, if one occurred, otherwise `null`.\n * @example\n *\n * var count = 0;\n *\n * async.during(\n *     function (callback) {\n *         return callback(null, count < 5);\n *     },\n *     function (callback) {\n *         count++;\n *         setTimeout(callback, 1000);\n *     },\n *     function (err) {\n *         // 5 seconds have passed\n *     }\n * );\n */\nfunction during(test, fn, callback) {\n    callback = onlyOnce(callback || noop);\n    var _fn = wrapAsync(fn);\n    var _test = wrapAsync(test);\n\n    function next(err) {\n        if (err) return callback(err);\n        _test(check);\n    }\n\n    function check(err, truth) {\n        if (err) return callback(err);\n        if (!truth) return callback(null);\n        _fn(next);\n    }\n\n    _test(check);\n}\n\nfunction _withoutIndex(iteratee) {\n    return function (value, index, callback) {\n        return iteratee(value, callback);\n    };\n}\n\n/**\n * Applies the function `iteratee` to each item in `coll`, in parallel.\n * The `iteratee` is called with an item from the list, and a callback for when\n * it has finished. If the `iteratee` passes an error to its `callback`, the\n * main `callback` (for the `each` function) is immediately called with the\n * error.\n *\n * Note, that since this function applies `iteratee` to each item in parallel,\n * there is no guarantee that the iteratee functions will complete in order.\n *\n * @name each\n * @static\n * @memberOf module:Collections\n * @method\n * @alias forEach\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to\n * each item in `coll`. Invoked with (item, callback).\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOf`.\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n * @example\n *\n * // assuming openFiles is an array of file names and saveFile is a function\n * // to save the modified contents of that file:\n *\n * async.each(openFiles, saveFile, function(err){\n *   // if any of the saves produced an error, err would equal that error\n * });\n *\n * // assuming openFiles is an array of file names\n * async.each(openFiles, function(file, callback) {\n *\n *     // Perform operation on file here.\n *     console.log('Processing file ' + file);\n *\n *     if( file.length > 32 ) {\n *       console.log('This file name is too long');\n *       callback('File name too long');\n *     } else {\n *       // Do work to process file here\n *       console.log('File processed');\n *       callback();\n *     }\n * }, function(err) {\n *     // if any of the file processing produced an error, err would equal that error\n *     if( err ) {\n *       // One of the iterations produced an error.\n *       // All processing will now stop.\n *       console.log('A file failed to process');\n *     } else {\n *       console.log('All files have been processed successfully');\n *     }\n * });\n */\nfunction eachLimit(coll, iteratee, callback) {\n    eachOf(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time.\n *\n * @name eachLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachLimit\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfLimit`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n */\nfunction eachLimit$1(coll, limit, iteratee, callback) {\n    _eachOfLimit(limit)(coll, _withoutIndex(wrapAsync(iteratee)), callback);\n}\n\n/**\n * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time.\n *\n * @name eachSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.each]{@link module:Collections.each}\n * @alias forEachSeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each\n * item in `coll`.\n * The array index is not passed to the iteratee.\n * If you need the index, use `eachOfSeries`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called when all\n * `iteratee` functions have finished, or an error occurs. Invoked with (err).\n */\nvar eachSeries = doLimit(eachLimit$1, 1);\n\n/**\n * Wrap an async function and ensure it calls its callback on a later tick of\n * the event loop.  If the function already calls its callback on a next tick,\n * no extra deferral is added. This is useful for preventing stack overflows\n * (`RangeError: Maximum call stack size exceeded`) and generally keeping\n * [Zalgo](http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony)\n * contained. ES2017 `async` functions are returned as-is -- they are immune\n * to Zalgo's corrupting influences, as they always resolve on a later tick.\n *\n * @name ensureAsync\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - an async function, one that expects a node-style\n * callback as its last argument.\n * @returns {AsyncFunction} Returns a wrapped function with the exact same call\n * signature as the function passed in.\n * @example\n *\n * function sometimesAsync(arg, callback) {\n *     if (cache[arg]) {\n *         return callback(null, cache[arg]); // this would be synchronous!!\n *     } else {\n *         doSomeIO(arg, callback); // this IO would be asynchronous\n *     }\n * }\n *\n * // this has a risk of stack overflows if many results are cached in a row\n * async.mapSeries(args, sometimesAsync, done);\n *\n * // this will defer sometimesAsync's callback if necessary,\n * // preventing stack overflows\n * async.mapSeries(args, async.ensureAsync(sometimesAsync), done);\n */\nfunction ensureAsync(fn) {\n    if (isAsync(fn)) return fn;\n    return initialParams(function (args, callback) {\n        var sync = true;\n        args.push(function () {\n            var innerArgs = arguments;\n            if (sync) {\n                setImmediate$1(function () {\n                    callback.apply(null, innerArgs);\n                });\n            } else {\n                callback.apply(null, innerArgs);\n            }\n        });\n        fn.apply(this, args);\n        sync = false;\n    });\n}\n\nfunction notId(v) {\n    return !v;\n}\n\n/**\n * Returns `true` if every element in `coll` satisfies an async test. If any\n * iteratee call returns `false`, the main `callback` is immediately called.\n *\n * @name every\n * @static\n * @memberOf module:Collections\n * @method\n * @alias all\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n * @example\n *\n * async.every(['file1','file2','file3'], function(filePath, callback) {\n *     fs.access(filePath, function(err) {\n *         callback(null, !err)\n *     });\n * }, function(err, result) {\n *     // if result is true then every file exists\n * });\n */\nvar every = doParallel(_createTester(notId, notId));\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs a maximum of `limit` async operations at a time.\n *\n * @name everyLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allLimit\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in parallel.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n */\nvar everyLimit = doParallelLimit(_createTester(notId, notId));\n\n/**\n * The same as [`every`]{@link module:Collections.every} but runs only a single async operation at a time.\n *\n * @name everySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.every]{@link module:Collections.every}\n * @alias allSeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collection in series.\n * The iteratee must complete with a boolean result value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result will be either `true` or `false`\n * depending on the values of the async tests. Invoked with (err, result).\n */\nvar everySeries = doLimit(everyLimit, 1);\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nfunction filterArray(eachfn, arr, iteratee, callback) {\n    var truthValues = new Array(arr.length);\n    eachfn(arr, function (x, index, callback) {\n        iteratee(x, function (err, v) {\n            truthValues[index] = !!v;\n            callback(err);\n        });\n    }, function (err) {\n        if (err) return callback(err);\n        var results = [];\n        for (var i = 0; i < arr.length; i++) {\n            if (truthValues[i]) results.push(arr[i]);\n        }\n        callback(null, results);\n    });\n}\n\nfunction filterGeneric(eachfn, coll, iteratee, callback) {\n    var results = [];\n    eachfn(coll, function (x, index, callback) {\n        iteratee(x, function (err, v) {\n            if (err) {\n                callback(err);\n            } else {\n                if (v) {\n                    results.push({index: index, value: x});\n                }\n                callback();\n            }\n        });\n    }, function (err) {\n        if (err) {\n            callback(err);\n        } else {\n            callback(null, arrayMap(results.sort(function (a, b) {\n                return a.index - b.index;\n            }), baseProperty('value')));\n        }\n    });\n}\n\nfunction _filter(eachfn, coll, iteratee, callback) {\n    var filter = isArrayLike(coll) ? filterArray : filterGeneric;\n    filter(eachfn, coll, wrapAsync(iteratee), callback || noop);\n}\n\n/**\n * Returns a new array of all the values in `coll` which pass an async truth\n * test. This operation is performed in parallel, but the results array will be\n * in the same order as the original.\n *\n * @name filter\n * @static\n * @memberOf module:Collections\n * @method\n * @alias select\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @example\n *\n * async.filter(['file1','file2','file3'], function(filePath, callback) {\n *     fs.access(filePath, function(err) {\n *         callback(null, !err)\n *     });\n * }, function(err, results) {\n *     // results now equals an array of the existing files\n * });\n */\nvar filter = doParallel(_filter);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name filterLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectLimit\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n */\nvar filterLimit = doParallelLimit(_filter);\n\n/**\n * The same as [`filter`]{@link module:Collections.filter} but runs only a single async operation at a time.\n *\n * @name filterSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @alias selectSeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - A truth test to apply to each item in `coll`.\n * The `iteratee` is passed a `callback(err, truthValue)`, which must be called\n * with a boolean argument once it has completed. Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results)\n */\nvar filterSeries = doLimit(filterLimit, 1);\n\n/**\n * Calls the asynchronous function `fn` with a callback parameter that allows it\n * to call itself again, in series, indefinitely.\n\n * If an error is passed to the callback then `errback` is called with the\n * error, and execution stops, otherwise it will never be called.\n *\n * @name forever\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} fn - an async function to call repeatedly.\n * Invoked with (next).\n * @param {Function} [errback] - when `fn` passes an error to it's callback,\n * this function will be called, and execution stops. Invoked with (err).\n * @example\n *\n * async.forever(\n *     function(next) {\n *         // next is suitable for passing to things that need a callback(err [, whatever]);\n *         // it will result in this function being called again.\n *     },\n *     function(err) {\n *         // if next is called with a value in its first parameter, it will appear\n *         // in here as 'err', and execution will stop.\n *     }\n * );\n */\nfunction forever(fn, errback) {\n    var done = onlyOnce(errback || noop);\n    var task = wrapAsync(ensureAsync(fn));\n\n    function next(err) {\n        if (err) return done(err);\n        task(next);\n    }\n    next();\n}\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs a maximum of `limit` async operations at a time.\n *\n * @name groupByLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n */\nvar groupByLimit = function(coll, limit, iteratee, callback) {\n    callback = callback || noop;\n    var _iteratee = wrapAsync(iteratee);\n    mapLimit(coll, limit, function(val, callback) {\n        _iteratee(val, function(err, key) {\n            if (err) return callback(err);\n            return callback(null, {key: key, val: val});\n        });\n    }, function(err, mapResults) {\n        var result = {};\n        // from MDN, handle object having an `hasOwnProperty` prop\n        var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n        for (var i = 0; i < mapResults.length; i++) {\n            if (mapResults[i]) {\n                var key = mapResults[i].key;\n                var val = mapResults[i].val;\n\n                if (hasOwnProperty.call(result, key)) {\n                    result[key].push(val);\n                } else {\n                    result[key] = [val];\n                }\n            }\n        }\n\n        return callback(err, result);\n    });\n};\n\n/**\n * Returns a new object, where each value corresponds to an array of items, from\n * `coll`, that returned the corresponding key. That is, the keys of the object\n * correspond to the values passed to the `iteratee` callback.\n *\n * Note: Since this function applies the `iteratee` to each item in parallel,\n * there is no guarantee that the `iteratee` functions will complete in order.\n * However, the values for each key in the `result` will be in the same order as\n * the original `coll`. For Objects, the values will roughly be in the order of\n * the original Objects' keys (but this can vary across JavaScript engines).\n *\n * @name groupBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n * @example\n *\n * async.groupBy(['userId1', 'userId2', 'userId3'], function(userId, callback) {\n *     db.findById(userId, function(err, user) {\n *         if (err) return callback(err);\n *         return callback(null, user.age);\n *     });\n * }, function(err, result) {\n *     // result is object containing the userIds grouped by age\n *     // e.g. { 30: ['userId1', 'userId3'], 42: ['userId2']};\n * });\n */\nvar groupBy = doLimit(groupByLimit, Infinity);\n\n/**\n * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time.\n *\n * @name groupBySeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.groupBy]{@link module:Collections.groupBy}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a `key` to group the value under.\n * Invoked with (value, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. Result is an `Object` whoses\n * properties are arrays of values which returned the corresponding key.\n */\nvar groupBySeries = doLimit(groupByLimit, 1);\n\n/**\n * Logs the result of an `async` function to the `console`. Only works in\n * Node.js or in browsers that support `console.log` and `console.error` (such\n * as FF and Chrome). If multiple arguments are returned from the async\n * function, `console.log` is called on each argument in order.\n *\n * @name log\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} function - The function you want to eventually apply\n * all arguments to.\n * @param {...*} arguments... - Any number of arguments to apply to the function.\n * @example\n *\n * // in a module\n * var hello = function(name, callback) {\n *     setTimeout(function() {\n *         callback(null, 'hello ' + name);\n *     }, 1000);\n * };\n *\n * // in the node repl\n * node> async.log(hello, 'world');\n * 'hello world'\n */\nvar log = consoleFunc('log');\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name mapValuesLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n */\nfunction mapValuesLimit(obj, limit, iteratee, callback) {\n    callback = once(callback || noop);\n    var newObj = {};\n    var _iteratee = wrapAsync(iteratee);\n    eachOfLimit(obj, limit, function(val, key, next) {\n        _iteratee(val, key, function (err, result) {\n            if (err) return next(err);\n            newObj[key] = result;\n            next();\n        });\n    }, function (err) {\n        callback(err, newObj);\n    });\n}\n\n/**\n * A relative of [`map`]{@link module:Collections.map}, designed for use with objects.\n *\n * Produces a new Object by mapping each value of `obj` through the `iteratee`\n * function. The `iteratee` is called each `value` and `key` from `obj` and a\n * callback for when it has finished processing. Each of these callbacks takes\n * two arguments: an `error`, and the transformed item from `obj`. If `iteratee`\n * passes an error to its callback, the main `callback` (for the `mapValues`\n * function) is immediately called with the error.\n *\n * Note, the order of the keys in the result is not guaranteed.  The keys will\n * be roughly in the order they complete, (but this is very engine-specific)\n *\n * @name mapValues\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n * @example\n *\n * async.mapValues({\n *     f1: 'file1',\n *     f2: 'file2',\n *     f3: 'file3'\n * }, function (file, key, callback) {\n *   fs.stat(file, callback);\n * }, function(err, result) {\n *     // result is now a map of stats for each file, e.g.\n *     // {\n *     //     f1: [stats for file1],\n *     //     f2: [stats for file2],\n *     //     f3: [stats for file3]\n *     // }\n * });\n */\n\nvar mapValues = doLimit(mapValuesLimit, Infinity);\n\n/**\n * The same as [`mapValues`]{@link module:Collections.mapValues} but runs only a single async operation at a time.\n *\n * @name mapValuesSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.mapValues]{@link module:Collections.mapValues}\n * @category Collection\n * @param {Object} obj - A collection to iterate over.\n * @param {AsyncFunction} iteratee - A function to apply to each value and key\n * in `coll`.\n * The iteratee should complete with the transformed value as its result.\n * Invoked with (value, key, callback).\n * @param {Function} [callback] - A callback which is called when all `iteratee`\n * functions have finished, or an error occurs. `result` is a new object consisting\n * of each key from `obj`, with each transformed value on the right-hand side.\n * Invoked with (err, result).\n */\nvar mapValuesSeries = doLimit(mapValuesLimit, 1);\n\nfunction has(obj, key) {\n    return key in obj;\n}\n\n/**\n * Caches the results of an async function. When creating a hash to store\n * function results against, the callback is omitted from the hash and an\n * optional hash function can be used.\n *\n * If no hash function is specified, the first argument is used as a hash key,\n * which may work reasonably if it is a string or a data type that converts to a\n * distinct string. Note that objects and arrays will not behave reasonably.\n * Neither will cases where the other arguments are significant. In such cases,\n * specify your own hash function.\n *\n * The cache of results is exposed as the `memo` property of the function\n * returned by `memoize`.\n *\n * @name memoize\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - The async function to proxy and cache results from.\n * @param {Function} hasher - An optional function for generating a custom hash\n * for storing results. It has all the arguments applied to it apart from the\n * callback, and must be synchronous.\n * @returns {AsyncFunction} a memoized version of `fn`\n * @example\n *\n * var slow_fn = function(name, callback) {\n *     // do something\n *     callback(null, result);\n * };\n * var fn = async.memoize(slow_fn);\n *\n * // fn can now be used as if it were slow_fn\n * fn('some name', function() {\n *     // callback\n * });\n */\nfunction memoize(fn, hasher) {\n    var memo = Object.create(null);\n    var queues = Object.create(null);\n    hasher = hasher || identity;\n    var _fn = wrapAsync(fn);\n    var memoized = initialParams(function memoized(args, callback) {\n        var key = hasher.apply(null, args);\n        if (has(memo, key)) {\n            setImmediate$1(function() {\n                callback.apply(null, memo[key]);\n            });\n        } else if (has(queues, key)) {\n            queues[key].push(callback);\n        } else {\n            queues[key] = [callback];\n            _fn.apply(null, args.concat(function(/*args*/) {\n                var args = slice(arguments);\n                memo[key] = args;\n                var q = queues[key];\n                delete queues[key];\n                for (var i = 0, l = q.length; i < l; i++) {\n                    q[i].apply(null, args);\n                }\n            }));\n        }\n    });\n    memoized.memo = memo;\n    memoized.unmemoized = fn;\n    return memoized;\n}\n\n/**\n * Calls `callback` on a later loop around the event loop. In Node.js this just\n * calls `process.nextTick`.  In the browser it will use `setImmediate` if\n * available, otherwise `setTimeout(callback, 0)`, which means other higher\n * priority events may precede the execution of `callback`.\n *\n * This is used internally for browser-compatibility purposes.\n *\n * @name nextTick\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.setImmediate]{@link module:Utils.setImmediate}\n * @category Util\n * @param {Function} callback - The function to call on a later loop around\n * the event loop. Invoked with (args...).\n * @param {...*} args... - any number of additional arguments to pass to the\n * callback on the next tick.\n * @example\n *\n * var call_order = [];\n * async.nextTick(function() {\n *     call_order.push('two');\n *     // call_order now equals ['one','two']\n * });\n * call_order.push('one');\n *\n * async.setImmediate(function (a, b, c) {\n *     // a, b, and c equal 1, 2, and 3\n * }, 1, 2, 3);\n */\nvar _defer$1;\n\nif (hasNextTick) {\n    _defer$1 = process.nextTick;\n} else if (hasSetImmediate) {\n    _defer$1 = setImmediate;\n} else {\n    _defer$1 = fallback;\n}\n\nvar nextTick = wrap(_defer$1);\n\nfunction _parallel(eachfn, tasks, callback) {\n    callback = callback || noop;\n    var results = isArrayLike(tasks) ? [] : {};\n\n    eachfn(tasks, function (task, key, callback) {\n        wrapAsync(task)(function (err, result) {\n            if (arguments.length > 2) {\n                result = slice(arguments, 1);\n            }\n            results[key] = result;\n            callback(err);\n        });\n    }, function (err) {\n        callback(err, results);\n    });\n}\n\n/**\n * Run the `tasks` collection of functions in parallel, without waiting until\n * the previous function has completed. If any of the functions pass an error to\n * its callback, the main `callback` is immediately called with the value of the\n * error. Once the `tasks` have completed, the results are passed to the final\n * `callback` as an array.\n *\n * **Note:** `parallel` is about kicking-off I/O tasks in parallel, not about\n * parallel execution of code.  If your tasks do not use any timers or perform\n * any I/O, they will actually be executed in series.  Any synchronous setup\n * sections for each task will happen one after the other.  JavaScript remains\n * single-threaded.\n *\n * **Hint:** Use [`reflect`]{@link module:Utils.reflect} to continue the\n * execution of other tasks when a task fails.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n * results from {@link async.parallel}.\n *\n * @name parallel\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n *\n * @example\n * async.parallel([\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ],\n * // optional callback\n * function(err, results) {\n *     // the results array will equal ['one','two'] even though\n *     // the second function had a shorter timeout.\n * });\n *\n * // an example using an object instead of an array\n * async.parallel({\n *     one: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 1);\n *         }, 200);\n *     },\n *     two: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 2);\n *         }, 100);\n *     }\n * }, function(err, results) {\n *     // results is now equals to: {one: 1, two: 2}\n * });\n */\nfunction parallelLimit(tasks, callback) {\n    _parallel(eachOf, tasks, callback);\n}\n\n/**\n * The same as [`parallel`]{@link module:ControlFlow.parallel} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name parallelLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.parallel]{@link module:ControlFlow.parallel}\n * @category Control Flow\n * @param {Array|Iterable|Object} tasks - A collection of\n * [async functions]{@link AsyncFunction} to run.\n * Each async function can complete with any number of optional `result` values.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed successfully. This function gets a results array\n * (or object) containing all the result arguments passed to the task callbacks.\n * Invoked with (err, results).\n */\nfunction parallelLimit$1(tasks, limit, callback) {\n    _parallel(_eachOfLimit(limit), tasks, callback);\n}\n\n/**\n * A queue of tasks for the worker function to complete.\n * @typedef {Object} QueueObject\n * @memberOf module:ControlFlow\n * @property {Function} length - a function returning the number of items\n * waiting to be processed. Invoke with `queue.length()`.\n * @property {boolean} started - a boolean indicating whether or not any\n * items have been pushed and processed by the queue.\n * @property {Function} running - a function returning the number of items\n * currently being processed. Invoke with `queue.running()`.\n * @property {Function} workersList - a function returning the array of items\n * currently being processed. Invoke with `queue.workersList()`.\n * @property {Function} idle - a function returning false if there are items\n * waiting or being processed, or true if not. Invoke with `queue.idle()`.\n * @property {number} concurrency - an integer for determining how many `worker`\n * functions should be run in parallel. This property can be changed after a\n * `queue` is created to alter the concurrency on-the-fly.\n * @property {Function} push - add a new task to the `queue`. Calls `callback`\n * once the `worker` has finished processing the task. Instead of a single task,\n * a `tasks` array can be submitted. The respective callback is used for every\n * task in the list. Invoke with `queue.push(task, [callback])`,\n * @property {Function} unshift - add a new task to the front of the `queue`.\n * Invoke with `queue.unshift(task, [callback])`.\n * @property {Function} remove - remove items from the queue that match a test\n * function.  The test function will be passed an object with a `data` property,\n * and a `priority` property, if this is a\n * [priorityQueue]{@link module:ControlFlow.priorityQueue} object.\n * Invoked with `queue.remove(testFn)`, where `testFn` is of the form\n * `function ({data, priority}) {}` and returns a Boolean.\n * @property {Function} saturated - a callback that is called when the number of\n * running workers hits the `concurrency` limit, and further tasks will be\n * queued.\n * @property {Function} unsaturated - a callback that is called when the number\n * of running workers is less than the `concurrency` & `buffer` limits, and\n * further tasks will not be queued.\n * @property {number} buffer - A minimum threshold buffer in order to say that\n * the `queue` is `unsaturated`.\n * @property {Function} empty - a callback that is called when the last item\n * from the `queue` is given to a `worker`.\n * @property {Function} drain - a callback that is called when the last item\n * from the `queue` has returned from the `worker`.\n * @property {Function} error - a callback that is called when a task errors.\n * Has the signature `function(error, task)`.\n * @property {boolean} paused - a boolean for determining whether the queue is\n * in a paused state.\n * @property {Function} pause - a function that pauses the processing of tasks\n * until `resume()` is called. Invoke with `queue.pause()`.\n * @property {Function} resume - a function that resumes the processing of\n * queued tasks when the queue is paused. Invoke with `queue.resume()`.\n * @property {Function} kill - a function that removes the `drain` callback and\n * empties remaining tasks from the queue forcing it to go idle. No more tasks\n * should be pushed to the queue after calling this function. Invoke with `queue.kill()`.\n */\n\n/**\n * Creates a `queue` object with the specified `concurrency`. Tasks added to the\n * `queue` are processed in parallel (up to the `concurrency` limit). If all\n * `worker`s are in progress, the task is queued until one becomes available.\n * Once a `worker` completes a `task`, that `task`'s callback is called.\n *\n * @name queue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`. Invoked with (task, callback).\n * @param {number} [concurrency=1] - An `integer` for determining how many\n * `worker` functions should be run in parallel.  If omitted, the concurrency\n * defaults to `1`.  If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can\n * attached as certain properties to listen for specific events during the\n * lifecycle of the queue.\n * @example\n *\n * // create a queue object with concurrency 2\n * var q = async.queue(function(task, callback) {\n *     console.log('hello ' + task.name);\n *     callback();\n * }, 2);\n *\n * // assign a callback\n * q.drain = function() {\n *     console.log('all items have been processed');\n * };\n *\n * // add some items to the queue\n * q.push({name: 'foo'}, function(err) {\n *     console.log('finished processing foo');\n * });\n * q.push({name: 'bar'}, function (err) {\n *     console.log('finished processing bar');\n * });\n *\n * // add some items to the queue (batch-wise)\n * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) {\n *     console.log('finished processing item');\n * });\n *\n * // add some items to the front of the queue\n * q.unshift({name: 'bar'}, function (err) {\n *     console.log('finished processing bar');\n * });\n */\nvar queue$1 = function (worker, concurrency) {\n    var _worker = wrapAsync(worker);\n    return queue(function (items, cb) {\n        _worker(items[0], cb);\n    }, concurrency, 1);\n};\n\n/**\n * The same as [async.queue]{@link module:ControlFlow.queue} only tasks are assigned a priority and\n * completed in ascending priority order.\n *\n * @name priorityQueue\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.queue]{@link module:ControlFlow.queue}\n * @category Control Flow\n * @param {AsyncFunction} worker - An async function for processing a queued task.\n * If you want to handle errors from an individual task, pass a callback to\n * `q.push()`.\n * Invoked with (task, callback).\n * @param {number} concurrency - An `integer` for determining how many `worker`\n * functions should be run in parallel.  If omitted, the concurrency defaults to\n * `1`.  If the concurrency is `0`, an error is thrown.\n * @returns {module:ControlFlow.QueueObject} A priorityQueue object to manage the tasks. There are two\n * differences between `queue` and `priorityQueue` objects:\n * * `push(task, priority, [callback])` - `priority` should be a number. If an\n *   array of `tasks` is given, all tasks will be assigned the same priority.\n * * The `unshift` method was removed.\n */\nvar priorityQueue = function(worker, concurrency) {\n    // Start with a normal queue\n    var q = queue$1(worker, concurrency);\n\n    // Override push to accept second parameter representing priority\n    q.push = function(data, priority, callback) {\n        if (callback == null) callback = noop;\n        if (typeof callback !== 'function') {\n            throw new Error('task callback must be a function');\n        }\n        q.started = true;\n        if (!isArray(data)) {\n            data = [data];\n        }\n        if (data.length === 0) {\n            // call drain immediately if there are no tasks\n            return setImmediate$1(function() {\n                q.drain();\n            });\n        }\n\n        priority = priority || 0;\n        var nextNode = q._tasks.head;\n        while (nextNode && priority >= nextNode.priority) {\n            nextNode = nextNode.next;\n        }\n\n        for (var i = 0, l = data.length; i < l; i++) {\n            var item = {\n                data: data[i],\n                priority: priority,\n                callback: callback\n            };\n\n            if (nextNode) {\n                q._tasks.insertBefore(nextNode, item);\n            } else {\n                q._tasks.push(item);\n            }\n        }\n        setImmediate$1(q.process);\n    };\n\n    // Remove unshift function\n    delete q.unshift;\n\n    return q;\n};\n\n/**\n * Runs the `tasks` array of functions in parallel, without waiting until the\n * previous function has completed. Once any of the `tasks` complete or pass an\n * error to its callback, the main `callback` is immediately called. It's\n * equivalent to `Promise.race()`.\n *\n * @name race\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array containing [async functions]{@link AsyncFunction}\n * to run. Each function can complete with an optional `result` value.\n * @param {Function} callback - A callback to run once any of the functions have\n * completed. This function gets an error or result from the first function that\n * completed. Invoked with (err, result).\n * @returns undefined\n * @example\n *\n * async.race([\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ],\n * // main callback\n * function(err, result) {\n *     // the result will be equal to 'two' as it finishes earlier\n * });\n */\nfunction race(tasks, callback) {\n    callback = once(callback || noop);\n    if (!isArray(tasks)) return callback(new TypeError('First argument to race must be an array of functions'));\n    if (!tasks.length) return callback();\n    for (var i = 0, l = tasks.length; i < l; i++) {\n        wrapAsync(tasks[i])(callback);\n    }\n}\n\n/**\n * Same as [`reduce`]{@link module:Collections.reduce}, only operates on `array` in reverse order.\n *\n * @name reduceRight\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reduce]{@link module:Collections.reduce}\n * @alias foldr\n * @category Collection\n * @param {Array} array - A collection to iterate over.\n * @param {*} memo - The initial state of the reduction.\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * array to produce the next step in the reduction.\n * The `iteratee` should complete with the next state of the reduction.\n * If the iteratee complete with an error, the reduction is stopped and the\n * main `callback` is immediately called with the error.\n * Invoked with (memo, item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the reduced value. Invoked with\n * (err, result).\n */\nfunction reduceRight (array, memo, iteratee, callback) {\n    var reversed = slice(array).reverse();\n    reduce(reversed, memo, iteratee, callback);\n}\n\n/**\n * Wraps the async function in another function that always completes with a\n * result object, even when it errors.\n *\n * The result object has either the property `error` or `value`.\n *\n * @name reflect\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} fn - The async function you want to wrap\n * @returns {Function} - A function that always passes null to it's callback as\n * the error. The second argument to the callback will be an `object` with\n * either an `error` or a `value` property.\n * @example\n *\n * async.parallel([\n *     async.reflect(function(callback) {\n *         // do some stuff ...\n *         callback(null, 'one');\n *     }),\n *     async.reflect(function(callback) {\n *         // do some more stuff but error ...\n *         callback('bad stuff happened');\n *     }),\n *     async.reflect(function(callback) {\n *         // do some more stuff ...\n *         callback(null, 'two');\n *     })\n * ],\n * // optional callback\n * function(err, results) {\n *     // values\n *     // results[0].value = 'one'\n *     // results[1].error = 'bad stuff happened'\n *     // results[2].value = 'two'\n * });\n */\nfunction reflect(fn) {\n    var _fn = wrapAsync(fn);\n    return initialParams(function reflectOn(args, reflectCallback) {\n        args.push(function callback(error, cbArg) {\n            if (error) {\n                reflectCallback(null, { error: error });\n            } else {\n                var value;\n                if (arguments.length <= 2) {\n                    value = cbArg;\n                } else {\n                    value = slice(arguments, 1);\n                }\n                reflectCallback(null, { value: value });\n            }\n        });\n\n        return _fn.apply(this, args);\n    });\n}\n\n/**\n * A helper function that wraps an array or an object of functions with `reflect`.\n *\n * @name reflectAll\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.reflect]{@link module:Utils.reflect}\n * @category Util\n * @param {Array|Object|Iterable} tasks - The collection of\n * [async functions]{@link AsyncFunction} to wrap in `async.reflect`.\n * @returns {Array} Returns an array of async functions, each wrapped in\n * `async.reflect`\n * @example\n *\n * let tasks = [\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     function(callback) {\n *         // do some more stuff but error ...\n *         callback(new Error('bad stuff happened'));\n *     },\n *     function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'two');\n *         }, 100);\n *     }\n * ];\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n *     // values\n *     // results[0].value = 'one'\n *     // results[1].error = Error('bad stuff happened')\n *     // results[2].value = 'two'\n * });\n *\n * // an example using an object instead of an array\n * let tasks = {\n *     one: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'one');\n *         }, 200);\n *     },\n *     two: function(callback) {\n *         callback('two');\n *     },\n *     three: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 'three');\n *         }, 100);\n *     }\n * };\n *\n * async.parallel(async.reflectAll(tasks),\n * // optional callback\n * function(err, results) {\n *     // values\n *     // results.one.value = 'one'\n *     // results.two.error = 'two'\n *     // results.three.value = 'three'\n * });\n */\nfunction reflectAll(tasks) {\n    var results;\n    if (isArray(tasks)) {\n        results = arrayMap(tasks, reflect);\n    } else {\n        results = {};\n        baseForOwn(tasks, function(task, key) {\n            results[key] = reflect.call(this, task);\n        });\n    }\n    return results;\n}\n\nfunction reject$1(eachfn, arr, iteratee, callback) {\n    _filter(eachfn, arr, function(value, cb) {\n        iteratee(value, function(err, v) {\n            cb(err, !v);\n        });\n    }, callback);\n}\n\n/**\n * The opposite of [`filter`]{@link module:Collections.filter}. Removes values that pass an `async` truth test.\n *\n * @name reject\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.filter]{@link module:Collections.filter}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n * @example\n *\n * async.reject(['file1','file2','file3'], function(filePath, callback) {\n *     fs.access(filePath, function(err) {\n *         callback(null, !err)\n *     });\n * }, function(err, results) {\n *     // results now equals an array of missing files\n *     createFiles(results);\n * });\n */\nvar reject = doParallel(reject$1);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name rejectLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n */\nvar rejectLimit = doParallelLimit(reject$1);\n\n/**\n * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time.\n *\n * @name rejectSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.reject]{@link module:Collections.reject}\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {Function} iteratee - An async truth test to apply to each item in\n * `coll`.\n * The should complete with a boolean value as its `result`.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Invoked with (err, results).\n */\nvar rejectSeries = doLimit(rejectLimit, 1);\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant$1(value) {\n  return function() {\n    return value;\n  };\n}\n\n/**\n * Attempts to get a successful response from `task` no more than `times` times\n * before returning an error. If the task is successful, the `callback` will be\n * passed the result of the successful task. If all attempts fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name retry\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @see [async.retryable]{@link module:ControlFlow.retryable}\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an\n * object with `times` and `interval` or a number.\n * * `times` - The number of attempts to make before giving up.  The default\n *   is `5`.\n * * `interval` - The time to wait between retries, in milliseconds.  The\n *   default is `0`. The interval may also be specified as a function of the\n *   retry count (see example).\n * * `errorFilter` - An optional synchronous function that is invoked on\n *   erroneous result. If it returns `true` the retry attempts will continue;\n *   if the function returns `false` the retry flow is aborted with the current\n *   attempt's error and result being returned to the final callback.\n *   Invoked with (err).\n * * If `opts` is a number, the number specifies the number of times to retry,\n *   with the default interval of `0`.\n * @param {AsyncFunction} task - An async function to retry.\n * Invoked with (callback).\n * @param {Function} [callback] - An optional callback which is called when the\n * task has succeeded, or after the final failed attempt. It receives the `err`\n * and `result` arguments of the last attempt at completing the `task`. Invoked\n * with (err, results).\n *\n * @example\n *\n * // The `retry` function can be used as a stand-alone control flow by passing\n * // a callback, as shown below:\n *\n * // try calling apiMethod 3 times\n * async.retry(3, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod 3 times, waiting 200 ms between each retry\n * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod 10 times with exponential backoff\n * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds)\n * async.retry({\n *   times: 10,\n *   interval: function(retryCount) {\n *     return 50 * Math.pow(2, retryCount);\n *   }\n * }, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod the default 5 times no delay between each retry\n * async.retry(apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // try calling apiMethod only when error condition satisfies, all other\n * // errors will abort the retry control flow and return to final callback\n * async.retry({\n *   errorFilter: function(err) {\n *     return err.message === 'Temporary error'; // only retry on a specific error\n *   }\n * }, apiMethod, function(err, result) {\n *     // do something with the result\n * });\n *\n * // to retry individual methods that are not as reliable within other\n * // control flow functions, use the `retryable` wrapper:\n * async.auto({\n *     users: api.getUsers.bind(api),\n *     payments: async.retryable(3, api.getPayments.bind(api))\n * }, function(err, results) {\n *     // do something with the results\n * });\n *\n */\nfunction retry(opts, task, callback) {\n    var DEFAULT_TIMES = 5;\n    var DEFAULT_INTERVAL = 0;\n\n    var options = {\n        times: DEFAULT_TIMES,\n        intervalFunc: constant$1(DEFAULT_INTERVAL)\n    };\n\n    function parseTimes(acc, t) {\n        if (typeof t === 'object') {\n            acc.times = +t.times || DEFAULT_TIMES;\n\n            acc.intervalFunc = typeof t.interval === 'function' ?\n                t.interval :\n                constant$1(+t.interval || DEFAULT_INTERVAL);\n\n            acc.errorFilter = t.errorFilter;\n        } else if (typeof t === 'number' || typeof t === 'string') {\n            acc.times = +t || DEFAULT_TIMES;\n        } else {\n            throw new Error(\"Invalid arguments for async.retry\");\n        }\n    }\n\n    if (arguments.length < 3 && typeof opts === 'function') {\n        callback = task || noop;\n        task = opts;\n    } else {\n        parseTimes(options, opts);\n        callback = callback || noop;\n    }\n\n    if (typeof task !== 'function') {\n        throw new Error(\"Invalid arguments for async.retry\");\n    }\n\n    var _task = wrapAsync(task);\n\n    var attempt = 1;\n    function retryAttempt() {\n        _task(function(err) {\n            if (err && attempt++ < options.times &&\n                (typeof options.errorFilter != 'function' ||\n                    options.errorFilter(err))) {\n                setTimeout(retryAttempt, options.intervalFunc(attempt));\n            } else {\n                callback.apply(null, arguments);\n            }\n        });\n    }\n\n    retryAttempt();\n}\n\n/**\n * A close relative of [`retry`]{@link module:ControlFlow.retry}.  This method\n * wraps a task and makes it retryable, rather than immediately calling it\n * with retries.\n *\n * @name retryable\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.retry]{@link module:ControlFlow.retry}\n * @category Control Flow\n * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - optional\n * options, exactly the same as from `retry`\n * @param {AsyncFunction} task - the asynchronous function to wrap.\n * This function will be passed any arguments passed to the returned wrapper.\n * Invoked with (...args, callback).\n * @returns {AsyncFunction} The wrapped function, which when invoked, will\n * retry on an error, based on the parameters specified in `opts`.\n * This function will accept the same parameters as `task`.\n * @example\n *\n * async.auto({\n *     dep1: async.retryable(3, getFromFlakyService),\n *     process: [\"dep1\", async.retryable(3, function (results, cb) {\n *         maybeProcessData(results.dep1, cb);\n *     })]\n * }, callback);\n */\nvar retryable = function (opts, task) {\n    if (!task) {\n        task = opts;\n        opts = null;\n    }\n    var _task = wrapAsync(task);\n    return initialParams(function (args, callback) {\n        function taskFn(cb) {\n            _task.apply(null, args.concat(cb));\n        }\n\n        if (opts) retry(opts, taskFn, callback);\n        else retry(taskFn, callback);\n\n    });\n};\n\n/**\n * Run the functions in the `tasks` collection in series, each one running once\n * the previous function has completed. If any functions in the series pass an\n * error to its callback, no more functions are run, and `callback` is\n * immediately called with the value of the error. Otherwise, `callback`\n * receives an array of results when `tasks` have completed.\n *\n * It is also possible to use an object instead of an array. Each property will\n * be run as a function, and the results will be passed to the final `callback`\n * as an object instead of an array. This can be a more readable way of handling\n *  results from {@link async.series}.\n *\n * **Note** that while many implementations preserve the order of object\n * properties, the [ECMAScript Language Specification](http://www.ecma-international.org/ecma-262/5.1/#sec-8.6)\n * explicitly states that\n *\n * > The mechanics and order of enumerating the properties is not specified.\n *\n * So if you rely on the order in which your series of functions are executed,\n * and want this to work on all platforms, consider using an array.\n *\n * @name series\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|Object} tasks - A collection containing\n * [async functions]{@link AsyncFunction} to run in series.\n * Each function can complete with any number of optional `result` values.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This function gets a results array (or object)\n * containing all the result arguments passed to the `task` callbacks. Invoked\n * with (err, result).\n * @example\n * async.series([\n *     function(callback) {\n *         // do some stuff ...\n *         callback(null, 'one');\n *     },\n *     function(callback) {\n *         // do some more stuff ...\n *         callback(null, 'two');\n *     }\n * ],\n * // optional callback\n * function(err, results) {\n *     // results is now equal to ['one', 'two']\n * });\n *\n * async.series({\n *     one: function(callback) {\n *         setTimeout(function() {\n *             callback(null, 1);\n *         }, 200);\n *     },\n *     two: function(callback){\n *         setTimeout(function() {\n *             callback(null, 2);\n *         }, 100);\n *     }\n * }, function(err, results) {\n *     // results is now equal to: {one: 1, two: 2}\n * });\n */\nfunction series(tasks, callback) {\n    _parallel(eachOfSeries, tasks, callback);\n}\n\n/**\n * Returns `true` if at least one element in the `coll` satisfies an async test.\n * If any iteratee call returns `true`, the main `callback` is immediately\n * called.\n *\n * @name some\n * @static\n * @memberOf module:Collections\n * @method\n * @alias any\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n * @example\n *\n * async.some(['file1','file2','file3'], function(filePath, callback) {\n *     fs.access(filePath, function(err) {\n *         callback(null, !err)\n *     });\n * }, function(err, result) {\n *     // if result is true then at least one of the files exists\n * });\n */\nvar some = doParallel(_createTester(Boolean, identity));\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time.\n *\n * @name someLimit\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anyLimit\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in parallel.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n */\nvar someLimit = doParallelLimit(_createTester(Boolean, identity));\n\n/**\n * The same as [`some`]{@link module:Collections.some} but runs only a single async operation at a time.\n *\n * @name someSeries\n * @static\n * @memberOf module:Collections\n * @method\n * @see [async.some]{@link module:Collections.some}\n * @alias anySeries\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async truth test to apply to each item\n * in the collections in series.\n * The iteratee should complete with a boolean `result` value.\n * Invoked with (item, callback).\n * @param {Function} [callback] - A callback which is called as soon as any\n * iteratee returns `true`, or after all the iteratee functions have finished.\n * Result will be either `true` or `false` depending on the values of the async\n * tests. Invoked with (err, result).\n */\nvar someSeries = doLimit(someLimit, 1);\n\n/**\n * Sorts a list by the results of running each `coll` value through an async\n * `iteratee`.\n *\n * @name sortBy\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {AsyncFunction} iteratee - An async function to apply to each item in\n * `coll`.\n * The iteratee should complete with a value to use as the sort criteria as\n * its `result`.\n * Invoked with (item, callback).\n * @param {Function} callback - A callback which is called after all the\n * `iteratee` functions have finished, or an error occurs. Results is the items\n * from the original `coll` sorted by the values returned by the `iteratee`\n * calls. Invoked with (err, results).\n * @example\n *\n * async.sortBy(['file1','file2','file3'], function(file, callback) {\n *     fs.stat(file, function(err, stats) {\n *         callback(err, stats.mtime);\n *     });\n * }, function(err, results) {\n *     // results is now the original array of files sorted by\n *     // modified date\n * });\n *\n * // By modifying the callback parameter the\n * // sorting order can be influenced:\n *\n * // ascending order\n * async.sortBy([1,9,3,5], function(x, callback) {\n *     callback(null, x);\n * }, function(err,result) {\n *     // result callback\n * });\n *\n * // descending order\n * async.sortBy([1,9,3,5], function(x, callback) {\n *     callback(null, x*-1);    //<- x*-1 instead of x, turns the order around\n * }, function(err,result) {\n *     // result callback\n * });\n */\nfunction sortBy (coll, iteratee, callback) {\n    var _iteratee = wrapAsync(iteratee);\n    map(coll, function (x, callback) {\n        _iteratee(x, function (err, criteria) {\n            if (err) return callback(err);\n            callback(null, {value: x, criteria: criteria});\n        });\n    }, function (err, results) {\n        if (err) return callback(err);\n        callback(null, arrayMap(results.sort(comparator), baseProperty('value')));\n    });\n\n    function comparator(left, right) {\n        var a = left.criteria, b = right.criteria;\n        return a < b ? -1 : a > b ? 1 : 0;\n    }\n}\n\n/**\n * Sets a time limit on an asynchronous function. If the function does not call\n * its callback within the specified milliseconds, it will be called with a\n * timeout error. The code property for the error object will be `'ETIMEDOUT'`.\n *\n * @name timeout\n * @static\n * @memberOf module:Utils\n * @method\n * @category Util\n * @param {AsyncFunction} asyncFn - The async function to limit in time.\n * @param {number} milliseconds - The specified time limit.\n * @param {*} [info] - Any variable you want attached (`string`, `object`, etc)\n * to timeout Error for more information..\n * @returns {AsyncFunction} Returns a wrapped function that can be used with any\n * of the control flow functions.\n * Invoke this function with the same parameters as you would `asyncFunc`.\n * @example\n *\n * function myFunction(foo, callback) {\n *     doAsyncTask(foo, function(err, data) {\n *         // handle errors\n *         if (err) return callback(err);\n *\n *         // do some stuff ...\n *\n *         // return processed data\n *         return callback(null, data);\n *     });\n * }\n *\n * var wrapped = async.timeout(myFunction, 1000);\n *\n * // call `wrapped` as you would `myFunction`\n * wrapped({ bar: 'bar' }, function(err, data) {\n *     // if `myFunction` takes < 1000 ms to execute, `err`\n *     // and `data` will have their expected values\n *\n *     // else `err` will be an Error with the code 'ETIMEDOUT'\n * });\n */\nfunction timeout(asyncFn, milliseconds, info) {\n    var fn = wrapAsync(asyncFn);\n\n    return initialParams(function (args, callback) {\n        var timedOut = false;\n        var timer;\n\n        function timeoutCallback() {\n            var name = asyncFn.name || 'anonymous';\n            var error  = new Error('Callback function \"' + name + '\" timed out.');\n            error.code = 'ETIMEDOUT';\n            if (info) {\n                error.info = info;\n            }\n            timedOut = true;\n            callback(error);\n        }\n\n        args.push(function () {\n            if (!timedOut) {\n                callback.apply(null, arguments);\n                clearTimeout(timer);\n            }\n        });\n\n        // setup timer and call original function\n        timer = setTimeout(timeoutCallback, milliseconds);\n        fn.apply(null, args);\n    });\n}\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil;\nvar nativeMax = Math.max;\n\n/**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\nfunction baseRange(start, end, step, fromRight) {\n  var index = -1,\n      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n      result = Array(length);\n\n  while (length--) {\n    result[fromRight ? length : ++index] = start;\n    start += step;\n  }\n  return result;\n}\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs a maximum of `limit` async operations at a\n * time.\n *\n * @name timesLimit\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} count - The number of times to run the function.\n * @param {number} limit - The maximum number of async operations at a time.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see [async.map]{@link module:Collections.map}.\n */\nfunction timeLimit(count, limit, iteratee, callback) {\n    var _iteratee = wrapAsync(iteratee);\n    mapLimit(baseRange(0, count, 1), limit, _iteratee, callback);\n}\n\n/**\n * Calls the `iteratee` function `n` times, and accumulates results in the same\n * manner you would use with [map]{@link module:Collections.map}.\n *\n * @name times\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.map]{@link module:Collections.map}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n * @example\n *\n * // Pretend this is some complicated async factory\n * var createUser = function(id, callback) {\n *     callback(null, {\n *         id: 'user' + id\n *     });\n * };\n *\n * // generate 5 users\n * async.times(5, function(n, next) {\n *     createUser(n, function(err, user) {\n *         next(err, user);\n *     });\n * }, function(err, users) {\n *     // we should now have 5 users\n * });\n */\nvar times = doLimit(timeLimit, Infinity);\n\n/**\n * The same as [times]{@link module:ControlFlow.times} but runs only a single async operation at a time.\n *\n * @name timesSeries\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.times]{@link module:ControlFlow.times}\n * @category Control Flow\n * @param {number} n - The number of times to run the function.\n * @param {AsyncFunction} iteratee - The async function to call `n` times.\n * Invoked with the iteration index and a callback: (n, next).\n * @param {Function} callback - see {@link module:Collections.map}.\n */\nvar timesSeries = doLimit(timeLimit, 1);\n\n/**\n * A relative of `reduce`.  Takes an Object or Array, and iterates over each\n * element in series, each step potentially mutating an `accumulator` value.\n * The type of the accumulator defaults to the type of collection passed in.\n *\n * @name transform\n * @static\n * @memberOf module:Collections\n * @method\n * @category Collection\n * @param {Array|Iterable|Object} coll - A collection to iterate over.\n * @param {*} [accumulator] - The initial state of the transform.  If omitted,\n * it will default to an empty Object or Array, depending on the type of `coll`\n * @param {AsyncFunction} iteratee - A function applied to each item in the\n * collection that potentially modifies the accumulator.\n * Invoked with (accumulator, item, key, callback).\n * @param {Function} [callback] - A callback which is called after all the\n * `iteratee` functions have finished. Result is the transformed accumulator.\n * Invoked with (err, result).\n * @example\n *\n * async.transform([1,2,3], function(acc, item, index, callback) {\n *     // pointless async:\n *     process.nextTick(function() {\n *         acc.push(item * 2)\n *         callback(null)\n *     });\n * }, function(err, result) {\n *     // result is now equal to [2, 4, 6]\n * });\n *\n * @example\n *\n * async.transform({a: 1, b: 2, c: 3}, function (obj, val, key, callback) {\n *     setImmediate(function () {\n *         obj[key] = val * 2;\n *         callback();\n *     })\n * }, function (err, result) {\n *     // result is equal to {a: 2, b: 4, c: 6}\n * })\n */\nfunction transform (coll, accumulator, iteratee, callback) {\n    if (arguments.length <= 3) {\n        callback = iteratee;\n        iteratee = accumulator;\n        accumulator = isArray(coll) ? [] : {};\n    }\n    callback = once(callback || noop);\n    var _iteratee = wrapAsync(iteratee);\n\n    eachOf(coll, function(v, k, cb) {\n        _iteratee(accumulator, v, k, cb);\n    }, function(err) {\n        callback(err, accumulator);\n    });\n}\n\n/**\n * It runs each task in series but stops whenever any of the functions were\n * successful. If one of the tasks were successful, the `callback` will be\n * passed the result of the successful task. If all tasks fail, the callback\n * will be passed the error and result (if any) of the final attempt.\n *\n * @name tryEach\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array|Iterable|Object} tasks - A collection containing functions to\n * run, each function is passed a `callback(err, result)` it must call on\n * completion with an error `err` (which can be `null`) and an optional `result`\n * value.\n * @param {Function} [callback] - An optional callback which is called when one\n * of the tasks has succeeded, or all have failed. It receives the `err` and\n * `result` arguments of the last attempt at completing the `task`. Invoked with\n * (err, results).\n * @example\n * async.tryEach([\n *     function getDataFromFirstWebsite(callback) {\n *         // Try getting the data from the first website\n *         callback(err, data);\n *     },\n *     function getDataFromSecondWebsite(callback) {\n *         // First website failed,\n *         // Try getting the data from the backup website\n *         callback(err, data);\n *     }\n * ],\n * // optional callback\n * function(err, results) {\n *     Now do something with the data.\n * });\n *\n */\nfunction tryEach(tasks, callback) {\n    var error = null;\n    var result;\n    callback = callback || noop;\n    eachSeries(tasks, function(task, callback) {\n        wrapAsync(task)(function (err, res/*, ...args*/) {\n            if (arguments.length > 2) {\n                result = slice(arguments, 1);\n            } else {\n                result = res;\n            }\n            error = err;\n            callback(!err);\n        });\n    }, function () {\n        callback(error, result);\n    });\n}\n\n/**\n * Undoes a [memoize]{@link module:Utils.memoize}d function, reverting it to the original,\n * unmemoized form. Handy for testing.\n *\n * @name unmemoize\n * @static\n * @memberOf module:Utils\n * @method\n * @see [async.memoize]{@link module:Utils.memoize}\n * @category Util\n * @param {AsyncFunction} fn - the memoized function\n * @returns {AsyncFunction} a function that calls the original unmemoized function\n */\nfunction unmemoize(fn) {\n    return function () {\n        return (fn.unmemoized || fn).apply(null, arguments);\n    };\n}\n\n/**\n * Repeatedly call `iteratee`, while `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs.\n *\n * @name whilst\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Function} test - synchronous truth test to perform before each\n * execution of `iteratee`. Invoked with ().\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` passes. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has failed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n * @returns undefined\n * @example\n *\n * var count = 0;\n * async.whilst(\n *     function() { return count < 5; },\n *     function(callback) {\n *         count++;\n *         setTimeout(function() {\n *             callback(null, count);\n *         }, 1000);\n *     },\n *     function (err, n) {\n *         // 5 seconds have passed, n = 5\n *     }\n * );\n */\nfunction whilst(test, iteratee, callback) {\n    callback = onlyOnce(callback || noop);\n    var _iteratee = wrapAsync(iteratee);\n    if (!test()) return callback(null);\n    var next = function(err/*, ...args*/) {\n        if (err) return callback(err);\n        if (test()) return _iteratee(next);\n        var args = slice(arguments, 1);\n        callback.apply(null, [null].concat(args));\n    };\n    _iteratee(next);\n}\n\n/**\n * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when\n * stopped, or an error occurs. `callback` will be passed an error and any\n * arguments passed to the final `iteratee`'s callback.\n *\n * The inverse of [whilst]{@link module:ControlFlow.whilst}.\n *\n * @name until\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @see [async.whilst]{@link module:ControlFlow.whilst}\n * @category Control Flow\n * @param {Function} test - synchronous truth test to perform before each\n * execution of `iteratee`. Invoked with ().\n * @param {AsyncFunction} iteratee - An async function which is called each time\n * `test` fails. Invoked with (callback).\n * @param {Function} [callback] - A callback which is called after the test\n * function has passed and repeated execution of `iteratee` has stopped. `callback`\n * will be passed an error and any arguments passed to the final `iteratee`'s\n * callback. Invoked with (err, [results]);\n */\nfunction until(test, iteratee, callback) {\n    whilst(function() {\n        return !test.apply(this, arguments);\n    }, iteratee, callback);\n}\n\n/**\n * Runs the `tasks` array of functions in series, each passing their results to\n * the next in the array. However, if any of the `tasks` pass an error to their\n * own callback, the next function is not executed, and the main `callback` is\n * immediately called with the error.\n *\n * @name waterfall\n * @static\n * @memberOf module:ControlFlow\n * @method\n * @category Control Flow\n * @param {Array} tasks - An array of [async functions]{@link AsyncFunction}\n * to run.\n * Each function should complete with any number of `result` values.\n * The `result` values will be passed as arguments, in order, to the next task.\n * @param {Function} [callback] - An optional callback to run once all the\n * functions have completed. This will be passed the results of the last task's\n * callback. Invoked with (err, [results]).\n * @returns undefined\n * @example\n *\n * async.waterfall([\n *     function(callback) {\n *         callback(null, 'one', 'two');\n *     },\n *     function(arg1, arg2, callback) {\n *         // arg1 now equals 'one' and arg2 now equals 'two'\n *         callback(null, 'three');\n *     },\n *     function(arg1, callback) {\n *         // arg1 now equals 'three'\n *         callback(null, 'done');\n *     }\n * ], function (err, result) {\n *     // result now equals 'done'\n * });\n *\n * // Or, with named functions:\n * async.waterfall([\n *     myFirstFunction,\n *     mySecondFunction,\n *     myLastFunction,\n * ], function (err, result) {\n *     // result now equals 'done'\n * });\n * function myFirstFunction(callback) {\n *     callback(null, 'one', 'two');\n * }\n * function mySecondFunction(arg1, arg2, callback) {\n *     // arg1 now equals 'one' and arg2 now equals 'two'\n *     callback(null, 'three');\n * }\n * function myLastFunction(arg1, callback) {\n *     // arg1 now equals 'three'\n *     callback(null, 'done');\n * }\n */\nvar waterfall = function(tasks, callback) {\n    callback = once(callback || noop);\n    if (!isArray(tasks)) return callback(new Error('First argument to waterfall must be an array of functions'));\n    if (!tasks.length) return callback();\n    var taskIndex = 0;\n\n    function nextTask(args) {\n        var task = wrapAsync(tasks[taskIndex++]);\n        args.push(onlyOnce(next));\n        task.apply(null, args);\n    }\n\n    function next(err/*, ...args*/) {\n        if (err || taskIndex === tasks.length) {\n            return callback.apply(null, arguments);\n        }\n        nextTask(slice(arguments, 1));\n    }\n\n    nextTask([]);\n};\n\n/**\n * An \"async function\" in the context of Async is an asynchronous function with\n * a variable number of parameters, with the final parameter being a callback.\n * (`function (arg1, arg2, ..., callback) {}`)\n * The final callback is of the form `callback(err, results...)`, which must be\n * called once the function is completed.  The callback should be called with a\n * Error as its first argument to signal that an error occurred.\n * Otherwise, if no error occurred, it should be called with `null` as the first\n * argument, and any additional `result` arguments that may apply, to signal\n * successful completion.\n * The callback must be called exactly once, ideally on a later tick of the\n * JavaScript event loop.\n *\n * This type of function is also referred to as a \"Node-style async function\",\n * or a \"continuation passing-style function\" (CPS). Most of the methods of this\n * library are themselves CPS/Node-style async functions, or functions that\n * return CPS/Node-style async functions.\n *\n * Wherever we accept a Node-style async function, we also directly accept an\n * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}.\n * In this case, the `async` function will not be passed a final callback\n * argument, and any thrown error will be used as the `err` argument of the\n * implicit callback, and the return value will be used as the `result` value.\n * (i.e. a `rejected` of the returned Promise becomes the `err` callback\n * argument, and a `resolved` value becomes the `result`.)\n *\n * Note, due to JavaScript limitations, we can only detect native `async`\n * functions and not transpilied implementations.\n * Your environment must have `async`/`await` support for this to work.\n * (e.g. Node > v7.6, or a recent version of a modern browser).\n * If you are using `async` functions through a transpiler (e.g. Babel), you\n * must still wrap the function with [asyncify]{@link module:Utils.asyncify},\n * because the `async function` will be compiled to an ordinary function that\n * returns a promise.\n *\n * @typedef {Function} AsyncFunction\n * @static\n */\n\n/**\n * Async is a utility module which provides straight-forward, powerful functions\n * for working with asynchronous JavaScript. Although originally designed for\n * use with [Node.js](http://nodejs.org) and installable via\n * `npm install --save async`, it can also be used directly in the browser.\n * @module async\n * @see AsyncFunction\n */\n\n\n/**\n * A collection of `async` functions for manipulating collections, such as\n * arrays and objects.\n * @module Collections\n */\n\n/**\n * A collection of `async` functions for controlling the flow through a script.\n * @module ControlFlow\n */\n\n/**\n * A collection of `async` utility functions.\n * @module Utils\n */\n\nvar index = {\n    apply: apply,\n    applyEach: applyEach,\n    applyEachSeries: applyEachSeries,\n    asyncify: asyncify,\n    auto: auto,\n    autoInject: autoInject,\n    cargo: cargo,\n    compose: compose,\n    concat: concat,\n    concatLimit: concatLimit,\n    concatSeries: concatSeries,\n    constant: constant,\n    detect: detect,\n    detectLimit: detectLimit,\n    detectSeries: detectSeries,\n    dir: dir,\n    doDuring: doDuring,\n    doUntil: doUntil,\n    doWhilst: doWhilst,\n    during: during,\n    each: eachLimit,\n    eachLimit: eachLimit$1,\n    eachOf: eachOf,\n    eachOfLimit: eachOfLimit,\n    eachOfSeries: eachOfSeries,\n    eachSeries: eachSeries,\n    ensureAsync: ensureAsync,\n    every: every,\n    everyLimit: everyLimit,\n    everySeries: everySeries,\n    filter: filter,\n    filterLimit: filterLimit,\n    filterSeries: filterSeries,\n    forever: forever,\n    groupBy: groupBy,\n    groupByLimit: groupByLimit,\n    groupBySeries: groupBySeries,\n    log: log,\n    map: map,\n    mapLimit: mapLimit,\n    mapSeries: mapSeries,\n    mapValues: mapValues,\n    mapValuesLimit: mapValuesLimit,\n    mapValuesSeries: mapValuesSeries,\n    memoize: memoize,\n    nextTick: nextTick,\n    parallel: parallelLimit,\n    parallelLimit: parallelLimit$1,\n    priorityQueue: priorityQueue,\n    queue: queue$1,\n    race: race,\n    reduce: reduce,\n    reduceRight: reduceRight,\n    reflect: reflect,\n    reflectAll: reflectAll,\n    reject: reject,\n    rejectLimit: rejectLimit,\n    rejectSeries: rejectSeries,\n    retry: retry,\n    retryable: retryable,\n    seq: seq,\n    series: series,\n    setImmediate: setImmediate$1,\n    some: some,\n    someLimit: someLimit,\n    someSeries: someSeries,\n    sortBy: sortBy,\n    timeout: timeout,\n    times: times,\n    timesLimit: timeLimit,\n    timesSeries: timesSeries,\n    transform: transform,\n    tryEach: tryEach,\n    unmemoize: unmemoize,\n    until: until,\n    waterfall: waterfall,\n    whilst: whilst,\n\n    // aliases\n    all: every,\n    allLimit: everyLimit,\n    allSeries: everySeries,\n    any: some,\n    anyLimit: someLimit,\n    anySeries: someSeries,\n    find: detect,\n    findLimit: detectLimit,\n    findSeries: detectSeries,\n    forEach: eachLimit,\n    forEachSeries: eachSeries,\n    forEachLimit: eachLimit$1,\n    forEachOf: eachOf,\n    forEachOfSeries: eachOfSeries,\n    forEachOfLimit: eachOfLimit,\n    inject: reduce,\n    foldl: reduce,\n    foldr: reduceRight,\n    select: filter,\n    selectLimit: filterLimit,\n    selectSeries: filterSeries,\n    wrapSync: asyncify\n};\n\nexports['default'] = index;\nexports.apply = apply;\nexports.applyEach = applyEach;\nexports.applyEachSeries = applyEachSeries;\nexports.asyncify = asyncify;\nexports.auto = auto;\nexports.autoInject = autoInject;\nexports.cargo = cargo;\nexports.compose = compose;\nexports.concat = concat;\nexports.concatLimit = concatLimit;\nexports.concatSeries = concatSeries;\nexports.constant = constant;\nexports.detect = detect;\nexports.detectLimit = detectLimit;\nexports.detectSeries = detectSeries;\nexports.dir = dir;\nexports.doDuring = doDuring;\nexports.doUntil = doUntil;\nexports.doWhilst = doWhilst;\nexports.during = during;\nexports.each = eachLimit;\nexports.eachLimit = eachLimit$1;\nexports.eachOf = eachOf;\nexports.eachOfLimit = eachOfLimit;\nexports.eachOfSeries = eachOfSeries;\nexports.eachSeries = eachSeries;\nexports.ensureAsync = ensureAsync;\nexports.every = every;\nexports.everyLimit = everyLimit;\nexports.everySeries = everySeries;\nexports.filter = filter;\nexports.filterLimit = filterLimit;\nexports.filterSeries = filterSeries;\nexports.forever = forever;\nexports.groupBy = groupBy;\nexports.groupByLimit = groupByLimit;\nexports.groupBySeries = groupBySeries;\nexports.log = log;\nexports.map = map;\nexports.mapLimit = mapLimit;\nexports.mapSeries = mapSeries;\nexports.mapValues = mapValues;\nexports.mapValuesLimit = mapValuesLimit;\nexports.mapValuesSeries = mapValuesSeries;\nexports.memoize = memoize;\nexports.nextTick = nextTick;\nexports.parallel = parallelLimit;\nexports.parallelLimit = parallelLimit$1;\nexports.priorityQueue = priorityQueue;\nexports.queue = queue$1;\nexports.race = race;\nexports.reduce = reduce;\nexports.reduceRight = reduceRight;\nexports.reflect = reflect;\nexports.reflectAll = reflectAll;\nexports.reject = reject;\nexports.rejectLimit = rejectLimit;\nexports.rejectSeries = rejectSeries;\nexports.retry = retry;\nexports.retryable = retryable;\nexports.seq = seq;\nexports.series = series;\nexports.setImmediate = setImmediate$1;\nexports.some = some;\nexports.someLimit = someLimit;\nexports.someSeries = someSeries;\nexports.sortBy = sortBy;\nexports.timeout = timeout;\nexports.times = times;\nexports.timesLimit = timeLimit;\nexports.timesSeries = timesSeries;\nexports.transform = transform;\nexports.tryEach = tryEach;\nexports.unmemoize = unmemoize;\nexports.until = until;\nexports.waterfall = waterfall;\nexports.whilst = whilst;\nexports.all = every;\nexports.allLimit = everyLimit;\nexports.allSeries = everySeries;\nexports.any = some;\nexports.anyLimit = someLimit;\nexports.anySeries = someSeries;\nexports.find = detect;\nexports.findLimit = detectLimit;\nexports.findSeries = detectSeries;\nexports.forEach = eachLimit;\nexports.forEachSeries = eachSeries;\nexports.forEachLimit = eachLimit$1;\nexports.forEachOf = eachOf;\nexports.forEachOfSeries = eachOfSeries;\nexports.forEachOfLimit = eachOfLimit;\nexports.inject = reduce;\nexports.foldl = reduce;\nexports.foldr = reduceRight;\nexports.select = filter;\nexports.selectLimit = filterLimit;\nexports.selectSeries = filterSeries;\nexports.wrapSync = asyncify;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n",
    "var hat = module.exports = function (bits, base) {\n    if (!base) base = 16;\n    if (bits === undefined) bits = 128;\n    if (bits <= 0) return '0';\n    \n    var digits = Math.log(Math.pow(2, bits)) / Math.log(base);\n    for (var i = 2; digits === Infinity; i *= 2) {\n        digits = Math.log(Math.pow(2, bits / i)) / Math.log(base) * i;\n    }\n    \n    var rem = digits - Math.floor(digits);\n    \n    var res = '';\n    \n    for (var i = 0; i < Math.floor(digits); i++) {\n        var x = Math.floor(Math.random() * base).toString(base);\n        res = x + res;\n    }\n    \n    if (rem) {\n        var b = Math.pow(base, rem);\n        var x = Math.floor(Math.random() * b).toString(base);\n        res = x + res;\n    }\n    \n    var parsed = parseInt(res, base);\n    if (parsed !== Infinity && parsed >= Math.pow(2, bits)) {\n        return hat(bits, base)\n    }\n    else return res;\n};\n\nhat.rack = function (bits, base, expandBy) {\n    var fn = function (data) {\n        var iters = 0;\n        do {\n            if (iters ++ > 10) {\n                if (expandBy) bits += expandBy;\n                else throw new Error('too many ID collisions, use more bits')\n            }\n            \n            var id = hat(bits, base);\n        } while (Object.hasOwnProperty.call(hats, id));\n        \n        hats[id] = data;\n        return id;\n    };\n    var hats = fn.hats = {};\n    \n    fn.get = function (id) {\n        return fn.hats[id];\n    };\n    \n    fn.set = function (id, value) {\n        fn.hats[id] = value;\n        return fn;\n    };\n    \n    fn.bits = bits || 128;\n    fn.base = base || 16;\n    return fn;\n};\n",
    "var emitter = require('../../emitter');\nvar LocalPresence = require('./local-presence');\nvar RemotePresence = require('./remote-presence');\nvar util = require('../../util');\nvar async = require('async');\nvar hat = require('hat');\n\nmodule.exports = Presence;\nfunction Presence(connection, channel) {\n  emitter.EventEmitter.call(this);\n\n  if (!channel || typeof channel !== 'string') {\n    throw new Error('Presence channel must be provided');\n  }\n\n  this.connection = connection;\n  this.channel = channel;\n\n  this.wantSubscribe = false;\n  this.subscribed = false;\n  this.remotePresences = {};\n  this.localPresences = {};\n\n  this._remotePresenceInstances = {};\n  this._subscriptionCallbacksBySeq = {};\n}\nemitter.mixin(Presence);\n\nPresence.prototype.subscribe = function(callback) {\n  this._sendSubscriptionAction(true, callback);\n};\n\nPresence.prototype.unsubscribe = function(callback) {\n  this._sendSubscriptionAction(false, callback);\n};\n\nPresence.prototype.create = function(id) {\n  id = id || hat();\n  var localPresence = this._createLocalPresence(id);\n  this.localPresences[id] = localPresence;\n  return localPresence;\n};\n\nPresence.prototype.destroy = function(callback) {\n  var presence = this;\n  this.unsubscribe(function(error) {\n    if (error) return presence._callbackOrEmit(error, callback);\n    var localIds = Object.keys(presence.localPresences);\n    var remoteIds = Object.keys(presence._remotePresenceInstances);\n    async.parallel(\n      [\n        function(next) {\n          async.each(localIds, function(presenceId, next) {\n            presence.localPresences[presenceId].destroy(next);\n          }, next);\n        },\n        function(next) {\n          async.each(remoteIds, function(presenceId, next) {\n            presence._remotePresenceInstances[presenceId].destroy(next);\n          }, next);\n        }\n      ],\n      function(error) {\n        delete presence.connection._presences[presence.channel];\n        presence._callbackOrEmit(error, callback);\n      }\n    );\n  });\n};\n\nPresence.prototype._sendSubscriptionAction = function(wantSubscribe, callback) {\n  this.wantSubscribe = !!wantSubscribe;\n  var action = this.wantSubscribe ? 'ps' : 'pu';\n  var seq = this.connection._presenceSeq++;\n  this._subscriptionCallbacksBySeq[seq] = callback;\n  if (this.connection.canSend) {\n    this.connection._sendPresenceAction(action, seq, this);\n  }\n};\n\nPresence.prototype._handleSubscribe = function(error, seq) {\n  if (this.wantSubscribe) this.subscribed = true;\n  var callback = this._subscriptionCallback(seq);\n  this._callbackOrEmit(error, callback);\n};\n\nPresence.prototype._handleUnsubscribe = function(error, seq) {\n  this.subscribed = false;\n  var callback = this._subscriptionCallback(seq);\n  this._callbackOrEmit(error, callback);\n};\n\nPresence.prototype._receiveUpdate = function(error, message) {\n  var localPresence = util.dig(this.localPresences, message.id);\n  if (localPresence) return localPresence._ack(error, message.pv);\n\n  if (error) return this.emit('error', error);\n  var presence = this;\n  var remotePresence = util.digOrCreate(this._remotePresenceInstances, message.id, function() {\n    return presence._createRemotePresence(message.id);\n  });\n\n  remotePresence.receiveUpdate(message);\n};\n\nPresence.prototype._updateRemotePresence = function(remotePresence) {\n  this.remotePresences[remotePresence.presenceId] = remotePresence.value;\n  if (remotePresence.value === null) this._removeRemotePresence(remotePresence.presenceId);\n  this.emit('receive', remotePresence.presenceId, remotePresence.value);\n};\n\nPresence.prototype._broadcastAllLocalPresence = function(error) {\n  if (error) return this.emit('error', error);\n  for (var id in this.localPresences) {\n    var localPresence = this.localPresences[id];\n    if (localPresence.value !== null) localPresence.send();\n  }\n};\n\nPresence.prototype._removeRemotePresence = function(id) {\n  this._remotePresenceInstances[id].destroy();\n  delete this._remotePresenceInstances[id];\n  delete this.remotePresences[id];\n};\n\nPresence.prototype._onConnectionStateChanged = function() {\n  if (!this.connection.canSend) return;\n  this._resubscribe();\n  for (var id in this.localPresences) {\n    this.localPresences[id]._sendPending();\n  }\n};\n\nPresence.prototype._resubscribe = function() {\n  var callbacks = [];\n  for (var seq in this._subscriptionCallbacksBySeq) {\n    var callback = this._subscriptionCallback(seq);\n    callbacks.push(callback);\n  }\n\n  if (!this.wantSubscribe) return this._callEachOrEmit(callbacks);\n\n  var presence = this;\n  this.subscribe(function(error) {\n    presence._callEachOrEmit(callbacks, error);\n  });\n};\n\nPresence.prototype._subscriptionCallback = function(seq) {\n  var callback = this._subscriptionCallbacksBySeq[seq];\n  delete this._subscriptionCallbacksBySeq[seq];\n  return callback;\n};\n\nPresence.prototype._callbackOrEmit = function(error, callback) {\n  if (callback) return util.nextTick(callback, error);\n  if (error) this.emit('error', error);\n};\n\nPresence.prototype._createLocalPresence = function(id) {\n  return new LocalPresence(this, id);\n};\n\nPresence.prototype._createRemotePresence = function(id) {\n  return new RemotePresence(this, id);\n};\n\nPresence.prototype._callEachOrEmit = function(callbacks, error) {\n  var called = util.callEach(callbacks, error);\n  if (!called && error) this.emit('error', error);\n};\n",
    "var LocalPresence = require('./local-presence');\nvar ShareDBError = require('../../error');\nvar util = require('../../util');\nvar ERROR_CODE = ShareDBError.CODES;\n\nmodule.exports = LocalDocPresence;\nfunction LocalDocPresence(presence, presenceId) {\n  LocalPresence.call(this, presence, presenceId);\n\n  this.collection = this.presence.collection;\n  this.id = this.presence.id;\n\n  this._doc = this.connection.get(this.collection, this.id);\n  this._isSending = false;\n\n  this._opHandler = this._transformAgainstOp.bind(this);\n  this._createOrDelHandler = this._handleCreateOrDel.bind(this);\n  this._loadHandler = this._handleLoad.bind(this);\n  this._destroyHandler = this.destroy.bind(this);\n  this._registerWithDoc();\n}\n\nLocalDocPresence.prototype = Object.create(LocalPresence.prototype);\n\nLocalDocPresence.prototype.submit = function(value, callback) {\n  if (!this._doc.type) {\n    // If the Doc hasn't been created, we already assume all presence to\n    // be null. Let's early return, instead of error since this is a harmless\n    // no-op\n    if (value === null) return this._callbackOrEmit(null, callback);\n    var error = {\n      code: ERROR_CODE.ERR_DOC_DOES_NOT_EXIST,\n      message: 'Cannot submit presence. Document has not been created'\n    };\n    return this._callbackOrEmit(error, callback);\n  };\n\n  LocalPresence.prototype.submit.call(this, value, callback);\n};\n\nLocalDocPresence.prototype.destroy = function(callback) {\n  this._doc.removeListener('op', this._opHandler);\n  this._doc.removeListener('create', this._createOrDelHandler);\n  this._doc.removeListener('del', this._createOrDelHandler);\n  this._doc.removeListener('load', this._loadHandler);\n  this._doc.removeListener('destroy', this._destroyHandler);\n\n  LocalPresence.prototype.destroy.call(this, callback);\n};\n\nLocalDocPresence.prototype._sendPending = function() {\n  if (this._isSending) return;\n  this._isSending = true;\n  var presence = this;\n  this._doc.whenNothingPending(function() {\n    presence._isSending = false;\n    if (!presence.connection.canSend) return;\n\n    presence._pendingMessages.forEach(function(message) {\n      message.t = presence._doc.type.uri;\n      message.v = presence._doc.version;\n      presence.connection.send(message);\n    });\n\n    presence._pendingMessages = [];\n  });\n};\n\nLocalDocPresence.prototype._registerWithDoc = function() {\n  this._doc.on('op', this._opHandler);\n  this._doc.on('create', this._createOrDelHandler);\n  this._doc.on('del', this._createOrDelHandler);\n  this._doc.on('load', this._loadHandler);\n  this._doc.on('destroy', this._destroyHandler);\n};\n\nLocalDocPresence.prototype._transformAgainstOp = function(op, source) {\n  var presence = this;\n  this._pendingMessages.forEach(function(message) {\n    try {\n      message.p = presence._transformPresence(message.p, op, source);\n    } catch (error) {\n      var callback = presence._getCallback(message.pv);\n      presence._callbackOrEmit(error, callback);\n    }\n  });\n\n  try {\n    this.value = this._transformPresence(this.value, op, source);\n  } catch (error) {\n    this.emit('error', error);\n  }\n};\n\nLocalDocPresence.prototype._handleCreateOrDel = function() {\n  this._pendingMessages.forEach(function(message) {\n    message.p = null;\n  });\n\n  this.value = null;\n};\n\nLocalDocPresence.prototype._handleLoad = function() {\n  this.value = null;\n  this._pendingMessages = [];\n};\n\nLocalDocPresence.prototype._message = function() {\n  var message = LocalPresence.prototype._message.call(this);\n  message.c = this.collection,\n  message.d = this.id,\n  message.v = null;\n  message.t = null;\n  return message;\n};\n\nLocalDocPresence.prototype._transformPresence = function(value, op, source) {\n  var type = this._doc.type;\n  if (!util.supportsPresence(type)) {\n    throw new ShareDBError(\n      ERROR_CODE.ERR_TYPE_DOES_NOT_SUPPORT_PRESENCE,\n      'Type does not support presence: ' + type.name\n    );\n  }\n  return type.transformPresence(value, op, source);\n};\n",
    "// This contains the master OT functions for the database. They look like\n// ot-types style operational transform functions, but they're a bit different.\n// These functions understand versions and can deal with out of bound create &\n// delete operations.\n\nvar types = require('./types');\nvar ShareDBError = require('./error');\nvar util = require('./util');\n\nvar ERROR_CODE = ShareDBError.CODES;\n\n// Returns an error string on failure. Rockin' it C style.\nexports.checkOp = function(op) {\n  if (op == null || typeof op !== 'object') {\n    return new ShareDBError(ERROR_CODE.ERR_OT_OP_BADLY_FORMED, 'Op must be an object');\n  }\n\n  if (op.create != null) {\n    if (typeof op.create !== 'object') {\n      return new ShareDBError(ERROR_CODE.ERR_OT_OP_BADLY_FORMED, 'Create data must be an object');\n    }\n    var typeName = op.create.type;\n    if (typeof typeName !== 'string') {\n      return new ShareDBError(ERROR_CODE.ERR_OT_OP_BADLY_FORMED, 'Missing create type');\n    }\n    var type = types.map[typeName];\n    if (type == null || typeof type !== 'object') {\n      return new ShareDBError(ERROR_CODE.ERR_DOC_TYPE_NOT_RECOGNIZED, 'Unknown type');\n    }\n  } else if (op.del != null) {\n    if (op.del !== true) return new ShareDBError(ERROR_CODE.ERR_OT_OP_BADLY_FORMED, 'del value must be true');\n  } else if (!('op' in op)) {\n    return new ShareDBError(ERROR_CODE.ERR_OT_OP_BADLY_FORMED, 'Missing op, create, or del');\n  }\n\n  if (op.src != null && typeof op.src !== 'string') {\n    return new ShareDBError(ERROR_CODE.ERR_OT_OP_BADLY_FORMED, 'src must be a string');\n  }\n  if (op.seq != null && typeof op.seq !== 'number') {\n    return new ShareDBError(ERROR_CODE.ERR_OT_OP_BADLY_FORMED, 'seq must be a number');\n  }\n  if (\n    (op.src == null && op.seq != null) ||\n    (op.src != null && op.seq == null)\n  ) {\n    return new ShareDBError(ERROR_CODE.ERR_OT_OP_BADLY_FORMED, 'Both src and seq must be set together');\n  }\n\n  if (op.m != null && typeof op.m !== 'object') {\n    return new ShareDBError(ERROR_CODE.ERR_OT_OP_BADLY_FORMED, 'op.m must be an object or null');\n  }\n};\n\n// Takes in a string (type name or URI) and returns the normalized name (uri)\nexports.normalizeType = function(typeName) {\n  return types.map[typeName] && types.map[typeName].uri;\n};\n\n// This is the super apply function that takes in snapshot data (including the\n// type) and edits it in-place. Returns an error or null for success.\nexports.apply = function(snapshot, op) {\n  if (typeof snapshot !== 'object') {\n    return new ShareDBError(ERROR_CODE.ERR_APPLY_SNAPSHOT_NOT_PROVIDED, 'Missing snapshot');\n  }\n  if (snapshot.v != null && op.v != null && snapshot.v !== op.v) {\n    return new ShareDBError(ERROR_CODE.ERR_APPLY_OP_VERSION_DOES_NOT_MATCH_SNAPSHOT, 'Version mismatch');\n  }\n\n  // Create operation\n  if (op.create) {\n    if (snapshot.type) return new ShareDBError(ERROR_CODE.ERR_DOC_ALREADY_CREATED, 'Document already exists');\n\n    // The document doesn't exist, although it might have once existed\n    var create = op.create;\n    var type = types.map[create.type];\n    if (!type) return new ShareDBError(ERROR_CODE.ERR_DOC_TYPE_NOT_RECOGNIZED, 'Unknown type');\n\n    try {\n      snapshot.data = type.create(create.data);\n      snapshot.type = type.uri;\n      snapshot.v++;\n    } catch (err) {\n      return err;\n    }\n\n  // Delete operation\n  } else if (op.del) {\n    snapshot.data = undefined;\n    snapshot.type = null;\n    snapshot.v++;\n\n  // Edit operation\n  } else if ('op' in op) {\n    var err = applyOpEdit(snapshot, op.op);\n    if (err) return err;\n    snapshot.v++;\n\n  // No-op, and we don't have to do anything\n  } else {\n    snapshot.v++;\n  }\n};\n\nfunction applyOpEdit(snapshot, edit) {\n  if (!snapshot.type) return new ShareDBError(ERROR_CODE.ERR_DOC_DOES_NOT_EXIST, 'Document does not exist');\n\n  if (edit === undefined) return new ShareDBError(ERROR_CODE.ERR_OT_OP_NOT_PROVIDED, 'Missing op');\n  var type = types.map[snapshot.type];\n  if (!type) return new ShareDBError(ERROR_CODE.ERR_DOC_TYPE_NOT_RECOGNIZED, 'Unknown type');\n\n  try {\n    snapshot.data = type.apply(snapshot.data, edit);\n  } catch (err) {\n    return new ShareDBError(ERROR_CODE.ERR_OT_OP_NOT_APPLIED, err.message);\n  }\n}\n\nexports.transform = function(type, op, appliedOp) {\n  // There are 16 cases this function needs to deal with - which are all the\n  // combinations of create/delete/op/noop from both op and appliedOp\n  if (op.v != null && op.v !== appliedOp.v) {\n    return new ShareDBError(ERROR_CODE.ERR_OP_VERSION_MISMATCH_DURING_TRANSFORM, 'Version mismatch');\n  }\n\n  if (appliedOp.del) {\n    if (op.create || 'op' in op) {\n      return new ShareDBError(ERROR_CODE.ERR_DOC_WAS_DELETED, 'Document was deleted');\n    }\n  } else if (\n    (appliedOp.create && ('op' in op || op.create || op.del)) ||\n    ('op' in appliedOp && op.create)\n  ) {\n    // If appliedOp.create is not true, appliedOp contains an op - which\n    // also means the document exists remotely.\n    return new ShareDBError(ERROR_CODE.ERR_DOC_ALREADY_CREATED, 'Document was created remotely');\n  } else if ('op' in appliedOp && 'op' in op) {\n    // If we reach here, they both have a .op property.\n    if (!type) return new ShareDBError(ERROR_CODE.ERR_DOC_DOES_NOT_EXIST, 'Document does not exist');\n\n    if (typeof type === 'string') {\n      type = types.map[type];\n      if (!type) return new ShareDBError(ERROR_CODE.ERR_DOC_TYPE_NOT_RECOGNIZED, 'Unknown type');\n    }\n\n    try {\n      op.op = type.transform(op.op, appliedOp.op, 'left');\n    } catch (err) {\n      return err;\n    }\n  }\n\n  if (op.v != null) op.v++;\n};\n\n/**\n * Apply an array of ops to the provided snapshot.\n *\n * @param snapshot - a Snapshot object which will be mutated by the provided ops\n * @param ops - an array of ops to apply to the snapshot\n * @param options - options (currently for internal use only)\n * @return an error object if applicable\n */\nexports.applyOps = function(snapshot, ops, options) {\n  options = options || {};\n  for (var index = 0; index < ops.length; index++) {\n    var op = ops[index];\n    if (options._normalizeLegacyJson0Ops) {\n      try {\n        normalizeLegacyJson0Ops(snapshot, op);\n      } catch (error) {\n        return new ShareDBError(\n          ERROR_CODE.ERR_OT_LEGACY_JSON0_OP_CANNOT_BE_NORMALIZED,\n          'Cannot normalize legacy json0 op'\n        );\n      }\n    }\n    snapshot.v = op.v;\n    var error = exports.apply(snapshot, op);\n    if (error) return error;\n  }\n};\n\nexports.transformPresence = function(presence, op, isOwnOp) {\n  var opError = this.checkOp(op);\n  if (opError) return opError;\n\n  var type = presence.t;\n  if (typeof type === 'string') {\n    type = types.map[type];\n  }\n  if (!type) return {code: ERROR_CODE.ERR_DOC_TYPE_NOT_RECOGNIZED, message: 'Unknown type'};\n  if (!util.supportsPresence(type)) {\n    return {code: ERROR_CODE.ERR_TYPE_DOES_NOT_SUPPORT_PRESENCE, message: 'Type does not support presence'};\n  }\n\n  if (op.create || op.del) {\n    presence.p = null;\n    presence.v++;\n    return;\n  }\n\n  try {\n    presence.p = presence.p === null ?\n      null :\n      type.transformPresence(presence.p, op.op, isOwnOp);\n  } catch (error) {\n    return {code: ERROR_CODE.ERR_PRESENCE_TRANSFORM_FAILED, message: error.message || error};\n  }\n\n  presence.v++;\n};\n\n/**\n * json0 had a breaking change in https://github.com/ottypes/json0/pull/40\n * The change added stricter type checking, which breaks fetchSnapshot()\n * when trying to rebuild a snapshot from old, committed ops that didn't\n * have this stricter validation. This method fixes up legacy ops to\n * pass the stricter validation\n */\nfunction normalizeLegacyJson0Ops(snapshot, json0Op) {\n  if (snapshot.type !== types.defaultType.uri) return;\n  var components = json0Op.op;\n  if (!components) return;\n  for (var i = 0; i < components.length; i++) {\n    var component = components[i];\n    if (typeof component.lm === 'string') component.lm = +component.lm;\n    var path = component.p;\n    var element = snapshot.data;\n    for (var j = 0; j < path.length; j++) {\n      var key = path[j];\n      // https://github.com/ottypes/json0/blob/73db17e86adc5d801951d1a69453b01382e66c7d/lib/json0.js#L21\n      if (Object.prototype.toString.call(element) == '[object Array]') path[j] = +key;\n      // https://github.com/ottypes/json0/blob/73db17e86adc5d801951d1a69453b01382e66c7d/lib/json0.js#L32\n      else if (element.constructor === Object) path[j] = key.toString();\n      element = element[key];\n    }\n  }\n}\n",
    "var RemotePresence = require('./remote-presence');\nvar ot = require('../../ot');\n\nmodule.exports = RemoteDocPresence;\nfunction RemoteDocPresence(presence, presenceId) {\n  RemotePresence.call(this, presence, presenceId);\n\n  this.collection = this.presence.collection;\n  this.id = this.presence.id;\n  this.src = null;\n  this.presenceVersion = null;\n\n  this._doc = this.connection.get(this.collection, this.id);\n  this._pending = null;\n  this._opCache = null;\n  this._pendingSetPending = false;\n\n  this._opHandler = this._handleOp.bind(this);\n  this._createDelHandler = this._handleCreateDel.bind(this);\n  this._loadHandler = this._handleLoad.bind(this);\n  this._registerWithDoc();\n}\n\nRemoteDocPresence.prototype = Object.create(RemotePresence.prototype);\n\nRemoteDocPresence.prototype.receiveUpdate = function(message) {\n  if (this._pending && message.pv < this._pending.pv) return;\n  this.src = message.src;\n  this._pending = message;\n  this._setPendingPresence();\n};\n\nRemoteDocPresence.prototype.destroy = function(callback) {\n  this._doc.removeListener('op', this._opHandler);\n  this._doc.removeListener('create', this._createDelHandler);\n  this._doc.removeListener('del', this._createDelHandler);\n  this._doc.removeListener('load', this._loadHandler);\n\n  RemotePresence.prototype.destroy.call(this, callback);\n};\n\nRemoteDocPresence.prototype._registerWithDoc = function() {\n  this._doc.on('op', this._opHandler);\n  this._doc.on('create', this._createDelHandler);\n  this._doc.on('del', this._createDelHandler);\n  this._doc.on('load', this._loadHandler);\n};\n\nRemoteDocPresence.prototype._setPendingPresence = function() {\n  if (this._pendingSetPending) return;\n  this._pendingSetPending = true;\n  var presence = this;\n  this._doc.whenNothingPending(function() {\n    presence._pendingSetPending = false;\n    if (!presence._pending) return;\n    if (presence._pending.pv < presence.presenceVersion) return presence._pending = null;\n\n    if (presence._pending.v > presence._doc.version) {\n      return presence._doc.fetch();\n    }\n\n    if (!presence._catchUpStalePresence()) return;\n\n    presence.value = presence._pending.p;\n    presence.presenceVersion = presence._pending.pv;\n    presence._pending = null;\n    presence.presence._updateRemotePresence(presence);\n  });\n};\n\nRemoteDocPresence.prototype._handleOp = function(op, source, connectionId) {\n  var isOwnOp = connectionId === this.src;\n  this._transformAgainstOp(op, isOwnOp);\n  this._cacheOp(op, isOwnOp);\n  this._setPendingPresence();\n};\n\nRemotePresence.prototype._handleCreateDel = function() {\n  this._cacheOp(null);\n  this._setPendingPresence();\n};\n\nRemotePresence.prototype._handleLoad = function() {\n  this.value = null;\n  this._pending = null;\n  this._opCache = null;\n  this.presence._updateRemotePresence(this);\n};\n\nRemoteDocPresence.prototype._transformAgainstOp = function(op, isOwnOp) {\n  if (!this.value) return;\n\n  try {\n    this.value = this._doc.type.transformPresence(this.value, op, isOwnOp);\n  } catch (error) {\n    return this.presence.emit('error', error);\n  }\n  this.presence._updateRemotePresence(this);\n};\n\nRemoteDocPresence.prototype._catchUpStalePresence = function() {\n  if (this._pending.v >= this._doc.version) return true;\n\n  if (!this._opCache) {\n    this._startCachingOps();\n    this._doc.fetch();\n    // We're already subscribed, but we send another subscribe message\n    // to force presence updates from other clients\n    this.presence.subscribe();\n    return false;\n  }\n\n  while (this._opCache[this._pending.v]) {\n    var item = this._opCache[this._pending.v];\n    var op = item.op;\n    var isOwnOp = item.isOwnOp;\n    // We use a null op to signify a create or a delete operation. In both\n    // cases we just want to reset the presence (which doesn't make sense\n    // in a new document), so just set the presence to null.\n    if (op === null) {\n      this._pending.p = null;\n      this._pending.v++;\n    } else {\n      ot.transformPresence(this._pending, op, isOwnOp);\n    }\n  }\n\n  var hasCaughtUp = this._pending.v >= this._doc.version;\n  if (hasCaughtUp) {\n    this._stopCachingOps();\n  }\n\n  return hasCaughtUp;\n};\n\nRemoteDocPresence.prototype._startCachingOps = function() {\n  this._opCache = [];\n};\n\nRemoteDocPresence.prototype._stopCachingOps = function() {\n  this._opCache = null;\n};\n\nRemoteDocPresence.prototype._cacheOp = function(op, isOwnOp) {\n  if (this._opCache) {\n    op = op ? {op: op} : null;\n    // Subtract 1 from the current doc version, because an op with v3\n    // should be read as the op that takes a doc from v3 -> v4\n    this._opCache[this._doc.version - 1] = {op: op, isOwnOp: isOwnOp};\n  }\n};\n",
    "var Presence = require('./presence');\nvar LocalDocPresence = require('./local-doc-presence');\nvar RemoteDocPresence = require('./remote-doc-presence');\n\nfunction DocPresence(connection, collection, id) {\n  var channel = DocPresence.channel(collection, id);\n  Presence.call(this, connection, channel);\n\n  this.collection = collection;\n  this.id = id;\n}\nmodule.exports = DocPresence;\n\nDocPresence.prototype = Object.create(Presence.prototype);\n\nDocPresence.channel = function(collection, id) {\n  return collection + '.' + id;\n};\n\nDocPresence.prototype._createLocalPresence = function(id) {\n  return new LocalDocPresence(this, id);\n};\n\nDocPresence.prototype._createRemotePresence = function(id) {\n  return new RemoteDocPresence(this, id);\n};\n",
    "module.exports = Snapshot;\nfunction Snapshot(id, version, type, data, meta) {\n  this.id = id;\n  this.v = version;\n  this.type = type;\n  this.data = data;\n  this.m = meta;\n}\n",
    "var Snapshot = require('../../snapshot');\nvar emitter = require('../../emitter');\n\nmodule.exports = SnapshotRequest;\n\nfunction SnapshotRequest(connection, requestId, collection, id, callback) {\n  emitter.EventEmitter.call(this);\n\n  if (typeof callback !== 'function') {\n    throw new Error('Callback is required for SnapshotRequest');\n  }\n\n  this.requestId = requestId;\n  this.connection = connection;\n  this.id = id;\n  this.collection = collection;\n  this.callback = callback;\n\n  this.sent = false;\n}\nemitter.mixin(SnapshotRequest);\n\nSnapshotRequest.prototype.send = function() {\n  if (!this.connection.canSend) {\n    return;\n  }\n\n  this.connection.send(this._message());\n  this.sent = true;\n};\n\nSnapshotRequest.prototype._onConnectionStateChanged = function() {\n  if (this.connection.canSend) {\n    if (!this.sent) this.send();\n  } else {\n    // If the connection can't send, then we've had a disconnection, and even if we've already sent\n    // the request previously, we need to re-send it over this reconnected client, so reset the\n    // sent flag to false.\n    this.sent = false;\n  }\n};\n\nSnapshotRequest.prototype._handleResponse = function(error, message) {\n  this.emit('ready');\n\n  if (error) {\n    return this.callback(error);\n  }\n\n  var metadata = message.meta ? message.meta : null;\n  var snapshot = new Snapshot(this.id, message.v, message.type, message.data, metadata);\n\n  this.callback(null, snapshot);\n};\n",
    "var SnapshotRequest = require('./snapshot-request');\nvar util = require('../../util');\n\nmodule.exports = SnapshotVersionRequest;\n\nfunction SnapshotVersionRequest(connection, requestId, collection, id, version, callback) {\n  SnapshotRequest.call(this, connection, requestId, collection, id, callback);\n\n  if (!util.isValidVersion(version)) {\n    throw new Error('Snapshot version must be a positive integer or null');\n  }\n\n  this.version = version;\n}\n\nSnapshotVersionRequest.prototype = Object.create(SnapshotRequest.prototype);\n\nSnapshotVersionRequest.prototype._message = function() {\n  return {\n    a: 'nf',\n    id: this.requestId,\n    c: this.collection,\n    d: this.id,\n    v: this.version\n  };\n};\n",
    "var SnapshotRequest = require('./snapshot-request');\nvar util = require('../../util');\n\nmodule.exports = SnapshotTimestampRequest;\n\nfunction SnapshotTimestampRequest(connection, requestId, collection, id, timestamp, callback) {\n  SnapshotRequest.call(this, connection, requestId, collection, id, callback);\n\n  if (!util.isValidTimestamp(timestamp)) {\n    throw new Error('Snapshot timestamp must be a positive integer or null');\n  }\n\n  this.timestamp = timestamp;\n}\n\nSnapshotTimestampRequest.prototype = Object.create(SnapshotRequest.prototype);\n\nSnapshotTimestampRequest.prototype._message = function() {\n  return {\n    a: 'nt',\n    id: this.requestId,\n    c: this.collection,\n    d: this.id,\n    ts: this.timestamp\n  };\n};\n",
    "var Doc = require('./doc');\nvar Query = require('./query');\nvar Presence = require('./presence/presence');\nvar DocPresence = require('./presence/doc-presence');\nvar SnapshotVersionRequest = require('./snapshot-request/snapshot-version-request');\nvar SnapshotTimestampRequest = require('./snapshot-request/snapshot-timestamp-request');\nvar emitter = require('../emitter');\nvar ShareDBError = require('../error');\nvar types = require('../types');\nvar util = require('../util');\nvar logger = require('../logger');\n\nvar ERROR_CODE = ShareDBError.CODES;\n\nfunction connectionState(socket) {\n  if (socket.readyState === 0 || socket.readyState === 1) return 'connecting';\n  return 'disconnected';\n}\n\n/**\n * Handles communication with the sharejs server and provides queries and\n * documents.\n *\n * We create a connection with a socket object\n *   connection = new sharejs.Connection(sockset)\n * The socket may be any object handling the websocket protocol. See the\n * documentation of bindToSocket() for details. We then wait for the connection\n * to connect\n *   connection.on('connected', ...)\n * and are finally able to work with shared documents\n *   connection.get('food', 'steak') // Doc\n *\n * @param socket @see bindToSocket\n */\nmodule.exports = Connection;\nfunction Connection(socket) {\n  emitter.EventEmitter.call(this);\n\n  // Map of collection -> id -> doc object for created documents.\n  // (created documents MUST BE UNIQUE)\n  this.collections = {};\n\n  // Each query and snapshot request is created with an id that the server uses when it sends us\n  // info about the request (updates, etc)\n  this.nextQueryId = 1;\n  this.nextSnapshotRequestId = 1;\n\n  // Map from query ID -> query object.\n  this.queries = {};\n\n  // Maps from channel -> presence objects\n  this._presences = {};\n\n  // Map from snapshot request ID -> snapshot request\n  this._snapshotRequests = {};\n\n  // A unique message number for the given id\n  this.seq = 1;\n\n  // A unique message number for presence\n  this._presenceSeq = 1;\n\n  // Equals agent.src on the server\n  this.id = null;\n\n  // This direct reference from connection to agent is not used internal to\n  // ShareDB, but it is handy for server-side only user code that may cache\n  // state on the agent and read it in middleware\n  this.agent = null;\n\n  this.debug = false;\n\n  this.state = connectionState(socket);\n\n  this.bindToSocket(socket);\n}\nemitter.mixin(Connection);\n\n\n/**\n * Use socket to communicate with server\n *\n * Socket is an object that can handle the websocket protocol. This method\n * installs the onopen, onclose, onmessage and onerror handlers on the socket to\n * handle communication and sends messages by calling socket.send(message). The\n * sockets `readyState` property is used to determine the initaial state.\n *\n * @param socket Handles the websocket protocol\n * @param socket.readyState\n * @param socket.close\n * @param socket.send\n * @param socket.onopen\n * @param socket.onclose\n * @param socket.onmessage\n * @param socket.onerror\n */\nConnection.prototype.bindToSocket = function(socket) {\n  if (this.socket) {\n    this.socket.close();\n    this.socket.onmessage = null;\n    this.socket.onopen = null;\n    this.socket.onerror = null;\n    this.socket.onclose = null;\n  }\n\n  this.socket = socket;\n\n  // State of the connection. The corresponding events are emitted when this changes\n  //\n  // - 'connecting'   The connection is still being established, or we are still\n  //                    waiting on the server to send us the initialization message\n  // - 'connected'    The connection is open and we have connected to a server\n  //                    and recieved the initialization message\n  // - 'disconnected' Connection is closed, but it will reconnect automatically\n  // - 'closed'       The connection was closed by the client, and will not reconnect\n  // - 'stopped'      The connection was closed by the server, and will not reconnect\n  var newState = connectionState(socket);\n  this._setState(newState);\n\n  // This is a helper variable the document uses to see whether we're\n  // currently in a 'live' state. It is true if and only if we're connected\n  this.canSend = false;\n\n  var connection = this;\n\n  socket.onmessage = function(event) {\n    try {\n      var data = (typeof event.data === 'string') ?\n        JSON.parse(event.data) : event.data;\n    } catch (err) {\n      logger.warn('Failed to parse message', event);\n      return;\n    }\n\n    if (connection.debug) logger.info('RECV', JSON.stringify(data));\n\n    var request = {data: data};\n    connection.emit('receive', request);\n    if (!request.data) return;\n\n    try {\n      connection.handleMessage(request.data);\n    } catch (err) {\n      util.nextTick(function() {\n        connection.emit('error', err);\n      });\n    }\n  };\n\n  // If socket is already open, do handshake immediately.\n  if (socket.readyState === 1) {\n    connection._initializeHandshake();\n  }\n  socket.onopen = function() {\n    connection._setState('connecting');\n    connection._initializeHandshake();\n  };\n\n  socket.onerror = function(err) {\n    // This isn't the same as a regular error, because it will happen normally\n    // from time to time. Your connection should probably automatically\n    // reconnect anyway, but that should be triggered off onclose not onerror.\n    // (onclose happens when onerror gets called anyway).\n    connection.emit('connection error', err);\n  };\n\n  socket.onclose = function(reason) {\n    // node-browserchannel reason values:\n    //   'Closed' - The socket was manually closed by calling socket.close()\n    //   'Stopped by server' - The server sent the stop message to tell the client not to try connecting\n    //   'Request failed' - Server didn't respond to request (temporary, usually offline)\n    //   'Unknown session ID' - Server session for client is missing (temporary, will immediately reestablish)\n\n    if (reason === 'closed' || reason === 'Closed') {\n      connection._setState('closed', reason);\n    } else if (reason === 'stopped' || reason === 'Stopped by server') {\n      connection._setState('stopped', reason);\n    } else {\n      connection._setState('disconnected', reason);\n    }\n  };\n};\n\n/**\n * @param {object} message\n * @param {string} message.a action\n */\nConnection.prototype.handleMessage = function(message) {\n  var err = null;\n  if (message.error) {\n    err = wrapErrorData(message.error, message);\n    delete message.error;\n  }\n  // Switch on the message action. Most messages are for documents and are\n  // handled in the doc class.\n  switch (message.a) {\n    case 'init':\n      // Client initialization packet\n      return this._handleLegacyInit(message);\n    case 'hs':\n      return this._handleHandshake(err, message);\n    case 'qf':\n      var query = this.queries[message.id];\n      if (query) query._handleFetch(err, message.data, message.extra);\n      return;\n    case 'qs':\n      var query = this.queries[message.id];\n      if (query) query._handleSubscribe(err, message.data, message.extra);\n      return;\n    case 'qu':\n      // Queries are removed immediately on calls to destroy, so we ignore\n      // replies to query unsubscribes. Perhaps there should be a callback for\n      // destroy, but this is currently unimplemented\n      return;\n    case 'q':\n      // Query message. Pass this to the appropriate query object.\n      var query = this.queries[message.id];\n      if (!query) return;\n      if (err) return query._handleError(err);\n      if (message.diff) query._handleDiff(message.diff);\n      if (message.hasOwnProperty('extra')) query._handleExtra(message.extra);\n      return;\n\n    case 'bf':\n      return this._handleBulkMessage(err, message, '_handleFetch');\n    case 'bs':\n    case 'bu':\n      return this._handleBulkMessage(err, message, '_handleSubscribe');\n\n    case 'nf':\n    case 'nt':\n      return this._handleSnapshotFetch(err, message);\n\n    case 'f':\n      var doc = this.getExisting(message.c, message.d);\n      if (doc) doc._handleFetch(err, message.data);\n      return;\n    case 's':\n    case 'u':\n      var doc = this.getExisting(message.c, message.d);\n      if (doc) doc._handleSubscribe(err, message.data);\n      return;\n    case 'op':\n      var doc = this.getExisting(message.c, message.d);\n      if (doc) doc._handleOp(err, message);\n      return;\n    case 'p':\n      return this._handlePresence(err, message);\n    case 'ps':\n      return this._handlePresenceSubscribe(err, message);\n    case 'pu':\n      return this._handlePresenceUnsubscribe(err, message);\n    case 'pr':\n      return this._handlePresenceRequest(err, message);\n\n    default:\n      logger.warn('Ignoring unrecognized message', message);\n  }\n};\n\nfunction wrapErrorData(errorData, fullMessage) {\n  // wrap in Error object so can be passed through event emitters\n  var err = new Error(errorData.message);\n  err.code = errorData.code;\n  if (fullMessage) {\n    // Add the message data to the error object for more context\n    err.data = fullMessage;\n  }\n  return err;\n}\n\nConnection.prototype._handleBulkMessage = function(err, message, method) {\n  if (message.data) {\n    for (var id in message.data) {\n      var dataForId = message.data[id];\n      var doc = this.getExisting(message.c, id);\n      if (doc) {\n        if (err) {\n          doc[method](err);\n        } else if (dataForId.error) {\n          // Bulk reply snapshot-specific errorr - see agent.js getMapResult\n          doc[method](wrapErrorData(dataForId.error));\n        } else {\n          doc[method](null, dataForId);\n        }\n      }\n    }\n  } else if (Array.isArray(message.b)) {\n    for (var i = 0; i < message.b.length; i++) {\n      var id = message.b[i];\n      var doc = this.getExisting(message.c, id);\n      if (doc) doc[method](err);\n    }\n  } else if (message.b) {\n    for (var id in message.b) {\n      var doc = this.getExisting(message.c, id);\n      if (doc) doc[method](err);\n    }\n  } else {\n    logger.error('Invalid bulk message', message);\n  }\n};\n\nConnection.prototype._reset = function() {\n  this.agent = null;\n};\n\n// Set the connection's state. The connection is basically a state machine.\nConnection.prototype._setState = function(newState, reason) {\n  if (this.state === newState) return;\n\n  // I made a state diagram. The only invalid transitions are getting to\n  // 'connecting' from anywhere other than 'disconnected' and getting to\n  // 'connected' from anywhere other than 'connecting'.\n  if (\n    (\n      newState === 'connecting' &&\n      this.state !== 'disconnected' &&\n      this.state !== 'stopped' &&\n      this.state !== 'closed'\n    ) || (\n      newState === 'connected' &&\n      this.state !== 'connecting'\n    )\n  ) {\n    var err = new ShareDBError(\n      ERROR_CODE.ERR_CONNECTION_STATE_TRANSITION_INVALID,\n      'Cannot transition directly from ' + this.state + ' to ' + newState\n    );\n    return this.emit('error', err);\n  }\n\n  this.state = newState;\n  this.canSend = (newState === 'connected');\n\n  if (\n    newState === 'disconnected' ||\n    newState === 'stopped' ||\n    newState === 'closed'\n  ) {\n    this._reset();\n  }\n\n  // Group subscribes together to help server make more efficient calls\n  this.startBulk();\n  // Emit the event to all queries\n  for (var id in this.queries) {\n    var query = this.queries[id];\n    query._onConnectionStateChanged();\n  }\n  // Emit the event to all documents\n  for (var collection in this.collections) {\n    var docs = this.collections[collection];\n    for (var id in docs) {\n      docs[id]._onConnectionStateChanged();\n    }\n  }\n  // Emit the event to all Presences\n  for (var channel in this._presences) {\n    this._presences[channel]._onConnectionStateChanged();\n  }\n  // Emit the event to all snapshots\n  for (var id in this._snapshotRequests) {\n    var snapshotRequest = this._snapshotRequests[id];\n    snapshotRequest._onConnectionStateChanged();\n  }\n  this.endBulk();\n\n  this.emit(newState, reason);\n  this.emit('state', newState, reason);\n};\n\nConnection.prototype.startBulk = function() {\n  if (!this.bulk) this.bulk = {};\n};\n\nConnection.prototype.endBulk = function() {\n  if (this.bulk) {\n    for (var collection in this.bulk) {\n      var actions = this.bulk[collection];\n      this._sendBulk('f', collection, actions.f);\n      this._sendBulk('s', collection, actions.s);\n      this._sendBulk('u', collection, actions.u);\n    }\n  }\n  this.bulk = null;\n};\n\nConnection.prototype._sendBulk = function(action, collection, values) {\n  if (!values) return;\n  var ids = [];\n  var versions = {};\n  var versionsCount = 0;\n  var versionId;\n  for (var id in values) {\n    var value = values[id];\n    if (value == null) {\n      ids.push(id);\n    } else {\n      versions[id] = value;\n      versionId = id;\n      versionsCount++;\n    }\n  }\n  if (ids.length === 1) {\n    var id = ids[0];\n    this.send({a: action, c: collection, d: id});\n  } else if (ids.length) {\n    this.send({a: 'b' + action, c: collection, b: ids});\n  }\n  if (versionsCount === 1) {\n    var version = versions[versionId];\n    this.send({a: action, c: collection, d: versionId, v: version});\n  } else if (versionsCount) {\n    this.send({a: 'b' + action, c: collection, b: versions});\n  }\n};\n\nConnection.prototype._sendAction = function(action, doc, version) {\n  // Ensure the doc is registered so that it receives the reply message\n  this._addDoc(doc);\n  if (this.bulk) {\n    // Bulk subscribe\n    var actions = this.bulk[doc.collection] || (this.bulk[doc.collection] = {});\n    var versions = actions[action] || (actions[action] = {});\n    var isDuplicate = versions.hasOwnProperty(doc.id);\n    versions[doc.id] = version;\n    return isDuplicate;\n  } else {\n    // Send single doc subscribe message\n    var message = {a: action, c: doc.collection, d: doc.id, v: version};\n    this.send(message);\n  }\n};\n\nConnection.prototype.sendFetch = function(doc) {\n  return this._sendAction('f', doc, doc.version);\n};\n\nConnection.prototype.sendSubscribe = function(doc) {\n  return this._sendAction('s', doc, doc.version);\n};\n\nConnection.prototype.sendUnsubscribe = function(doc) {\n  return this._sendAction('u', doc);\n};\n\nConnection.prototype.sendOp = function(doc, op) {\n  // Ensure the doc is registered so that it receives the reply message\n  this._addDoc(doc);\n  var message = {\n    a: 'op',\n    c: doc.collection,\n    d: doc.id,\n    v: doc.version,\n    src: op.src,\n    seq: op.seq,\n    x: {}\n  };\n  if ('op' in op) message.op = op.op;\n  if (op.create) message.create = op.create;\n  if (op.del) message.del = op.del;\n  if (doc.submitSource) message.x.source = op.source;\n  this.send(message);\n};\n\n\n/**\n * Sends a message down the socket\n */\nConnection.prototype.send = function(message) {\n  if (this.debug) logger.info('SEND', JSON.stringify(message));\n\n  this.emit('send', message);\n  this.socket.send(JSON.stringify(message));\n};\n\n\n/**\n * Closes the socket and emits 'closed'\n */\nConnection.prototype.close = function() {\n  this.socket.close();\n};\n\nConnection.prototype.getExisting = function(collection, id) {\n  if (this.collections[collection]) return this.collections[collection][id];\n};\n\n\n/**\n * Get or create a document.\n *\n * @param collection\n * @param id\n * @return {Doc}\n */\nConnection.prototype.get = function(collection, id) {\n  var docs = this.collections[collection] ||\n    (this.collections[collection] = {});\n\n  var doc = docs[id];\n  if (!doc) {\n    doc = docs[id] = new Doc(this, collection, id);\n    this.emit('doc', doc);\n  }\n\n  return doc;\n};\n\n\n/**\n * Remove document from this.collections\n *\n * @private\n */\nConnection.prototype._destroyDoc = function(doc) {\n  util.digAndRemove(this.collections, doc.collection, doc.id);\n};\n\nConnection.prototype._addDoc = function(doc) {\n  var docs = this.collections[doc.collection];\n  if (!docs) {\n    docs = this.collections[doc.collection] = {};\n  }\n  if (docs[doc.id] !== doc) {\n    docs[doc.id] = doc;\n  }\n};\n\n// Helper for createFetchQuery and createSubscribeQuery, below.\nConnection.prototype._createQuery = function(action, collection, q, options, callback) {\n  var id = this.nextQueryId++;\n  var query = new Query(action, this, id, collection, q, options, callback);\n  this.queries[id] = query;\n  query.send();\n  return query;\n};\n\n// Internal function. Use query.destroy() to remove queries.\nConnection.prototype._destroyQuery = function(query) {\n  delete this.queries[query.id];\n};\n\n// The query options object can contain the following fields:\n//\n// db: Name of the db for the query. You can attach extraDbs to ShareDB and\n//   pick which one the query should hit using this parameter.\n\n// Create a fetch query. Fetch queries are only issued once, returning the\n// results directly into the callback.\n//\n// The callback should have the signature function(error, results, extra)\n// where results is a list of Doc objects.\nConnection.prototype.createFetchQuery = function(collection, q, options, callback) {\n  return this._createQuery('qf', collection, q, options, callback);\n};\n\n// Create a subscribe query. Subscribe queries return with the initial data\n// through the callback, then update themselves whenever the query result set\n// changes via their own event emitter.\n//\n// If present, the callback should have the signature function(error, results, extra)\n// where results is a list of Doc objects.\nConnection.prototype.createSubscribeQuery = function(collection, q, options, callback) {\n  return this._createQuery('qs', collection, q, options, callback);\n};\n\nConnection.prototype.hasPending = function() {\n  return !!(\n    this._firstDoc(hasPending) ||\n    this._firstQuery(hasPending) ||\n    this._firstSnapshotRequest()\n  );\n};\nfunction hasPending(object) {\n  return object.hasPending();\n}\n\nConnection.prototype.hasWritePending = function() {\n  return !!this._firstDoc(hasWritePending);\n};\nfunction hasWritePending(object) {\n  return object.hasWritePending();\n}\n\nConnection.prototype.whenNothingPending = function(callback) {\n  var doc = this._firstDoc(hasPending);\n  if (doc) {\n    // If a document is found with a pending operation, wait for it to emit\n    // that nothing is pending anymore, and then recheck all documents again.\n    // We have to recheck all documents, just in case another mutation has\n    // been made in the meantime as a result of an event callback\n    doc.once('nothing pending', this._nothingPendingRetry(callback));\n    return;\n  }\n  var query = this._firstQuery(hasPending);\n  if (query) {\n    query.once('ready', this._nothingPendingRetry(callback));\n    return;\n  }\n  var snapshotRequest = this._firstSnapshotRequest();\n  if (snapshotRequest) {\n    snapshotRequest.once('ready', this._nothingPendingRetry(callback));\n    return;\n  }\n  // Call back when no pending operations\n  util.nextTick(callback);\n};\nConnection.prototype._nothingPendingRetry = function(callback) {\n  var connection = this;\n  return function() {\n    util.nextTick(function() {\n      connection.whenNothingPending(callback);\n    });\n  };\n};\n\nConnection.prototype._firstDoc = function(fn) {\n  for (var collection in this.collections) {\n    var docs = this.collections[collection];\n    for (var id in docs) {\n      var doc = docs[id];\n      if (fn(doc)) {\n        return doc;\n      }\n    }\n  }\n};\n\nConnection.prototype._firstQuery = function(fn) {\n  for (var id in this.queries) {\n    var query = this.queries[id];\n    if (fn(query)) {\n      return query;\n    }\n  }\n};\n\nConnection.prototype._firstSnapshotRequest = function() {\n  for (var id in this._snapshotRequests) {\n    return this._snapshotRequests[id];\n  }\n};\n\n/**\n * Fetch a read-only snapshot at a given version\n *\n * @param collection - the collection name of the snapshot\n * @param id - the ID of the snapshot\n * @param version (optional) - the version number to fetch. If null, the latest version is fetched.\n * @param callback - (error, snapshot) => void, where snapshot takes the following schema:\n *\n * {\n *   id: string;         // ID of the snapshot\n *   v: number;          // version number of the snapshot\n *   type: string;       // the OT type of the snapshot, or null if it doesn't exist or is deleted\n *   data: any;          // the snapshot\n * }\n *\n */\nConnection.prototype.fetchSnapshot = function(collection, id, version, callback) {\n  if (typeof version === 'function') {\n    callback = version;\n    version = null;\n  }\n\n  var requestId = this.nextSnapshotRequestId++;\n  var snapshotRequest = new SnapshotVersionRequest(this, requestId, collection, id, version, callback);\n  this._snapshotRequests[snapshotRequest.requestId] = snapshotRequest;\n  snapshotRequest.send();\n};\n\n/**\n * Fetch a read-only snapshot at a given timestamp\n *\n * @param collection - the collection name of the snapshot\n * @param id - the ID of the snapshot\n * @param timestamp (optional) - the timestamp to fetch. If null, the latest version is fetched.\n * @param callback - (error, snapshot) => void, where snapshot takes the following schema:\n *\n * {\n *   id: string;         // ID of the snapshot\n *   v: number;          // version number of the snapshot\n *   type: string;       // the OT type of the snapshot, or null if it doesn't exist or is deleted\n *   data: any;          // the snapshot\n * }\n *\n */\nConnection.prototype.fetchSnapshotByTimestamp = function(collection, id, timestamp, callback) {\n  if (typeof timestamp === 'function') {\n    callback = timestamp;\n    timestamp = null;\n  }\n\n  var requestId = this.nextSnapshotRequestId++;\n  var snapshotRequest = new SnapshotTimestampRequest(this, requestId, collection, id, timestamp, callback);\n  this._snapshotRequests[snapshotRequest.requestId] = snapshotRequest;\n  snapshotRequest.send();\n};\n\nConnection.prototype._handleSnapshotFetch = function(error, message) {\n  var snapshotRequest = this._snapshotRequests[message.id];\n  if (!snapshotRequest) return;\n  delete this._snapshotRequests[message.id];\n  snapshotRequest._handleResponse(error, message);\n};\n\nConnection.prototype._handleLegacyInit = function(message) {\n  // If the minor protocol version has been set, we want to use the\n  // new handshake protocol. Let's send a handshake initialize, because\n  // we now know the server is ready. If we've already sent it, we'll\n  // just ignore the response anyway.\n  if (message.protocolMinor) return this._initializeHandshake();\n  this._initialize(message);\n};\n\nConnection.prototype._initializeHandshake = function() {\n  this.send({a: 'hs', id: this.id});\n};\n\nConnection.prototype._handleHandshake = function(error, message) {\n  if (error) return this.emit('error', error);\n  this._initialize(message);\n};\n\nConnection.prototype._initialize = function(message) {\n  if (this.state !== 'connecting') return;\n\n  if (message.protocol !== 1) {\n    return this.emit('error', new ShareDBError(\n      ERROR_CODE.ERR_PROTOCOL_VERSION_NOT_SUPPORTED,\n      'Unsupported protocol version: ' + message.protocol\n    ));\n  }\n  if (types.map[message.type] !== types.defaultType) {\n    return this.emit('error', new ShareDBError(\n      ERROR_CODE.ERR_DEFAULT_TYPE_MISMATCH,\n      message.type + ' does not match the server default type'\n    ));\n  }\n  if (typeof message.id !== 'string') {\n    return this.emit('error', new ShareDBError(\n      ERROR_CODE.ERR_CLIENT_ID_BADLY_FORMED,\n      'Client id must be a string'\n    ));\n  }\n  this.id = message.id;\n\n  this._setState('connected');\n};\n\nConnection.prototype.getPresence = function(channel) {\n  var connection = this;\n  return util.digOrCreate(this._presences, channel, function() {\n    return new Presence(connection, channel);\n  });\n};\n\nConnection.prototype.getDocPresence = function(collection, id) {\n  var channel = DocPresence.channel(collection, id);\n  var connection = this;\n  return util.digOrCreate(this._presences, channel, function() {\n    return new DocPresence(connection, collection, id);\n  });\n};\n\nConnection.prototype._sendPresenceAction = function(action, seq, presence) {\n  // Ensure the presence is registered so that it receives the reply message\n  this._addPresence(presence);\n  var message = {a: action, ch: presence.channel, seq: seq};\n  this.send(message);\n  return message.seq;\n};\n\nConnection.prototype._addPresence = function(presence) {\n  util.digOrCreate(this._presences, presence.channel, function() {\n    return presence;\n  });\n};\n\nConnection.prototype._handlePresenceSubscribe = function(error, message) {\n  var presence = util.dig(this._presences, message.ch);\n  if (presence) presence._handleSubscribe(error, message.seq);\n};\n\nConnection.prototype._handlePresenceUnsubscribe = function(error, message) {\n  var presence = util.dig(this._presences, message.ch);\n  if (presence) presence._handleUnsubscribe(error, message.seq);\n};\n\nConnection.prototype._handlePresence = function(error, message) {\n  var presence = util.dig(this._presences, message.ch);\n  if (presence) presence._receiveUpdate(error, message);\n};\n\nConnection.prototype._handlePresenceRequest = function(error, message) {\n  var presence = util.dig(this._presences, message.ch);\n  if (presence) presence._broadcastAllLocalPresence(error, message);\n};\n",
    "exports.Connection = require('./connection');\nexports.Doc = require('./doc');\nexports.Error = require('../error');\nexports.Query = require('./query');\nexports.types = require('../types');\nexports.logger = require('../logger');\n",
    "/**\n * RemoteDoc adapts the ShareJS operation protocol to Racer's mutator\n * interface.\n *\n * 1. It maps Racer's mutator methods to outgoing ShareJS operations.\n * 2. It maps incoming ShareJS operations to Racer events.\n */\n\nvar Doc = require('./Doc');\nvar util = require('../util');\n\nmodule.exports = RemoteDoc;\n\nfunction RemoteDoc(model, collectionName, id, snapshot, collection) {\n  // This is a bit messy, but we have to immediately register this doc on the\n  // collection that added it, so that when we create the shareDoc and the\n  // connection emits the 'doc' event, we'll find this doc instead of\n  // creating a new one\n  if (collection) collection.docs[id] = this;\n\n  Doc.call(this, model, collectionName, id);\n  this.model = model.pass({$remote: true});\n  this.debugMutations = model.root.debug.remoteMutations;\n\n  // Get or create the Share document. Note that we must have already added\n  // this doc to the collection to avoid creating a duplicate doc\n  this.shareDoc = model.root.connection.get(collectionName, id);\n  this.shareDoc.ingestSnapshot(snapshot);\n  this._initShareDoc();\n}\n\nRemoteDoc.prototype = new Doc();\n\nRemoteDoc.prototype._initShareDoc = function() {\n  var doc = this;\n  var model = this.model;\n  var collectionName = this.collectionName;\n  var id = this.id;\n  var shareDoc = this.shareDoc;\n  // Override submitOp to disable all writes and perform a dry-run\n  if (model.root.debug.disableSubmit) {\n    shareDoc.submitOp = function() {};\n    shareDoc.create = function() {};\n    shareDoc.del = function() {};\n  }\n  // Subscribe to doc events\n  shareDoc.on('op', function(op, isLocal) {\n    // Don't emit on local operations, since they are emitted in the mutator\n    if (isLocal) return;\n    doc._updateCollectionData();\n    doc._onOp(op);\n  });\n  shareDoc.on('del', function(previous, isLocal) {\n    // Calling the shareDoc.del method does not emit an operation event,\n    // so we create the appropriate event here.\n    if (isLocal) return;\n    delete doc.collectionData[id];\n    model.emit('change', [collectionName, id], [undefined, previous, model._pass]);\n  });\n  shareDoc.on('create', function(isLocal) {\n    // Local creates should not emit an event, since they only happen\n    // implicitly as a result of another mutation, and that operation will\n    // emit the appropriate event. Remote creates can set the snapshot data\n    // without emitting an operation event, so an event needs to be emitted\n    // for them.\n    if (isLocal) return;\n    doc._updateCollectionData();\n    var value = shareDoc.data;\n    model.emit('change', [collectionName, id], [value, undefined, model._pass]);\n  });\n  shareDoc.on('error', function(err) {\n    model._emitError(err, collectionName + '.' + id);\n  });\n  shareDoc.on('load', function() {\n    doc._updateCollectionData();\n    var value = shareDoc.data;\n    // If we subscribe to an uncreated document, no need to emit 'load' event\n    if (value === undefined) return;\n    model.emit('load', [collectionName, id], [value, model._pass]);\n  });\n  this._updateCollectionData();\n};\n\nRemoteDoc.prototype._updateCollectionData = function() {\n  var data = this.shareDoc.data;\n  if (typeof data === 'object' && !Array.isArray(data) && data !== null) {\n    data.id = this.id;\n  }\n  this.collectionData[this.id] = data;\n};\n\nRemoteDoc.prototype.create = function(value, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc create', this.path(), value);\n  }\n  // We copy the snapshot data at time of create to prevent the id added\n  // outside of ShareJS from getting stored in the data\n  var data = util.deepCopy(value);\n  if (data) delete data.id;\n  this.shareDoc.create(data, cb);\n  // The id value will get added to the data that was passed in\n  this.shareDoc.data = value;\n  this._updateCollectionData();\n  this.model._context.createDoc(this.collectionName, this.id);\n  return;\n};\n\nRemoteDoc.prototype.set = function(segments, value, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc set', this.path(segments), value);\n  }\n  var previous = this._createImplied(segments);\n  var lastSegment = segments[segments.length - 1];\n  if (previous instanceof ImpliedOp) {\n    previous.value[lastSegment] = value;\n    this.shareDoc.submitOp(previous.op, cb);\n    this._updateCollectionData();\n    return;\n  }\n  var op = (util.isArrayIndex(lastSegment)) ?\n    [new ListReplaceOp(segments.slice(0, -1), lastSegment, previous, value)] :\n    [new ObjectReplaceOp(segments, previous, value)];\n  this.shareDoc.submitOp(op, cb);\n  this._updateCollectionData();\n  return previous;\n};\n\nRemoteDoc.prototype.del = function(segments, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc del', this.path(segments));\n  }\n  if (segments.length === 0) {\n    var previous = this.get();\n    this.shareDoc.del(cb);\n    delete this.collectionData[this.id];\n    return previous;\n  }\n  // Don't do anything if the value is already undefined, since\n  // the del method should not create anything\n  var previous = this.get(segments);\n  if (previous === undefined) {\n    cb();\n    return;\n  }\n  var op = [new ObjectDeleteOp(segments, previous)];\n  this.shareDoc.submitOp(op, cb);\n  this._updateCollectionData();\n  return previous;\n};\n\nRemoteDoc.prototype.increment = function(segments, byNumber, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc increment', this.path(segments), byNumber);\n  }\n  var previous = this._createImplied(segments);\n  if (previous instanceof ImpliedOp) {\n    var lastSegment = segments[segments.length - 1];\n    previous.value[lastSegment] = byNumber;\n    this.shareDoc.submitOp(previous.op, cb);\n    this._updateCollectionData();\n    return byNumber;\n  }\n  if (previous == null) {\n    var lastSegment = segments[segments.length - 1];\n    var op = (util.isArrayIndex(lastSegment)) ?\n      [new ListInsertOp(segments.slice(0, -1), lastSegment, byNumber)] :\n      [new ObjectInsertOp(segments, byNumber)];\n    this.shareDoc.submitOp(op, cb);\n    this._updateCollectionData();\n    return byNumber;\n  }\n  var op = [new IncrementOp(segments, byNumber)];\n  this.shareDoc.submitOp(op, cb);\n  this._updateCollectionData();\n  return previous + byNumber;\n};\n\nRemoteDoc.prototype.push = function(segments, value, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc push', this.path(segments), value);\n  }\n  var shareDoc = this.shareDoc;\n  function push(arr, fnCb) {\n    var op = [new ListInsertOp(segments, arr.length, value)];\n    shareDoc.submitOp(op, fnCb);\n    return arr.length;\n  }\n  return this._arrayApply(segments, push, cb);\n};\n\nRemoteDoc.prototype.unshift = function(segments, value, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc unshift', this.path(segments), value);\n  }\n  var shareDoc = this.shareDoc;\n  function unshift(arr, fnCb) {\n    var op = [new ListInsertOp(segments, 0, value)];\n    shareDoc.submitOp(op, fnCb);\n    return arr.length;\n  }\n  return this._arrayApply(segments, unshift, cb);\n};\n\nRemoteDoc.prototype.insert = function(segments, index, values, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc insert', this.path(segments), index, values);\n  }\n  var shareDoc = this.shareDoc;\n  function insert(arr, fnCb) {\n    var op = createInsertOp(segments, index, values);\n    shareDoc.submitOp(op, fnCb);\n    return arr.length;\n  }\n  return this._arrayApply(segments, insert, cb);\n};\n\nfunction createInsertOp(segments, index, values) {\n  if (!Array.isArray(values)) {\n    return [new ListInsertOp(segments, index, values)];\n  }\n  var op = [];\n  for (var i = 0, len = values.length; i < len; i++) {\n    op.push(new ListInsertOp(segments, index++, values[i]));\n  }\n  return op;\n}\n\nRemoteDoc.prototype.pop = function(segments, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc pop', this.path(segments));\n  }\n  var shareDoc = this.shareDoc;\n  function pop(arr, fnCb) {\n    var index = arr.length - 1;\n    var value = arr[index];\n    var op = [new ListRemoveOp(segments, index, value)];\n    shareDoc.submitOp(op, fnCb);\n    return value;\n  }\n  return this._arrayApply(segments, pop, cb);\n};\n\nRemoteDoc.prototype.shift = function(segments, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc shift', this.path(segments));\n  }\n  var shareDoc = this.shareDoc;\n  function shift(arr, fnCb) {\n    var value = arr[0];\n    var op = [new ListRemoveOp(segments, 0, value)];\n    shareDoc.submitOp(op, fnCb);\n    return value;\n  }\n  return this._arrayApply(segments, shift, cb);\n};\n\nRemoteDoc.prototype.remove = function(segments, index, howMany, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc remove', this.path(segments), index, howMany);\n  }\n  var shareDoc = this.shareDoc;\n  function remove(arr, fnCb) {\n    var values = arr.slice(index, index + howMany);\n    var op = [];\n    for (var i = 0, len = values.length; i < len; i++) {\n      op.push(new ListRemoveOp(segments, index, values[i]));\n    }\n    shareDoc.submitOp(op, fnCb);\n    return values;\n  }\n  return this._arrayApply(segments, remove, cb);\n};\n\nRemoteDoc.prototype.move = function(segments, from, to, howMany, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc move', this.path(segments), from, to, howMany);\n  }\n  var shareDoc = this.shareDoc;\n  function move(arr, fnCb) {\n    // Get the return value\n    var values = arr.slice(from, from + howMany);\n\n    // Build an op that moves each item individually\n    var op = [];\n    for (var i = 0; i < howMany; i++) {\n      op.push(new ListMoveOp(segments, (from < to) ? from : from + howMany - 1, (from < to) ? to + howMany - 1 : to));\n    }\n    shareDoc.submitOp(op, fnCb);\n\n    return values;\n  }\n  return this._arrayApply(segments, move, cb);\n};\n\nRemoteDoc.prototype.stringInsert = function(segments, index, value, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc stringInsert', this.path(segments), index, value);\n  }\n  var previous = this._createImplied(segments);\n  if (previous instanceof ImpliedOp) {\n    var lastSegment = segments[segments.length - 1];\n    previous.value[lastSegment] = value;\n    this.shareDoc.submitOp(previous.op, cb);\n    this._updateCollectionData();\n    return;\n  }\n  if (previous == null) {\n    var lastSegment = segments[segments.length - 1];\n    var op = (util.isArrayIndex(lastSegment)) ?\n      [new ListInsertOp(segments.slice(0, -1), lastSegment, value)] :\n      [new ObjectInsertOp(segments, value)];\n    this.shareDoc.submitOp(op, cb);\n    this._updateCollectionData();\n    return previous;\n  }\n  var op = [new StringInsertOp(segments, index, value)];\n  this.shareDoc.submitOp(op, cb);\n  this._updateCollectionData();\n  return previous;\n};\n\nRemoteDoc.prototype.stringRemove = function(segments, index, howMany, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc stringRemove', this.path(segments), index, howMany);\n  }\n  var previous = this._createImplied(segments);\n  if (previous instanceof ImpliedOp) return;\n  if (previous == null) return previous;\n  var removed = previous.slice(index, index + howMany);\n  var op = [new StringRemoveOp(segments, index, removed)];\n  this.shareDoc.submitOp(op, cb);\n  this._updateCollectionData();\n  return previous;\n};\n\nRemoteDoc.prototype.subtypeSubmit = function(segments, subtype, subtypeOp, cb) {\n  if (this.debugMutations) {\n    console.log('RemoteDoc subtypeSubmit', this.path(segments), subtype, subtypeOp);\n  }\n  var previous = this._createImplied(segments);\n  if (previous instanceof ImpliedOp) {\n    this.shareDoc.submitOp(previous.op);\n    previous = undefined;\n  }\n  var op = new SubtypeOp(segments, subtype, subtypeOp);\n  this.shareDoc.submitOp(op, cb);\n  this._updateCollectionData();\n  return previous;\n};\n\nRemoteDoc.prototype.get = function(segments) {\n  return util.lookup(segments, this.shareDoc.data);\n};\n\nRemoteDoc.prototype._createImplied = function(segments) {\n  if (!this.shareDoc.type) {\n    throw new Error('Mutation on uncreated remote document');\n  }\n  var parent = this.shareDoc;\n  var key = 'data';\n  var node = parent[key];\n  var i = 0;\n  var nextKey = segments[i++];\n  var op, value;\n  while (nextKey != null) {\n    if (!node) {\n      if (op) {\n        value = value[key] = util.isArrayIndex(nextKey) ? [] : {};\n      } else {\n        value = util.isArrayIndex(nextKey) ? [] : {};\n        if (Array.isArray(parent)) {\n          if (key >= parent.length) {\n            op = new ListInsertOp(segments.slice(0, i - 2), key, value);\n          } else {\n            op = new ListReplaceOp(segments.slice(0, i - 2), key, node, value);\n          }\n        } else {\n          op = new ObjectInsertOp(segments.slice(0, i - 1), value);\n        }\n      }\n      node = value;\n    }\n    parent = node;\n    key = nextKey;\n    node = parent[key];\n    nextKey = segments[i++];\n  }\n  if (op) return new ImpliedOp(op, value);\n  return node;\n};\n\nfunction ImpliedOp(op, value) {\n  this.op = op;\n  this.value = value;\n}\n\nRemoteDoc.prototype._arrayApply = function(segments, fn, cb) {\n  var arr = this._createImplied(segments);\n  if (arr instanceof ImpliedOp) {\n    this.shareDoc.submitOp(arr.op);\n    arr = this.get(segments);\n  }\n  if (arr == null) {\n    var lastSegment = segments[segments.length - 1];\n    var op = (util.isArrayIndex(lastSegment)) ?\n      [new ListInsertOp(segments.slice(0, -1), lastSegment, [])] :\n      [new ObjectInsertOp(segments, [])];\n    this.shareDoc.submitOp(op);\n    arr = this.get(segments);\n  }\n\n  if (!Array.isArray(arr)) {\n    var message = this._errorMessage(fn.name + ' on non-array', segments, arr);\n    var err = new TypeError(message);\n    return cb(err);\n  }\n  var out = fn(arr, cb);\n  this._updateCollectionData();\n  return out;\n};\n\nRemoteDoc.prototype._onOp = function(op) {\n  var item;\n  if (op.length === 1) {\n    // ShareDB docs shatter json0 ops into single components during apply\n    item = op[0];\n  } else if (op.length === 0) {\n    // Ignore no-ops\n    return;\n  } else {\n    try {\n      op = JSON.stringify(op);\n    } catch (err) {}\n    throw new Error('Received op with multiple components from ShareDB ' + op);\n  }\n  var segments = [this.collectionName, this.id].concat(item.p);\n  var model = this.model;\n\n  // ObjectReplaceOp, ObjectInsertOp, or ObjectDeleteOp\n  if (defined(item.oi) || defined(item.od)) {\n    var value = item.oi;\n    var previous = item.od;\n    model.emit('change', segments, [value, previous, model._pass]);\n\n  // ListReplaceOp\n  } else if (defined(item.li) && defined(item.ld)) {\n    var value = item.li;\n    var previous = item.ld;\n    model.emit('change', segments, [value, previous, model._pass]);\n\n  // ListInsertOp\n  } else if (defined(item.li)) {\n    var index = segments[segments.length - 1];\n    var values = [item.li];\n    model.emit('insert', segments.slice(0, -1), [index, values, model._pass]);\n\n  // ListRemoveOp\n  } else if (defined(item.ld)) {\n    var index = segments[segments.length - 1];\n    var removed = [item.ld];\n    model.emit('remove', segments.slice(0, -1), [index, removed, model._pass]);\n\n  // ListMoveOp\n  } else if (defined(item.lm)) {\n    var from = segments[segments.length - 1];\n    var to = item.lm;\n    var howMany = 1;\n    model.emit('move', segments.slice(0, -1), [from, to, howMany, model._pass]);\n\n  // StringInsertOp\n  } else if (defined(item.si)) {\n    var index = segments[segments.length - 1];\n    var text = item.si;\n    segments = segments.slice(0, -1);\n    var value = model._get(segments);\n    var previous = value.slice(0, index) + value.slice(index + text.length);\n    var pass = model.pass({$stringInsert: {index: index, text: text}})._pass;\n    model.emit('change', segments, [value, previous, pass]);\n\n  // StringRemoveOp\n  } else if (defined(item.sd)) {\n    var index = segments[segments.length - 1];\n    var text = item.sd;\n    var howMany = text.length;\n    segments = segments.slice(0, -1);\n    var value = model._get(segments);\n    var previous = value.slice(0, index) + text + value.slice(index);\n    var pass = model.pass({$stringRemove: {index: index, howMany: howMany}})._pass;\n    model.emit('change', segments, [value, previous, pass]);\n\n  // IncrementOp\n  } else if (defined(item.na)) {\n    var value = this.get(item.p);\n    var previous = value - item.na;\n    model.emit('change', segments, [value, previous, model._pass]);\n\n  // SubtypeOp\n  } else if (defined(item.t)) {\n    var value = this.get(item.p);\n    // Since this is generic to all subtypes, we don't know how to get a copy\n    // of the previous value efficiently. We could make a copy eagerly, but\n    // given that embedded types are likely to be used for custom editors,\n    // we'll assume they primarily use the returned op and are unlikely to\n    // need the previous snapshot data\n    var previous = undefined;\n    var type = item.t;\n    var op = item.o;\n    var pass = model.pass({$subtype: {type: type, op: op}})._pass;\n    model.emit('change', segments, [value, previous, pass]);\n  }\n};\n\nfunction ObjectReplaceOp(segments, before, after) {\n  this.p = util.castSegments(segments);\n  this.od = before;\n  this.oi = (after === undefined) ? null : after;\n}\nfunction ObjectInsertOp(segments, value) {\n  this.p = util.castSegments(segments);\n  this.oi = (value === undefined) ? null : value;\n}\nfunction ObjectDeleteOp(segments, value) {\n  this.p = util.castSegments(segments);\n  this.od = (value === undefined) ? null : value;\n}\nfunction ListReplaceOp(segments, index, before, after) {\n  this.p = util.castSegments(segments.concat(index));\n  this.ld = before;\n  this.li = (after === undefined) ? null : after;\n}\nfunction ListInsertOp(segments, index, value) {\n  this.p = util.castSegments(segments.concat(index));\n  this.li = (value === undefined) ? null : value;\n}\nfunction ListRemoveOp(segments, index, value) {\n  this.p = util.castSegments(segments.concat(index));\n  this.ld = (value === undefined) ? null : value;\n}\nfunction ListMoveOp(segments, from, to) {\n  this.p = util.castSegments(segments.concat(from));\n  this.lm = to;\n}\nfunction StringInsertOp(segments, index, value) {\n  this.p = util.castSegments(segments.concat(index));\n  this.si = value;\n}\nfunction StringRemoveOp(segments, index, value) {\n  this.p = util.castSegments(segments.concat(index));\n  this.sd = value;\n}\nfunction IncrementOp(segments, byNumber) {\n  this.p = util.castSegments(segments);\n  this.na = byNumber;\n}\nfunction SubtypeOp(segments, subtype, subtypeOp) {\n  this.p = util.castSegments(segments);\n  this.t = subtype;\n  this.o = subtypeOp;\n}\n\nfunction defined(value) {\n  return value !== undefined;\n}\n",
    "var Connection = require('sharedb/lib/client').Connection;\nvar Model = require('./Model');\nvar LocalDoc = require('./LocalDoc');\nvar RemoteDoc = require('./RemoteDoc');\n\nModel.INITS.push(function(model) {\n  model.root._preventCompose = false;\n});\n\nModel.prototype.preventCompose = function() {\n  var model = this._child();\n  model._preventCompose = true;\n  return model;\n};\n\nModel.prototype.allowCompose = function() {\n  var model = this._child();\n  model._preventCompose = false;\n  return model;\n};\n\nModel.prototype.createConnection = function(bundle) {\n  // Model::_createSocket should be defined by the socket plugin\n  this.root.socket = this._createSocket(bundle);\n\n  // The Share connection will bind to the socket by defining the onopen,\n  // onmessage, etc. methods\n  var model = this;\n  this.root.connection = new Connection(this.root.socket);\n  this.root.connection.on('state', function(state, reason) {\n    model._setDiff(['$connection', 'state'], state);\n    model._setDiff(['$connection', 'reason'], reason);\n  });\n  this._set(['$connection', 'state'], 'connected');\n\n  this._finishCreateConnection();\n};\n\nModel.prototype._finishCreateConnection = function() {\n  var model = this;\n  this.root.connection.on('error', function(err) {\n    model._emitError(err);\n  });\n  // Share docs can be created by queries, so we need to register them\n  // with Racer as soon as they are created to capture their events\n  this.root.connection.on('doc', function(shareDoc) {\n    model.getOrCreateDoc(shareDoc.collection, shareDoc.id);\n  });\n};\n\nModel.prototype.connect = function() {\n  this.root.socket.open();\n};\nModel.prototype.disconnect = function() {\n  this.root.socket.close();\n};\nModel.prototype.reconnect = function() {\n  this.disconnect();\n  this.connect();\n};\n// Clean delayed disconnect\nModel.prototype.close = function(cb) {\n  cb = this.wrapCallback(cb);\n  var model = this;\n  this.whenNothingPending(function() {\n    model.root.socket.close();\n    cb();\n  });\n};\n\n// Returns a reference to the ShareDB agent if it is connected directly on the\n// server. Will return null if the ShareDB connection has been disconnected or\n// if we are not in the same process and we do not have a reference to the\n// server-side agent object\nModel.prototype.getAgent = function() {\n  return this.root.connection.agent;\n};\n\nModel.prototype._isLocal = function(name) {\n  // Whether the collection is local or remote is determined by its name.\n  // Collections starting with an underscore ('_') are for user-defined local\n  // collections, those starting with a dollar sign ('$'') are for\n  // framework-defined local collections, and all others are remote.\n  var firstCharcter = name.charAt(0);\n  return firstCharcter === '_' || firstCharcter === '$';\n};\n\nModel.prototype._getDocConstructor = function(name) {\n  return (this._isLocal(name)) ? LocalDoc : RemoteDoc;\n};\n\nModel.prototype.hasPending = function() {\n  return this.root.connection.hasPending();\n};\nModel.prototype.hasWritePending = function() {\n  return this.root.connection.hasWritePending();\n};\nModel.prototype.whenNothingPending = function(cb) {\n  return this.root.connection.whenNothingPending(cb);\n};\n",
    "var util = require('../util');\nvar Model = require('./Model');\nvar defaultType = require('sharedb/lib/client').types.defaultType;\n\nmodule.exports = Query;\n\nModel.INITS.push(function(model) {\n  model.root._queries = new Queries();\n});\n\nModel.prototype.query = function(collectionName, expression, options) {\n  // DEPRECATED: Passing in a string as the third argument specifies the db\n  // option for backward compatibility\n  if (typeof options === 'string') {\n    options = {db: options};\n  }\n  return this._getOrCreateQuery(collectionName, expression, options, Query);\n};\n\n/**\n * If an existing query is present with the same `collectionName`, `expression`,\n * and `options`, then returns the existing query; otherwise, constructs and\n * returns a new query using `QueryConstructor`.\n *\n * @param {string} collectionName\n * @param {*} expression\n * @param {*} options\n * @param {new (model: Model, collectionName: string, expression: any, options: any) => Query} QueryConstructor -\n *   constructor function for a Query, to create one if not already present on this model\n */\nModel.prototype._getOrCreateQuery = function(collectionName, expression, options, QueryConstructor) {\n  expression = this.sanitizeQuery(expression);\n  var query = this.root._queries.get(collectionName, expression, options);\n  if (query) return query;\n  query = new QueryConstructor(this, collectionName, expression, options);\n  this.root._queries.add(query);\n  return query;\n};\n\n// This method replaces undefined in query objects with null, because\n// undefined properties are removed in JSON stringify. This can be dangerous\n// in queries, where presenece of a property may indicate that it should be a\n// filter and absence means that all values are accepted. We aren't checking\n// for cycles, which aren't allowed in JSON, so this could throw a max call\n// stack error\nModel.prototype.sanitizeQuery = function(expression) {\n  if (expression && typeof expression === 'object') {\n    for (var key in expression) {\n      if (expression.hasOwnProperty(key)) {\n        var value = expression[key];\n        if (value === undefined) {\n          expression[key] = null;\n        } else {\n          this.sanitizeQuery(value);\n        }\n      }\n    }\n  }\n  return expression;\n};\n\n// Called during initialization of the bundle on page load.\nModel.prototype._initQueries = function(items) {\n  var queries = this.root._queries;\n  for (var i = 0; i < items.length; i++) {\n    var item = items[i];\n    var counts = item[0];\n    var collectionName = item[1];\n    var expression = item[2];\n    var results = item[3] || [];\n    var options = item[4];\n    var extra = item[5];\n    var query = this.root._queries.get(collectionName, expression, options);\n    if (!query) {\n      query = new Query(this, collectionName, expression, options);\n      queries.add(query);\n    }\n\n    query._setExtra(extra);\n\n    var ids = [];\n    for (var resultIndex = 0; resultIndex < results.length; resultIndex++) {\n      var result = results[resultIndex];\n      if (typeof result === 'string') {\n        ids.push(result);\n        continue;\n      }\n      var data = result[0];\n      var v = result[1];\n      var id = result[2] || data.id;\n      var type = result[3];\n      ids.push(id);\n      var snapshot = {data: data, v: v, type: type};\n      this.getOrCreateDoc(collectionName, id, snapshot);\n    }\n    query._addMapIds(ids);\n    this._set(query.idsSegments, ids);\n\n    for (var countIndex = 0; countIndex < counts.length; countIndex++) {\n      var count = counts[countIndex];\n      var subscribed = count[0] || 0;\n      var fetched = count[1] || 0;\n      var contextId = count[2];\n      if (contextId) query.model.setContext(contextId);\n      while (subscribed--) {\n        query.subscribe();\n      }\n      query.fetchCount += fetched;\n      while (fetched--) {\n        query.model._context.fetchQuery(query);\n      }\n    }\n  }\n};\n\nfunction Queries() {\n  // Map is a flattened map of queries by hash. Currently used in contexts\n  this.map = {};\n  // Collections is a nested map of queries by collection then hash\n  this.collections = {};\n}\nQueries.prototype.add = function(query) {\n  this.map[query.hash] = query;\n  var collection = this.collections[query.collectionName] ||\n    (this.collections[query.collectionName] = {});\n  collection[query.hash] = query;\n};\nQueries.prototype.remove = function(query) {\n  delete this.map[query.hash];\n  var collection = this.collections[query.collectionName];\n  if (!collection) return;\n  delete collection[query.hash];\n  // Check if the collection still has any keys\n  // eslint-disable-next-line no-unused-vars\n  for (var key in collection) return;\n  delete this.collections[query.collectionName];\n};\nQueries.prototype.get = function(collectionName, expression, options) {\n  var hash = queryHash(collectionName, expression, options);\n  return this.map[hash];\n};\nQueries.prototype.toJSON = function() {\n  var out = [];\n  for (var hash in this.map) {\n    var query = this.map[hash];\n    if (query.subscribeCount || query.fetchCount) {\n      out.push(query.serialize());\n    }\n  }\n  return out;\n};\n\nfunction Query(model, collectionName, expression, options) {\n  this.model = model.pass({$query: this});\n  this.collectionName = collectionName;\n  this.expression = util.deepCopy(expression);\n  this.options = options;\n  this.hash = queryHash(collectionName, expression, options);\n  this.segments = ['$queries', this.hash];\n  this.idsSegments = ['$queries', this.hash, 'ids'];\n  this.extraSegments = ['$queries', this.hash, 'extra'];\n\n  this._pendingSubscribeCallbacks = [];\n\n  // These are used to help cleanup appropriately when calling unsubscribe and\n  // unfetch. A query won't be fully cleaned up until unfetch and unsubscribe\n  // are called the same number of times that fetch and subscribe were called.\n  this.subscribeCount = 0;\n  this.fetchCount = 0;\n\n  this.created = false;\n  this.shareQuery = null;\n\n  // idMap is checked in maybeUnload to see if the query is currently holding\n  // a reference to an id in its results set. This map is duplicative of the\n  // actual results id list stored in the model, but we are maintaining it,\n  // because otherwise maybeUnload would be looping through the entire results\n  // set of each query on the same collection for every doc checked\n  //\n  // Map of id -> count of ids\n  this.idMap = {};\n}\n\nQuery.prototype.create = function() {\n  this.created = true;\n  this.model.root._queries.add(this);\n};\n\nQuery.prototype.destroy = function() {\n  var ids = this.getIds();\n  this.created = false;\n  if (this.shareQuery) {\n    this.shareQuery.destroy();\n    this.shareQuery = null;\n  }\n  this.model.root._queries.remove(this);\n  this.idMap = {};\n  this.model._del(this.segments);\n  this._maybeUnloadDocs(ids);\n};\n\nQuery.prototype.fetch = function(cb) {\n  cb = this.model.wrapCallback(cb);\n  this.model._context.fetchQuery(this);\n\n  this.fetchCount++;\n\n  if (!this.created) this.create();\n\n  var query = this;\n  function fetchCb(err, results, extra) {\n    if (err) return cb(err);\n    query._setExtra(extra);\n    query._setResults(results);\n    cb();\n  }\n  this.model.root.connection.createFetchQuery(\n    this.collectionName,\n    this.expression,\n    this.options,\n    fetchCb\n  );\n  return this;\n};\n\nQuery.prototype.subscribe = function(cb) {\n  cb = this.model.wrapCallback(cb);\n  this.model._context.subscribeQuery(this);\n\n  if (this.subscribeCount++) {\n    var query = this;\n    process.nextTick(function() {\n      var data = query.model._get(query.segments);\n      if (data) {\n        cb();\n      } else {\n        query._pendingSubscribeCallbacks.push(cb);\n      }\n    });\n    return this;\n  }\n\n  if (!this.created) this.create();\n\n  var options = (this.options) ? util.copy(this.options) : {};\n  options.results = this._getShareResults();\n\n  // When doing server-side rendering, we actually do a fetch the first time\n  // that subscribe is called, but keep track of the state as if subscribe\n  // were called for proper initialization in the client\n  if (this.model.root.fetchOnly) {\n    this._shareFetchedSubscribe(options, cb);\n  } else {\n    this._shareSubscribe(options, cb);\n  }\n\n  return this;\n};\n\nQuery.prototype._subscribeCb = function(cb) {\n  var query = this;\n  return function subscribeCb(err, results, extra) {\n    if (err) return query._flushSubscribeCallbacks(err, cb);\n    query._setExtra(extra);\n    query._setResults(results);\n    query._flushSubscribeCallbacks(null, cb);\n  };\n};\n\nQuery.prototype._shareFetchedSubscribe = function(options, cb) {\n  this.model.root.connection.createFetchQuery(\n    this.collectionName,\n    this.expression,\n    options,\n    this._subscribeCb(cb)\n  );\n};\n\nQuery.prototype._shareSubscribe = function(options, cb) {\n  var query = this;\n  // Sanity check, though this shouldn't happen\n  if (this.shareQuery) {\n    this.shareQuery.destroy();\n  }\n  this.shareQuery = this.model.root.connection.createSubscribeQuery(\n    this.collectionName,\n    this.expression,\n    options,\n    this._subscribeCb(cb)\n  );\n  this.shareQuery.on('insert', function(shareDocs, index) {\n    var ids = resultsIds(shareDocs);\n    query._addMapIds(ids);\n    query.model._insert(query.idsSegments, index, ids);\n  });\n  this.shareQuery.on('remove', function(shareDocs, index) {\n    var ids = resultsIds(shareDocs);\n    query._removeMapIds(ids);\n    query.model._remove(query.idsSegments, index, shareDocs.length);\n  });\n  this.shareQuery.on('move', function(shareDocs, from, to) {\n    query.model._move(query.idsSegments, from, to, shareDocs.length);\n  });\n  this.shareQuery.on('extra', function(extra) {\n    query.model._setDiffDeep(query.extraSegments, extra);\n  });\n  this.shareQuery.on('error', function(err) {\n    query.model._emitError(err, query.hash);\n  });\n};\n\nQuery.prototype._removeMapIds = function(ids) {\n  for (var i = ids.length; i--;) {\n    var id = ids[i];\n    if (this.idMap[id] > 1) {\n      this.idMap[id]--;\n    } else {\n      delete this.idMap[id];\n    }\n  }\n  // Technically this isn't quite right and we might not wait the full unload\n  // delay if someone else calls maybeUnload for the same doc id. However,\n  // it is a lot easier to implement than delaying the removal until later and\n  // dealing with adds that might happen in the meantime. This will probably\n  // work to avoid thrashing subscribe/unsubscribe in expected cases\n  if (this.model.root.unloadDelay) {\n    var query = this;\n    setTimeout(function() {\n      query._maybeUnloadDocs(ids);\n    }, this.model.root.unloadDelay);\n    return;\n  }\n  this._maybeUnloadDocs(ids);\n};\nQuery.prototype._addMapIds = function(ids) {\n  for (var i = ids.length; i--;) {\n    var id = ids[i];\n    this.idMap[id] = (this.idMap[id] || 0) + 1;\n  }\n};\nQuery.prototype._diffMapIds = function(ids) {\n  var addedIds = [];\n  var removedIds = [];\n  var newMap = {};\n  for (var i = ids.length; i--;) {\n    var id = ids[i];\n    newMap[id] = true;\n    if (this.idMap[id]) continue;\n    addedIds.push(id);\n  }\n  for (var id in this.idMap) {\n    if (newMap[id]) continue;\n    removedIds.push(id);\n  }\n  if (addedIds.length) this._addMapIds(addedIds);\n  if (removedIds.length) this._removeMapIds(removedIds);\n};\nQuery.prototype._setExtra = function(extra) {\n  if (extra === undefined) return;\n  this.model._setDiffDeep(this.extraSegments, extra);\n};\nQuery.prototype._setResults = function(results) {\n  var ids = resultsIds(results);\n  this._setResultIds(ids);\n};\nQuery.prototype._setResultIds = function(ids) {\n  this._diffMapIds(ids);\n  this.model._setArrayDiff(this.idsSegments, ids);\n};\nQuery.prototype._maybeUnloadDocs = function(ids) {\n  for (var i = 0; i < ids.length; i++) {\n    var id = ids[i];\n    this.model._maybeUnloadDoc(this.collectionName, id);\n  }\n};\n\n// Flushes `_pendingSubscribeCallbacks`, calling each callback in the array,\n// with an optional error to pass into each. `_pendingSubscribeCallbacks` will\n// be empty after this runs.\nQuery.prototype._flushSubscribeCallbacks = function(err, cb) {\n  cb(err);\n  var pendingCallback;\n  while ((pendingCallback = this._pendingSubscribeCallbacks.shift())) {\n    pendingCallback(err);\n  }\n};\n\nQuery.prototype.unfetch = function(cb) {\n  cb = this.model.wrapCallback(cb);\n  this.model._context.unfetchQuery(this);\n\n  // No effect if the query is not currently fetched\n  if (!this.fetchCount) {\n    cb();\n    return this;\n  }\n\n  var query = this;\n  if (this.model.root.unloadDelay) {\n    setTimeout(finishUnfetchQuery, this.model.root.unloadDelay);\n  } else {\n    finishUnfetchQuery();\n  }\n  function finishUnfetchQuery() {\n    var count = --query.fetchCount;\n    if (count) return cb(null, count);\n    // Cleanup when no fetches or subscribes remain\n    if (!query.subscribeCount) query.destroy();\n    cb(null, 0);\n  }\n  return this;\n};\n\nQuery.prototype.unsubscribe = function(cb) {\n  cb = this.model.wrapCallback(cb);\n  this.model._context.unsubscribeQuery(this);\n\n  // No effect if the query is not currently subscribed\n  if (!this.subscribeCount) {\n    cb();\n    return this;\n  }\n\n  var query = this;\n  if (this.model.root.unloadDelay) {\n    setTimeout(finishUnsubscribeQuery, this.model.root.unloadDelay);\n  } else {\n    finishUnsubscribeQuery();\n  }\n  function finishUnsubscribeQuery() {\n    var count = --query.subscribeCount;\n    if (count) return cb(null, count);\n\n    if (query.shareQuery) {\n      query.shareQuery.destroy();\n      query.shareQuery = null;\n    }\n\n    unsubscribeQueryCallback();\n  }\n  function unsubscribeQueryCallback(err) {\n    if (err) return cb(err);\n    // Cleanup when no fetches or subscribes remain\n    if (!query.fetchCount) query.destroy();\n    cb(null, 0);\n  }\n  return this;\n};\n\nQuery.prototype._getShareResults = function() {\n  var ids = this.model._get(this.idsSegments);\n  if (!ids) return;\n\n  var collection = this.model.getCollection(this.collectionName);\n  if (!collection) return;\n\n  var results = [];\n  for (var i = 0; i < ids.length; i++) {\n    var id = ids[i];\n    var doc = collection.docs[id];\n    results.push(doc && doc.shareDoc);\n  }\n  return results;\n};\n\nQuery.prototype.get = function() {\n  var results = [];\n  var data = this.model._get(this.segments);\n  if (!data) {\n    console.warn('You must fetch or subscribe to a query before getting its results.');\n    return results;\n  }\n  var ids = data.ids;\n  if (!ids) return results;\n\n  var collection = this.model.getCollection(this.collectionName);\n  for (var i = 0, l = ids.length; i < l; i++) {\n    var id = ids[i];\n    var doc = collection && collection.docs[id];\n    results.push(doc && doc.get());\n  }\n  return results;\n};\n\nQuery.prototype.getIds = function() {\n  return this.model._get(this.idsSegments) || [];\n};\n\nQuery.prototype.getExtra = function() {\n  return this.model._get(this.extraSegments);\n};\n\nQuery.prototype.ref = function(from) {\n  var idsPath = this.idsSegments.join('.');\n  return this.model.refList(from, this.collectionName, idsPath);\n};\n\nQuery.prototype.refIds = function(from) {\n  var idsPath = this.idsSegments.join('.');\n  return this.model.root.ref(from, idsPath);\n};\n\nQuery.prototype.refExtra = function(from, relPath) {\n  var extraPath = this.extraSegments.join('.');\n  if (relPath) extraPath += '.' + relPath;\n  return this.model.root.ref(from, extraPath);\n};\n\nQuery.prototype.serialize = function() {\n  var ids = this.getIds();\n  var collection = this.model.getCollection(this.collectionName);\n  var results;\n  if (collection) {\n    results = [];\n    for (var i = 0; i < ids.length; i++) {\n      var id = ids[i];\n      var doc = collection.docs[id];\n      if (doc) {\n        delete collection.docs[id];\n        var data = doc.shareDoc.data;\n        var result = [data, doc.shareDoc.version];\n        if (!data || data.id !== id) {\n          result[2] = id;\n        }\n        if (doc.shareDoc.type !== defaultType) {\n          result[3] = doc.shareDoc.type && doc.shareDoc.type.name;\n        }\n        results.push(result);\n      } else {\n        results.push(id);\n      }\n    }\n  }\n  var counts = [];\n  var contexts = this.model.root._contexts;\n  for (var key in contexts) {\n    var context = contexts[key];\n    var subscribed = context.subscribedQueries[this.hash] || 0;\n    var fetched = context.fetchedQueries[this.hash] || 0;\n    if (subscribed || fetched) {\n      if (key !== 'root') {\n        counts.push([subscribed, fetched, key]);\n      } else if (fetched) {\n        counts.push([subscribed, fetched]);\n      } else {\n        counts.push([subscribed]);\n      }\n    }\n  }\n  var serialized = [\n    counts,\n    this.collectionName,\n    this.expression,\n    results,\n    this.options,\n    this.getExtra()\n  ];\n  while (serialized[serialized.length - 1] == null) {\n    serialized.pop();\n  }\n  return serialized;\n};\n\nfunction queryHash(collectionName, expression, options) {\n  var args = [collectionName, expression, options];\n  return JSON.stringify(args).replace(/\\./g, '|');\n}\n\nfunction resultsIds(results) {\n  var ids = [];\n  for (var i = 0; i < results.length; i++) {\n    var shareDoc = results[i];\n    ids.push(shareDoc.id);\n  }\n  return ids;\n}\n",
    "module.exports = CollectionCounter;\n\nfunction CollectionCounter() {\n  this.reset();\n}\nCollectionCounter.prototype.reset = function() {\n  this.collections = {};\n};\nCollectionCounter.prototype.get = function(collectionName, id) {\n  var collection = this.collections[collectionName];\n  return collection && collection[id];\n};\nCollectionCounter.prototype.increment = function(collectionName, id) {\n  var collection = this.collections[collectionName] ||\n    (this.collections[collectionName] = {});\n  var count = (collection[id] || 0) + 1;\n  collection[id] = count;\n  return count;\n};\nCollectionCounter.prototype.decrement = function(collectionName, id) {\n  var collection = this.collections[collectionName];\n  var count = collection && collection[id];\n  if (count == null) return;\n  if (count > 1) {\n    count--;\n    collection[id] = count;\n    return count;\n  }\n  delete collection[id];\n  // Check if the collection still has any keys\n  // eslint-disable-next-line no-unused-vars\n  for (var key in collection) return 0;\n  delete this.collections[collectionName];\n  return 0;\n};\nCollectionCounter.prototype.toJSON = function() {\n  // Check to see if we have any keys\n  // eslint-disable-next-line no-unused-vars\n  for (var key in this.collections) {\n    return this.collections;\n  }\n  return;\n};\n",
    "var util = require('../util');\nvar Model = require('./Model');\nvar Query = require('./Query');\nvar CollectionCounter = require('./CollectionCounter');\n\nModel.INITS.push(function(model, options) {\n  model.root.fetchOnly = options.fetchOnly;\n  model.root.unloadDelay = options.unloadDelay || (util.isServer) ? 0 : 1000;\n\n  // Track the total number of active fetches per doc\n  model.root._fetchedDocs = new CollectionCounter();\n  // Track the total number of active susbscribes per doc\n  model.root._subscribedDocs = new CollectionCounter();\n});\n\nModel.prototype.fetch = function() {\n  this._forSubscribable(arguments, 'fetch');\n  return this;\n};\nModel.prototype.unfetch = function() {\n  this._forSubscribable(arguments, 'unfetch');\n  return this;\n};\nModel.prototype.subscribe = function() {\n  this._forSubscribable(arguments, 'subscribe');\n  return this;\n};\nModel.prototype.unsubscribe = function() {\n  this._forSubscribable(arguments, 'unsubscribe');\n  return this;\n};\n\nModel.prototype._forSubscribable = function(argumentsObject, method) {\n  var args, cb;\n  if (!argumentsObject.length) {\n    // Use this model's scope if no arguments\n    args = [null];\n  } else if (typeof argumentsObject[0] === 'function') {\n    // Use this model's scope if the first argument is a callback\n    args = [null];\n    cb = argumentsObject[0];\n  } else if (Array.isArray(argumentsObject[0])) {\n    // Items can be passed in as an array\n    args = argumentsObject[0];\n    cb = argumentsObject[1];\n  } else {\n    // Or as multiple arguments\n    args = Array.prototype.slice.call(argumentsObject);\n    var last = args[args.length - 1];\n    if (typeof last === 'function') cb = args.pop();\n  }\n\n  var group = util.asyncGroup(this.wrapCallback(cb));\n  var finished = group();\n  var docMethod = method + 'Doc';\n\n  this.root.connection.startBulk();\n  for (var i = 0; i < args.length; i++) {\n    var item = args[i];\n    if (item instanceof Query) {\n      item[method](group());\n    } else {\n      var segments = this._dereference(this._splitPath(item));\n      if (segments.length === 2) {\n        // Do the appropriate method for a single document.\n        this[docMethod](segments[0], segments[1], group());\n      } else {\n        var message = 'Cannot ' + method + ' to path: ' + segments.join('.');\n        group()(new Error(message));\n      }\n    }\n  }\n  this.root.connection.endBulk();\n  process.nextTick(finished);\n};\n\nModel.prototype.fetchDoc = function(collectionName, id, cb) {\n  cb = this.wrapCallback(cb);\n\n  // Maintain a count of fetches so that we can unload the document\n  // when there are no remaining fetches or subscribes for that document\n  this._context.fetchDoc(collectionName, id);\n  this.root._fetchedDocs.increment(collectionName, id);\n\n  // Fetch\n  var doc = this.getOrCreateDoc(collectionName, id);\n  doc.shareDoc.fetch(cb);\n};\n\nModel.prototype.subscribeDoc = function(collectionName, id, cb) {\n  cb = this.wrapCallback(cb);\n\n  // Maintain a count of subscribes so that we can unload the document\n  // when there are no remaining fetches or subscribes for that document\n  this._context.subscribeDoc(collectionName, id);\n  this.root._subscribedDocs.increment(collectionName, id);\n\n  var doc = this.getOrCreateDoc(collectionName, id);\n  // Early return if we know we are already subscribed\n  if (doc.shareDoc.subscribed) {\n    return cb();\n  }\n  // Subscribe\n  if (this.root.fetchOnly) {\n    doc.shareDoc.fetch(cb);\n  } else {\n    doc.shareDoc.subscribe(cb);\n  }\n};\n\nModel.prototype.unfetchDoc = function(collectionName, id, cb) {\n  cb = this.wrapCallback(cb);\n  this._context.unfetchDoc(collectionName, id);\n\n  // No effect if the document is not currently fetched\n  if (!this.root._fetchedDocs.get(collectionName, id)) return cb();\n\n  var model = this;\n  if (this.root.unloadDelay) {\n    setTimeout(finishUnfetchDoc, this.root.unloadDelay);\n  } else {\n    finishUnfetchDoc();\n  }\n  function finishUnfetchDoc() {\n    var count = model.root._fetchedDocs.decrement(collectionName, id);\n    if (count) return cb(null, count);\n    model._maybeUnloadDoc(collectionName, id);\n    cb(null, 0);\n  }\n};\n\nModel.prototype.unsubscribeDoc = function(collectionName, id, cb) {\n  cb = this.wrapCallback(cb);\n  this._context.unsubscribeDoc(collectionName, id);\n\n  // No effect if the document is not currently subscribed\n  if (!this.root._subscribedDocs.get(collectionName, id)) return cb();\n\n  var model = this;\n  if (this.root.unloadDelay) {\n    setTimeout(finishUnsubscribeDoc, this.root.unloadDelay);\n  } else {\n    finishUnsubscribeDoc();\n  }\n  function finishUnsubscribeDoc() {\n    var count = model.root._subscribedDocs.decrement(collectionName, id);\n    // If there are more remaining subscriptions, only decrement the count\n    // and callback with how many subscriptions are remaining\n    if (count) return cb(null, count);\n\n    // If there is only one remaining subscription, actually unsubscribe\n    if (model.root.fetchOnly) {\n      unsubscribeDocCallback();\n    } else {\n      var doc = model.getDoc(collectionName, id);\n      var shareDoc = doc && doc.shareDoc;\n      if (!shareDoc) return unsubscribeDocCallback();\n      shareDoc.unsubscribe(unsubscribeDocCallback);\n    }\n  }\n  function unsubscribeDocCallback(err) {\n    model._maybeUnloadDoc(collectionName, id);\n    if (err) return cb(err);\n    cb(null, 0);\n  }\n};\n\n// Removes the document from the local model if the model no longer has any\n// remaining fetches or subscribes via a query or direct loading\nModel.prototype._maybeUnloadDoc = function(collectionName, id) {\n  var model = this;\n  var doc = this.getDoc(collectionName, id);\n  if (!doc) return;\n\n  // If there is a query or direct fetch or subscribe that is holding reference\n  // to this doc, leave it loaded\n  if (this._hasDocReferences(collectionName, id)) return;\n  // Calling sharedDoc.destroy() will remove it from the connection only when\n  // there aren't any operations, fetches, or subscribes pending on the doc.\n  // Thus, if we remove the doc from Racer's model but don't remove it from\n  // ShareDB, we can end up with an inconsistent state, with the data existing\n  // in ShareDB not reflected in the racer model data\n  if (doc.shareDoc && doc.shareDoc.hasPending()) {\n    // If the Share doc still has pending activity, retry _maybeUnloadDoc once\n    // the pending activity is done.\n    doc.shareDoc.whenNothingPending(function() {\n      model._maybeUnloadDoc(collectionName, id);\n    });\n  } else {\n    // Otherwise, actually do the unload.\n    var previous = doc.get();\n\n    // Remove doc from Racer\n    if (model.root.collections[collectionName]) model.root.collections[collectionName].remove(id);\n    // Remove doc from Share\n    if (doc.shareDoc) doc.shareDoc.destroy();\n\n    model.emit('unload', [collectionName, id], [previous, model._pass]);\n  }\n};\n\nModel.prototype._hasDocReferences = function(collectionName, id) {\n  // Check if any fetched or subscribed queries currently have the\n  // id in their results\n  var queries = this.root._queries.collections[collectionName];\n  if (queries) {\n    for (var hash in queries) {\n      var query = queries[hash];\n      if (!query.subscribeCount && !query.fetchCount) continue;\n      if (query.idMap[id] > 0) return true;\n    }\n  }\n\n  // Check if document currently has direct fetch or subscribe\n  if (\n    this.root._fetchedDocs.get(collectionName, id) ||\n    this.root._subscribedDocs.get(collectionName, id)\n  ) return true;\n\n  return false;\n};\n",
    "/**\n * Contexts are useful for keeping track of the origin of subscribes.\n */\n\nvar Model = require('./Model');\nvar CollectionCounter = require('./CollectionCounter');\n\nModel.INITS.push(function(model) {\n  model.root._contexts = new Contexts();\n  model.root.setContext('root');\n});\n\nModel.prototype.context = function(id) {\n  var model = this._child();\n  model.setContext(id);\n  return model;\n};\n\nModel.prototype.setContext = function(id) {\n  this._context = this.getOrCreateContext(id);\n};\n\nModel.prototype.getOrCreateContext = function(id) {\n  var context = this.root._contexts[id] ||\n    (this.root._contexts[id] = new Context(this, id));\n  return context;\n};\n\nModel.prototype.unload = function(id) {\n  var context = (id) ? this.root._contexts[id] : this._context;\n  context && context.unload();\n};\n\nModel.prototype.unloadAll = function() {\n  var contexts = this.root._contexts;\n  for (var key in contexts) {\n    contexts[key].unload();\n  }\n};\n\nfunction Contexts() {}\n\nfunction FetchedQueries() {}\nfunction SubscribedQueries() {}\n\nfunction Context(model, id) {\n  this.model = model;\n  this.id = id;\n  this.fetchedDocs = new CollectionCounter();\n  this.subscribedDocs = new CollectionCounter();\n  this.createdDocs = new CollectionCounter();\n  this.fetchedQueries = new FetchedQueries();\n  this.subscribedQueries = new SubscribedQueries();\n}\n\nContext.prototype.toJSON = function() {\n  var fetchedDocs = this.fetchedDocs.toJSON();\n  var subscribedDocs = this.subscribedDocs.toJSON();\n  var createdDocs = this.createdDocs.toJSON();\n  if (!fetchedDocs && !subscribedDocs && !createdDocs) return;\n  return {\n    fetchedDocs: fetchedDocs,\n    subscribedDocs: subscribedDocs,\n    createdDocs: createdDocs\n  };\n};\n\nContext.prototype.fetchDoc = function(collectionName, id) {\n  this.fetchedDocs.increment(collectionName, id);\n};\nContext.prototype.subscribeDoc = function(collectionName, id) {\n  this.subscribedDocs.increment(collectionName, id);\n};\nContext.prototype.unfetchDoc = function(collectionName, id) {\n  this.fetchedDocs.decrement(collectionName, id);\n};\nContext.prototype.unsubscribeDoc = function(collectionName, id) {\n  this.subscribedDocs.decrement(collectionName, id);\n};\nContext.prototype.createDoc = function(collectionName, id) {\n  this.createdDocs.increment(collectionName, id);\n};\nContext.prototype.fetchQuery = function(query) {\n  mapIncrement(this.fetchedQueries, query.hash);\n};\nContext.prototype.subscribeQuery = function(query) {\n  mapIncrement(this.subscribedQueries, query.hash);\n};\nContext.prototype.unfetchQuery = function(query) {\n  mapDecrement(this.fetchedQueries, query.hash);\n};\nContext.prototype.unsubscribeQuery = function(query) {\n  mapDecrement(this.subscribedQueries, query.hash);\n};\nfunction mapIncrement(map, key) {\n  map[key] = (map[key] || 0) + 1;\n}\nfunction mapDecrement(map, key) {\n  map[key] && map[key]--;\n  if (!map[key]) delete map[key];\n}\n\nContext.prototype.unload = function() {\n  var model = this.model;\n  for (var hash in this.fetchedQueries) {\n    var query = model.root._queries.map[hash];\n    if (!query) continue;\n    var count = this.fetchedQueries[hash];\n    while (count--) query.unfetch();\n  }\n  for (var hash in this.subscribedQueries) {\n    var query = model.root._queries.map[hash];\n    if (!query) continue;\n    var count = this.subscribedQueries[hash];\n    while (count--) query.unsubscribe();\n  }\n  for (var collectionName in this.fetchedDocs.collections) {\n    var collection = this.fetchedDocs.collections[collectionName];\n    for (var id in collection) {\n      var count = collection[id];\n      while (count--) model.unfetchDoc(collectionName, id);\n    }\n  }\n  for (var collectionName in this.subscribedDocs.collections) {\n    var collection = this.subscribedDocs.collections[collectionName];\n    for (var id in collection) {\n      var count = collection[id];\n      while (count--) model.unsubscribeDoc(collectionName, id);\n    }\n  }\n  for (var collectionName in this.createdDocs.collections) {\n    var collection = this.createdDocs.collections[collectionName];\n    for (var id in collection) {\n      model._maybeUnloadDoc(collectionName, id);\n    }\n  }\n  this.createdDocs.reset();\n};\n",
    "var defaultFns = module.exports = new DefaultFns();\n\ndefaultFns.reverse = new FnPair(getReverse, setReverse);\ndefaultFns.asc = asc;\ndefaultFns.desc = desc;\n\nfunction DefaultFns() {}\nfunction FnPair(get, set) {\n  this.get = get;\n  this.set = set;\n}\n\nfunction getReverse(array) {\n  return array && array.slice().reverse();\n}\nfunction setReverse(values) {\n  return {0: getReverse(values)};\n}\n\nfunction asc(a, b) {\n  if (a < b) return -1;\n  if (a > b) return 1;\n  return 0;\n}\nfunction desc(a, b) {\n  if (a > b) return -1;\n  if (a < b) return 1;\n  return 0;\n}\n",
    "var util = require('../util');\nvar Model = require('./Model');\nvar defaultFns = require('./defaultFns');\n\nfunction NamedFns() {}\n\nModel.INITS.push(function(model) {\n  model.root._namedFns = new NamedFns();\n  model.root._fns = new Fns(model);\n  model.on('all', fnListener);\n  function fnListener(segments, eventArgs) {\n    var pass = eventArgs[eventArgs.length - 1];\n    var map = model.root._fns.fromMap;\n    for (var path in map) {\n      var fn = map[path];\n      if (pass.$fn === fn) continue;\n      if (util.mayImpactAny(fn.inputsSegments, segments)) {\n        // Mutation affecting input path\n        fn.onInput(pass);\n      } else if (util.mayImpact(fn.fromSegments, segments)) {\n        // Mutation affecting output path\n        fn.onOutput(pass);\n      }\n    }\n  }\n});\n\nModel.prototype.fn = function(name, fns) {\n  this.root._namedFns[name] = fns;\n};\n\nfunction parseStartArguments(model, args, hasPath) {\n  var last = args.pop();\n  var fns, name;\n  if (typeof last === 'string') {\n    name = last;\n  } else {\n    fns = last;\n  }\n  // For `Model#start`, the first parameter is the output path.\n  var path;\n  if (hasPath) {\n    path = model.path(args.shift());\n  }\n  // The second-to-last original argument could be an options object.\n  // If it's not an array and not path-like, then it's an options object.\n  last = args[args.length - 1];\n  var options;\n  if (!Array.isArray(last) && !model.isPath(last)) {\n    options = args.pop();\n  }\n\n  // `args` is just the input paths at this point.\n  var inputs;\n  if (args.length === 1 && Array.isArray(args[0])) {\n    // Inputs provided as one array:\n    //   model.start(outPath, [inPath1, inPath2], fn);\n    inputs = args[0];\n  } else {\n    // Inputs provided as var-args:\n    //   model.start(outPath, inPath1, inPath2, fn);\n    inputs = args;\n  }\n\n  // Normalize each input into a string path.\n  var i = inputs.length;\n  while (i--) {\n    inputs[i] = model.path(inputs[i]);\n  }\n  return {\n    name: name,\n    path: path,\n    inputPaths: inputs,\n    fns: fns,\n    options: options\n  };\n}\n\nModel.prototype.evaluate = function() {\n  var args = Array.prototype.slice.call(arguments);\n  var parsed = parseStartArguments(this, args, false);\n  return this.root._fns.get(parsed.name, parsed.inputPaths, parsed.fns, parsed.options);\n};\n\nModel.prototype.start = function() {\n  var args = Array.prototype.slice.call(arguments);\n  var parsed = parseStartArguments(this, args, true);\n  return this.root._fns.start(parsed.name, parsed.path, parsed.inputPaths, parsed.fns, parsed.options);\n};\n\nModel.prototype.stop = function(subpath) {\n  var path = this.path(subpath);\n  this._stop(path);\n};\nModel.prototype._stop = function(fromPath) {\n  this.root._fns.stop(fromPath);\n};\n\nModel.prototype.stopAll = function(subpath) {\n  var segments = this._splitPath(subpath);\n  this._stopAll(segments);\n};\nModel.prototype._stopAll = function(segments) {\n  var fns = this.root._fns.fromMap;\n  for (var from in fns) {\n    var fromSegments = fns[from].fromSegments;\n    if (util.contains(segments, fromSegments)) {\n      this._stop(from);\n    }\n  }\n};\n\nfunction FromMap() {}\nfunction Fns(model) {\n  this.model = model;\n  this.nameMap = model.root._namedFns;\n  this.fromMap = new FromMap();\n}\n\nFns.prototype.get = function(name, inputPaths, fns, options) {\n  fns || (fns = this.nameMap[name] || defaultFns[name]);\n  var fn = new Fn(this.model, name, null, inputPaths, fns, options);\n  return fn.get();\n};\n\nFns.prototype.start = function(name, path, inputPaths, fns, options) {\n  fns || (fns = this.nameMap[name] || defaultFns[name]);\n  var fn = new Fn(this.model, name, path, inputPaths, fns, options);\n  this.fromMap[path] = fn;\n  return fn._onInput();\n};\n\nFns.prototype.stop = function(path) {\n  var fn = this.fromMap[path];\n  delete this.fromMap[path];\n  return fn;\n};\n\nFns.prototype.toJSON = function() {\n  var out = [];\n  for (var from in this.fromMap) {\n    var fn = this.fromMap[from];\n    // Don't try to bundle non-named functions that were started via\n    // model.start directly instead of by name\n    if (!fn.name) continue;\n    var args = [fn.from].concat(fn.inputPaths);\n    if (fn.options) args.push(fn.options);\n    args.push(fn.name);\n    out.push(args);\n  }\n  return out;\n};\n\nfunction Fn(model, name, from, inputPaths, fns, options) {\n  this.model = model.pass({$fn: this});\n  this.name = name;\n  this.from = from;\n  this.inputPaths = inputPaths;\n  this.options = options;\n  if (!fns) {\n    throw new TypeError('Model function not found: ' + name);\n  }\n  this.getFn = fns.get || fns;\n  this.setFn = fns.set;\n  this.fromSegments = from && from.split('.');\n  this.inputsSegments = [];\n  for (var i = 0; i < this.inputPaths.length; i++) {\n    var segments = this.inputPaths[i].split('.');\n    this.inputsSegments.push(segments);\n  }\n\n  // Copy can be 'output', 'input', 'both', or 'none'\n  var copy = (options && options.copy) || 'output';\n  this.copyInput = (copy === 'input' || copy === 'both');\n  this.copyOutput = (copy === 'output' || copy === 'both');\n\n  // Mode can be 'diffDeep', 'diff', 'arrayDeep', or 'array'\n  this.mode = (options && options.mode) || 'diffDeep';\n\n  this.async = !!(options && options.async);\n  this.eventPending = false;\n}\n\nFn.prototype.apply = function(fn, inputs) {\n  for (var i = 0, len = this.inputsSegments.length; i < len; i++) {\n    var input = this.model._get(this.inputsSegments[i]);\n    inputs.push(this.copyInput ? util.deepCopy(input) : input);\n  }\n  return fn.apply(this.model, inputs);\n};\n\nFn.prototype.get = function() {\n  return this.apply(this.getFn, []);\n};\n\nFn.prototype.set = function(value, pass) {\n  if (!this.setFn) return;\n  var out = this.apply(this.setFn, [value]);\n  if (!out) return;\n  var inputsSegments = this.inputsSegments;\n  var model = this.model.pass(pass, true);\n  for (var key in out) {\n    var value = (this.copyOutput) ? util.deepCopy(out[key]) : out[key];\n    this._setValue(model, inputsSegments[key], value);\n  }\n};\n\nFn.prototype.onInput = function(pass) {\n  if (this.async) {\n    if (this.eventPending) return;\n    this.eventPending = true;\n    var fn = this;\n    process.nextTick(function() {\n      fn._onInput(pass);\n      fn.eventPending = false;\n    });\n    return;\n  }\n  return this._onInput(pass);\n};\n\nFn.prototype._onInput = function(pass) {\n  var value = (this.copyOutput) ? util.deepCopy(this.get()) : this.get();\n  this._setValue(this.model.pass(pass, true), this.fromSegments, value);\n  return value;\n};\n\nFn.prototype.onOutput = function(pass) {\n  var value = this.model._get(this.fromSegments);\n  return this.set(value, pass);\n};\n\nFn.prototype._setValue = function(model, segments, value) {\n  if (this.mode === 'diffDeep') {\n    model._setDiffDeep(segments, value);\n  } else if (this.mode === 'arrayDeep') {\n    model._setArrayDiffDeep(segments, value);\n  } else if (this.mode === 'array') {\n    model._setArrayDiff(segments, value);\n  } else {\n    model._setDiff(segments, value);\n  }\n};\n",
    "var util = require('../util');\nvar Model = require('./Model');\nvar defaultFns = require('./defaultFns');\n\nModel.INITS.push(function(model) {\n  model.root._filters = new Filters(model);\n  model.on('all', filterListener);\n  function filterListener(segments, eventArgs) {\n    var pass = eventArgs[eventArgs.length - 1];\n    var map = model.root._filters.fromMap;\n    for (var path in map) {\n      var filter = map[path];\n      if (pass.$filter === filter) continue;\n      if (\n        util.mayImpact(filter.segments, segments) ||\n        (filter.inputsSegments && util.mayImpactAny(filter.inputsSegments, segments))\n      ) {\n        filter.update(pass);\n      }\n    }\n  }\n});\n\nfunction parseFilterArguments(model, args) {\n  var fn = args.pop();\n  var options, inputPaths;\n  var path = model.path(args.shift());\n\n  var last = args[args.length - 1];\n  if (!model.isPath(last) && !Array.isArray(last)) {\n    options = args.pop();\n  }\n  if (args.length === 1 && Array.isArray(args[0])) {\n    // inputPaths provided as one array:\n    //   model.filter(inputPath, [inputPath1, inputPath2], fn)\n    inputPaths = args[0];\n  } else {\n    // inputPaths provided as var-args:\n    //   model.filter(inputPath, inputPath1, inputPath2, fn)\n    inputPaths = args;\n  }\n  var i = inputPaths.length;\n  while (i--) {\n    inputPaths[i] = model.path(inputPaths[i]);\n  }\n  return {\n    path: path,\n    inputPaths: (inputPaths.length) ? inputPaths : null,\n    options: options,\n    fn: fn\n  };\n}\n\nModel.prototype.filter = function() {\n  var args = Array.prototype.slice.call(arguments);\n  var parsed = parseFilterArguments(this, args);\n  return this.root._filters.add(\n    parsed.path,\n    parsed.fn,\n    null,\n    parsed.inputPaths,\n    parsed.options\n  );\n};\n\nModel.prototype.sort = function() {\n  var args = Array.prototype.slice.call(arguments);\n  var parsed = parseFilterArguments(this, args);\n  return this.root._filters.add(\n    parsed.path,\n    null,\n    parsed.fn || 'asc',\n    parsed.inputPaths,\n    parsed.options\n  );\n};\n\nModel.prototype.removeAllFilters = function(subpath) {\n  var segments = this._splitPath(subpath);\n  this._removeAllFilters(segments);\n};\nModel.prototype._removeAllFilters = function(segments) {\n  var filters = this.root._filters.fromMap;\n  for (var from in filters) {\n    if (util.contains(segments, filters[from].fromSegments)) {\n      filters[from].destroy();\n    }\n  }\n};\n\nfunction FromMap() {}\nfunction Filters(model) {\n  this.model = model;\n  this.fromMap = new FromMap();\n}\n\nFilters.prototype.add = function(path, filterFn, sortFn, inputPaths, options) {\n  return new Filter(this, path, filterFn, sortFn, inputPaths, options);\n};\n\nFilters.prototype.toJSON = function() {\n  var out = [];\n  for (var from in this.fromMap) {\n    var filter = this.fromMap[from];\n    // Don't try to bundle if functions were passed directly instead of by name\n    if (!filter.bundle) continue;\n    var args = [from, filter.path, filter.filterName, filter.sortName, filter.inputPaths];\n    if (filter.options) args.push(filter.options);\n    out.push(args);\n  }\n  return out;\n};\n\nfunction Filter(filters, path, filterFn, sortFn, inputPaths, options) {\n  this.filters = filters;\n  this.model = filters.model.pass({$filter: this});\n  this.path = path;\n  this.segments = path.split('.');\n  this.filterName = null;\n  this.sortName = null;\n  this.bundle = true;\n  this.filterFn = null;\n  this.sortFn = null;\n  this.inputPaths = inputPaths;\n  this.inputsSegments = null;\n  if (inputPaths) {\n    this.inputsSegments = [];\n    for (var i = 0; i < this.inputPaths.length; i++) {\n      var segments = this.inputPaths[i].split('.');\n      this.inputsSegments.push(segments);\n    }\n  }\n  this.options = options;\n  this.skip = options && options.skip;\n  this.limit = options && options.limit;\n  if (filterFn) this.filter(filterFn);\n  if (sortFn) this.sort(sortFn);\n  this.idsSegments = null;\n  this.from = null;\n  this.fromSegments = null;\n}\n\nFilter.prototype.filter = function(fn) {\n  if (typeof fn === 'function') {\n    this.filterFn = fn;\n    this.bundle = false;\n    return this;\n  } else if (typeof fn === 'string') {\n    this.filterName = fn;\n    this.filterFn = this.model.root._namedFns[fn] || defaultFns[fn];\n    if (!this.filterFn) {\n      throw new TypeError('Filter function not found: ' + fn);\n    }\n  }\n  return this;\n};\n\nFilter.prototype.sort = function(fn) {\n  if (!fn) fn = 'asc';\n  if (typeof fn === 'function') {\n    this.sortFn = fn;\n    this.bundle = false;\n    return this;\n  } else if (typeof fn === 'string') {\n    this.sortName = fn;\n    this.sortFn = this.model.root._namedFns[fn] || defaultFns[fn];\n    if (!this.sortFn) {\n      throw new TypeError('Sort function not found: ' + fn);\n    }\n  }\n  return this;\n};\n\nFilter.prototype._slice = function(results) {\n  if (this.skip == null && this.limit == null) return results;\n  var begin = this.skip || 0;\n  // A limit of zero is equivalent to setting no limit\n  var end;\n  if (this.limit) end = begin + this.limit;\n  return results.slice(begin, end);\n};\n\nFilter.prototype.getInputs = function() {\n  if (!this.inputsSegments) return;\n  var inputs = [];\n  for (var i = 0, len = this.inputsSegments.length; i < len; i++) {\n    var input = this.model._get(this.inputsSegments[i]);\n    inputs.push(input);\n  }\n  return inputs;\n};\n\nFilter.prototype.callFilter = function(items, key, inputs) {\n  var item = items[key];\n  return (inputs) ?\n    this.filterFn.apply(this.model, [item, key, items].concat(inputs)) :\n    this.filterFn.call(this.model, item, key, items);\n};\n\nFilter.prototype.ids = function() {\n  var items = this.model._get(this.segments);\n  var ids = [];\n  if (!items) return ids;\n  if (Array.isArray(items)) {\n    throw new Error('model.filter is not currently supported on arrays');\n  }\n  if (this.filterFn) {\n    var inputs = this.getInputs();\n    for (var key in items) {\n      if (items.hasOwnProperty(key) && this.callFilter(items, key, inputs)) {\n        ids.push(key);\n      }\n    }\n  } else {\n    ids = Object.keys(items);\n  }\n  var sortFn = this.sortFn;\n  if (sortFn) {\n    ids.sort(function(a, b) {\n      return sortFn(items[a], items[b]);\n    });\n  }\n  return this._slice(ids);\n};\n\nFilter.prototype.get = function() {\n  var items = this.model._get(this.segments);\n  var results = [];\n  if (Array.isArray(items)) {\n    throw new Error('model.filter is not currently supported on arrays');\n  }\n  if (this.filterFn) {\n    var inputs = this.getInputs();\n    for (var key in items) {\n      if (items.hasOwnProperty(key) && this.callFilter(items, key, inputs)) {\n        results.push(items[key]);\n      }\n    }\n  } else {\n    for (var key in items) {\n      if (items.hasOwnProperty(key)) {\n        results.push(items[key]);\n      }\n    }\n  }\n  if (this.sortFn) results.sort(this.sortFn);\n  return this._slice(results);\n};\n\nFilter.prototype.update = function(pass) {\n  var ids = this.ids();\n  this.model.pass(pass, true)._setArrayDiff(this.idsSegments, ids);\n};\n\nFilter.prototype.ref = function(from) {\n  from = this.model.path(from);\n  this.from = from;\n  this.fromSegments = from.split('.');\n  this.filters.fromMap[from] = this;\n  this.idsSegments = ['$filters', from.replace(/\\./g, '|')];\n  this.update();\n  return this.model.refList(from, this.path, this.idsSegments.join('.'));\n};\n\nFilter.prototype.destroy = function() {\n  delete this.filters.fromMap[this.from];\n  this.model._removeRef(this.idsSegments);\n  this.model._del(this.idsSegments);\n};\n",
    "var util = require('../util');\nvar Model = require('./Model');\n\nModel.INITS.push(function(model) {\n  var root = model.root;\n  root._refLists = new RefLists();\n  for (var type in Model.MUTATOR_EVENTS) {\n    addListener(root, type);\n  }\n});\n\nfunction addListener(model, type) {\n  model.on(type + 'Immediate', refListListener);\n  function refListListener(segments, eventArgs) {\n    var pass = eventArgs[eventArgs.length - 1];\n    // Check for updates on or underneath paths\n    var fromMap = model._refLists.fromMap;\n    for (var from in fromMap) {\n      var refList = fromMap[from];\n      if (pass.$refList === refList) continue;\n      refList.onMutation(type, segments, eventArgs);\n    }\n  }\n}\n\n/**\n * @param {String} type\n * @param {Array} segments\n * @param {Array} eventArgs\n * @param {RefList} refList\n */\nfunction patchFromEvent(type, segments, eventArgs, refList) {\n  var fromLength = refList.fromSegments.length;\n  var segmentsLength = segments.length;\n  var pass = eventArgs[eventArgs.length - 1];\n  var model = refList.model.pass(pass, true);\n\n  // Mutation on the `from` output itself\n  if (segmentsLength === fromLength) {\n    if (type === 'insert') {\n      var index = eventArgs[0];\n      var values = eventArgs[1];\n      var ids = setNewToValues(model, refList, values);\n      model._insert(refList.idsSegments, index, ids);\n      return;\n    }\n\n    if (type === 'remove') {\n      var index = eventArgs[0];\n      var howMany = eventArgs[1].length;\n      var ids = model._remove(refList.idsSegments, index, howMany);\n      // Delete the appropriate items underneath `to` if the `deleteRemoved`\n      // option was set true\n      if (refList.deleteRemoved) {\n        for (var i = 0; i < ids.length; i++) {\n          var item = refList.itemById(ids[i]);\n          model._del(refList.toSegmentsByItem(item));\n        }\n      }\n      return;\n    }\n\n    if (type === 'move') {\n      var from = eventArgs[0];\n      var to = eventArgs[1];\n      var howMany = eventArgs[2];\n      model._move(refList.idsSegments, from, to, howMany);\n      return;\n    }\n\n    // Change of the entire output\n    var values = (type === 'change') ?\n      eventArgs[0] : model._get(refList.fromSegments);\n    // Set ids to empty list if output is set to null\n    if (!values) {\n      model._set(refList.idsSegments, []);\n      return;\n    }\n    // If the entire output is set, create a list of ids based on the output,\n    // and update the corresponding items\n    var ids = setNewToValues(model, refList, values);\n    model._set(refList.idsSegments, ids);\n    return;\n  }\n\n  // If mutation is on a parent of `from`, we might need to re-create the\n  // entire refList output\n  if (segmentsLength < fromLength) {\n    model._setArrayDiff(refList.fromSegments, refList.get());\n    return;\n  }\n\n  var index = segments[fromLength];\n  var value = model._get(refList.fromSegments.concat(index));\n  var toSegments = refList.toSegmentsByItem(value);\n\n  // Mutation underneath a child of the `from` object.\n  if (segmentsLength > fromLength + 1) {\n    throw new Error('Mutation on descendant of refList `from`' +\n      ' should have been dereferenced: ' + segments.join('.'));\n  }\n\n  // Otherwise, mutation of a child of the `from` object\n\n  // If changing the item itself, it will also have to be re-set on the\n  // original object\n  if (type === 'change') {\n    model._set(toSegments, value);\n    updateIdForValue(model, refList, index, value);\n    return;\n  }\n  if (type === 'insert' || type === 'remove' || type === 'move') {\n    throw new Error('Array mutation on child of refList `from`' +\n      'should have been dereferenced: ' + segments.join('.'));\n  }\n}\n\n/**\n * @private\n * @param {Model} model\n * @param {RefList} refList\n * @param {Array} values\n */\nfunction setNewToValues(model, refList, values) {\n  var ids = [];\n  for (var i = 0; i < values.length; i++) {\n    var value = values[i];\n    var id = refList.idByItem(value);\n    if (id === undefined && typeof value === 'object') {\n      id = value.id = model.id();\n    }\n    var toSegments = refList.toSegmentsByItem(value);\n    if (id === undefined || toSegments === undefined) {\n      throw new Error('Unable to add item to refList: ' + value);\n    }\n    if (model._get(toSegments) !== value) {\n      model._set(toSegments, value);\n    }\n    ids.push(id);\n  }\n  return ids;\n}\nfunction updateIdForValue(model, refList, index, value) {\n  var id = refList.idByItem(value);\n  var outSegments = refList.idsSegments.concat(index);\n  model._set(outSegments, id);\n}\n\nfunction patchToEvent(type, segments, eventArgs, refList) {\n  var toLength = refList.toSegments.length;\n  var segmentsLength = segments.length;\n  var pass = eventArgs[eventArgs.length - 1];\n  var model = refList.model.pass(pass, true);\n\n  // Mutation on the `to` object itself\n  if (segmentsLength === toLength) {\n    if (type === 'insert') {\n      var values = eventArgs[1];\n      for (var i = 0; i < values.length; i++) {\n        var value = values[i];\n        var indices = refList.indicesByItem(value);\n        if (!indices) continue;\n        for (var j = 0; j < indices.length; j++) {\n          var outSegments = refList.fromSegments.concat(indices[j]);\n          model._set(outSegments, value);\n        }\n      }\n      return;\n    }\n\n    if (type === 'remove') {\n      var removeIndex = eventArgs[0];\n      var values = eventArgs[1];\n      var howMany = values.length;\n      for (var i = removeIndex, len = removeIndex + howMany; i < len; i++) {\n        var indices = refList.indicesByItem(values[i]);\n        if (!indices) continue;\n        for (var j = 0, indicesLen = indices.length; j < indicesLen; j++) {\n          var outSegments = refList.fromSegments.concat(indices[j]);\n          model._set(outSegments, undefined);\n        }\n      }\n      return;\n    }\n\n    if (type === 'move') {\n      // Moving items in the `to` object should have no effect on the output\n      return;\n    }\n  }\n\n  // Mutation on or above the `to` object\n  if (segmentsLength <= toLength) {\n    // If the entire `to` object is updated, we need to re-create the\n    // entire refList output and apply what is different\n    model._setArrayDiff(refList.fromSegments, refList.get());\n    return;\n  }\n\n  // Mutation underneath a child of the `to` object. The item will already\n  // be up to date, since it is under an object reference. Just re-emit\n  if (segmentsLength > toLength + 1) {\n    var value = model._get(segments.slice(0, toLength + 1));\n    var indices = refList.indicesByItem(value);\n    if (!indices) return;\n    var remaining = segments.slice(toLength + 1);\n    for (var i = 0; i < indices.length; i++) {\n      var index = indices[i];\n      var dereferenced = refList.fromSegments.concat(index, remaining);\n      dereferenced = model._dereference(dereferenced, null, refList);\n      eventArgs = eventArgs.slice();\n      eventArgs[eventArgs.length - 1] = model._pass;\n      model.emit(type, dereferenced, eventArgs);\n    }\n    return;\n  }\n\n  // Otherwise, mutation of a child of the `to` object\n\n  // If changing the item itself, it will also have to be re-set on the\n  // array created by the refList\n  if (type === 'change' || type === 'load' || type === 'unload') {\n    var value, previous;\n    if (type === 'change') {\n      value = eventArgs[0];\n      previous = eventArgs[1];\n    } else if (type === 'load') {\n      value = eventArgs[0];\n      previous = undefined;\n    } else if (type === 'unload') {\n      value = undefined;\n      previous = eventArgs[0];\n    }\n    var newIndices = refList.indicesByItem(value);\n    var oldIndices = refList.indicesByItem(previous);\n    if (!newIndices && !oldIndices) return;\n    if (oldIndices && !equivalentArrays(oldIndices, newIndices)) {\n      // The changed item used to refer to some indices, but no longer does\n      for (var i = 0; i < oldIndices.length; i++) {\n        var outSegments = refList.fromSegments.concat(oldIndices[i]);\n        model._set(outSegments, undefined);\n      }\n    }\n    if (newIndices) {\n      for (var i = 0; i < newIndices.length; i++) {\n        var outSegments = refList.fromSegments.concat(newIndices[i]);\n        model._set(outSegments, value);\n      }\n    }\n    return;\n  }\n\n  var value = model._get(segments.slice(0, toLength + 1));\n  var indices = refList.indicesByItem(value);\n  if (!indices) return;\n\n  if (type === 'insert' || type === 'remove' || type === 'move') {\n    // Array mutations will have already been updated via an object\n    // reference, so only re-emit\n    for (var i = 0; i < indices.length; i++) {\n      var dereferenced = refList.fromSegments.concat(indices[i]);\n      dereferenced = model._dereference(dereferenced, null, refList);\n      eventArgs = eventArgs.slice();\n      eventArgs[eventArgs.length - 1] = model._pass;\n      model.emit(type, dereferenced, eventArgs);\n    }\n  }\n}\nfunction equivalentArrays(a, b) {\n  if (!a || !b) return false;\n  if (a.length !== b.length) return false;\n  for (var i = 0; i < a.length; i++) {\n    if (a[i] !== b[i]) return false;\n  }\n  return true;\n}\n\nfunction patchIdsEvent(type, segments, eventArgs, refList) {\n  var idsLength = refList.idsSegments.length;\n  var segmentsLength = segments.length;\n  var pass = eventArgs[eventArgs.length - 1];\n  var model = refList.model.pass(pass, true);\n\n  // An array mutation of the ids should be mirrored with a like change in\n  // the output array\n  if (segmentsLength === idsLength) {\n    if (type === 'insert') {\n      var index = eventArgs[0];\n      var inserted = eventArgs[1];\n      var values = [];\n      for (var i = 0; i < inserted.length; i++) {\n        var value = refList.itemById(inserted[i]);\n        values.push(value);\n      }\n      model._insert(refList.fromSegments, index, values);\n      return;\n    }\n\n    if (type === 'remove') {\n      var index = eventArgs[0];\n      var howMany = eventArgs[1].length;\n      model._remove(refList.fromSegments, index, howMany);\n      return;\n    }\n\n    if (type === 'move') {\n      var from = eventArgs[0];\n      var to = eventArgs[1];\n      var howMany = eventArgs[2];\n      model._move(refList.fromSegments, from, to, howMany);\n      return;\n    }\n  }\n\n  // Mutation on the `ids` list itself\n  if (segmentsLength <= idsLength) {\n    // If the entire `ids` array is updated, we need to re-create the\n    // entire refList output and apply what is different\n    model._setArrayDiff(refList.fromSegments, refList.get());\n    return;\n  }\n\n  // Otherwise, direct mutation of a child in the `ids` object or mutation\n  // underneath an item in the `ids` list. Update the item for the appropriate\n  // id if it has changed\n  var index = segments[idsLength];\n  var id = refList.idByIndex(index);\n  var item = refList.itemById(id);\n  var itemSegments = refList.fromSegments.concat(index);\n  if (model._get(itemSegments) !== item) {\n    model._set(itemSegments, item);\n  }\n}\n\nModel.prototype.refList = function() {\n  var from, to, ids, options;\n  if (arguments.length === 2) {\n    to = arguments[0];\n    ids = arguments[1];\n  } else if (arguments.length === 3) {\n    if (this.isPath(arguments[2])) {\n      from = arguments[0];\n      to = arguments[1];\n      ids = arguments[2];\n    } else {\n      to = arguments[0];\n      ids = arguments[1];\n      options = arguments[2];\n    }\n  } else {\n    from = arguments[0];\n    to = arguments[1];\n    ids = arguments[2];\n    options = arguments[3];\n  }\n  var fromPath = this.path(from);\n  var toPath;\n  if (Array.isArray(to)) {\n    toPath = [];\n    for (var i = 0; i < to.length; i++) {\n      toPath.push(this.path(to[i]));\n    }\n  } else {\n    toPath = this.path(to);\n  }\n  var idsPath = this.path(ids);\n  var refList = new RefList(this.root, fromPath, toPath, idsPath, options);\n  this.root._refLists.remove(fromPath);\n  refList.model._setArrayDiff(refList.fromSegments, refList.get());\n  this.root._refLists.add(refList);\n  return this.scope(fromPath);\n};\n\nfunction RefList(model, from, to, ids, options) {\n  this.model = model && model.pass({$refList: this});\n  this.from = from;\n  this.to = to;\n  this.ids = ids;\n  this.fromSegments = from && from.split('.');\n  this.toSegments = to && to.split('.');\n  this.idsSegments = ids && ids.split('.');\n  this.options = options;\n  this.deleteRemoved = options && options.deleteRemoved;\n}\n\n// The default implementation assumes that the ids array is a flat list of\n// keys on the to object. Ideally, this mapping could be customized via\n// inheriting from RefList and overriding these methods without having to\n// modify the above event handling code.\n//\n// In the default refList implementation, `key` and `id` are equal.\n//\n// Terms in the below methods:\n//   `item`  - Object on the `to` path, which gets mirrored on the `from` path\n//   `key`   - The property under `to` at which an item is located\n//   `id`    - String or object in the array at the `ids` path\n//   `index` - The index of an id, which corresponds to an index on `from`\nRefList.prototype.get = function() {\n  var ids = this.model._get(this.idsSegments);\n  if (!ids) return [];\n  var items = this.model._get(this.toSegments);\n  var out = [];\n  for (var i = 0; i < ids.length; i++) {\n    var key = ids[i];\n    out.push(items && items[key]);\n  }\n  return out;\n};\nRefList.prototype.dereference = function(segments, i) {\n  var remaining = segments.slice(i + 1);\n  var key = this.idByIndex(remaining[0]);\n  if (key == null) return [];\n  remaining[0] = key;\n  return this.toSegments.concat(remaining);\n};\nRefList.prototype.toSegmentsByItem = function(item) {\n  var key = this.idByItem(item);\n  if (key === undefined) return;\n  return this.toSegments.concat(key);\n};\nRefList.prototype.idByItem = function(item) {\n  if (item && item.id) return item.id;\n  var items = this.model._get(this.toSegments);\n  for (var key in items) {\n    if (item === items[key]) return key;\n  }\n};\nRefList.prototype.indicesByItem = function(item) {\n  var id = this.idByItem(item);\n  var ids = this.model._get(this.idsSegments);\n  if (!ids) return;\n  var indices;\n  var index = -1;\n  for (;;) {\n    index = ids.indexOf(id, index + 1);\n    if (index === -1) break;\n    if (indices) {\n      indices.push(index);\n    } else {\n      indices = [index];\n    }\n  }\n  return indices;\n};\nRefList.prototype.itemById = function(id) {\n  return this.model._get(this.toSegments.concat(id));\n};\nRefList.prototype.idByIndex = function(index) {\n  return this.model._get(this.idsSegments.concat(index));\n};\nRefList.prototype.onMutation = function(type, segments, eventArgs) {\n  if (util.mayImpact(this.toSegments, segments)) {\n    patchToEvent(type, segments, eventArgs, this);\n  } else if (util.mayImpact(this.idsSegments, segments)) {\n    patchIdsEvent(type, segments, eventArgs, this);\n  } else if (util.mayImpact(this.fromSegments, segments)) {\n    patchFromEvent(type, segments, eventArgs, this);\n  }\n};\n\nfunction FromMap() {}\n\nfunction RefLists() {\n  this.fromMap = new FromMap();\n}\n\nRefLists.prototype.add = function(refList) {\n  this.fromMap[refList.from] = refList;\n};\n\nRefLists.prototype.remove = function(from) {\n  var refList = this.fromMap[from];\n  delete this.fromMap[from];\n  return refList;\n};\n\nRefLists.prototype.toJSON = function() {\n  var out = [];\n  for (var from in this.fromMap) {\n    var refList = this.fromMap[from];\n    out.push([refList.from, refList.to, refList.ids, refList.options]);\n  }\n  return out;\n};\n",
    "var util = require('../util');\nvar Model = require('./Model');\n\nModel.INITS.push(function(model) {\n  var root = model.root;\n  root._refs = new Refs();\n  addIndexListeners(root);\n  addListener(root, 'change', refChange);\n  addListener(root, 'load', refLoad);\n  addListener(root, 'unload', refUnload);\n  addListener(root, 'insert', refInsert);\n  addListener(root, 'remove', refRemove);\n  addListener(root, 'move', refMove);\n});\n\nfunction addIndexListeners(model) {\n  model.on('insertImmediate', function refInsertIndex(segments, eventArgs) {\n    var index = eventArgs[0];\n    var howMany = eventArgs[1].length;\n    function patchInsert(refIndex) {\n      return (index <= refIndex) ? refIndex + howMany : refIndex;\n    }\n    onIndexChange(segments, patchInsert);\n  });\n  model.on('removeImmediate', function refRemoveIndex(segments, eventArgs) {\n    var index = eventArgs[0];\n    var howMany = eventArgs[1].length;\n    function patchRemove(refIndex) {\n      return (index <= refIndex) ? refIndex - howMany : refIndex;\n    }\n    onIndexChange(segments, patchRemove);\n  });\n  model.on('moveImmediate', function refMoveIndex(segments, eventArgs) {\n    var from = eventArgs[0];\n    var to = eventArgs[1];\n    var howMany = eventArgs[2];\n    function patchMove(refIndex) {\n      // If the index was moved itself\n      if (from <= refIndex && refIndex < from + howMany) {\n        return refIndex + to - from;\n      }\n      // Remove part of a move\n      if (from <= refIndex) refIndex -= howMany;\n      // Insert part of a move\n      if (to <= refIndex) refIndex += howMany;\n      return refIndex;\n    }\n    onIndexChange(segments, patchMove);\n  });\n  function onIndexChange(segments, patch) {\n    var fromMap = model._refs.fromMap;\n    for (var from in fromMap) {\n      var ref = fromMap[from];\n      if (!(ref.updateIndices &&\n        util.contains(segments, ref.toSegments) &&\n        ref.toSegments.length > segments.length)) continue;\n      var index = +ref.toSegments[segments.length];\n      var patched = patch(index);\n      if (index === patched) continue;\n      model._refs.remove(from);\n      ref.toSegments[segments.length] = '' + patched;\n      ref.to = ref.toSegments.join('.');\n      model._refs.add(ref);\n    }\n  }\n}\n\nfunction refChange(model, dereferenced, eventArgs, segments) {\n  var value = eventArgs[0];\n  // Detect if we are deleting vs. setting to undefined\n  if (value === undefined) {\n    var parentSegments = segments.slice();\n    var last = parentSegments.pop();\n    var parent = model._get(parentSegments);\n    if (!parent || !(last in parent)) {\n      model._del(dereferenced);\n      return;\n    }\n  }\n  model._set(dereferenced, value);\n}\nfunction refLoad(model, dereferenced, eventArgs) {\n  var value = eventArgs[0];\n  model._set(dereferenced, value);\n}\nfunction refUnload(model, dereferenced) {\n  model._del(dereferenced);\n}\nfunction refInsert(model, dereferenced, eventArgs) {\n  var index = eventArgs[0];\n  var values = eventArgs[1];\n  model._insert(dereferenced, index, values);\n}\nfunction refRemove(model, dereferenced, eventArgs) {\n  var index = eventArgs[0];\n  var howMany = eventArgs[1].length;\n  model._remove(dereferenced, index, howMany);\n}\nfunction refMove(model, dereferenced, eventArgs) {\n  var from = eventArgs[0];\n  var to = eventArgs[1];\n  var howMany = eventArgs[2];\n  model._move(dereferenced, from, to, howMany);\n}\n\nfunction addListener(model, type, fn) {\n  model.on(type + 'Immediate', refListener);\n  function refListener(segments, eventArgs) {\n    var pass = eventArgs[eventArgs.length - 1];\n    // Find cases where an event is emitted on a path where a reference\n    // is pointing. All original mutations happen on the fully dereferenced\n    // location, so this detection only needs to happen in one direction\n    var toMap = model._refs.toMap;\n    var subpath;\n    for (var i = 0, len = segments.length; i < len; i++) {\n      subpath = (subpath) ? subpath + '.' + segments[i] : segments[i];\n      // If a ref is found pointing to a matching subpath, re-emit on the\n      // place where the reference is coming from as if the mutation also\n      // occured at that path\n      var refs = toMap[subpath];\n      if (!refs) continue;\n\n      // Shallow clone refs in case a ref is removed while going through\n      // the loop\n      refs = refs.slice();\n      var remaining = segments.slice(i + 1);\n      for (var refIndex = 0, numRefs = refs.length; refIndex < numRefs; refIndex++) {\n        var ref = refs[refIndex];\n        var dereferenced = ref.fromSegments.concat(remaining);\n        // The value may already be up to date via object reference. If so,\n        // simply re-emit the event. Otherwise, perform the same mutation on\n        // the ref's path\n        if (model._get(dereferenced) === model._get(segments)) {\n          model.emit(type, dereferenced, eventArgs);\n        } else {\n          var setterModel = ref.model.pass(pass, true);\n          setterModel._dereference = noopDereference;\n          fn(setterModel, dereferenced, eventArgs, segments);\n        }\n      }\n    }\n    // If a ref points to a child of a matching subpath, get the value in\n    // case it has changed and set if different\n    var parentToMap = model._refs.parentToMap;\n    var refs = parentToMap[subpath];\n    if (!refs) return;\n    for (var refIndex = 0, numRefs = refs.length; refIndex < numRefs; refIndex++) {\n      var ref = refs[refIndex];\n      var value = model._get(ref.toSegments);\n      var previous = model._get(ref.fromSegments);\n      if (previous !== value) {\n        var setterModel = ref.model.pass(pass, true);\n        setterModel._dereference = noopDereference;\n        setterModel._set(ref.fromSegments, value);\n      }\n    }\n  }\n}\n\nModel.prototype._canRefTo = function(value) {\n  return this.isPath(value) || (value && typeof value.ref === 'function');\n};\n\nModel.prototype.ref = function() {\n  var from, to, options;\n  if (arguments.length === 1) {\n    to = arguments[0];\n  } else if (arguments.length === 2) {\n    if (this._canRefTo(arguments[1])) {\n      from = arguments[0];\n      to = arguments[1];\n    } else {\n      to = arguments[0];\n      options = arguments[1];\n    }\n  } else {\n    from = arguments[0];\n    to = arguments[1];\n    options = arguments[2];\n  }\n  var fromPath = this.path(from);\n  var toPath = this.path(to);\n  // Make ref to reffable object, such as query or filter\n  if (!toPath) return to.ref(fromPath);\n  var ref = new Ref(this.root, fromPath, toPath, options);\n  if (ref.fromSegments.length < 2) {\n    throw new Error('ref must be performed under a collection ' +\n      'and document id. Invalid path: ' + fromPath);\n  }\n  this.root._refs.remove(fromPath);\n  this.root._refLists.remove(fromPath);\n  var value = this.get(to);\n  ref.model._set(ref.fromSegments, value);\n  this.root._refs.add(ref);\n  return this.scope(fromPath);\n};\n\nModel.prototype.removeRef = function(subpath) {\n  var segments = this._splitPath(subpath);\n  var fromPath = segments.join('.');\n  this._removeRef(segments, fromPath);\n};\nModel.prototype._removeRef = function(segments, fromPath) {\n  this.root._refs.remove(fromPath);\n  this.root._refLists.remove(fromPath);\n  this._del(segments);\n};\n\nModel.prototype.removeAllRefs = function(subpath) {\n  var segments = this._splitPath(subpath);\n  this._removeAllRefs(segments);\n};\nModel.prototype._removeAllRefs = function(segments) {\n  this._removeMapRefs(segments, this.root._refs.fromMap);\n  this._removeMapRefs(segments, this.root._refLists.fromMap);\n};\nModel.prototype._removeMapRefs = function(segments, map) {\n  for (var from in map) {\n    var fromSegments = map[from].fromSegments;\n    if (util.contains(segments, fromSegments)) {\n      this._removeRef(fromSegments, from);\n    }\n  }\n};\n\nModel.prototype.dereference = function(subpath) {\n  var segments = this._splitPath(subpath);\n  return this._dereference(segments).join('.');\n};\n\nModel.prototype._dereference = function(segments, forArrayMutator, ignore) {\n  if (segments.length === 0) return segments;\n  var refs = this.root._refs.fromMap;\n  var refLists = this.root._refLists.fromMap;\n  var doAgain;\n  do {\n    var subpath = '';\n    doAgain = false;\n    for (var i = 0, len = segments.length; i < len; i++) {\n      subpath = (subpath) ? subpath + '.' + segments[i] : segments[i];\n\n      var ref = refs[subpath];\n      if (ref) {\n        var remaining = segments.slice(i + 1);\n        segments = ref.toSegments.concat(remaining);\n        doAgain = true;\n        break;\n      }\n\n      var refList = refLists[subpath];\n      if (refList && refList !== ignore) {\n        var belowDescendant = i + 2 < len;\n        var belowChild = i + 1 < len;\n        if (!(belowDescendant || forArrayMutator && belowChild)) continue;\n        segments = refList.dereference(segments, i);\n        doAgain = true;\n        break;\n      }\n    }\n  } while (doAgain);\n  // If a dereference fails, return a path that will result in a null value\n  // instead of a path to everything in the model\n  if (segments.length === 0) return ['$null'];\n  return segments;\n};\n\nfunction noopDereference(segments) {\n  return segments;\n}\n\nfunction Ref(model, from, to, options) {\n  this.model = model && model.pass({$ref: this});\n  this.from = from;\n  this.to = to;\n  this.fromSegments = from.split('.');\n  this.toSegments = to.split('.');\n  this.parentTos = [];\n  for (var i = 1, len = this.toSegments.length; i < len; i++) {\n    var parentTo = this.toSegments.slice(0, i).join('.');\n    this.parentTos.push(parentTo);\n  }\n  this.updateIndices = options && options.updateIndices;\n}\nfunction FromMap() {}\nfunction ToMap() {}\n\nfunction Refs() {\n  this.fromMap = new FromMap();\n  this.toMap = new ToMap();\n  this.parentToMap = new ToMap();\n}\n\nRefs.prototype.add = function(ref) {\n  this.fromMap[ref.from] = ref;\n  listMapAdd(this.toMap, ref.to, ref);\n  for (var i = 0, len = ref.parentTos.length; i < len; i++) {\n    listMapAdd(this.parentToMap, ref.parentTos[i], ref);\n  }\n};\n\nRefs.prototype.remove = function(from) {\n  var ref = this.fromMap[from];\n  if (!ref) return;\n  delete this.fromMap[from];\n  listMapRemove(this.toMap, ref.to, ref);\n  for (var i = 0, len = ref.parentTos.length; i < len; i++) {\n    listMapRemove(this.parentToMap, ref.parentTos[i], ref);\n  }\n  return ref;\n};\n\nRefs.prototype.toJSON = function() {\n  var out = [];\n  for (var from in this.fromMap) {\n    var ref = this.fromMap[from];\n    out.push([ref.from, ref.to]);\n  }\n  return out;\n};\n\nfunction listMapAdd(map, name, item) {\n  map[name] || (map[name] = []);\n  map[name].push(item);\n}\n\nfunction listMapRemove(map, name, item) {\n  var items = map[name];\n  if (!items) return;\n  var index = items.indexOf(item);\n  if (index === -1) return;\n  items.splice(index, 1);\n  if (!items.length) delete map[name];\n}\n",
    "module.exports = require('./Model');\nvar util = require('../util');\n\n// Extend model on both server and client //\nrequire('./unbundle');\nrequire('./events');\nrequire('./paths');\nrequire('./collections');\nrequire('./mutators');\nrequire('./setDiff');\n\nrequire('./connection');\nrequire('./subscriptions');\nrequire('./Query');\nrequire('./contexts');\n\nrequire('./fn');\nrequire('./filter');\nrequire('./refList');\nrequire('./ref');\n\n// Extend model for server //\nutil.serverRequire(module, './bundle');\nutil.serverRequire(module, './connection.server');\n",
    "var EventEmitter = require('events').EventEmitter;\nvar Model = require('./Model');\nvar util = require('./util');\n\nmodule.exports = Racer;\n\nfunction Racer() {\n  EventEmitter.call(this);\n}\n\nutil.mergeInto(Racer.prototype, EventEmitter.prototype);\n\n// Make classes accessible for use by plugins and tests\nRacer.prototype.Model = Model;\nRacer.prototype.util = util;\n\n// Support plugins on racer instances\nRacer.prototype.use = util.use;\nRacer.prototype.serverUse = util.serverUse;\n\nRacer.prototype.createModel = function(data) {\n  var model = new Model();\n  if (data) {\n    model.createConnection(data);\n    model.unbundle(data);\n  }\n  return model;\n};\n\nutil.serverRequire(module, './Racer.server');\n",
    "var Racer = require('./Racer');\nmodule.exports = new Racer();\n",
    "(function(){\nvar f, aa = aa || {}, l = this;\nfunction ba(a) {\n  a = a.split(\".\");\n  for (var b = l, c;c = a.shift();) {\n    if (null != b[c]) {\n      b = b[c];\n    } else {\n      return null;\n    }\n  }\n  return b;\n}\nfunction ca() {\n}\nfunction da(a) {\n  var b = typeof a;\n  if (\"object\" == b) {\n    if (a) {\n      if (a instanceof Array) {\n        return \"array\";\n      }\n      if (a instanceof Object) {\n        return b;\n      }\n      var c = Object.prototype.toString.call(a);\n      if (\"[object Window]\" == c) {\n        return \"object\";\n      }\n      if (\"[object Array]\" == c || \"number\" == typeof a.length && \"undefined\" != typeof a.splice && \"undefined\" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable(\"splice\")) {\n        return \"array\";\n      }\n      if (\"[object Function]\" == c || \"undefined\" != typeof a.call && \"undefined\" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable(\"call\")) {\n        return \"function\";\n      }\n    } else {\n      return \"null\";\n    }\n  } else {\n    if (\"function\" == b && \"undefined\" == typeof a.call) {\n      return \"object\";\n    }\n  }\n  return b;\n}\nfunction m(a) {\n  return \"array\" == da(a);\n}\nfunction ea(a) {\n  var b = da(a);\n  return \"array\" == b || \"object\" == b && \"number\" == typeof a.length;\n}\nfunction n(a) {\n  return \"string\" == typeof a;\n}\nfunction fa(a) {\n  return \"function\" == da(a);\n}\nvar ga = \"closure_uid_\" + (1E9 * Math.random() >>> 0), ha = 0;\nfunction ia(a, b, c) {\n  return a.call.apply(a.bind, arguments);\n}\nfunction ja(a, b, c) {\n  if (!a) {\n    throw Error();\n  }\n  if (2 < arguments.length) {\n    var d = Array.prototype.slice.call(arguments, 2);\n    return function() {\n      var c = Array.prototype.slice.call(arguments);\n      Array.prototype.unshift.apply(c, d);\n      return a.apply(b, c);\n    };\n  }\n  return function() {\n    return a.apply(b, arguments);\n  };\n}\nfunction p(a, b, c) {\n  p = Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf(\"native code\") ? ia : ja;\n  return p.apply(null, arguments);\n}\nvar q = Date.now || function() {\n  return+new Date;\n};\nfunction s(a, b) {\n  function c() {\n  }\n  c.prototype = b.prototype;\n  a.pa = b.prototype;\n  a.prototype = new c;\n  a.Hc = function(a, c, g) {\n    var h = Array.prototype.slice.call(arguments, 2);\n    return b.prototype[c].apply(a, h);\n  };\n}\n;function ka(a, b) {\n  for (var c = a.split(\"%s\"), d = \"\", e = Array.prototype.slice.call(arguments, 1);e.length && 1 < c.length;) {\n    d += c.shift() + e.shift();\n  }\n  return d + c.join(\"%s\");\n}\nfunction la(a) {\n  if (!ma.test(a)) {\n    return a;\n  }\n  -1 != a.indexOf(\"&\") && (a = a.replace(na, \"&amp;\"));\n  -1 != a.indexOf(\"<\") && (a = a.replace(oa, \"&lt;\"));\n  -1 != a.indexOf(\">\") && (a = a.replace(pa, \"&gt;\"));\n  -1 != a.indexOf('\"') && (a = a.replace(qa, \"&quot;\"));\n  -1 != a.indexOf(\"'\") && (a = a.replace(ra, \"&#39;\"));\n  return a;\n}\nvar na = /&/g, oa = /</g, pa = />/g, qa = /\"/g, ra = /'/g, ma = /[&<>\"']/;\nfunction sa() {\n  return Math.floor(2147483648 * Math.random()).toString(36) + Math.abs(Math.floor(2147483648 * Math.random()) ^ q()).toString(36);\n}\nfunction ta(a, b) {\n  return a < b ? -1 : a > b ? 1 : 0;\n}\n;var x, ua, va, wa;\nfunction xa() {\n  return l.navigator ? l.navigator.userAgent : null;\n}\nwa = va = ua = x = !1;\nvar ya;\nif (ya = xa()) {\n  var za = l.navigator;\n  x = 0 == ya.lastIndexOf(\"Opera\", 0);\n  ua = !x && (-1 != ya.indexOf(\"MSIE\") || -1 != ya.indexOf(\"Trident\"));\n  va = !x && -1 != ya.indexOf(\"WebKit\");\n  wa = !x && !va && !ua && \"Gecko\" == za.product;\n}\nvar Aa = x, y = ua, Ba = wa, z = va;\nfunction Ca() {\n  var a = l.document;\n  return a ? a.documentMode : void 0;\n}\nvar Da;\na: {\n  var Ea = \"\", Fa;\n  if (Aa && l.opera) {\n    var Ga = l.opera.version, Ea = \"function\" == typeof Ga ? Ga() : Ga\n  } else {\n    if (Ba ? Fa = /rv\\:([^\\);]+)(\\)|;)/ : y ? Fa = /\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/ : z && (Fa = /WebKit\\/(\\S+)/), Fa) {\n      var Ha = Fa.exec(xa()), Ea = Ha ? Ha[1] : \"\"\n    }\n  }\n  if (y) {\n    var Ia = Ca();\n    if (Ia > parseFloat(Ea)) {\n      Da = String(Ia);\n      break a;\n    }\n  }\n  Da = Ea;\n}\nvar Ja = {};\nfunction A(a) {\n  var b;\n  if (!(b = Ja[a])) {\n    b = 0;\n    for (var c = String(Da).replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g, \"\").split(\".\"), d = String(a).replace(/^[\\s\\xa0]+|[\\s\\xa0]+$/g, \"\").split(\".\"), e = Math.max(c.length, d.length), g = 0;0 == b && g < e;g++) {\n      var h = c[g] || \"\", k = d[g] || \"\", u = RegExp(\"(\\\\d*)(\\\\D*)\", \"g\"), K = RegExp(\"(\\\\d*)(\\\\D*)\", \"g\");\n      do {\n        var v = u.exec(h) || [\"\", \"\", \"\"], r = K.exec(k) || [\"\", \"\", \"\"];\n        if (0 == v[0].length && 0 == r[0].length) {\n          break;\n        }\n        b = ta(0 == v[1].length ? 0 : parseInt(v[1], 10), 0 == r[1].length ? 0 : parseInt(r[1], 10)) || ta(0 == v[2].length, 0 == r[2].length) || ta(v[2], r[2]);\n      } while (0 == b);\n    }\n    b = Ja[a] = 0 <= b;\n  }\n  return b;\n}\nvar La = l.document, Ma = La && y ? Ca() || (\"CSS1Compat\" == La.compatMode ? parseInt(Da, 10) : 5) : void 0;\nfunction Na(a) {\n  Error.captureStackTrace ? Error.captureStackTrace(this, Na) : this.stack = Error().stack || \"\";\n  a && (this.message = String(a));\n}\ns(Na, Error);\nNa.prototype.name = \"CustomError\";\nfunction Oa(a, b) {\n  b.unshift(a);\n  Na.call(this, ka.apply(null, b));\n  b.shift();\n}\ns(Oa, Na);\nOa.prototype.name = \"AssertionError\";\nfunction Pa(a, b) {\n  throw new Oa(\"Failure\" + (a ? \": \" + a : \"\"), Array.prototype.slice.call(arguments, 1));\n}\n;var Qa = RegExp(\"^(?:([^:/?#.]+):)?(?://(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\\\\?([^#]*))?(?:#(.*))?$\");\nfunction Ra(a) {\n  if (Sa) {\n    Sa = !1;\n    var b = l.location;\n    if (b) {\n      var c = b.href;\n      if (c && (c = (c = Ra(c)[3] || null) && decodeURIComponent(c)) && c != b.hostname) {\n        throw Sa = !0, Error();\n      }\n    }\n  }\n  return a.match(Qa);\n}\nvar Sa = z;\nfunction Ta(a) {\n  var b = [], c = 0, d;\n  for (d in a) {\n    b[c++] = a[d];\n  }\n  return b;\n}\nfunction Ua(a) {\n  var b = [], c = 0, d;\n  for (d in a) {\n    b[c++] = d;\n  }\n  return b;\n}\nvar Va = \"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");\nfunction Wa(a, b) {\n  for (var c, d, e = 1;e < arguments.length;e++) {\n    d = arguments[e];\n    for (c in d) {\n      a[c] = d[c];\n    }\n    for (var g = 0;g < Va.length;g++) {\n      c = Va[g], Object.prototype.hasOwnProperty.call(d, c) && (a[c] = d[c]);\n    }\n  }\n}\n;var B = Array.prototype, Xa = B.indexOf ? function(a, b, c) {\n  return B.indexOf.call(a, b, c);\n} : function(a, b, c) {\n  c = null == c ? 0 : 0 > c ? Math.max(0, a.length + c) : c;\n  if (n(a)) {\n    return n(b) && 1 == b.length ? a.indexOf(b, c) : -1;\n  }\n  for (;c < a.length;c++) {\n    if (c in a && a[c] === b) {\n      return c;\n    }\n  }\n  return-1;\n}, Ya = B.forEach ? function(a, b, c) {\n  B.forEach.call(a, b, c);\n} : function(a, b, c) {\n  for (var d = a.length, e = n(a) ? a.split(\"\") : a, g = 0;g < d;g++) {\n    g in e && b.call(c, e[g], g, a);\n  }\n};\nfunction Za(a) {\n  var b;\n  a: {\n    b = $a;\n    for (var c = a.length, d = n(a) ? a.split(\"\") : a, e = 0;e < c;e++) {\n      if (e in d && b.call(void 0, d[e], e, a)) {\n        b = e;\n        break a;\n      }\n    }\n    b = -1;\n  }\n  return 0 > b ? null : n(a) ? a.charAt(b) : a[b];\n}\nfunction ab(a) {\n  return B.concat.apply(B, arguments);\n}\nfunction bb(a) {\n  var b = a.length;\n  if (0 < b) {\n    for (var c = Array(b), d = 0;d < b;d++) {\n      c[d] = a[d];\n    }\n    return c;\n  }\n  return[];\n}\n;function cb(a, b) {\n  this.O = {};\n  this.j = [];\n  this.o = 0;\n  var c = arguments.length;\n  if (1 < c) {\n    if (c % 2) {\n      throw Error(\"Uneven number of arguments\");\n    }\n    for (var d = 0;d < c;d += 2) {\n      this.set(arguments[d], arguments[d + 1]);\n    }\n  } else {\n    if (a) {\n      a instanceof cb ? (c = a.ca(), d = a.N()) : (c = Ua(a), d = Ta(a));\n      for (var e = 0;e < c.length;e++) {\n        this.set(c[e], d[e]);\n      }\n    }\n  }\n}\nf = cb.prototype;\nf.N = function() {\n  db(this);\n  for (var a = [], b = 0;b < this.j.length;b++) {\n    a.push(this.O[this.j[b]]);\n  }\n  return a;\n};\nf.ca = function() {\n  db(this);\n  return this.j.concat();\n};\nf.wa = function(a) {\n  return C(this.O, a);\n};\nf.remove = function(a) {\n  return C(this.O, a) ? (delete this.O[a], this.o--, this.j.length > 2 * this.o && db(this), !0) : !1;\n};\nfunction db(a) {\n  if (a.o != a.j.length) {\n    for (var b = 0, c = 0;b < a.j.length;) {\n      var d = a.j[b];\n      C(a.O, d) && (a.j[c++] = d);\n      b++;\n    }\n    a.j.length = c;\n  }\n  if (a.o != a.j.length) {\n    for (var e = {}, c = b = 0;b < a.j.length;) {\n      d = a.j[b], C(e, d) || (a.j[c++] = d, e[d] = 1), b++;\n    }\n    a.j.length = c;\n  }\n}\nf.get = function(a, b) {\n  return C(this.O, a) ? this.O[a] : b;\n};\nf.set = function(a, b) {\n  C(this.O, a) || (this.o++, this.j.push(a));\n  this.O[a] = b;\n};\nf.n = function() {\n  return new cb(this);\n};\nfunction C(a, b) {\n  return Object.prototype.hasOwnProperty.call(a, b);\n}\n;function eb(a) {\n  if (\"function\" == typeof a.N) {\n    return a.N();\n  }\n  if (n(a)) {\n    return a.split(\"\");\n  }\n  if (ea(a)) {\n    for (var b = [], c = a.length, d = 0;d < c;d++) {\n      b.push(a[d]);\n    }\n    return b;\n  }\n  return Ta(a);\n}\nfunction D(a, b, c) {\n  if (\"function\" == typeof a.forEach) {\n    a.forEach(b, c);\n  } else {\n    if (ea(a) || n(a)) {\n      Ya(a, b, c);\n    } else {\n      var d;\n      if (\"function\" == typeof a.ca) {\n        d = a.ca();\n      } else {\n        if (\"function\" != typeof a.N) {\n          if (ea(a) || n(a)) {\n            d = [];\n            for (var e = a.length, g = 0;g < e;g++) {\n              d.push(g);\n            }\n          } else {\n            d = Ua(a);\n          }\n        } else {\n          d = void 0;\n        }\n      }\n      for (var e = eb(a), g = e.length, h = 0;h < g;h++) {\n        b.call(c, e[h], d && d[h], a);\n      }\n    }\n  }\n}\n;function E(a, b) {\n  var c;\n  if (a instanceof E) {\n    this.D = void 0 !== b ? b : a.D, fb(this, a.oa), c = a.eb, F(this), this.eb = c, gb(this, a.ja), hb(this, a.Ca), ib(this, a.I), jb(this, a.R.n()), c = a.Na, F(this), this.Na = c;\n  } else {\n    if (a && (c = Ra(String(a)))) {\n      this.D = !!b;\n      fb(this, c[1] || \"\", !0);\n      var d = c[2] || \"\";\n      F(this);\n      this.eb = d ? decodeURIComponent(d) : \"\";\n      gb(this, c[3] || \"\", !0);\n      hb(this, c[4]);\n      ib(this, c[5] || \"\", !0);\n      jb(this, c[6] || \"\", !0);\n      c = c[7] || \"\";\n      F(this);\n      this.Na = c ? decodeURIComponent(c) : \"\";\n    } else {\n      this.D = !!b, this.R = new kb(null, 0, this.D);\n    }\n  }\n}\nf = E.prototype;\nf.oa = \"\";\nf.eb = \"\";\nf.ja = \"\";\nf.Ca = null;\nf.I = \"\";\nf.Na = \"\";\nf.oc = !1;\nf.D = !1;\nf.toString = function() {\n  var a = [], b = this.oa;\n  b && a.push(lb(b, mb), \":\");\n  if (b = this.ja) {\n    a.push(\"//\");\n    var c = this.eb;\n    c && a.push(lb(c, mb), \"@\");\n    a.push(encodeURIComponent(String(b)));\n    b = this.Ca;\n    null != b && a.push(\":\", String(b));\n  }\n  if (b = this.I) {\n    this.ja && \"/\" != b.charAt(0) && a.push(\"/\"), a.push(lb(b, \"/\" == b.charAt(0) ? nb : ob));\n  }\n  (b = this.R.toString()) && a.push(\"?\", b);\n  (b = this.Na) && a.push(\"#\", lb(b, pb));\n  return a.join(\"\");\n};\nf.n = function() {\n  return new E(this);\n};\nfunction fb(a, b, c) {\n  F(a);\n  a.oa = c ? b ? decodeURIComponent(b) : \"\" : b;\n  a.oa && (a.oa = a.oa.replace(/:$/, \"\"));\n}\nfunction gb(a, b, c) {\n  F(a);\n  a.ja = c ? b ? decodeURIComponent(b) : \"\" : b;\n}\nfunction hb(a, b) {\n  F(a);\n  if (b) {\n    b = Number(b);\n    if (isNaN(b) || 0 > b) {\n      throw Error(\"Bad port number \" + b);\n    }\n    a.Ca = b;\n  } else {\n    a.Ca = null;\n  }\n}\nfunction ib(a, b, c) {\n  F(a);\n  a.I = c ? b ? decodeURIComponent(b) : \"\" : b;\n}\nfunction jb(a, b, c) {\n  F(a);\n  b instanceof kb ? (a.R = b, a.R.ub(a.D)) : (c || (b = lb(b, qb)), a.R = new kb(b, 0, a.D));\n}\nfunction G(a, b, c) {\n  F(a);\n  a.R.set(b, c);\n}\nfunction rb(a, b, c) {\n  F(a);\n  m(c) || (c = [String(c)]);\n  sb(a.R, b, c);\n}\nfunction H(a) {\n  F(a);\n  G(a, \"zx\", sa());\n  return a;\n}\nfunction F(a) {\n  if (a.oc) {\n    throw Error(\"Tried to modify a read-only Uri\");\n  }\n}\nf.ub = function(a) {\n  this.D = a;\n  this.R && this.R.ub(a);\n  return this;\n};\nfunction tb(a) {\n  return a instanceof E ? a.n() : new E(a, void 0);\n}\nfunction ub(a, b, c, d) {\n  var e = new E(null, void 0);\n  a && fb(e, a);\n  b && gb(e, b);\n  c && hb(e, c);\n  d && ib(e, d);\n  return e;\n}\nfunction lb(a, b) {\n  return n(a) ? encodeURI(a).replace(b, vb) : null;\n}\nfunction vb(a) {\n  a = a.charCodeAt(0);\n  return \"%\" + (a >> 4 & 15).toString(16) + (a & 15).toString(16);\n}\nvar mb = /[#\\/\\?@]/g, ob = /[\\#\\?:]/g, nb = /[\\#\\?]/g, qb = /[\\#\\?@]/g, pb = /#/g;\nfunction kb(a, b, c) {\n  this.C = a || null;\n  this.D = !!c;\n}\nfunction I(a) {\n  if (!a.h && (a.h = new cb, a.o = 0, a.C)) {\n    for (var b = a.C.split(\"&\"), c = 0;c < b.length;c++) {\n      var d = b[c].indexOf(\"=\"), e = null, g = null;\n      0 <= d ? (e = b[c].substring(0, d), g = b[c].substring(d + 1)) : e = b[c];\n      e = decodeURIComponent(e.replace(/\\+/g, \" \"));\n      e = J(a, e);\n      a.add(e, g ? decodeURIComponent(g.replace(/\\+/g, \" \")) : \"\");\n    }\n  }\n}\nf = kb.prototype;\nf.h = null;\nf.o = null;\nf.add = function(a, b) {\n  I(this);\n  this.C = null;\n  a = J(this, a);\n  var c = this.h.get(a);\n  c || this.h.set(a, c = []);\n  c.push(b);\n  this.o++;\n  return this;\n};\nf.remove = function(a) {\n  I(this);\n  a = J(this, a);\n  return this.h.wa(a) ? (this.C = null, this.o -= this.h.get(a).length, this.h.remove(a)) : !1;\n};\nf.wa = function(a) {\n  I(this);\n  a = J(this, a);\n  return this.h.wa(a);\n};\nf.ca = function() {\n  I(this);\n  for (var a = this.h.N(), b = this.h.ca(), c = [], d = 0;d < b.length;d++) {\n    for (var e = a[d], g = 0;g < e.length;g++) {\n      c.push(b[d]);\n    }\n  }\n  return c;\n};\nf.N = function(a) {\n  I(this);\n  var b = [];\n  if (n(a)) {\n    this.wa(a) && (b = ab(b, this.h.get(J(this, a))));\n  } else {\n    a = this.h.N();\n    for (var c = 0;c < a.length;c++) {\n      b = ab(b, a[c]);\n    }\n  }\n  return b;\n};\nf.set = function(a, b) {\n  I(this);\n  this.C = null;\n  a = J(this, a);\n  this.wa(a) && (this.o -= this.h.get(a).length);\n  this.h.set(a, [b]);\n  this.o++;\n  return this;\n};\nf.get = function(a, b) {\n  var c = a ? this.N(a) : [];\n  return 0 < c.length ? String(c[0]) : b;\n};\nfunction sb(a, b, c) {\n  a.remove(b);\n  0 < c.length && (a.C = null, a.h.set(J(a, b), bb(c)), a.o += c.length);\n}\nf.toString = function() {\n  if (this.C) {\n    return this.C;\n  }\n  if (!this.h) {\n    return \"\";\n  }\n  for (var a = [], b = this.h.ca(), c = 0;c < b.length;c++) {\n    for (var d = b[c], e = encodeURIComponent(String(d)), d = this.N(d), g = 0;g < d.length;g++) {\n      var h = e;\n      \"\" !== d[g] && (h += \"=\" + encodeURIComponent(String(d[g])));\n      a.push(h);\n    }\n  }\n  return this.C = a.join(\"&\");\n};\nf.n = function() {\n  var a = new kb;\n  a.C = this.C;\n  this.h && (a.h = this.h.n(), a.o = this.o);\n  return a;\n};\nfunction J(a, b) {\n  var c = String(b);\n  a.D && (c = c.toLowerCase());\n  return c;\n}\nf.ub = function(a) {\n  a && !this.D && (I(this), this.C = null, D(this.h, function(a, c) {\n    var d = c.toLowerCase();\n    c != d && (this.remove(c), sb(this, d, a));\n  }, this));\n  this.D = a;\n};\nfunction wb(a) {\n  a = String(a);\n  if (/^\\s*$/.test(a) ? 0 : /^[\\],:{}\\s\\u2028\\u2029]*$/.test(a.replace(/\\\\[\"\\\\\\/bfnrtu]/g, \"@\").replace(/\"[^\"\\\\\\n\\r\\u2028\\u2029\\x00-\\x08\\x0a-\\x1f]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, \"]\").replace(/(?:^|:|,)(?:[\\s\\u2028\\u2029]*\\[)+/g, \"\"))) {\n    try {\n      return eval(\"(\" + a + \")\");\n    } catch (b) {\n    }\n  }\n  throw Error(\"Invalid JSON string: \" + a);\n}\nfunction xb(a) {\n  return eval(\"(\" + a + \")\");\n}\nfunction yb(a) {\n  var b = [];\n  zb(new Ab, a, b);\n  return b.join(\"\");\n}\nfunction Ab() {\n  this.Ya = void 0;\n}\nfunction zb(a, b, c) {\n  switch(typeof b) {\n    case \"string\":\n      Bb(b, c);\n      break;\n    case \"number\":\n      c.push(isFinite(b) && !isNaN(b) ? b : \"null\");\n      break;\n    case \"boolean\":\n      c.push(b);\n      break;\n    case \"undefined\":\n      c.push(\"null\");\n      break;\n    case \"object\":\n      if (null == b) {\n        c.push(\"null\");\n        break;\n      }\n      if (m(b)) {\n        var d = b.length;\n        c.push(\"[\");\n        for (var e = \"\", g = 0;g < d;g++) {\n          c.push(e), e = b[g], zb(a, a.Ya ? a.Ya.call(b, String(g), e) : e, c), e = \",\";\n        }\n        c.push(\"]\");\n        break;\n      }\n      c.push(\"{\");\n      d = \"\";\n      for (g in b) {\n        Object.prototype.hasOwnProperty.call(b, g) && (e = b[g], \"function\" != typeof e && (c.push(d), Bb(g, c), c.push(\":\"), zb(a, a.Ya ? a.Ya.call(b, g, e) : e, c), d = \",\"));\n      }\n      c.push(\"}\");\n      break;\n    case \"function\":\n      break;\n    default:\n      throw Error(\"Unknown type: \" + typeof b);;\n  }\n}\nvar Cb = {'\"':'\\\\\"', \"\\\\\":\"\\\\\\\\\", \"/\":\"\\\\/\", \"\\b\":\"\\\\b\", \"\\f\":\"\\\\f\", \"\\n\":\"\\\\n\", \"\\r\":\"\\\\r\", \"\\t\":\"\\\\t\", \"\\x0B\":\"\\\\u000b\"}, Db = /\\uffff/.test(\"\\uffff\") ? /[\\\\\\\"\\x00-\\x1f\\x7f-\\uffff]/g : /[\\\\\\\"\\x00-\\x1f\\x7f-\\xff]/g;\nfunction Bb(a, b) {\n  b.push('\"', a.replace(Db, function(a) {\n    if (a in Cb) {\n      return Cb[a];\n    }\n    var b = a.charCodeAt(0), e = \"\\\\u\";\n    16 > b ? e += \"000\" : 256 > b ? e += \"00\" : 4096 > b && (e += \"0\");\n    return Cb[a] = e + b.toString(16);\n  }), '\"');\n}\n;function Eb(a) {\n  return Fb(a || arguments.callee.caller, []);\n}\nfunction Fb(a, b) {\n  var c = [];\n  if (0 <= Xa(b, a)) {\n    c.push(\"[...circular reference...]\");\n  } else {\n    if (a && 50 > b.length) {\n      c.push(Gb(a) + \"(\");\n      for (var d = a.arguments, e = 0;e < d.length;e++) {\n        0 < e && c.push(\", \");\n        var g;\n        g = d[e];\n        switch(typeof g) {\n          case \"object\":\n            g = g ? \"object\" : \"null\";\n            break;\n          case \"string\":\n            break;\n          case \"number\":\n            g = String(g);\n            break;\n          case \"boolean\":\n            g = g ? \"true\" : \"false\";\n            break;\n          case \"function\":\n            g = (g = Gb(g)) ? g : \"[fn]\";\n            break;\n          default:\n            g = typeof g;\n        }\n        40 < g.length && (g = g.substr(0, 40) + \"...\");\n        c.push(g);\n      }\n      b.push(a);\n      c.push(\")\\n\");\n      try {\n        c.push(Fb(a.caller, b));\n      } catch (h) {\n        c.push(\"[exception trying to get caller]\\n\");\n      }\n    } else {\n      a ? c.push(\"[...long stack...]\") : c.push(\"[end]\");\n    }\n  }\n  return c.join(\"\");\n}\nfunction Gb(a) {\n  if (Hb[a]) {\n    return Hb[a];\n  }\n  a = String(a);\n  if (!Hb[a]) {\n    var b = /function ([^\\(]+)/.exec(a);\n    Hb[a] = b ? b[1] : \"[Anonymous]\";\n  }\n  return Hb[a];\n}\nvar Hb = {};\nfunction Ib(a, b, c, d, e) {\n  this.reset(a, b, c, d, e);\n}\nIb.prototype.Fb = null;\nIb.prototype.Eb = null;\nvar Jb = 0;\nIb.prototype.reset = function(a, b, c, d, e) {\n  \"number\" == typeof e || Jb++;\n  d || q();\n  this.Aa = a;\n  this.qc = b;\n  delete this.Fb;\n  delete this.Eb;\n};\nIb.prototype.$b = function(a) {\n  this.Aa = a;\n};\nfunction L(a) {\n  this.rc = a;\n}\nL.prototype.Sa = null;\nL.prototype.Aa = null;\nL.prototype.jb = null;\nL.prototype.Jb = null;\nfunction Kb(a, b) {\n  this.name = a;\n  this.value = b;\n}\nKb.prototype.toString = function() {\n  return this.name;\n};\nvar Lb = new Kb(\"SEVERE\", 1E3), Mb = new Kb(\"WARNING\", 900), Nb = new Kb(\"INFO\", 800), Ob = new Kb(\"CONFIG\", 700), Pb = new Kb(\"FINE\", 500);\nf = L.prototype;\nf.getParent = function() {\n  return this.Sa;\n};\nf.$b = function(a) {\n  this.Aa = a;\n};\nfunction Qb(a) {\n  if (a.Aa) {\n    return a.Aa;\n  }\n  if (a.Sa) {\n    return Qb(a.Sa);\n  }\n  Pa(\"Root logger has no level set.\");\n  return null;\n}\nf.log = function(a, b, c) {\n  if (a.value >= Qb(this).value) {\n    for (fa(b) && (b = b()), a = this.mc(a, b, c), b = \"log:\" + a.qc, l.console && (l.console.timeStamp ? l.console.timeStamp(b) : l.console.markTimeline && l.console.markTimeline(b)), l.msWriteProfilerMark && l.msWriteProfilerMark(b), b = this;b;) {\n      c = b;\n      var d = a;\n      if (c.Jb) {\n        for (var e = 0, g = void 0;g = c.Jb[e];e++) {\n          g(d);\n        }\n      }\n      b = b.getParent();\n    }\n  }\n};\nf.mc = function(a, b, c) {\n  var d = new Ib(a, String(b), this.rc);\n  if (c) {\n    d.Fb = c;\n    var e;\n    var g = arguments.callee.caller;\n    try {\n      var h;\n      var k = ba(\"window.location.href\");\n      if (n(c)) {\n        h = {message:c, name:\"Unknown error\", lineNumber:\"Not available\", fileName:k, stack:\"Not available\"};\n      } else {\n        var u, K, v = !1;\n        try {\n          u = c.lineNumber || c.Ic || \"Not available\";\n        } catch (r) {\n          u = \"Not available\", v = !0;\n        }\n        try {\n          K = c.fileName || c.filename || c.sourceURL || l.$googDebugFname || k;\n        } catch (Ka) {\n          K = \"Not available\", v = !0;\n        }\n        h = !v && c.lineNumber && c.fileName && c.stack && c.message && c.name ? c : {message:c.message || \"Not available\", name:c.name || \"UnknownError\", lineNumber:u, fileName:K, stack:c.stack || \"Not available\"};\n      }\n      e = \"Message: \" + la(h.message) + '\\nUrl: <a href=\"view-source:' + h.fileName + '\" target=\"_new\">' + h.fileName + \"</a>\\nLine: \" + h.lineNumber + \"\\n\\nBrowser stack:\\n\" + la(h.stack + \"-> \") + \"[end]\\n\\nJS stack traversal:\\n\" + la(Eb(g) + \"-> \");\n    } catch (w) {\n      e = \"Exception trying to expose exception! You win, we lose. \" + w;\n    }\n    d.Eb = e;\n  }\n  return d;\n};\nf.J = function(a, b) {\n  this.log(Lb, a, b);\n};\nf.Z = function(a, b) {\n  this.log(Mb, a, b);\n};\nf.info = function(a, b) {\n  this.log(Nb, a, b);\n};\nvar Rb = {}, Sb = null;\nfunction Tb(a) {\n  Sb || (Sb = new L(\"\"), Rb[\"\"] = Sb, Sb.$b(Ob));\n  var b;\n  if (!(b = Rb[a])) {\n    b = new L(a);\n    var c = a.lastIndexOf(\".\"), d = a.substr(c + 1), c = Tb(a.substr(0, c));\n    c.jb || (c.jb = {});\n    c.jb[d] = b;\n    b.Sa = c;\n    Rb[a] = b;\n  }\n  return b;\n}\n;function M(a, b) {\n  a && a.log(Pb, b, void 0);\n}\n;function N() {\n  this.r = Tb(\"goog.net.BrowserChannel\");\n}\nfunction Ub(a, b, c, d) {\n  a.info(\"XMLHTTP TEXT (\" + b + \"): \" + Vb(a, c) + (d ? \" \" + d : \"\"));\n}\nN.prototype.debug = function(a) {\n  this.info(a);\n};\nfunction Wb(a, b, c) {\n  a.J((c || \"Exception\") + b);\n}\nN.prototype.info = function(a) {\n  var b = this.r;\n  b && b.info(a, void 0);\n};\nN.prototype.Z = function(a) {\n  var b = this.r;\n  b && b.Z(a, void 0);\n};\nN.prototype.J = function(a) {\n  var b = this.r;\n  b && b.J(a, void 0);\n};\nfunction Vb(a, b) {\n  if (!b || b == Xb) {\n    return b;\n  }\n  try {\n    var c = xb(b);\n    if (c) {\n      for (var d = 0;d < c.length;d++) {\n        if (m(c[d])) {\n          var e = c[d];\n          if (!(2 > e.length)) {\n            var g = e[1];\n            if (m(g) && !(1 > g.length)) {\n              var h = g[0];\n              if (\"noop\" != h && \"stop\" != h) {\n                for (var k = 1;k < g.length;k++) {\n                  g[k] = \"\";\n                }\n              }\n            }\n          }\n        }\n      }\n    }\n    return yb(c);\n  } catch (u) {\n    return a.debug(\"Exception parsing expected JS array - probably was not JS\"), b;\n  }\n}\n;function Yb(a, b) {\n  this.P = b ? xb : wb;\n}\nYb.prototype.parse = function(a) {\n  return this.P(a);\n};\nfunction O() {\n  0 != Zb && ($b[this[ga] || (this[ga] = ++ha)] = this);\n}\nvar Zb = 0, $b = {};\nO.prototype.mb = !1;\nO.prototype.Ja = function() {\n  if (!this.mb && (this.mb = !0, this.u(), 0 != Zb)) {\n    var a = this[ga] || (this[ga] = ++ha);\n    delete $b[a];\n  }\n};\nO.prototype.u = function() {\n  if (this.Pb) {\n    for (;this.Pb.length;) {\n      this.Pb.shift()();\n    }\n  }\n};\nvar ac = \"closure_listenable_\" + (1E6 * Math.random() | 0);\nfunction bc(a) {\n  try {\n    return!(!a || !a[ac]);\n  } catch (b) {\n    return!1;\n  }\n}\nvar cc = 0;\nfunction dc(a, b, c, d, e) {\n  this.fa = a;\n  this.Ua = null;\n  this.src = b;\n  this.type = c;\n  this.capture = !!d;\n  this.Oa = e;\n  this.key = ++cc;\n  this.na = this.Ia = !1;\n}\nfunction ec(a) {\n  a.na = !0;\n  a.fa = null;\n  a.Ua = null;\n  a.src = null;\n  a.Oa = null;\n}\n;function P(a) {\n  this.src = a;\n  this.s = {};\n  this.Ga = 0;\n}\nP.prototype.add = function(a, b, c, d, e) {\n  var g = this.s[a];\n  g || (g = this.s[a] = [], this.Ga++);\n  var h = fc(g, b, d, e);\n  -1 < h ? (a = g[h], c || (a.Ia = !1)) : (a = new dc(b, this.src, a, !!d, e), a.Ia = c, g.push(a));\n  return a;\n};\nP.prototype.remove = function(a, b, c, d) {\n  if (!(a in this.s)) {\n    return!1;\n  }\n  var e = this.s[a];\n  b = fc(e, b, c, d);\n  return-1 < b ? (ec(e[b]), B.splice.call(e, b, 1), 0 == e.length && (delete this.s[a], this.Ga--), !0) : !1;\n};\nfunction gc(a, b) {\n  var c = b.type;\n  if (!(c in a.s)) {\n    return!1;\n  }\n  var d = a.s[c], e = Xa(d, b), g;\n  (g = 0 <= e) && B.splice.call(d, e, 1);\n  g && (ec(b), 0 == a.s[c].length && (delete a.s[c], a.Ga--));\n  return g;\n}\nP.prototype.Xa = function(a) {\n  var b = 0, c;\n  for (c in this.s) {\n    if (!a || c == a) {\n      for (var d = this.s[c], e = 0;e < d.length;e++) {\n        ++b, ec(d[e]);\n      }\n      delete this.s[c];\n      this.Ga--;\n    }\n  }\n  return b;\n};\nP.prototype.ya = function(a, b, c, d) {\n  a = this.s[a];\n  var e = -1;\n  a && (e = fc(a, b, c, d));\n  return-1 < e ? a[e] : null;\n};\nfunction fc(a, b, c, d) {\n  for (var e = 0;e < a.length;++e) {\n    var g = a[e];\n    if (!g.na && g.fa == b && g.capture == !!c && g.Oa == d) {\n      return e;\n    }\n  }\n  return-1;\n}\n;var hc = !y || y && 9 <= Ma, ic = y && !A(\"9\");\n!z || A(\"528\");\nBa && A(\"1.9b\") || y && A(\"8\") || Aa && A(\"9.5\") || z && A(\"528\");\nBa && !A(\"8\") || y && A(\"9\");\nfunction Q(a, b) {\n  this.type = a;\n  this.currentTarget = this.target = b;\n}\nf = Q.prototype;\nf.u = function() {\n};\nf.Ja = function() {\n};\nf.ga = !1;\nf.defaultPrevented = !1;\nf.Yb = !0;\nf.preventDefault = function() {\n  this.defaultPrevented = !0;\n  this.Yb = !1;\n};\nfunction jc(a) {\n  jc[\" \"](a);\n  return a;\n}\njc[\" \"] = ca;\nfunction kc(a, b) {\n  Q.call(this, a ? a.type : \"\");\n  this.relatedTarget = this.currentTarget = this.target = null;\n  this.charCode = this.keyCode = this.button = this.screenY = this.screenX = this.clientY = this.clientX = this.offsetY = this.offsetX = 0;\n  this.metaKey = this.shiftKey = this.altKey = this.ctrlKey = !1;\n  this.Db = this.state = null;\n  if (a) {\n    var c = this.type = a.type;\n    this.target = a.target || a.srcElement;\n    this.currentTarget = b;\n    var d = a.relatedTarget;\n    if (d) {\n      if (Ba) {\n        var e;\n        a: {\n          try {\n            jc(d.nodeName);\n            e = !0;\n            break a;\n          } catch (g) {\n          }\n          e = !1;\n        }\n        e || (d = null);\n      }\n    } else {\n      \"mouseover\" == c ? d = a.fromElement : \"mouseout\" == c && (d = a.toElement);\n    }\n    this.relatedTarget = d;\n    this.offsetX = z || void 0 !== a.offsetX ? a.offsetX : a.layerX;\n    this.offsetY = z || void 0 !== a.offsetY ? a.offsetY : a.layerY;\n    this.clientX = void 0 !== a.clientX ? a.clientX : a.pageX;\n    this.clientY = void 0 !== a.clientY ? a.clientY : a.pageY;\n    this.screenX = a.screenX || 0;\n    this.screenY = a.screenY || 0;\n    this.button = a.button;\n    this.keyCode = a.keyCode || 0;\n    this.charCode = a.charCode || (\"keypress\" == c ? a.keyCode : 0);\n    this.ctrlKey = a.ctrlKey;\n    this.altKey = a.altKey;\n    this.shiftKey = a.shiftKey;\n    this.metaKey = a.metaKey;\n    this.state = a.state;\n    this.Db = a;\n    a.defaultPrevented && this.preventDefault();\n    delete this.ga;\n  }\n}\ns(kc, Q);\nkc.prototype.preventDefault = function() {\n  kc.pa.preventDefault.call(this);\n  var a = this.Db;\n  if (a.preventDefault) {\n    a.preventDefault();\n  } else {\n    if (a.returnValue = !1, ic) {\n      try {\n        if (a.ctrlKey || 112 <= a.keyCode && 123 >= a.keyCode) {\n          a.keyCode = -1;\n        }\n      } catch (b) {\n      }\n    }\n  }\n};\nkc.prototype.u = function() {\n};\nvar lc = \"closure_lm_\" + (1E6 * Math.random() | 0), mc = {}, nc = 0;\nfunction oc(a, b, c, d, e) {\n  if (m(b)) {\n    for (var g = 0;g < b.length;g++) {\n      oc(a, b[g], c, d, e);\n    }\n    return null;\n  }\n  c = pc(c);\n  if (bc(a)) {\n    a = a.Ra(b, c, d, e);\n  } else {\n    if (!b) {\n      throw Error(\"Invalid event type\");\n    }\n    var g = !!d, h = qc(a);\n    h || (a[lc] = h = new P(a));\n    c = h.add(b, c, !1, d, e);\n    c.Ua || (d = rc(), c.Ua = d, d.src = a, d.fa = c, a.addEventListener ? a.addEventListener(b, d, g) : a.attachEvent(b in mc ? mc[b] : mc[b] = \"on\" + b, d), nc++);\n    a = c;\n  }\n  return a;\n}\nfunction rc() {\n  var a = sc, b = hc ? function(c) {\n    return a.call(b.src, b.fa, c);\n  } : function(c) {\n    c = a.call(b.src, b.fa, c);\n    if (!c) {\n      return c;\n    }\n  };\n  return b;\n}\nfunction tc(a, b, c, d, e) {\n  if (m(b)) {\n    for (var g = 0;g < b.length;g++) {\n      tc(a, b[g], c, d, e);\n    }\n  } else {\n    c = pc(c), bc(a) ? a.vb(b, c, d, e) : a && (a = qc(a)) && (b = a.ya(b, c, !!d, e)) && uc(b);\n  }\n}\nfunction uc(a) {\n  if (\"number\" == typeof a || !a || a.na) {\n    return!1;\n  }\n  var b = a.src;\n  if (bc(b)) {\n    return gc(b.W, a);\n  }\n  var c = a.type, d = a.Ua;\n  b.removeEventListener ? b.removeEventListener(c, d, a.capture) : b.detachEvent && b.detachEvent(c in mc ? mc[c] : mc[c] = \"on\" + c, d);\n  nc--;\n  (c = qc(b)) ? (gc(c, a), 0 == c.Ga && (c.src = null, b[lc] = null)) : ec(a);\n  return!0;\n}\nfunction vc(a, b, c, d) {\n  var e = 1;\n  if (a = qc(a)) {\n    if (b = a.s[b]) {\n      for (b = bb(b), a = 0;a < b.length;a++) {\n        var g = b[a];\n        g && g.capture == c && !g.na && (e &= !1 !== wc(g, d));\n      }\n    }\n  }\n  return Boolean(e);\n}\nfunction wc(a, b) {\n  var c = a.fa, d = a.Oa || a.src;\n  a.Ia && uc(a);\n  return c.call(d, b);\n}\nfunction sc(a, b) {\n  if (a.na) {\n    return!0;\n  }\n  if (!hc) {\n    var c = b || ba(\"window.event\"), d = new kc(c, this), e = !0;\n    if (!(0 > c.keyCode || void 0 != c.returnValue)) {\n      a: {\n        var g = !1;\n        if (0 == c.keyCode) {\n          try {\n            c.keyCode = -1;\n            break a;\n          } catch (h) {\n            g = !0;\n          }\n        }\n        if (g || void 0 == c.returnValue) {\n          c.returnValue = !0;\n        }\n      }\n      c = [];\n      for (g = d.currentTarget;g;g = g.parentNode) {\n        c.push(g);\n      }\n      for (var g = a.type, k = c.length - 1;!d.ga && 0 <= k;k--) {\n        d.currentTarget = c[k], e &= vc(c[k], g, !0, d);\n      }\n      for (k = 0;!d.ga && k < c.length;k++) {\n        d.currentTarget = c[k], e &= vc(c[k], g, !1, d);\n      }\n    }\n    return e;\n  }\n  return wc(a, new kc(b, this));\n}\nfunction qc(a) {\n  a = a[lc];\n  return a instanceof P ? a : null;\n}\nvar xc = \"__closure_events_fn_\" + (1E9 * Math.random() >>> 0);\nfunction pc(a) {\n  return fa(a) ? a : a[xc] || (a[xc] = function(b) {\n    return a.handleEvent(b);\n  });\n}\n;function R() {\n  O.call(this);\n  this.W = new P(this);\n  this.fc = this;\n}\ns(R, O);\nR.prototype[ac] = !0;\nf = R.prototype;\nf.tb = null;\nf.addEventListener = function(a, b, c, d) {\n  oc(this, a, b, c, d);\n};\nf.removeEventListener = function(a, b, c, d) {\n  tc(this, a, b, c, d);\n};\nf.dispatchEvent = function(a) {\n  var b, c = this.tb;\n  if (c) {\n    for (b = [];c;c = c.tb) {\n      b.push(c);\n    }\n  }\n  var c = this.fc, d = a.type || a;\n  if (n(a)) {\n    a = new Q(a, c);\n  } else {\n    if (a instanceof Q) {\n      a.target = a.target || c;\n    } else {\n      var e = a;\n      a = new Q(d, c);\n      Wa(a, e);\n    }\n  }\n  var e = !0, g;\n  if (b) {\n    for (var h = b.length - 1;!a.ga && 0 <= h;h--) {\n      g = a.currentTarget = b[h], e = yc(g, d, !0, a) && e;\n    }\n  }\n  a.ga || (g = a.currentTarget = c, e = yc(g, d, !0, a) && e, a.ga || (e = yc(g, d, !1, a) && e));\n  if (b) {\n    for (h = 0;!a.ga && h < b.length;h++) {\n      g = a.currentTarget = b[h], e = yc(g, d, !1, a) && e;\n    }\n  }\n  return e;\n};\nf.u = function() {\n  R.pa.u.call(this);\n  this.W && this.W.Xa(void 0);\n  this.tb = null;\n};\nf.Ra = function(a, b, c, d) {\n  return this.W.add(String(a), b, !1, c, d);\n};\nf.vb = function(a, b, c, d) {\n  return this.W.remove(String(a), b, c, d);\n};\nfunction yc(a, b, c, d) {\n  b = a.W.s[String(b)];\n  if (!b) {\n    return!0;\n  }\n  b = bb(b);\n  for (var e = !0, g = 0;g < b.length;++g) {\n    var h = b[g];\n    if (h && !h.na && h.capture == c) {\n      var k = h.fa, u = h.Oa || h.src;\n      h.Ia && gc(a.W, h);\n      e = !1 !== k.call(u, d) && e;\n    }\n  }\n  return e && !1 != d.Yb;\n}\nf.ya = function(a, b, c, d) {\n  return this.W.ya(String(a), b, c, d);\n};\nfunction zc(a, b) {\n  R.call(this);\n  this.ea = a || 1;\n  this.ra = b || l;\n  this.ib = p(this.Gc, this);\n  this.sb = q();\n}\ns(zc, R);\nf = zc.prototype;\nf.enabled = !1;\nf.l = null;\nf.setInterval = function(a) {\n  this.ea = a;\n  this.l && this.enabled ? (this.stop(), this.start()) : this.l && this.stop();\n};\nf.Gc = function() {\n  if (this.enabled) {\n    var a = q() - this.sb;\n    0 < a && a < 0.8 * this.ea ? this.l = this.ra.setTimeout(this.ib, this.ea - a) : (this.l && (this.ra.clearTimeout(this.l), this.l = null), this.dispatchEvent(Ac), this.enabled && (this.l = this.ra.setTimeout(this.ib, this.ea), this.sb = q()));\n  }\n};\nf.start = function() {\n  this.enabled = !0;\n  this.l || (this.l = this.ra.setTimeout(this.ib, this.ea), this.sb = q());\n};\nf.stop = function() {\n  this.enabled = !1;\n  this.l && (this.ra.clearTimeout(this.l), this.l = null);\n};\nf.u = function() {\n  zc.pa.u.call(this);\n  this.stop();\n  delete this.ra;\n};\nvar Ac = \"tick\";\nfunction Bc(a, b, c) {\n  if (fa(a)) {\n    c && (a = p(a, c));\n  } else {\n    if (a && \"function\" == typeof a.handleEvent) {\n      a = p(a.handleEvent, a);\n    } else {\n      throw Error(\"Invalid listener argument\");\n    }\n  }\n  return 2147483647 < b ? -1 : l.setTimeout(a, b || 0);\n}\n;function Cc() {\n}\nCc.prototype.Ab = null;\nfunction Dc(a) {\n  var b;\n  (b = a.Ab) || (b = {}, Ec(a) && (b[0] = !0, b[1] = !0), b = a.Ab = b);\n  return b;\n}\n;var Fc;\nfunction Gc() {\n}\ns(Gc, Cc);\nfunction Hc(a) {\n  return(a = Ec(a)) ? new ActiveXObject(a) : new XMLHttpRequest;\n}\nfunction Ec(a) {\n  if (!a.Kb && \"undefined\" == typeof XMLHttpRequest && \"undefined\" != typeof ActiveXObject) {\n    for (var b = [\"MSXML2.XMLHTTP.6.0\", \"MSXML2.XMLHTTP.3.0\", \"MSXML2.XMLHTTP\", \"Microsoft.XMLHTTP\"], c = 0;c < b.length;c++) {\n      var d = b[c];\n      try {\n        return new ActiveXObject(d), a.Kb = d;\n      } catch (e) {\n      }\n    }\n    throw Error(\"Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed\");\n  }\n  return a.Kb;\n}\nFc = new Gc;\nfunction Ic(a) {\n  R.call(this);\n  this.headers = new cb;\n  this.gb = a || null;\n  this.T = !1;\n  this.fb = this.f = null;\n  this.Mb = this.Qa = \"\";\n  this.ka = 0;\n  this.q = \"\";\n  this.da = this.qb = this.Pa = this.nb = !1;\n  this.Fa = 0;\n  this.bb = null;\n  this.Xb = Jc;\n  this.cb = this.dc = !1;\n}\ns(Ic, R);\nvar Jc = \"\";\nIc.prototype.r = Tb(\"goog.net.XhrIo\");\nvar Kc = /^https?$/i, Lc = [\"POST\", \"PUT\"];\nf = Ic.prototype;\nf.send = function(a, b, c, d) {\n  if (this.f) {\n    throw Error(\"[goog.net.XhrIo] Object is active with another request=\" + this.Qa + \"; newUri=\" + a);\n  }\n  b = b ? b.toUpperCase() : \"GET\";\n  this.Qa = a;\n  this.q = \"\";\n  this.ka = 0;\n  this.Mb = b;\n  this.nb = !1;\n  this.T = !0;\n  this.f = this.gb ? Hc(this.gb) : Hc(Fc);\n  this.fb = this.gb ? Dc(this.gb) : Dc(Fc);\n  this.f.onreadystatechange = p(this.Qb, this);\n  try {\n    M(this.r, S(this, \"Opening Xhr\")), this.qb = !0, this.f.open(b, a, !0), this.qb = !1;\n  } catch (e) {\n    M(this.r, S(this, \"Error opening Xhr: \" + e.message));\n    Mc(this, e);\n    return;\n  }\n  a = c || \"\";\n  var g = this.headers.n();\n  d && D(d, function(a, b) {\n    g.set(b, a);\n  });\n  d = Za(g.ca());\n  c = l.FormData && a instanceof l.FormData;\n  !(0 <= Xa(Lc, b)) || d || c || g.set(\"Content-Type\", \"application/x-www-form-urlencoded;charset=utf-8\");\n  D(g, function(a, b) {\n    this.f.setRequestHeader(b, a);\n  }, this);\n  this.Xb && (this.f.responseType = this.Xb);\n  \"withCredentials\" in this.f && (this.f.withCredentials = this.dc);\n  try {\n    Nc(this), 0 < this.Fa && (this.cb = Oc(this.f), M(this.r, S(this, \"Will abort after \" + this.Fa + \"ms if incomplete, xhr2 \" + this.cb)), this.cb ? (this.f.timeout = this.Fa, this.f.ontimeout = p(this.qa, this)) : this.bb = Bc(this.qa, this.Fa, this)), M(this.r, S(this, \"Sending request\")), this.Pa = !0, this.f.send(a), this.Pa = !1;\n  } catch (h) {\n    M(this.r, S(this, \"Send error: \" + h.message)), Mc(this, h);\n  }\n};\nfunction Oc(a) {\n  return y && A(9) && \"number\" == typeof a.timeout && void 0 !== a.ontimeout;\n}\nfunction $a(a) {\n  return \"content-type\" == a.toLowerCase();\n}\nf.qa = function() {\n  \"undefined\" != typeof aa && this.f && (this.q = \"Timed out after \" + this.Fa + \"ms, aborting\", this.ka = 8, M(this.r, S(this, this.q)), this.dispatchEvent(\"timeout\"), this.abort(8));\n};\nfunction Mc(a, b) {\n  a.T = !1;\n  a.f && (a.da = !0, a.f.abort(), a.da = !1);\n  a.q = b;\n  a.ka = 5;\n  Pc(a);\n  Qc(a);\n}\nfunction Pc(a) {\n  a.nb || (a.nb = !0, a.dispatchEvent(\"complete\"), a.dispatchEvent(\"error\"));\n}\nf.abort = function(a) {\n  this.f && this.T && (M(this.r, S(this, \"Aborting\")), this.T = !1, this.da = !0, this.f.abort(), this.da = !1, this.ka = a || 7, this.dispatchEvent(\"complete\"), this.dispatchEvent(\"abort\"), Qc(this));\n};\nf.u = function() {\n  this.f && (this.T && (this.T = !1, this.da = !0, this.f.abort(), this.da = !1), Qc(this, !0));\n  Ic.pa.u.call(this);\n};\nf.Qb = function() {\n  this.mb || (this.qb || this.Pa || this.da ? Rc(this) : this.uc());\n};\nf.uc = function() {\n  Rc(this);\n};\nfunction Rc(a) {\n  if (a.T && \"undefined\" != typeof aa) {\n    if (a.fb[1] && 4 == T(a) && 2 == Sc(a)) {\n      M(a.r, S(a, \"Local request error detected and ignored\"));\n    } else {\n      if (a.Pa && 4 == T(a)) {\n        Bc(a.Qb, 0, a);\n      } else {\n        if (a.dispatchEvent(\"readystatechange\"), 4 == T(a)) {\n          M(a.r, S(a, \"Request complete\"));\n          a.T = !1;\n          try {\n            var b = Sc(a), c, d;\n            a: {\n              switch(b) {\n                case 200:\n                ;\n                case 201:\n                ;\n                case 202:\n                ;\n                case 204:\n                ;\n                case 206:\n                ;\n                case 304:\n                ;\n                case 1223:\n                  d = !0;\n                  break a;\n                default:\n                  d = !1;\n              }\n            }\n            if (!(c = d)) {\n              var e;\n              if (e = 0 === b) {\n                var g = Ra(String(a.Qa))[1] || null;\n                if (!g && self.location) {\n                  var h = self.location.protocol, g = h.substr(0, h.length - 1)\n                }\n                e = !Kc.test(g ? g.toLowerCase() : \"\");\n              }\n              c = e;\n            }\n            if (c) {\n              a.dispatchEvent(\"complete\"), a.dispatchEvent(\"success\");\n            } else {\n              a.ka = 6;\n              var k;\n              try {\n                k = 2 < T(a) ? a.f.statusText : \"\";\n              } catch (u) {\n                M(a.r, \"Can not get status: \" + u.message), k = \"\";\n              }\n              a.q = k + \" [\" + Sc(a) + \"]\";\n              Pc(a);\n            }\n          } finally {\n            Qc(a);\n          }\n        }\n      }\n    }\n  }\n}\nfunction Qc(a, b) {\n  if (a.f) {\n    Nc(a);\n    var c = a.f, d = a.fb[0] ? ca : null;\n    a.f = null;\n    a.fb = null;\n    b || a.dispatchEvent(\"ready\");\n    try {\n      c.onreadystatechange = d;\n    } catch (e) {\n      (c = a.r) && c.J(\"Problem encountered resetting onreadystatechange: \" + e.message, void 0);\n    }\n  }\n}\nfunction Nc(a) {\n  a.f && a.cb && (a.f.ontimeout = null);\n  \"number\" == typeof a.bb && (l.clearTimeout(a.bb), a.bb = null);\n}\nf.isActive = function() {\n  return!!this.f;\n};\nfunction T(a) {\n  return a.f ? a.f.readyState : 0;\n}\nfunction Sc(a) {\n  try {\n    return 2 < T(a) ? a.f.status : -1;\n  } catch (b) {\n    return(a = a.r) && a.Z(\"Can not get status: \" + b.message, void 0), -1;\n  }\n}\nfunction Tc(a) {\n  try {\n    return a.f ? a.f.responseText : \"\";\n  } catch (b) {\n    return M(a.r, \"Can not get responseText: \" + b.message), \"\";\n  }\n}\nf.Ib = function() {\n  return n(this.q) ? this.q : String(this.q);\n};\nfunction S(a, b) {\n  return b + \" [\" + a.Mb + \" \" + a.Qa + \" \" + Sc(a) + \"]\";\n}\n;function Uc() {\n  this.Wb = q();\n}\nnew Uc;\nUc.prototype.set = function(a) {\n  this.Wb = a;\n};\nUc.prototype.reset = function() {\n  this.set(q());\n};\nUc.prototype.get = function() {\n  return this.Wb;\n};\nfunction Vc(a) {\n  O.call(this);\n  this.e = a;\n  this.j = {};\n}\ns(Vc, O);\nvar Wc = [];\nf = Vc.prototype;\nf.Ra = function(a, b, c, d) {\n  m(b) || (Wc[0] = b, b = Wc);\n  for (var e = 0;e < b.length;e++) {\n    var g = oc(a, b[e], c || this.handleEvent, d || !1, this.e || this);\n    if (!g) {\n      break;\n    }\n    this.j[g.key] = g;\n  }\n  return this;\n};\nf.vb = function(a, b, c, d, e) {\n  if (m(b)) {\n    for (var g = 0;g < b.length;g++) {\n      this.vb(a, b[g], c, d, e);\n    }\n  } else {\n    c = c || this.handleEvent, e = e || this.e || this, c = pc(c), d = !!d, b = bc(a) ? a.ya(b, c, d, e) : a ? (a = qc(a)) ? a.ya(b, c, d, e) : null : null, b && (uc(b), delete this.j[b.key]);\n  }\n  return this;\n};\nf.Xa = function() {\n  var a = this.j, b = uc, c;\n  for (c in a) {\n    b.call(void 0, a[c], c, a);\n  }\n  this.j = {};\n};\nf.u = function() {\n  Vc.pa.u.call(this);\n  this.Xa();\n};\nf.handleEvent = function() {\n  throw Error(\"EventHandler.handleEvent not implemented\");\n};\nfunction Xc(a, b, c) {\n  O.call(this);\n  this.pc = a;\n  this.ea = b;\n  this.e = c;\n  this.jc = p(this.vc, this);\n}\ns(Xc, O);\nf = Xc.prototype;\nf.Za = !1;\nf.Vb = 0;\nf.l = null;\nf.stop = function() {\n  this.l && (l.clearTimeout(this.l), this.l = null, this.Za = !1);\n};\nf.u = function() {\n  Xc.pa.u.call(this);\n  this.stop();\n};\nf.vc = function() {\n  this.l = null;\n  this.Za && !this.Vb && (this.Za = !1, Yc(this));\n};\nfunction Yc(a) {\n  a.l = Bc(a.jc, a.ea);\n  a.pc.call(a.e);\n}\n;function U(a, b, c, d, e) {\n  this.b = a;\n  this.a = b;\n  this.Y = c;\n  this.B = d;\n  this.Ea = e || 1;\n  this.qa = Zc;\n  this.ob = new Vc(this);\n  this.Ta = new zc;\n  this.Ta.setInterval($c);\n}\nf = U.prototype;\nf.v = null;\nf.F = !1;\nf.ua = null;\nf.xb = null;\nf.Da = null;\nf.sa = null;\nf.U = null;\nf.w = null;\nf.X = null;\nf.k = null;\nf.Ha = 0;\nf.K = null;\nf.ta = null;\nf.q = null;\nf.g = -1;\nf.Zb = !0;\nf.$ = !1;\nf.ma = 0;\nf.Va = null;\nvar Zc = 45E3, $c = 250;\nfunction ad(a, b) {\n  switch(a) {\n    case 0:\n      return \"Non-200 return code (\" + b + \")\";\n    case 1:\n      return \"XMLHTTP failure (no data)\";\n    case 2:\n      return \"HttpConnection timeout\";\n    default:\n      return \"Unknown error\";\n  }\n}\nvar bd = {}, dd = {};\nfunction ed() {\n  return!y || y && 10 <= Ma;\n}\nf = U.prototype;\nf.S = function(a) {\n  this.v = a;\n};\nf.setTimeout = function(a) {\n  this.qa = a;\n};\nf.bc = function(a) {\n  this.ma = a;\n};\nfunction fd(a, b, c) {\n  a.sa = 1;\n  a.U = H(b.n());\n  a.X = c;\n  a.Cb = !0;\n  gd(a, null);\n}\nfunction hd(a, b, c, d, e) {\n  a.sa = 1;\n  a.U = H(b.n());\n  a.X = null;\n  a.Cb = c;\n  e && (a.Zb = !1);\n  gd(a, d);\n}\nfunction gd(a, b) {\n  a.Da = q();\n  id(a);\n  a.w = a.U.n();\n  rb(a.w, \"t\", a.Ea);\n  a.Ha = 0;\n  a.k = a.b.lb(a.b.$a() ? b : null);\n  0 < a.ma && (a.Va = new Xc(p(a.ec, a, a.k), a.ma));\n  a.ob.Ra(a.k, \"readystatechange\", a.Bc);\n  var c;\n  if (a.v) {\n    c = a.v;\n    var d = {}, e;\n    for (e in c) {\n      d[e] = c[e];\n    }\n    c = d;\n  } else {\n    c = {};\n  }\n  a.X ? (a.ta = \"POST\", c[\"Content-Type\"] = \"application/x-www-form-urlencoded\", a.k.send(a.w, a.ta, a.X, c)) : (a.ta = \"GET\", a.Zb && !z && (c.Connection = \"close\"), a.k.send(a.w, a.ta, null, c));\n  a.b.H(jd);\n  if (d = a.X) {\n    for (c = \"\", d = d.split(\"&\"), e = 0;e < d.length;e++) {\n      var g = d[e].split(\"=\");\n      if (1 < g.length) {\n        var h = g[0], g = g[1], k = h.split(\"_\");\n        c = 2 <= k.length && \"type\" == k[1] ? c + (h + \"=\" + g + \"&\") : c + (h + \"=redacted&\");\n      }\n    }\n  } else {\n    c = null;\n  }\n  a.a.info(\"XMLHTTP REQ (\" + a.B + \") [attempt \" + a.Ea + \"]: \" + a.ta + \"\\n\" + a.w + \"\\n\" + c);\n}\nf.Bc = function(a) {\n  a = a.target;\n  var b = this.Va;\n  b && 3 == T(a) ? (this.a.debug(\"Throttling readystatechange.\"), b.l || b.Vb ? b.Za = !0 : Yc(b)) : this.ec(a);\n};\nf.ec = function(a) {\n  try {\n    if (a == this.k) {\n      a: {\n        var b = T(this.k), c = this.k.ka, d = Sc(this.k);\n        if (!ed() || z && !A(\"420+\")) {\n          if (4 > b) {\n            break a;\n          }\n        } else {\n          if (3 > b || 3 == b && !Aa && !Tc(this.k)) {\n            break a;\n          }\n        }\n        this.$ || 4 != b || 7 == c || (8 == c || 0 >= d ? this.b.H(kd) : this.b.H(ld));\n        md(this);\n        var e = Sc(this.k);\n        this.g = e;\n        var g = Tc(this.k);\n        g || this.a.debug(\"No response text for uri \" + this.w + \" status \" + e);\n        this.F = 200 == e;\n        this.a.info(\"XMLHTTP RESP (\" + this.B + \") [ attempt \" + this.Ea + \"]: \" + this.ta + \"\\n\" + this.w + \"\\n\" + b + \" \" + e);\n        this.F ? (4 == b && V(this), this.Cb ? (nd(this, b, g), Aa && this.F && 3 == b && (this.ob.Ra(this.Ta, Ac, this.Ac), this.Ta.start())) : (Ub(this.a, this.B, g, null), od(this, g)), this.F && !this.$ && (4 == b ? this.b.la(this) : (this.F = !1, id(this)))) : (400 == e && 0 < g.indexOf(\"Unknown SID\") ? (this.q = 3, W(), this.a.Z(\"XMLHTTP Unknown SID (\" + this.B + \")\")) : (this.q = 0, W(), this.a.Z(\"XMLHTTP Bad status \" + e + \" (\" + this.B + \")\")), V(this), pd(this));\n      }\n    } else {\n      this.a.Z(\"Called back with an unexpected xmlhttp\");\n    }\n  } catch (h) {\n    this.a.debug(\"Failed call to OnXmlHttpReadyStateChanged_\"), this.k && Tc(this.k) ? Wb(this.a, h, \"ResponseText: \" + Tc(this.k)) : Wb(this.a, h, \"No response text\");\n  } finally {\n  }\n};\nfunction nd(a, b, c) {\n  for (var d = !0;!a.$ && a.Ha < c.length;) {\n    var e = qd(a, c);\n    if (e == dd) {\n      4 == b && (a.q = 4, W(), d = !1);\n      Ub(a.a, a.B, null, \"[Incomplete Response]\");\n      break;\n    } else {\n      if (e == bd) {\n        a.q = 4;\n        W();\n        Ub(a.a, a.B, c, \"[Invalid Chunk]\");\n        d = !1;\n        break;\n      } else {\n        Ub(a.a, a.B, e, null), od(a, e);\n      }\n    }\n  }\n  4 == b && 0 == c.length && (a.q = 1, W(), d = !1);\n  a.F = a.F && d;\n  d || (Ub(a.a, a.B, c, \"[Invalid Chunked Response]\"), V(a), pd(a));\n}\nf.Ac = function() {\n  var a = T(this.k), b = Tc(this.k);\n  this.Ha < b.length && (md(this), nd(this, a, b), this.F && 4 != a && id(this));\n};\nfunction qd(a, b) {\n  var c = a.Ha, d = b.indexOf(\"\\n\", c);\n  if (-1 == d) {\n    return dd;\n  }\n  c = Number(b.substring(c, d));\n  if (isNaN(c)) {\n    return bd;\n  }\n  d += 1;\n  if (d + c > b.length) {\n    return dd;\n  }\n  var e = b.substr(d, c);\n  a.Ha = d + c;\n  return e;\n}\nfunction rd(a, b) {\n  a.Da = q();\n  id(a);\n  var c = b ? window.location.hostname : \"\";\n  a.w = a.U.n();\n  G(a.w, \"DOMAIN\", c);\n  G(a.w, \"t\", a.Ea);\n  try {\n    a.K = new ActiveXObject(\"htmlfile\");\n  } catch (d) {\n    a.a.J(\"ActiveX blocked\");\n    V(a);\n    a.q = 7;\n    W();\n    pd(a);\n    return;\n  }\n  var e = \"<html><body>\";\n  b && (e += '<script>document.domain=\"' + c + '\"\\x3c/script>');\n  e += \"</body></html>\";\n  a.K.open();\n  a.K.write(e);\n  a.K.close();\n  a.K.parentWindow.m = p(a.yc, a);\n  a.K.parentWindow.d = p(a.Ub, a, !0);\n  a.K.parentWindow.rpcClose = p(a.Ub, a, !1);\n  c = a.K.createElement(\"div\");\n  a.K.parentWindow.document.body.appendChild(c);\n  c.innerHTML = '<iframe src=\"' + a.w + '\"></iframe>';\n  a.a.info(\"TRIDENT REQ (\" + a.B + \") [ attempt \" + a.Ea + \"]: GET\\n\" + a.w);\n  a.b.H(jd);\n}\nf.yc = function(a) {\n  Y(p(this.xc, this, a), 0);\n};\nf.xc = function(a) {\n  if (!this.$) {\n    var b = this.a;\n    b.info(\"TRIDENT TEXT (\" + this.B + \"): \" + Vb(b, a));\n    md(this);\n    od(this, a);\n    id(this);\n  }\n};\nf.Ub = function(a) {\n  Y(p(this.wc, this, a), 0);\n};\nf.wc = function(a) {\n  this.$ || (this.a.info(\"TRIDENT TEXT (\" + this.B + \"): \" + a ? \"success\" : \"failure\"), V(this), this.F = a, this.b.la(this), this.b.H(sd));\n};\nf.nc = function() {\n  md(this);\n  this.b.la(this);\n};\nf.cancel = function() {\n  this.$ = !0;\n  V(this);\n};\nfunction id(a) {\n  a.xb = q() + a.qa;\n  td(a, a.qa);\n}\nfunction td(a, b) {\n  if (null != a.ua) {\n    throw Error(\"WatchDog timer not null\");\n  }\n  a.ua = Y(p(a.zc, a), b);\n}\nfunction md(a) {\n  a.ua && (l.clearTimeout(a.ua), a.ua = null);\n}\nf.zc = function() {\n  this.ua = null;\n  var a = q();\n  0 <= a - this.xb ? (this.F && this.a.J(\"Received watchdog timeout even though request loaded successfully\"), this.a.info(\"TIMEOUT: \" + this.w), 2 != this.sa && this.b.H(kd), V(this), this.q = 2, W(), pd(this)) : (this.a.Z(\"WatchDog timer called too early\"), td(this, this.xb - a));\n};\nfunction pd(a) {\n  a.b.Lb() || a.$ || a.b.la(a);\n}\nfunction V(a) {\n  md(a);\n  var b = a.Va;\n  b && \"function\" == typeof b.Ja && b.Ja();\n  a.Va = null;\n  a.Ta.stop();\n  a.ob.Xa();\n  a.k && (b = a.k, a.k = null, b.abort(), b.Ja());\n  a.K && (a.K = null);\n}\nf.Ib = function() {\n  return this.q;\n};\nfunction od(a, b) {\n  try {\n    a.b.Rb(a, b), a.b.H(sd);\n  } catch (c) {\n    Wb(a.a, c, \"Error in httprequest callback\");\n  }\n}\n;function ud(a, b, c, d, e) {\n  (new N).debug(\"TestLoadImageWithRetries: \" + e);\n  if (0 == d) {\n    c(!1);\n  } else {\n    var g = e || 0;\n    d--;\n    vd(a, b, function(e) {\n      e ? c(!0) : l.setTimeout(function() {\n        ud(a, b, c, d, g);\n      }, g);\n    });\n  }\n}\nfunction vd(a, b, c) {\n  function d(a, b) {\n    return function() {\n      try {\n        e.debug(\"TestLoadImage: \" + b), g.onload = null, g.onerror = null, g.onabort = null, g.ontimeout = null, l.clearTimeout(h), c(a);\n      } catch (d) {\n        Wb(e, d);\n      }\n    };\n  }\n  var e = new N;\n  e.debug(\"TestLoadImage: loading \" + a);\n  var g = new Image, h = null;\n  g.onload = d(!0, \"loaded\");\n  g.onerror = d(!1, \"error\");\n  g.onabort = d(!1, \"abort\");\n  g.ontimeout = d(!1, \"timeout\");\n  h = l.setTimeout(function() {\n    if (g.ontimeout) {\n      g.ontimeout();\n    }\n  }, b);\n  g.src = a;\n}\n;function wd(a, b) {\n  this.b = a;\n  this.a = b;\n  this.P = new Yb(0, !0);\n}\nf = wd.prototype;\nf.v = null;\nf.A = null;\nf.Wa = !1;\nf.cc = null;\nf.La = null;\nf.rb = null;\nf.I = null;\nf.c = null;\nf.g = -1;\nf.L = null;\nf.va = null;\nf.S = function(a) {\n  this.v = a;\n};\nf.ac = function(a) {\n  this.P = a;\n};\nf.kb = function(a) {\n  this.I = a;\n  a = xd(this.b, this.I);\n  W();\n  this.cc = q();\n  var b = this.b.Gb;\n  null != b ? (this.L = this.b.correctHostPrefix(b[0]), (this.va = b[1]) ? (this.c = 1, yd(this)) : (this.c = 2, zd(this))) : (rb(a, \"MODE\", \"init\"), this.A = new U(this, this.a, void 0, void 0, void 0), this.A.S(this.v), hd(this.A, a, !1, null, !0), this.c = 0);\n};\nfunction yd(a) {\n  var b = Ad(a.b, a.va, \"/mail/images/cleardot.gif\");\n  H(b);\n  ud(b.toString(), 5E3, p(a.kc, a), 3, 2E3);\n  a.H(jd);\n}\nf.kc = function(a) {\n  if (a) {\n    this.c = 2, zd(this);\n  } else {\n    W();\n    var b = this.b;\n    b.a.debug(\"Test Connection Blocked\");\n    b.g = b.V.g;\n    Z(b, 9);\n  }\n  a && this.H(ld);\n};\nfunction zd(a) {\n  a.a.debug(\"TestConnection: starting stage 2\");\n  var b = a.b.Dc;\n  if (null != b) {\n    a.a.debug(\"TestConnection: skipping stage 2, precomputed result is \" + b ? \"Buffered\" : \"Unbuffered\"), W(), b ? (W(), Bd(a.b, a, !1)) : (W(), Bd(a.b, a, !0));\n  } else {\n    if (a.A = new U(a, a.a, void 0, void 0, void 0), a.A.S(a.v), b = Cd(a.b, a.L, a.I), W(), ed()) {\n      rb(b, \"TYPE\", \"xmlhttp\"), hd(a.A, b, !1, a.L, !1);\n    } else {\n      rb(b, \"TYPE\", \"html\");\n      var c = a.A;\n      a = Boolean(a.L);\n      c.sa = 3;\n      c.U = H(b.n());\n      rd(c, a);\n    }\n  }\n}\nf.lb = function(a) {\n  return this.b.lb(a);\n};\nf.abort = function() {\n  this.A && (this.A.cancel(), this.A = null);\n  this.g = -1;\n};\nf.Lb = function() {\n  return!1;\n};\nf.Rb = function(a, b) {\n  this.g = a.g;\n  if (0 == this.c) {\n    if (this.a.debug(\"TestConnection: Got data for stage 1\"), b) {\n      try {\n        var c = this.P.parse(b);\n      } catch (d) {\n        Wb(this.a, d);\n        Dd(this.b, this);\n        return;\n      }\n      this.L = this.b.correctHostPrefix(c[0]);\n      this.va = c[1];\n    } else {\n      this.a.debug(\"TestConnection: Null responseText\"), Dd(this.b, this);\n    }\n  } else {\n    if (2 == this.c) {\n      if (this.Wa) {\n        W(), this.rb = q();\n      } else {\n        if (\"11111\" == b) {\n          if (W(), this.Wa = !0, this.La = q(), c = this.La - this.cc, ed() || 500 > c) {\n            this.g = 200, this.A.cancel(), this.a.debug(\"Test connection succeeded; using streaming connection\"), W(), Bd(this.b, this, !0);\n          }\n        } else {\n          W(), this.La = this.rb = q(), this.Wa = !1;\n        }\n      }\n    }\n  }\n};\nf.la = function() {\n  this.g = this.A.g;\n  if (!this.A.F) {\n    this.a.debug(\"TestConnection: request failed, in state \" + this.c), 0 == this.c ? W() : 2 == this.c && W(), Dd(this.b, this);\n  } else {\n    if (0 == this.c) {\n      this.a.debug(\"TestConnection: request complete for initial check\"), this.va ? (this.c = 1, yd(this)) : (this.c = 2, zd(this));\n    } else {\n      if (2 == this.c) {\n        this.a.debug(\"TestConnection: request complete for stage 2\");\n        var a = !1;\n        (a = ed() ? this.Wa : 200 > this.rb - this.La ? !1 : !0) ? (this.a.debug(\"Test connection succeeded; using streaming connection\"), W(), Bd(this.b, this, !0)) : (this.a.debug(\"Test connection failed; not using streaming\"), W(), Bd(this.b, this, !1));\n      }\n    }\n  }\n};\nf.$a = function() {\n  return this.b.$a();\n};\nf.isActive = function() {\n  return this.b.isActive();\n};\nf.H = function(a) {\n  this.b.H(a);\n};\nfunction Ed(a, b, c) {\n  this.Bb = a || null;\n  this.c = Fd;\n  this.t = [];\n  this.Q = [];\n  this.a = new N;\n  this.P = new Yb(0, !0);\n  this.Gb = b || null;\n  this.Dc = null != c ? c : null;\n}\nfunction Gd(a, b) {\n  this.Ob = a;\n  this.map = b;\n}\nf = Ed.prototype;\nf.v = null;\nf.xa = null;\nf.p = null;\nf.i = null;\nf.I = null;\nf.Ma = null;\nf.zb = null;\nf.L = null;\nf.hc = !0;\nf.Ba = 0;\nf.sc = 0;\nf.Ka = !1;\nf.e = null;\nf.G = null;\nf.M = null;\nf.aa = null;\nf.V = null;\nf.wb = null;\nf.gc = !0;\nf.za = -1;\nf.Nb = -1;\nf.g = -1;\nf.ba = 0;\nf.ha = 0;\nf.ic = 5E3;\nf.Cc = 1E4;\nf.pb = 2;\nf.Hb = 2E4;\nf.ma = 0;\nf.ab = !1;\nf.ia = 8;\nvar Fd = 1, Hd = new R;\nfunction Id(a) {\n  Q.call(this, \"statevent\", a);\n}\ns(Id, Q);\nfunction Jd(a, b) {\n  Q.call(this, \"timingevent\", a);\n  this.size = b;\n}\ns(Jd, Q);\nvar jd = 1, ld = 2, kd = 3, sd = 4;\nfunction Kd(a) {\n  Q.call(this, \"serverreachability\", a);\n}\ns(Kd, Q);\nvar Xb = \"y2f%\";\nf = Ed.prototype;\nf.kb = function(a, b, c, d, e) {\n  this.a.debug(\"connect()\");\n  W();\n  this.I = b;\n  this.xa = c || {};\n  d && void 0 !== e && (this.xa.OSID = d, this.xa.OAID = e);\n  this.a.debug(\"connectTest_()\");\n  Ld(this) && (this.V = new wd(this, this.a), this.V.S(this.v), this.V.ac(this.P), this.V.kb(a));\n};\nf.disconnect = function() {\n  this.a.debug(\"disconnect()\");\n  Md(this);\n  if (3 == this.c) {\n    var a = this.Ba++, b = this.Ma.n();\n    G(b, \"SID\", this.Y);\n    G(b, \"RID\", a);\n    G(b, \"TYPE\", \"terminate\");\n    Nd(this, b);\n    a = new U(this, this.a, this.Y, a, void 0);\n    a.sa = 2;\n    a.U = H(b.n());\n    b = new Image;\n    b.src = a.U;\n    b.onload = b.onerror = p(a.nc, a);\n    a.Da = q();\n    id(a);\n  }\n  Od(this);\n};\nfunction Md(a) {\n  a.V && (a.V.abort(), a.V = null);\n  a.i && (a.i.cancel(), a.i = null);\n  a.M && (l.clearTimeout(a.M), a.M = null);\n  Pd(a);\n  a.p && (a.p.cancel(), a.p = null);\n  a.G && (l.clearTimeout(a.G), a.G = null);\n}\nf.S = function(a) {\n  this.v = a;\n};\nf.bc = function(a) {\n  this.ma = a;\n};\nf.Lb = function() {\n  return 0 == this.c;\n};\nf.ac = function(a) {\n  this.P = a;\n};\nfunction Qd(a) {\n  a.p || a.G || (a.G = Y(p(a.Tb, a), 0), a.ba = 0);\n}\nf.Tb = function(a) {\n  this.G = null;\n  this.a.debug(\"startForwardChannel_\");\n  if (Ld(this)) {\n    if (this.c == Fd) {\n      if (a) {\n        this.a.J(\"Not supposed to retry the open\");\n      } else {\n        this.a.debug(\"open_()\");\n        this.Ba = Math.floor(1E5 * Math.random());\n        a = this.Ba++;\n        var b = new U(this, this.a, \"\", a, void 0);\n        b.S(this.v);\n        var c = Rd(this), d = this.Ma.n();\n        G(d, \"RID\", a);\n        this.Bb && G(d, \"CVER\", this.Bb);\n        Nd(this, d);\n        fd(b, d, c);\n        this.p = b;\n        this.c = 2;\n      }\n    } else {\n      3 == this.c && (a ? Sd(this, a) : 0 == this.t.length ? this.a.debug(\"startForwardChannel_ returned: nothing to send\") : this.p ? this.a.J(\"startForwardChannel_ returned: connection already in progress\") : (Sd(this), this.a.debug(\"startForwardChannel_ finished, sent request\")));\n    }\n  }\n};\nfunction Sd(a, b) {\n  var c, d;\n  b ? 6 < a.ia ? (a.t = a.Q.concat(a.t), a.Q.length = 0, c = a.Ba - 1, d = Rd(a)) : (c = b.B, d = b.X) : (c = a.Ba++, d = Rd(a));\n  var e = a.Ma.n();\n  G(e, \"SID\", a.Y);\n  G(e, \"RID\", c);\n  G(e, \"AID\", a.za);\n  Nd(a, e);\n  c = new U(a, a.a, a.Y, c, a.ba + 1);\n  c.S(a.v);\n  c.setTimeout(Math.round(0.5 * a.Hb) + Math.round(0.5 * a.Hb * Math.random()));\n  a.p = c;\n  fd(c, e, d);\n}\nfunction Nd(a, b) {\n  if (a.e) {\n    var c = a.e.getAdditionalParams(a);\n    c && D(c, function(a, c) {\n      G(b, c, a);\n    });\n  }\n}\nfunction Rd(a) {\n  var b = Math.min(a.t.length, 1E3), c = [\"count=\" + b], d;\n  6 < a.ia && 0 < b ? (d = a.t[0].Ob, c.push(\"ofs=\" + d)) : d = 0;\n  for (var e = 0;e < b;e++) {\n    var g = a.t[e].Ob, h = a.t[e].map, g = 6 >= a.ia ? e : g - d;\n    try {\n      D(h, function(a, b) {\n        c.push(\"req\" + g + \"_\" + b + \"=\" + encodeURIComponent(a));\n      });\n    } catch (k) {\n      c.push(\"req\" + g + \"_type=\" + encodeURIComponent(\"_badmap\")), a.e && a.e.badMapError(a, h);\n    }\n  }\n  a.Q = a.Q.concat(a.t.splice(0, b));\n  return c.join(\"&\");\n}\nfunction Td(a) {\n  a.i || a.M || (a.yb = 1, a.M = Y(p(a.Sb, a), 0), a.ha = 0);\n}\nfunction Ud(a) {\n  if (a.i || a.M) {\n    return a.a.J(\"Request already in progress\"), !1;\n  }\n  if (3 <= a.ha) {\n    return!1;\n  }\n  a.a.debug(\"Going to retry GET\");\n  a.yb++;\n  a.M = Y(p(a.Sb, a), Vd(a, a.ha));\n  a.ha++;\n  return!0;\n}\nf.Sb = function() {\n  this.M = null;\n  if (Ld(this)) {\n    this.a.debug(\"Creating new HttpRequest\");\n    this.i = new U(this, this.a, this.Y, \"rpc\", this.yb);\n    this.i.S(this.v);\n    this.i.bc(this.ma);\n    var a = this.zb.n();\n    G(a, \"RID\", \"rpc\");\n    G(a, \"SID\", this.Y);\n    G(a, \"CI\", this.wb ? \"0\" : \"1\");\n    G(a, \"AID\", this.za);\n    Nd(this, a);\n    if (ed()) {\n      G(a, \"TYPE\", \"xmlhttp\"), hd(this.i, a, !0, this.L, !1);\n    } else {\n      G(a, \"TYPE\", \"html\");\n      var b = this.i, c = Boolean(this.L);\n      b.sa = 3;\n      b.U = H(a.n());\n      rd(b, c);\n    }\n    this.a.debug(\"New Request created\");\n  }\n};\nfunction Ld(a) {\n  if (a.e) {\n    var b = a.e.okToMakeRequest(a);\n    if (0 != b) {\n      return a.a.debug(\"Handler returned error code from okToMakeRequest\"), Z(a, b), !1;\n    }\n  }\n  return!0;\n}\nfunction Bd(a, b, c) {\n  a.a.debug(\"Test Connection Finished\");\n  a.wb = a.gc && c;\n  a.g = b.g;\n  a.a.debug(\"connectChannel_()\");\n  a.lc(Fd, 0);\n  a.Ma = xd(a, a.I);\n  Qd(a);\n}\nfunction Dd(a, b) {\n  a.a.debug(\"Test Connection Failed\");\n  a.g = b.g;\n  Z(a, 2);\n}\nf.Rb = function(a, b) {\n  if (0 != this.c && (this.i == a || this.p == a)) {\n    if (this.g = a.g, this.p == a && 3 == this.c) {\n      if (7 < this.ia) {\n        var c;\n        try {\n          c = this.P.parse(b);\n        } catch (d) {\n          c = null;\n        }\n        if (m(c) && 3 == c.length) {\n          var e = c;\n          if (0 == e[0]) {\n            a: {\n              if (this.a.debug(\"Server claims our backchannel is missing.\"), this.M) {\n                this.a.debug(\"But we are currently starting the request.\");\n              } else {\n                if (this.i) {\n                  if (this.i.Da + 3E3 < this.p.Da) {\n                    Pd(this), this.i.cancel(), this.i = null;\n                  } else {\n                    break a;\n                  }\n                } else {\n                  this.a.Z(\"We do not have a BackChannel established\");\n                }\n                Ud(this);\n                W();\n              }\n            }\n          } else {\n            this.Nb = e[1], c = this.Nb - this.za, 0 < c && (e = e[2], this.a.debug(e + \" bytes (in \" + c + \" arrays) are outstanding on the BackChannel\"), 37500 > e && this.wb && 0 == this.ha && !this.aa && (this.aa = Y(p(this.tc, this), 6E3)));\n          }\n        } else {\n          this.a.debug(\"Bad POST response data returned\"), Z(this, 11);\n        }\n      } else {\n        b != Xb && (this.a.debug(\"Bad data returned - missing/invald magic cookie\"), Z(this, 11));\n      }\n    } else {\n      if (this.i == a && Pd(this), !/^[\\s\\xa0]*$/.test(b)) {\n        c = this.P.parse(b);\n        for (var e = this.e && this.e.channelHandleMultipleArrays ? [] : null, g = 0;g < c.length;g++) {\n          var h = c[g];\n          this.za = h[0];\n          h = h[1];\n          2 == this.c ? \"c\" == h[0] ? (this.Y = h[1], this.L = this.correctHostPrefix(h[2]), h = h[3], this.ia = null != h ? h : 6, this.c = 3, this.e && this.e.channelOpened(this), this.zb = Cd(this, this.L, this.I), Td(this)) : \"stop\" == h[0] && Z(this, 7) : 3 == this.c && (\"stop\" == h[0] ? (e && 0 != e.length && (this.e.channelHandleMultipleArrays(this, e), e.length = 0), Z(this, 7)) : \"noop\" != h[0] && (e ? e.push(h) : this.e && this.e.channelHandleArray(this, h)), this.ha = 0);\n        }\n        e && 0 != e.length && this.e.channelHandleMultipleArrays(this, e);\n      }\n    }\n  }\n};\nf.correctHostPrefix = function(a) {\n  return this.hc ? this.e ? this.e.correctHostPrefix(a) : a : null;\n};\nf.tc = function() {\n  null != this.aa && (this.aa = null, this.i.cancel(), this.i = null, Ud(this), W());\n};\nfunction Pd(a) {\n  null != a.aa && (l.clearTimeout(a.aa), a.aa = null);\n}\nf.la = function(a) {\n  this.a.debug(\"Request complete\");\n  var b;\n  if (this.i == a) {\n    Pd(this), this.i = null, b = 2;\n  } else {\n    if (this.p == a) {\n      this.p = null, b = 1;\n    } else {\n      return;\n    }\n  }\n  this.g = a.g;\n  if (0 != this.c) {\n    if (a.F) {\n      1 == b ? (q(), Hd.dispatchEvent(new Jd(Hd, a.X ? a.X.length : 0)), Qd(this), this.Q.length = 0) : Td(this);\n    } else {\n      var c = a.Ib();\n      if (3 == c || 7 == c || 0 == c && 0 < this.g) {\n        this.a.debug(\"Not retrying due to error type\");\n      } else {\n        this.a.debug(\"Maybe retrying, last error: \" + ad(c, this.g));\n        var d;\n        if (d = 1 == b) {\n          this.p || this.G ? (this.a.J(\"Request already in progress\"), d = !1) : this.c == Fd || this.ba >= (this.Ka ? 0 : this.pb) ? d = !1 : (this.a.debug(\"Going to retry POST\"), this.G = Y(p(this.Tb, this, a), Vd(this, this.ba)), this.ba++, d = !0);\n        }\n        if (d || 2 == b && Ud(this)) {\n          return;\n        }\n        this.a.debug(\"Exceeded max number of retries\");\n      }\n      this.a.debug(\"Error: HTTP request failed\");\n      switch(c) {\n        case 1:\n          Z(this, 5);\n          break;\n        case 4:\n          Z(this, 10);\n          break;\n        case 3:\n          Z(this, 6);\n          break;\n        case 7:\n          Z(this, 12);\n          break;\n        default:\n          Z(this, 2);\n      }\n    }\n  }\n};\nfunction Vd(a, b) {\n  var c = a.ic + Math.floor(Math.random() * a.Cc);\n  a.isActive() || (a.a.debug(\"Inactive channel\"), c *= 2);\n  return c * b;\n}\nf.lc = function(a) {\n  if (!(0 <= Xa(arguments, this.c))) {\n    throw Error(\"Unexpected channel state: \" + this.c);\n  }\n};\nfunction Z(a, b) {\n  a.a.info(\"Error code \" + b);\n  if (2 == b || 9 == b) {\n    var c = null;\n    a.e && (c = a.e.getNetworkTestImageUri(a));\n    var d = p(a.Fc, a);\n    c || (c = new E(\"//www.google.com/images/cleardot.gif\"), H(c));\n    vd(c.toString(), 1E4, d);\n  } else {\n    W();\n  }\n  Wd(a, b);\n}\nf.Fc = function(a) {\n  a ? (this.a.info(\"Successfully pinged google.com\"), W()) : (this.a.info(\"Failed to ping google.com\"), W(), Wd(this, 8));\n};\nfunction Wd(a, b) {\n  a.a.debug(\"HttpChannel: error - \" + b);\n  a.c = 0;\n  a.e && a.e.channelError(a, b);\n  Od(a);\n  Md(a);\n}\nfunction Od(a) {\n  a.c = 0;\n  a.g = -1;\n  if (a.e) {\n    if (0 == a.Q.length && 0 == a.t.length) {\n      a.e.channelClosed(a);\n    } else {\n      a.a.debug(\"Number of undelivered maps, pending: \" + a.Q.length + \", outgoing: \" + a.t.length);\n      var b = bb(a.Q), c = bb(a.t);\n      a.Q.length = 0;\n      a.t.length = 0;\n      a.e.channelClosed(a, b, c);\n    }\n  }\n}\nfunction xd(a, b) {\n  var c = Ad(a, null, b);\n  a.a.debug(\"GetForwardChannelUri: \" + c);\n  return c;\n}\nfunction Cd(a, b, c) {\n  b = Ad(a, a.$a() ? b : null, c);\n  a.a.debug(\"GetBackChannelUri: \" + b);\n  return b;\n}\nfunction Ad(a, b, c) {\n  var d = tb(c);\n  if (\"\" != d.ja) {\n    b && gb(d, b + \".\" + d.ja), hb(d, d.Ca);\n  } else {\n    var e = window.location, d = ub(e.protocol, b ? b + \".\" + e.hostname : e.hostname, e.port, c)\n  }\n  a.xa && D(a.xa, function(a, b) {\n    G(d, b, a);\n  });\n  G(d, \"VER\", a.ia);\n  Nd(a, d);\n  return d;\n}\nf.lb = function(a) {\n  if (a && !this.ab) {\n    throw Error(\"Can't create secondary domain capable XhrIo object.\");\n  }\n  a = new Ic;\n  a.dc = this.ab;\n  return a;\n};\nf.isActive = function() {\n  return!!this.e && this.e.isActive(this);\n};\nfunction Y(a, b) {\n  if (!fa(a)) {\n    throw Error(\"Fn must not be null and must be a function\");\n  }\n  return l.setTimeout(function() {\n    a();\n  }, b);\n}\nf.H = function() {\n  Hd.dispatchEvent(new Kd(Hd));\n};\nfunction W() {\n  Hd.dispatchEvent(new Id(Hd));\n}\nf.$a = function() {\n  return this.ab || !ed();\n};\nfunction Xd() {\n}\nf = Xd.prototype;\nf.channelHandleMultipleArrays = null;\nf.okToMakeRequest = function() {\n  return 0;\n};\nf.channelOpened = function() {\n};\nf.channelHandleArray = function() {\n};\nf.channelError = function() {\n};\nf.channelClosed = function() {\n};\nf.getAdditionalParams = function() {\n  return{};\n};\nf.getNetworkTestImageUri = function() {\n  return null;\n};\nf.isActive = function() {\n  return!0;\n};\nf.badMapError = function() {\n};\nf.correctHostPrefix = function(a) {\n  return a;\n};\nvar $, Yd;\nYd = {0:\"Ok\", 4:\"User is logging out\", 6:\"Unknown session ID\", 7:\"Stopped by server\", 8:\"General network error\", 2:\"Request failed\", 9:\"Blocked by a network administrator\", 5:\"No data from server\", 10:\"Got bad data from the server\", 11:\"Got a bad response from the server\"};\n$ = function(a, b) {\n  var c, d, e, g, h, k, u, K, v, r, Ka, w, X, cd;\n  if (!(this instanceof $)) {\n    return new $(a, b);\n  }\n  r = this;\n  a || (a = \"channel\");\n  a.match(/:\\/\\//) && a.replace(/^ws/, \"http\");\n  b || (b = {});\n  m(b || \"string\" === typeof b) && (b = {});\n  K = b.reconnectTime || 3E3;\n  c = b.extraHeaders || null;\n  d = b.extraParams || null;\n  null !== b.affinity && (d || (d = {}), b.affinityParam || (b.affinityParam = \"a\"), this.affinity = b.affinity || sa(), d[b.affinityParam] = this.affinity);\n  X = function(a) {\n    r.readyState = r.readyState = a;\n  };\n  X(this.CLOSED);\n  w = null;\n  k = null != (cd = b.prev) ? cd.Ec : void 0;\n  e = function(a, b, c, d, e) {\n    try {\n      return \"function\" === typeof r[a] ? r[a](c, d, e) : void 0;\n    } catch (g) {\n      throw \"undefined\" !== typeof console && null !== console && console.error(g.stack), g;\n    }\n  };\n  g = new Xd;\n  g.channelOpened = function() {\n    k = w;\n    X($.OPEN);\n    return e(\"onopen\");\n  };\n  h = null;\n  g.channelError = function(a, b) {\n    var c;\n    c = Yd[b];\n    h = b;\n    r.readyState !== $.CLOSED && X($.hb);\n    return e(\"onerror\", 0, c, b);\n  };\n  v = null;\n  g.channelClosed = function(a, c, d) {\n    var g;\n    if (r.readyState !== $.CLOSED) {\n      return w = null, a = h ? Yd[h] : \"Closed\", X($.CLOSED), b.reconnect && 7 !== h && 0 !== h && (g = 6 === h ? 0 : K, clearTimeout(v), v = setTimeout(u, g)), e(\"onclose\", 0, a, c, d), h = null;\n    }\n  };\n  g.channelHandleArray = function(a, b) {\n    return e(\"onmessage\", 0, {type:\"message\", data:b});\n  };\n  u = function() {\n    if (w) {\n      throw Error(\"Reconnect() called from invalid state\");\n    }\n    X($.CONNECTING);\n    e(\"onconnecting\");\n    clearTimeout(v);\n    r.Ec = w = new Ed(b.appVersion, null != k ? k.Gb : void 0);\n    b.crossDomainXhr && (w.ab = !0);\n    w.e = g;\n    c && w.S(c);\n    h = null;\n    if (b.failFast) {\n      var t = w;\n      t.Ka = !0;\n      t.a.info(\"setFailFast: true\");\n      (t.p || t.G) && t.ba > (t.Ka ? 0 : t.pb) && (t.a.info(\"Retry count \" + t.ba + \" > new maxRetries \" + (t.Ka ? 0 : t.pb) + \". Fail immediately!\"), t.p ? (t.p.cancel(), t.la(t.p)) : (l.clearTimeout(t.G), t.G = null, Z(t, 2)));\n    }\n    return w.kb(\"\" + a + \"/test\", \"\" + a + \"/bind\", d, null != k ? k.Y : void 0, null != k ? k.za : void 0);\n  };\n  this.open = function() {\n    if (r.readyState !== r.CLOSED) {\n      throw Error(\"Already open\");\n    }\n    return u();\n  };\n  this.close = function() {\n    clearTimeout(v);\n    h = 0;\n    if (r.readyState !== $.CLOSED) {\n      return X($.hb), w.disconnect();\n    }\n  };\n  this.sendMap = Ka = function(a) {\n    var b;\n    if ((b = r.readyState) !== $.hb && b !== $.CLOSED) {\n      b = w;\n      if (0 == b.c) {\n        throw Error(\"Invalid operation: sending map when state is closed\");\n      }\n      1E3 == b.t.length && b.a.J(\"Already have 1000 queued maps upon queueing \" + yb(a));\n      b.t.push(new Gd(b.sc++, a));\n      2 != b.c && 3 != b.c || Qd(b);\n    }\n  };\n  this.send = function(a) {\n    return \"string\" === typeof a ? Ka({_S:a}) : Ka({JSON:yb(a)});\n  };\n  u();\n};\n$.prototype.canSendWhileConnecting = $.canSendWhileConnecting = !0;\n$.prototype.canSendJSON = $.canSendJSON = !0;\n$.prototype.CONNECTING = $.CONNECTING = $.CONNECTING = 0;\n$.prototype.OPEN = $.OPEN = $.OPEN = 1;\n$.prototype.CLOSING = $.CLOSING = $.hb = 2;\n$.prototype.CLOSED = $.CLOSED = $.CLOSED = 3;\n(\"undefined\" !== typeof exports && null !== exports ? exports : window).BCSocket = $;\n\n})();\n",
    "module.exports = Socket;\n\nvar BCSocket = require('browserchannel/dist/bcsocket-uncompressed').BCSocket;\n\nfunction Socket(options) {\n  this._options = options;\n  this._messageQueue = [];\n  this._connectedOnce = false;\n  this._attemptNum = 0;\n  this._url = getWebSocketURL(options);\n\n  if (supportWebSockets() && !options.browserChannelOnly) {\n    this._createWebSocket();\n  } else {\n    this._createBrowserChannel();\n  }\n}\n\nSocket.prototype._createWebSocket = function() {\n\n  this._type = 'websocket';\n  this._socket = new WebSocket(this._url);\n\n  this.open = this._createWebSocket.bind(this);\n  this._syncState();\n\n  this._socket.onmessage = this._ws_onmessage.bind(this);\n  this._socket.onopen = this._ws_onopen.bind(this);\n  this._socket.onclose = this._ws_onclose.bind(this);\n\n};\n\nSocket.prototype._createBrowserChannel = function() {\n  this._type = 'browserchannel';\n  this._socket = BCSocket(this._options.base, this._options);\n\n  this.open = this._createBrowserChannel.bind(this);\n  this._syncState();\n\n  this._socket.onmessage = this._bc_onmessage.bind(this);\n  this._socket.onopen = this._bc_onopen.bind(this);\n  this._socket.onclose = this._bc_onclose.bind(this);\n};\n\nSocket.prototype._ws_onmessage = function(message) {\n  this._syncState();\n  message.data = JSON.parse(message.data);\n  this.onmessage && this.onmessage(message);\n};\n\nSocket.prototype._ws_onopen = function(event) {\n  this._attemptNum = 0;\n  this._connectedOnce = true;\n\n  this._syncState();\n  this._flushQueue();\n\n  this.onopen && this.onopen(event);\n};\n\nSocket.prototype._ws_onclose = function(event) {\n  this._syncState();\n  console.log('WebSocket: connection is broken', event);\n\n  this.onclose && this.onclose(event);\n\n  if (!this._connectedOnce) {\n    return this._createBrowserChannel();\n  }\n\n  var socket = this;\n\n  if (this._options.reconnect && !event.wasClean) {\n    setTimeout(function(){\n      if (socket.readyState === socket.CLOSED) {\n        socket._createWebSocket();\n      }\n    }, this._getTimeout());\n  }\n  this._attemptNum++;\n};\n\nSocket.prototype._getTimeout = function(){\n  var base = this._options.timeout;\n  var increment = this._options.timeoutIncrement * this._attemptNum;\n  var maxTimeout = base + increment;\n  return getRandom(maxTimeout / 3, maxTimeout);\n};\n\nSocket.prototype._bc_onmessage = function(data) {\n  this._syncState();\n  this.onmessage && this.onmessage(data);\n};\n\nSocket.prototype._bc_onopen = function(event) {\n  this._syncState();\n  this.onopen && this.onopen(event);\n};\n\nSocket.prototype._bc_onclose = function(event) {\n  this._syncState();\n  this.onclose && this.onclose(event);\n};\n\nSocket.prototype._flushQueue = function(){\n  while (this._messageQueue.length !== 0) {\n    var data = this._messageQueue.shift();\n    this._send(data);\n  }\n};\n\nSocket.prototype._send = function(data){\n  if (this._type === 'websocket' && (typeof data !== 'string')) data = JSON.stringify(data);\n\n  this._socket.send(data);\n};\n\nSocket.prototype.send = function(data){\n  if (this._type === 'websocket') {\n    if (this._socket.readyState === WebSocket.OPEN && this._messageQueue.length === 0) {\n      this._send(data);\n    } else {\n      this._messageQueue.push(data);\n    }\n  } else {\n    this._send(data);\n  }\n};\n\nSocket.prototype.close = function(){\n  this._socket.close();\n};\n\nSocket.prototype._syncState = function(){\n  this.readyState = this._socket.readyState;\n};\n\nSocket.prototype.reconnect = function(){\n  if (this._type === 'websocket' && this.readyState === this.CLOSED){\n    this._createWebSocket();\n  }\n};\n\n// ShareJS constants\nSocket.prototype.canSendWhileConnecting = true;\nSocket.prototype.canSendJSON = true;\n\n// WebSocket constants\nSocket.prototype.CONNECTING = 0;\nSocket.prototype.OPEN = 1;\nSocket.prototype.CLOSING = 2;\nSocket.prototype.CLOSED = 3;\n\nfunction getRandom(min, max){\n  return Math.random() * (max - min) + min;\n}\n\nfunction supportWebSockets(){\n  // The condition is from Modernizr\n  // https://github.com/Modernizr/Modernizr/blob/master/feature-detects/websockets.js#L28\n  return 'WebSocket' in window && window.WebSocket.CLOSING === 2;\n}\n\nfunction getWebSocketURL(options){\n  var port;\n\n  if (window.location && window.location.port) {\n    port = \":\" + window.location.port;\n  }\n\n  var srvPort = options.srvPort;\n  var srvSecurePort = options.srvSecurePort;\n\n  var srvHost = options.srvHost || window.location.hostname;\n  var srvProtocol = options.srvProtocol || window.location.protocol;\n\n  var protocol = (srvProtocol === 'https:' ? 'wss:' : 'ws:');\n\n  if (protocol === 'ws:' && srvPort) {\n    port = \":\" + srvPort;\n  } else if (protocol === 'wss:' && srvSecurePort) {\n    port = \":\" + srvSecurePort;\n  }\n  return protocol + '//' + srvHost + (port || \"\") + options.base;\n}\n\n// Maybe need to use reconnection timing algorithm from\n// http://blog.johnryding.com/post/78544969349/how-to-reconnect-web-sockets-in-a-realtime-web-app\n",
    "var racer = require('racer');\nvar Socket = require('./socket');\nvar CLIENT_OPTIONS = JSON.parse('{\"base\":\"/channel\",\"reconnect\":true,\"browserChannelOnly\":false,\"timeout\":10000,\"timeoutIncrement\":10000}');\n\nracer.Model.prototype._createSocket = function(bundle) {\n  return new Socket(CLIENT_OPTIONS);\n};\n\n",
    "// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  if (path.length === 0) return '.';\n  var code = path.charCodeAt(0);\n  var hasRoot = code === 47 /*/*/;\n  var end = -1;\n  var matchedSlash = true;\n  for (var i = path.length - 1; i >= 1; --i) {\n    code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n      // We saw the first non-path separator\n      matchedSlash = false;\n    }\n  }\n\n  if (end === -1) return hasRoot ? '/' : '.';\n  if (hasRoot && end === 1) {\n    // return '//';\n    // Backwards-compat fix:\n    return '/';\n  }\n  return path.slice(0, end);\n};\n\nfunction basename(path) {\n  if (typeof path !== 'string') path = path + '';\n\n  var start = 0;\n  var end = -1;\n  var matchedSlash = true;\n  var i;\n\n  for (i = path.length - 1; i >= 0; --i) {\n    if (path.charCodeAt(i) === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          start = i + 1;\n          break;\n        }\n      } else if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // path component\n      matchedSlash = false;\n      end = i + 1;\n    }\n  }\n\n  if (end === -1) return '';\n  return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n  var f = basename(path);\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\nexports.extname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  var startDot = -1;\n  var startPart = 0;\n  var end = -1;\n  var matchedSlash = true;\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find\n  var preDotState = 0;\n  for (var i = path.length - 1; i >= 0; --i) {\n    var code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n    if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1)\n          startDot = i;\n        else if (preDotState !== 1)\n          preDotState = 1;\n    } else if (startDot !== -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension\n      preDotState = -1;\n    }\n  }\n\n  if (startDot === -1 || end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n    return '';\n  }\n  return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n",
    "\n/**\n * Module dependencies.\n */\n\n/**\n * toString ref.\n */\n\nvar toString = {}.toString;\n\n/**\n * Return ETag for `body`.\n *\n * @param {String|Buffer} body\n * @return {String}\n * @api private\n */\n\nexports.etag = function(body){\n  return '\"' + crc32.signed(body) + '\"';\n};\n\n/**\n * Make `locals()` bound to the given `obj`.\n *\n * This is used for `app.locals` and `res.locals`.\n *\n * @param {Object} obj\n * @return {Function}\n * @api private\n */\n\nexports.locals = function(obj){\n  function locals(obj){\n    for (var key in obj) locals[key] = obj[key];\n    return obj;\n  };\n\n  return locals;\n};\n\n/**\n * Check if `path` looks absolute.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nexports.isAbsolute = function(path){\n  if ('/' == path[0]) return true;\n  if (':' == path[1] && '\\\\' == path[2]) return true;\n};\n\n/**\n * Flatten the given `arr`.\n *\n * @param {Array} arr\n * @return {Array}\n * @api private\n */\n\nexports.flatten = function(arr, ret){\n  var ret = ret || []\n    , len = arr.length;\n  for (var i = 0; i < len; ++i) {\n    if (Array.isArray(arr[i])) {\n      exports.flatten(arr[i], ret);\n    } else {\n      ret.push(arr[i]);\n    }\n  }\n  return ret;\n};\n\n/**\n * Normalize the given `type`, for example \"html\" becomes \"text/html\".\n *\n * @param {String} type\n * @return {Object}\n * @api private\n */\n\nexports.normalizeType = function(type){\n  return ~type.indexOf('/')\n    ? acceptParams(type)\n    : { value: mime.lookup(type), params: {} };\n};\n\n/**\n * Normalize `types`, for example \"html\" becomes \"text/html\".\n *\n * @param {Array} types\n * @return {Array}\n * @api private\n */\n\nexports.normalizeTypes = function(types){\n  var ret = [];\n\n  for (var i = 0; i < types.length; ++i) {\n    ret.push(exports.normalizeType(types[i]));\n  }\n\n  return ret;\n};\n\n/**\n * Return the acceptable type in `types`, if any.\n *\n * @param {Array} types\n * @param {String} str\n * @return {String}\n * @api private\n */\n\nexports.acceptsArray = function(types, str){\n  // accept anything when Accept is not present\n  if (!str) return types[0];\n\n  // parse\n  var accepted = exports.parseAccept(str)\n    , normalized = exports.normalizeTypes(types)\n    , len = accepted.length;\n\n  for (var i = 0; i < len; ++i) {\n    for (var j = 0, jlen = types.length; j < jlen; ++j) {\n      if (exports.accept(normalized[j], accepted[i])) {\n        return types[j];\n      }\n    }\n  }\n};\n\n/**\n * Check if `type(s)` are acceptable based on\n * the given `str`.\n *\n * @param {String|Array} type(s)\n * @param {String} str\n * @return {Boolean|String}\n * @api private\n */\n\nexports.accepts = function(type, str){\n  if ('string' == typeof type) type = type.split(/ *, */);\n  return exports.acceptsArray(type, str);\n};\n\n/**\n * Check if `type` array is acceptable for `other`.\n *\n * @param {Object} type\n * @param {Object} other\n * @return {Boolean}\n * @api private\n */\n\nexports.accept = function(type, other){\n  var t = type.value.split('/');\n  return (t[0] == other.type || '*' == other.type)\n    && (t[1] == other.subtype || '*' == other.subtype)\n    && paramsEqual(type.params, other.params);\n};\n\n/**\n * Check if accept params are equal.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Boolean}\n * @api private\n */\n\nfunction paramsEqual(a, b){\n  return !Object.keys(a).some(function(k) {\n    return a[k] != b[k];\n  });\n}\n\n/**\n * Parse accept `str`, returning\n * an array objects containing\n * `.type` and `.subtype` along\n * with the values provided by\n * `parseQuality()`.\n *\n * @param {Type} name\n * @return {Type}\n * @api private\n */\n\nexports.parseAccept = function(str){\n  return exports\n    .parseParams(str)\n    .map(function(obj){\n      var parts = obj.value.split('/');\n      obj.type = parts[0];\n      obj.subtype = parts[1];\n      return obj;\n    });\n};\n\n/**\n * Parse quality `str`, returning an\n * array of objects with `.value`,\n * `.quality` and optional `.params`\n *\n * @param {String} str\n * @return {Array}\n * @api private\n */\n\nexports.parseParams = function(str){\n  return str\n    .split(/ *, */)\n    .map(acceptParams)\n    .filter(function(obj){\n      return obj.quality;\n    })\n    .sort(function(a, b){\n      if (a.quality === b.quality) {\n        return a.originalIndex - b.originalIndex;\n      } else {\n        return b.quality - a.quality;\n      }\n    });\n};\n\n/**\n * Parse accept params `str` returning an\n * object with `.value`, `.quality` and `.params`.\n * also includes `.originalIndex` for stable sorting\n *\n * @param {String} str\n * @return {Object}\n * @api private\n */\n\nfunction acceptParams(str, index) {\n  var parts = str.split(/ *; */);\n  var ret = { value: parts[0], quality: 1, params: {}, originalIndex: index };\n\n  for (var i = 1; i < parts.length; ++i) {\n    var pms = parts[i].split(/ *= */);\n    if ('q' == pms[0]) {\n      ret.quality = parseFloat(pms[1]);\n    } else {\n      ret.params[pms[0]] = pms[1];\n    }\n  }\n\n  return ret;\n}\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param  {String} html\n * @return {String}\n * @api private\n */\n\nexports.escape = function(html) {\n  return String(html)\n    .replace(/&/g, '&amp;')\n    .replace(/\"/g, '&quot;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;');\n};\n\n/**\n * Normalize the given path string,\n * returning a regular expression.\n *\n * An empty array should be passed,\n * which will contain the placeholder\n * key names. For example \"/user/:id\" will\n * then contain [\"id\"].\n *\n * @param  {String|RegExp|Array} path\n * @param  {Array} keys\n * @param  {Boolean} sensitive\n * @param  {Boolean} strict\n * @return {RegExp}\n * @api private\n */\n\nexports.pathRegexp = function(path, keys, sensitive, strict) {\n  if (toString.call(path) == '[object RegExp]') return path;\n  if (Array.isArray(path)) path = '(' + path.join('|') + ')';\n  path = path\n    .concat(strict ? '' : '/?')\n    .replace(/\\/\\(/g, '(?:/')\n    .replace(/(\\/)?(\\.)?:(\\w+)(?:(\\(.*?\\)))?(\\?)?(\\*)?/g, function(_, slash, format, key, capture, optional, star){\n      keys.push({ name: key, optional: !! optional });\n      slash = slash || '';\n      return ''\n        + (optional ? '' : slash)\n        + '(?:'\n        + (optional ? slash : '')\n        + (format || '') + (capture || (format && '([^/.]+?)' || '([^/]+?)')) + ')'\n        + (optional || '')\n        + (star ? '(/*)?' : '');\n    })\n    .replace(/([\\/.])/g, '\\\\$1')\n    .replace(/\\*/g, '(.*)');\n  return new RegExp('^' + path + '$', sensitive ? '' : 'i');\n}\n",
    "\n/**\n * Module dependencies.\n */\n\nvar utils = require('../utils');\n\n/**\n * Expose `Route`.\n */\n\nmodule.exports = Route;\n\n/**\n * Initialize `Route` with the given HTTP `method`, `path`,\n * and an array of `callbacks` and `options`.\n *\n * Options:\n *\n *   - `sensitive`    enable case-sensitive routes\n *   - `strict`       enable strict matching for trailing slashes\n *\n * @param {String} method\n * @param {String} path\n * @param {Array} callbacks\n * @param {Object} options.\n * @api private\n */\n\nfunction Route(method, path, callbacks, options) {\n  options = options || {};\n  this.path = path;\n  this.method = method;\n  this.callbacks = callbacks;\n  this.regexp = utils.pathRegexp(path\n    , this.keys = []\n    , options.sensitive\n    , options.strict);\n}\n\n/**\n * Check if this route matches `path`, if so\n * populate `.params`.\n *\n * @param {String} path\n * @return {Boolean}\n * @api private\n */\n\nRoute.prototype.match = function(path){\n  var keys = this.keys\n    , params = this.params = []\n    , m = this.regexp.exec(path);\n\n  if (!m) return false;\n\n  for (var i = 1, len = m.length; i < len; ++i) {\n    var key = keys[i - 1];\n\n    var val = 'string' == typeof m[i]\n      ? decodeURIComponent(m[i])\n      : m[i];\n\n    if (key) {\n      params[key.name] = val;\n    } else {\n      params.push(val);\n    }\n  }\n\n  return true;\n};\n",
    "'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n",
    "'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n",
    "'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n",
    "'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n",
    "'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n",
    "'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n",
    "'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n",
    "'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n",
    "'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n",
    "'use strict';\n\nvar test = {\n\t__proto__: null,\n\tfoo: {}\n};\n\nvar $Object = Object;\n\n/** @type {import('.')} */\nmodule.exports = function hasProto() {\n\t// @ts-expect-error: TS errors on an inherited property for some reason\n\treturn { __proto__: test }.foo === test.foo\n\t\t&& !(test instanceof $Object);\n};\n",
    "'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n    var arr = [];\n\n    for (var i = 0; i < a.length; i += 1) {\n        arr[i] = a[i];\n    }\n    for (var j = 0; j < b.length; j += 1) {\n        arr[j + a.length] = b[j];\n    }\n\n    return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n    var arr = [];\n    for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n        arr[j] = arrLike[i];\n    }\n    return arr;\n};\n\nvar joiny = function (arr, joiner) {\n    var str = '';\n    for (var i = 0; i < arr.length; i += 1) {\n        str += arr[i];\n        if (i + 1 < arr.length) {\n            str += joiner;\n        }\n    }\n    return str;\n};\n\nmodule.exports = function bind(that) {\n    var target = this;\n    if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n        throw new TypeError(ERROR_MESSAGE + target);\n    }\n    var args = slicy(arguments, 1);\n\n    var bound;\n    var binder = function () {\n        if (this instanceof bound) {\n            var result = target.apply(\n                this,\n                concatty(args, arguments)\n            );\n            if (Object(result) === result) {\n                return result;\n            }\n            return this;\n        }\n        return target.apply(\n            that,\n            concatty(args, arguments)\n        );\n\n    };\n\n    var boundLength = max(0, target.length - args.length);\n    var boundArgs = [];\n    for (var i = 0; i < boundLength; i++) {\n        boundArgs[i] = '$' + i;\n    }\n\n    bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n    if (target.prototype) {\n        var Empty = function Empty() {};\n        Empty.prototype = target.prototype;\n        bound.prototype = new Empty();\n        Empty.prototype = null;\n    }\n\n    return bound;\n};\n",
    "'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n",
    "'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n",
    "'use strict';\n\nvar undefined;\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n",
    "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\n/** @type {import('.')} */\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n",
    "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n",
    "'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor<unknown>} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n",
    "'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n",
    "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters<define>[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n",
    "'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\nvar setFunctionLength = require('set-function-length');\n\nvar $TypeError = require('es-errors/type');\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $defineProperty = require('es-define-property');\nvar $max = GetIntrinsic('%Math.max%');\n\nmodule.exports = function callBind(originalFunction) {\n\tif (typeof originalFunction !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\tvar func = $reflectApply(bind, $call, arguments);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + $max(0, originalFunction.length - (arguments.length - 1)),\n\t\ttrue\n\t);\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n",
    "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n",
    "var _$empty_3 = {};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXJlc29sdmUvZW1wdHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7In0=",
    "var hasMap = typeof Map === 'function' && Map.prototype;\nvar mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;\nvar mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;\nvar mapForEach = hasMap && Map.prototype.forEach;\nvar hasSet = typeof Set === 'function' && Set.prototype;\nvar setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;\nvar setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;\nvar setForEach = hasSet && Set.prototype.forEach;\nvar hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype;\nvar weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;\nvar hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype;\nvar weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;\nvar hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype;\nvar weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;\nvar booleanValueOf = Boolean.prototype.valueOf;\nvar objectToString = Object.prototype.toString;\nvar functionToString = Function.prototype.toString;\nvar $match = String.prototype.match;\nvar $slice = String.prototype.slice;\nvar $replace = String.prototype.replace;\nvar $toUpperCase = String.prototype.toUpperCase;\nvar $toLowerCase = String.prototype.toLowerCase;\nvar $test = RegExp.prototype.test;\nvar $concat = Array.prototype.concat;\nvar $join = Array.prototype.join;\nvar $arrSlice = Array.prototype.slice;\nvar $floor = Math.floor;\nvar bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;\nvar gOPS = Object.getOwnPropertySymbols;\nvar symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null;\nvar hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object';\n// ie, `has-tostringtag/shams\nvar toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol')\n    ? Symbol.toStringTag\n    : null;\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || (\n    [].__proto__ === Array.prototype // eslint-disable-line no-proto\n        ? function (O) {\n            return O.__proto__; // eslint-disable-line no-proto\n        }\n        : null\n);\n\nfunction addNumericSeparator(num, str) {\n    if (\n        num === Infinity\n        || num === -Infinity\n        || num !== num\n        || (num && num > -1000 && num < 1000)\n        || $test.call(/e/, str)\n    ) {\n        return str;\n    }\n    var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;\n    if (typeof num === 'number') {\n        var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num)\n        if (int !== num) {\n            var intStr = String(int);\n            var dec = $slice.call(str, intStr.length + 1);\n            return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, '');\n        }\n    }\n    return $replace.call(str, sepRegex, '$&_');\n}\n\nvar utilInspect = require('./util.inspect');\nvar inspectCustom = utilInspect.custom;\nvar inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;\n\nmodule.exports = function inspect_(obj, options, depth, seen) {\n    var opts = options || {};\n\n    if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {\n        throw new TypeError('option \"quoteStyle\" must be \"single\" or \"double\"');\n    }\n    if (\n        has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number'\n            ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity\n            : opts.maxStringLength !== null\n        )\n    ) {\n        throw new TypeError('option \"maxStringLength\", if provided, must be a positive integer, Infinity, or `null`');\n    }\n    var customInspect = has(opts, 'customInspect') ? opts.customInspect : true;\n    if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') {\n        throw new TypeError('option \"customInspect\", if provided, must be `true`, `false`, or `\\'symbol\\'`');\n    }\n\n    if (\n        has(opts, 'indent')\n        && opts.indent !== null\n        && opts.indent !== '\\t'\n        && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)\n    ) {\n        throw new TypeError('option \"indent\" must be \"\\\\t\", an integer > 0, or `null`');\n    }\n    if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') {\n        throw new TypeError('option \"numericSeparator\", if provided, must be `true` or `false`');\n    }\n    var numericSeparator = opts.numericSeparator;\n\n    if (typeof obj === 'undefined') {\n        return 'undefined';\n    }\n    if (obj === null) {\n        return 'null';\n    }\n    if (typeof obj === 'boolean') {\n        return obj ? 'true' : 'false';\n    }\n\n    if (typeof obj === 'string') {\n        return inspectString(obj, opts);\n    }\n    if (typeof obj === 'number') {\n        if (obj === 0) {\n            return Infinity / obj > 0 ? '0' : '-0';\n        }\n        var str = String(obj);\n        return numericSeparator ? addNumericSeparator(obj, str) : str;\n    }\n    if (typeof obj === 'bigint') {\n        var bigIntStr = String(obj) + 'n';\n        return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;\n    }\n\n    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;\n    if (typeof depth === 'undefined') { depth = 0; }\n    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {\n        return isArray(obj) ? '[Array]' : '[Object]';\n    }\n\n    var indent = getIndent(opts, depth);\n\n    if (typeof seen === 'undefined') {\n        seen = [];\n    } else if (indexOf(seen, obj) >= 0) {\n        return '[Circular]';\n    }\n\n    function inspect(value, from, noIndent) {\n        if (from) {\n            seen = $arrSlice.call(seen);\n            seen.push(from);\n        }\n        if (noIndent) {\n            var newOpts = {\n                depth: opts.depth\n            };\n            if (has(opts, 'quoteStyle')) {\n                newOpts.quoteStyle = opts.quoteStyle;\n            }\n            return inspect_(value, newOpts, depth + 1, seen);\n        }\n        return inspect_(value, opts, depth + 1, seen);\n    }\n\n    if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable\n        var name = nameOf(obj);\n        var keys = arrObjKeys(obj, inspect);\n        return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : '');\n    }\n    if (isSymbol(obj)) {\n        var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\\(.*\\))_[^)]*$/, '$1') : symToString.call(obj);\n        return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString;\n    }\n    if (isElement(obj)) {\n        var s = '<' + $toLowerCase.call(String(obj.nodeName));\n        var attrs = obj.attributes || [];\n        for (var i = 0; i < attrs.length; i++) {\n            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);\n        }\n        s += '>';\n        if (obj.childNodes && obj.childNodes.length) { s += '...'; }\n        s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>';\n        return s;\n    }\n    if (isArray(obj)) {\n        if (obj.length === 0) { return '[]'; }\n        var xs = arrObjKeys(obj, inspect);\n        if (indent && !singleLineValues(xs)) {\n            return '[' + indentedJoin(xs, indent) + ']';\n        }\n        return '[ ' + $join.call(xs, ', ') + ' ]';\n    }\n    if (isError(obj)) {\n        var parts = arrObjKeys(obj, inspect);\n        if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) {\n            return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }';\n        }\n        if (parts.length === 0) { return '[' + String(obj) + ']'; }\n        return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }';\n    }\n    if (typeof obj === 'object' && customInspect) {\n        if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) {\n            return utilInspect(obj, { depth: maxDepth - depth });\n        } else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') {\n            return obj.inspect();\n        }\n    }\n    if (isMap(obj)) {\n        var mapParts = [];\n        if (mapForEach) {\n            mapForEach.call(obj, function (value, key) {\n                mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj));\n            });\n        }\n        return collectionOf('Map', mapSize.call(obj), mapParts, indent);\n    }\n    if (isSet(obj)) {\n        var setParts = [];\n        if (setForEach) {\n            setForEach.call(obj, function (value) {\n                setParts.push(inspect(value, obj));\n            });\n        }\n        return collectionOf('Set', setSize.call(obj), setParts, indent);\n    }\n    if (isWeakMap(obj)) {\n        return weakCollectionOf('WeakMap');\n    }\n    if (isWeakSet(obj)) {\n        return weakCollectionOf('WeakSet');\n    }\n    if (isWeakRef(obj)) {\n        return weakCollectionOf('WeakRef');\n    }\n    if (isNumber(obj)) {\n        return markBoxed(inspect(Number(obj)));\n    }\n    if (isBigInt(obj)) {\n        return markBoxed(inspect(bigIntValueOf.call(obj)));\n    }\n    if (isBoolean(obj)) {\n        return markBoxed(booleanValueOf.call(obj));\n    }\n    if (isString(obj)) {\n        return markBoxed(inspect(String(obj)));\n    }\n    // note: in IE 8, sometimes `global !== window` but both are the prototypes of each other\n    /* eslint-env browser */\n    if (typeof window !== 'undefined' && obj === window) {\n        return '{ [object Window] }';\n    }\n    if (obj === global) {\n        return '{ [object globalThis] }';\n    }\n    if (!isDate(obj) && !isRegExp(obj)) {\n        var ys = arrObjKeys(obj, inspect);\n        var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;\n        var protoTag = obj instanceof Object ? '' : 'null prototype';\n        var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : '';\n        var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : '';\n        var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : '');\n        if (ys.length === 0) { return tag + '{}'; }\n        if (indent) {\n            return tag + '{' + indentedJoin(ys, indent) + '}';\n        }\n        return tag + '{ ' + $join.call(ys, ', ') + ' }';\n    }\n    return String(obj);\n};\n\nfunction wrapQuotes(s, defaultStyle, opts) {\n    var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '\"' : \"'\";\n    return quoteChar + s + quoteChar;\n}\n\nfunction quote(s) {\n    return $replace.call(String(s), /\"/g, '&quot;');\n}\n\nfunction isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\nfunction isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); }\n\n// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives\nfunction isSymbol(obj) {\n    if (hasShammedSymbols) {\n        return obj && typeof obj === 'object' && obj instanceof Symbol;\n    }\n    if (typeof obj === 'symbol') {\n        return true;\n    }\n    if (!obj || typeof obj !== 'object' || !symToString) {\n        return false;\n    }\n    try {\n        symToString.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isBigInt(obj) {\n    if (!obj || typeof obj !== 'object' || !bigIntValueOf) {\n        return false;\n    }\n    try {\n        bigIntValueOf.call(obj);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nvar hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };\nfunction has(obj, key) {\n    return hasOwn.call(obj, key);\n}\n\nfunction toStr(obj) {\n    return objectToString.call(obj);\n}\n\nfunction nameOf(f) {\n    if (f.name) { return f.name; }\n    var m = $match.call(functionToString.call(f), /^function\\s*([\\w$]+)/);\n    if (m) { return m[1]; }\n    return null;\n}\n\nfunction indexOf(xs, x) {\n    if (xs.indexOf) { return xs.indexOf(x); }\n    for (var i = 0, l = xs.length; i < l; i++) {\n        if (xs[i] === x) { return i; }\n    }\n    return -1;\n}\n\nfunction isMap(x) {\n    if (!mapSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        mapSize.call(x);\n        try {\n            setSize.call(x);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof Map; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakMap(x) {\n    if (!weakMapHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakMapHas.call(x, weakMapHas);\n        try {\n            weakSetHas.call(x, weakSetHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakMap; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakRef(x) {\n    if (!weakRefDeref || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakRefDeref.call(x);\n        return true;\n    } catch (e) {}\n    return false;\n}\n\nfunction isSet(x) {\n    if (!setSize || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        setSize.call(x);\n        try {\n            mapSize.call(x);\n        } catch (m) {\n            return true;\n        }\n        return x instanceof Set; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isWeakSet(x) {\n    if (!weakSetHas || !x || typeof x !== 'object') {\n        return false;\n    }\n    try {\n        weakSetHas.call(x, weakSetHas);\n        try {\n            weakMapHas.call(x, weakMapHas);\n        } catch (s) {\n            return true;\n        }\n        return x instanceof WeakSet; // core-js workaround, pre-v2.5.0\n    } catch (e) {}\n    return false;\n}\n\nfunction isElement(x) {\n    if (!x || typeof x !== 'object') { return false; }\n    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {\n        return true;\n    }\n    return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function';\n}\n\nfunction inspectString(str, opts) {\n    if (str.length > opts.maxStringLength) {\n        var remaining = str.length - opts.maxStringLength;\n        var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : '');\n        return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;\n    }\n    // eslint-disable-next-line no-control-regex\n    var s = $replace.call($replace.call(str, /(['\\\\])/g, '\\\\$1'), /[\\x00-\\x1f]/g, lowbyte);\n    return wrapQuotes(s, 'single', opts);\n}\n\nfunction lowbyte(c) {\n    var n = c.charCodeAt(0);\n    var x = {\n        8: 'b',\n        9: 't',\n        10: 'n',\n        12: 'f',\n        13: 'r'\n    }[n];\n    if (x) { return '\\\\' + x; }\n    return '\\\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16));\n}\n\nfunction markBoxed(str) {\n    return 'Object(' + str + ')';\n}\n\nfunction weakCollectionOf(type) {\n    return type + ' { ? }';\n}\n\nfunction collectionOf(type, size, entries, indent) {\n    var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', ');\n    return type + ' (' + size + ') {' + joinedEntries + '}';\n}\n\nfunction singleLineValues(xs) {\n    for (var i = 0; i < xs.length; i++) {\n        if (indexOf(xs[i], '\\n') >= 0) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction getIndent(opts, depth) {\n    var baseIndent;\n    if (opts.indent === '\\t') {\n        baseIndent = '\\t';\n    } else if (typeof opts.indent === 'number' && opts.indent > 0) {\n        baseIndent = $join.call(Array(opts.indent + 1), ' ');\n    } else {\n        return null;\n    }\n    return {\n        base: baseIndent,\n        prev: $join.call(Array(depth + 1), baseIndent)\n    };\n}\n\nfunction indentedJoin(xs, indent) {\n    if (xs.length === 0) { return ''; }\n    var lineJoiner = '\\n' + indent.prev + indent.base;\n    return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\\n' + indent.prev;\n}\n\nfunction arrObjKeys(obj, inspect) {\n    var isArr = isArray(obj);\n    var xs = [];\n    if (isArr) {\n        xs.length = obj.length;\n        for (var i = 0; i < obj.length; i++) {\n            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';\n        }\n    }\n    var syms = typeof gOPS === 'function' ? gOPS(obj) : [];\n    var symMap;\n    if (hasShammedSymbols) {\n        symMap = {};\n        for (var k = 0; k < syms.length; k++) {\n            symMap['$' + syms[k]] = syms[k];\n        }\n    }\n\n    for (var key in obj) { // eslint-disable-line no-restricted-syntax\n        if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue\n        if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) {\n            // this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section\n            continue; // eslint-disable-line no-restricted-syntax, no-continue\n        } else if ($test.call(/[^\\w$]/, key)) {\n            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));\n        } else {\n            xs.push(key + ': ' + inspect(obj[key], obj));\n        }\n    }\n    if (typeof gOPS === 'function') {\n        for (var j = 0; j < syms.length; j++) {\n            if (isEnumerable.call(obj, syms[j])) {\n                xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj));\n            }\n        }\n    }\n    return xs;\n}\n",
    "'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar callBound = require('call-bind/callBound');\nvar inspect = require('object-inspect');\n\nvar $TypeError = require('es-errors/type');\nvar $WeakMap = GetIntrinsic('%WeakMap%', true);\nvar $Map = GetIntrinsic('%Map%', true);\n\nvar $weakMapGet = callBound('WeakMap.prototype.get', true);\nvar $weakMapSet = callBound('WeakMap.prototype.set', true);\nvar $weakMapHas = callBound('WeakMap.prototype.has', true);\nvar $mapGet = callBound('Map.prototype.get', true);\nvar $mapSet = callBound('Map.prototype.set', true);\nvar $mapHas = callBound('Map.prototype.has', true);\n\n/*\n* This function traverses the list returning the node corresponding to the given key.\n*\n* That node is also moved to the head of the list, so that if it's accessed again we don't need to traverse the whole list. By doing so, all the recently used nodes can be accessed relatively quickly.\n*/\n/** @type {import('.').listGetNode} */\nvar listGetNode = function (list, key) { // eslint-disable-line consistent-return\n\t/** @type {typeof list | NonNullable<(typeof list)['next']>} */\n\tvar prev = list;\n\t/** @type {(typeof list)['next']} */\n\tvar curr;\n\tfor (; (curr = prev.next) !== null; prev = curr) {\n\t\tif (curr.key === key) {\n\t\t\tprev.next = curr.next;\n\t\t\t// eslint-disable-next-line no-extra-parens\n\t\t\tcurr.next = /** @type {NonNullable<typeof list.next>} */ (list.next);\n\t\t\tlist.next = curr; // eslint-disable-line no-param-reassign\n\t\t\treturn curr;\n\t\t}\n\t}\n};\n\n/** @type {import('.').listGet} */\nvar listGet = function (objects, key) {\n\tvar node = listGetNode(objects, key);\n\treturn node && node.value;\n};\n/** @type {import('.').listSet} */\nvar listSet = function (objects, key, value) {\n\tvar node = listGetNode(objects, key);\n\tif (node) {\n\t\tnode.value = value;\n\t} else {\n\t\t// Prepend the new node to the beginning of the list\n\t\tobjects.next = /** @type {import('.').ListNode<typeof value>} */ ({ // eslint-disable-line no-param-reassign, no-extra-parens\n\t\t\tkey: key,\n\t\t\tnext: objects.next,\n\t\t\tvalue: value\n\t\t});\n\t}\n};\n/** @type {import('.').listHas} */\nvar listHas = function (objects, key) {\n\treturn !!listGetNode(objects, key);\n};\n\n/** @type {import('.')} */\nmodule.exports = function getSideChannel() {\n\t/** @type {WeakMap<object, unknown>} */ var $wm;\n\t/** @type {Map<object, unknown>} */ var $m;\n\t/** @type {import('.').RootNode<unknown>} */ var $o;\n\n\t/** @type {import('.').Channel} */\n\tvar channel = {\n\t\tassert: function (key) {\n\t\t\tif (!channel.has(key)) {\n\t\t\t\tthrow new $TypeError('Side channel does not contain ' + inspect(key));\n\t\t\t}\n\t\t},\n\t\tget: function (key) { // eslint-disable-line consistent-return\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapGet($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapGet($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listGet($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\thas: function (key) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif ($wm) {\n\t\t\t\t\treturn $weakMapHas($wm, key);\n\t\t\t\t}\n\t\t\t} else if ($Map) {\n\t\t\t\tif ($m) {\n\t\t\t\t\treturn $mapHas($m, key);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ($o) { // eslint-disable-line no-lonely-if\n\t\t\t\t\treturn listHas($o, key);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tset: function (key, value) {\n\t\t\tif ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) {\n\t\t\t\tif (!$wm) {\n\t\t\t\t\t$wm = new $WeakMap();\n\t\t\t\t}\n\t\t\t\t$weakMapSet($wm, key, value);\n\t\t\t} else if ($Map) {\n\t\t\t\tif (!$m) {\n\t\t\t\t\t$m = new $Map();\n\t\t\t\t}\n\t\t\t\t$mapSet($m, key, value);\n\t\t\t} else {\n\t\t\t\tif (!$o) {\n\t\t\t\t\t// Initialize the linked list as an empty node, so that we don't have to special-case handling of the first node: we can always refer to it as (previous node).next, instead of something like (list).head\n\t\t\t\t\t$o = { key: {}, next: null };\n\t\t\t\t}\n\t\t\t\tlistSet($o, key, value);\n\t\t\t}\n\t\t}\n\t};\n\treturn channel;\n};\n",
    "'use strict';\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nvar Format = {\n    RFC1738: 'RFC1738',\n    RFC3986: 'RFC3986'\n};\n\nmodule.exports = {\n    'default': Format.RFC3986,\n    formatters: {\n        RFC1738: function (value) {\n            return replace.call(value, percentTwenties, '+');\n        },\n        RFC3986: function (value) {\n            return String(value);\n        }\n    },\n    RFC1738: Format.RFC1738,\n    RFC3986: Format.RFC3986\n};\n",
    "'use strict';\n\nvar formats = require('./formats');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar hexTable = (function () {\n    var array = [];\n    for (var i = 0; i < 256; ++i) {\n        array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n    }\n\n    return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n    while (queue.length > 1) {\n        var item = queue.pop();\n        var obj = item.obj[item.prop];\n\n        if (isArray(obj)) {\n            var compacted = [];\n\n            for (var j = 0; j < obj.length; ++j) {\n                if (typeof obj[j] !== 'undefined') {\n                    compacted.push(obj[j]);\n                }\n            }\n\n            item.obj[item.prop] = compacted;\n        }\n    }\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n    var obj = options && options.plainObjects ? Object.create(null) : {};\n    for (var i = 0; i < source.length; ++i) {\n        if (typeof source[i] !== 'undefined') {\n            obj[i] = source[i];\n        }\n    }\n\n    return obj;\n};\n\nvar merge = function merge(target, source, options) {\n    /* eslint no-param-reassign: 0 */\n    if (!source) {\n        return target;\n    }\n\n    if (typeof source !== 'object') {\n        if (isArray(target)) {\n            target.push(source);\n        } else if (target && typeof target === 'object') {\n            if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) {\n                target[source] = true;\n            }\n        } else {\n            return [target, source];\n        }\n\n        return target;\n    }\n\n    if (!target || typeof target !== 'object') {\n        return [target].concat(source);\n    }\n\n    var mergeTarget = target;\n    if (isArray(target) && !isArray(source)) {\n        mergeTarget = arrayToObject(target, options);\n    }\n\n    if (isArray(target) && isArray(source)) {\n        source.forEach(function (item, i) {\n            if (has.call(target, i)) {\n                var targetItem = target[i];\n                if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n                    target[i] = merge(targetItem, item, options);\n                } else {\n                    target.push(item);\n                }\n            } else {\n                target[i] = item;\n            }\n        });\n        return target;\n    }\n\n    return Object.keys(source).reduce(function (acc, key) {\n        var value = source[key];\n\n        if (has.call(acc, key)) {\n            acc[key] = merge(acc[key], value, options);\n        } else {\n            acc[key] = value;\n        }\n        return acc;\n    }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n    return Object.keys(source).reduce(function (acc, key) {\n        acc[key] = source[key];\n        return acc;\n    }, target);\n};\n\nvar decode = function (str, decoder, charset) {\n    var strWithoutPlus = str.replace(/\\+/g, ' ');\n    if (charset === 'iso-8859-1') {\n        // unescape never throws, no try...catch needed:\n        return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n    }\n    // utf-8\n    try {\n        return decodeURIComponent(strWithoutPlus);\n    } catch (e) {\n        return strWithoutPlus;\n    }\n};\n\nvar limit = 1024;\n\n/* eslint operator-linebreak: [2, \"before\"] */\n\nvar encode = function encode(str, defaultEncoder, charset, kind, format) {\n    // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n    // It has been adapted here for stricter adherence to RFC 3986\n    if (str.length === 0) {\n        return str;\n    }\n\n    var string = str;\n    if (typeof str === 'symbol') {\n        string = Symbol.prototype.toString.call(str);\n    } else if (typeof str !== 'string') {\n        string = String(str);\n    }\n\n    if (charset === 'iso-8859-1') {\n        return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n            return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n        });\n    }\n\n    var out = '';\n    for (var j = 0; j < string.length; j += limit) {\n        var segment = string.length >= limit ? string.slice(j, j + limit) : string;\n        var arr = [];\n\n        for (var i = 0; i < segment.length; ++i) {\n            var c = segment.charCodeAt(i);\n            if (\n                c === 0x2D // -\n                || c === 0x2E // .\n                || c === 0x5F // _\n                || c === 0x7E // ~\n                || (c >= 0x30 && c <= 0x39) // 0-9\n                || (c >= 0x41 && c <= 0x5A) // a-z\n                || (c >= 0x61 && c <= 0x7A) // A-Z\n                || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n            ) {\n                arr[arr.length] = segment.charAt(i);\n                continue;\n            }\n\n            if (c < 0x80) {\n                arr[arr.length] = hexTable[c];\n                continue;\n            }\n\n            if (c < 0x800) {\n                arr[arr.length] = hexTable[0xC0 | (c >> 6)]\n                    + hexTable[0x80 | (c & 0x3F)];\n                continue;\n            }\n\n            if (c < 0xD800 || c >= 0xE000) {\n                arr[arr.length] = hexTable[0xE0 | (c >> 12)]\n                    + hexTable[0x80 | ((c >> 6) & 0x3F)]\n                    + hexTable[0x80 | (c & 0x3F)];\n                continue;\n            }\n\n            i += 1;\n            c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF));\n\n            arr[arr.length] = hexTable[0xF0 | (c >> 18)]\n                + hexTable[0x80 | ((c >> 12) & 0x3F)]\n                + hexTable[0x80 | ((c >> 6) & 0x3F)]\n                + hexTable[0x80 | (c & 0x3F)];\n        }\n\n        out += arr.join('');\n    }\n\n    return out;\n};\n\nvar compact = function compact(value) {\n    var queue = [{ obj: { o: value }, prop: 'o' }];\n    var refs = [];\n\n    for (var i = 0; i < queue.length; ++i) {\n        var item = queue[i];\n        var obj = item.obj[item.prop];\n\n        var keys = Object.keys(obj);\n        for (var j = 0; j < keys.length; ++j) {\n            var key = keys[j];\n            var val = obj[key];\n            if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n                queue.push({ obj: obj, prop: key });\n                refs.push(val);\n            }\n        }\n    }\n\n    compactQueue(queue);\n\n    return value;\n};\n\nvar isRegExp = function isRegExp(obj) {\n    return Object.prototype.toString.call(obj) === '[object RegExp]';\n};\n\nvar isBuffer = function isBuffer(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return false;\n    }\n\n    return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nvar combine = function combine(a, b) {\n    return [].concat(a, b);\n};\n\nvar maybeMap = function maybeMap(val, fn) {\n    if (isArray(val)) {\n        var mapped = [];\n        for (var i = 0; i < val.length; i += 1) {\n            mapped.push(fn(val[i]));\n        }\n        return mapped;\n    }\n    return fn(val);\n};\n\nmodule.exports = {\n    arrayToObject: arrayToObject,\n    assign: assign,\n    combine: combine,\n    compact: compact,\n    decode: decode,\n    encode: encode,\n    isBuffer: isBuffer,\n    isRegExp: isRegExp,\n    maybeMap: maybeMap,\n    merge: merge\n};\n",
    "'use strict';\n\nvar getSideChannel = require('side-channel');\nvar utils = require('./utils');\nvar formats = require('./formats');\nvar has = Object.prototype.hasOwnProperty;\n\nvar arrayPrefixGenerators = {\n    brackets: function brackets(prefix) {\n        return prefix + '[]';\n    },\n    comma: 'comma',\n    indices: function indices(prefix, key) {\n        return prefix + '[' + key + ']';\n    },\n    repeat: function repeat(prefix) {\n        return prefix;\n    }\n};\n\nvar isArray = Array.isArray;\nvar push = Array.prototype.push;\nvar pushToArray = function (arr, valueOrArray) {\n    push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]);\n};\n\nvar toISO = Date.prototype.toISOString;\n\nvar defaultFormat = formats['default'];\nvar defaults = {\n    addQueryPrefix: false,\n    allowDots: false,\n    allowEmptyArrays: false,\n    arrayFormat: 'indices',\n    charset: 'utf-8',\n    charsetSentinel: false,\n    delimiter: '&',\n    encode: true,\n    encodeDotInKeys: false,\n    encoder: utils.encode,\n    encodeValuesOnly: false,\n    format: defaultFormat,\n    formatter: formats.formatters[defaultFormat],\n    // deprecated\n    indices: false,\n    serializeDate: function serializeDate(date) {\n        return toISO.call(date);\n    },\n    skipNulls: false,\n    strictNullHandling: false\n};\n\nvar isNonNullishPrimitive = function isNonNullishPrimitive(v) {\n    return typeof v === 'string'\n        || typeof v === 'number'\n        || typeof v === 'boolean'\n        || typeof v === 'symbol'\n        || typeof v === 'bigint';\n};\n\nvar sentinel = {};\n\nvar stringify = function stringify(\n    object,\n    prefix,\n    generateArrayPrefix,\n    commaRoundTrip,\n    allowEmptyArrays,\n    strictNullHandling,\n    skipNulls,\n    encodeDotInKeys,\n    encoder,\n    filter,\n    sort,\n    allowDots,\n    serializeDate,\n    format,\n    formatter,\n    encodeValuesOnly,\n    charset,\n    sideChannel\n) {\n    var obj = object;\n\n    var tmpSc = sideChannel;\n    var step = 0;\n    var findFlag = false;\n    while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) {\n        // Where object last appeared in the ref tree\n        var pos = tmpSc.get(object);\n        step += 1;\n        if (typeof pos !== 'undefined') {\n            if (pos === step) {\n                throw new RangeError('Cyclic object value');\n            } else {\n                findFlag = true; // Break while\n            }\n        }\n        if (typeof tmpSc.get(sentinel) === 'undefined') {\n            step = 0;\n        }\n    }\n\n    if (typeof filter === 'function') {\n        obj = filter(prefix, obj);\n    } else if (obj instanceof Date) {\n        obj = serializeDate(obj);\n    } else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        obj = utils.maybeMap(obj, function (value) {\n            if (value instanceof Date) {\n                return serializeDate(value);\n            }\n            return value;\n        });\n    }\n\n    if (obj === null) {\n        if (strictNullHandling) {\n            return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix;\n        }\n\n        obj = '';\n    }\n\n    if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {\n        if (encoder) {\n            var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format);\n            return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))];\n        }\n        return [formatter(prefix) + '=' + formatter(String(obj))];\n    }\n\n    var values = [];\n\n    if (typeof obj === 'undefined') {\n        return values;\n    }\n\n    var objKeys;\n    if (generateArrayPrefix === 'comma' && isArray(obj)) {\n        // we need to join elements in\n        if (encodeValuesOnly && encoder) {\n            obj = utils.maybeMap(obj, encoder);\n        }\n        objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n    } else if (isArray(filter)) {\n        objKeys = filter;\n    } else {\n        var keys = Object.keys(obj);\n        objKeys = sort ? keys.sort(sort) : keys;\n    }\n\n    var encodedPrefix = encodeDotInKeys ? prefix.replace(/\\./g, '%2E') : prefix;\n\n    var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encodedPrefix + '[]' : encodedPrefix;\n\n    if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n        return adjustedPrefix + '[]';\n    }\n\n    for (var j = 0; j < objKeys.length; ++j) {\n        var key = objKeys[j];\n        var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n\n        if (skipNulls && value === null) {\n            continue;\n        }\n\n        var encodedKey = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n        var keyPrefix = isArray(obj)\n            ? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix\n            : adjustedPrefix + (allowDots ? '.' + encodedKey : '[' + encodedKey + ']');\n\n        sideChannel.set(object, step);\n        var valueSideChannel = getSideChannel();\n        valueSideChannel.set(sentinel, sideChannel);\n        pushToArray(values, stringify(\n            value,\n            keyPrefix,\n            generateArrayPrefix,\n            commaRoundTrip,\n            allowEmptyArrays,\n            strictNullHandling,\n            skipNulls,\n            encodeDotInKeys,\n            generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder,\n            filter,\n            sort,\n            allowDots,\n            serializeDate,\n            format,\n            formatter,\n            encodeValuesOnly,\n            charset,\n            valueSideChannel\n        ));\n    }\n\n    return values;\n};\n\nvar normalizeStringifyOptions = function normalizeStringifyOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n    }\n\n    if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n        throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n    }\n\n    if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n        throw new TypeError('Encoder has to be a function.');\n    }\n\n    var charset = opts.charset || defaults.charset;\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n\n    var format = formats['default'];\n    if (typeof opts.format !== 'undefined') {\n        if (!has.call(formats.formatters, opts.format)) {\n            throw new TypeError('Unknown format option provided.');\n        }\n        format = opts.format;\n    }\n    var formatter = formats.formatters[format];\n\n    var filter = defaults.filter;\n    if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n        filter = opts.filter;\n    }\n\n    var arrayFormat;\n    if (opts.arrayFormat in arrayPrefixGenerators) {\n        arrayFormat = opts.arrayFormat;\n    } else if ('indices' in opts) {\n        arrayFormat = opts.indices ? 'indices' : 'repeat';\n    } else {\n        arrayFormat = defaults.arrayFormat;\n    }\n\n    if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n        throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n    }\n\n    var allowDots = typeof opts.allowDots === 'undefined' ? opts.encodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n    return {\n        addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n        allowDots: allowDots,\n        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n        arrayFormat: arrayFormat,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        commaRoundTrip: opts.commaRoundTrip,\n        delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n        encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n        encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n        encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n        encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n        filter: filter,\n        format: format,\n        formatter: formatter,\n        serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n        skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n        sort: typeof opts.sort === 'function' ? opts.sort : null,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (object, opts) {\n    var obj = object;\n    var options = normalizeStringifyOptions(opts);\n\n    var objKeys;\n    var filter;\n\n    if (typeof options.filter === 'function') {\n        filter = options.filter;\n        obj = filter('', obj);\n    } else if (isArray(options.filter)) {\n        filter = options.filter;\n        objKeys = filter;\n    }\n\n    var keys = [];\n\n    if (typeof obj !== 'object' || obj === null) {\n        return '';\n    }\n\n    var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];\n    var commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n\n    if (!objKeys) {\n        objKeys = Object.keys(obj);\n    }\n\n    if (options.sort) {\n        objKeys.sort(options.sort);\n    }\n\n    var sideChannel = getSideChannel();\n    for (var i = 0; i < objKeys.length; ++i) {\n        var key = objKeys[i];\n\n        if (options.skipNulls && obj[key] === null) {\n            continue;\n        }\n        pushToArray(keys, stringify(\n            obj[key],\n            key,\n            generateArrayPrefix,\n            commaRoundTrip,\n            options.allowEmptyArrays,\n            options.strictNullHandling,\n            options.skipNulls,\n            options.encodeDotInKeys,\n            options.encode ? options.encoder : null,\n            options.filter,\n            options.sort,\n            options.allowDots,\n            options.serializeDate,\n            options.format,\n            options.formatter,\n            options.encodeValuesOnly,\n            options.charset,\n            sideChannel\n        ));\n    }\n\n    var joined = keys.join(options.delimiter);\n    var prefix = options.addQueryPrefix === true ? '?' : '';\n\n    if (options.charsetSentinel) {\n        if (options.charset === 'iso-8859-1') {\n            // encodeURIComponent('&#10003;'), the \"numeric entity\" representation of a checkmark\n            prefix += 'utf8=%26%2310003%3B&';\n        } else {\n            // encodeURIComponent('â')\n            prefix += 'utf8=%E2%9C%93&';\n        }\n    }\n\n    return joined.length > 0 ? prefix + joined : '';\n};\n",
    "'use strict';\n\nvar utils = require('./utils');\n\nvar has = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\n\nvar defaults = {\n    allowDots: false,\n    allowEmptyArrays: false,\n    allowPrototypes: false,\n    allowSparse: false,\n    arrayLimit: 20,\n    charset: 'utf-8',\n    charsetSentinel: false,\n    comma: false,\n    decodeDotInKeys: false,\n    decoder: utils.decode,\n    delimiter: '&',\n    depth: 5,\n    duplicates: 'combine',\n    ignoreQueryPrefix: false,\n    interpretNumericEntities: false,\n    parameterLimit: 1000,\n    parseArrays: true,\n    plainObjects: false,\n    strictNullHandling: false\n};\n\nvar interpretNumericEntities = function (str) {\n    return str.replace(/&#(\\d+);/g, function ($0, numberStr) {\n        return String.fromCharCode(parseInt(numberStr, 10));\n    });\n};\n\nvar parseArrayValue = function (val, options) {\n    if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) {\n        return val.split(',');\n    }\n\n    return val;\n};\n\n// This is what browsers will submit when the â character occurs in an\n// application/x-www-form-urlencoded body and the encoding of the page containing\n// the form is iso-8859-1, or when the submitted form has an accept-charset\n// attribute of iso-8859-1. Presumably also with other charsets that do not contain\n// the â character, such as us-ascii.\nvar isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('&#10003;')\n\n// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded.\nvar charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('â')\n\nvar parseValues = function parseQueryStringValues(str, options) {\n    var obj = { __proto__: null };\n\n    var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\\?/, '') : str;\n    var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit;\n    var parts = cleanStr.split(options.delimiter, limit);\n    var skipIndex = -1; // Keep track of where the utf8 sentinel was found\n    var i;\n\n    var charset = options.charset;\n    if (options.charsetSentinel) {\n        for (i = 0; i < parts.length; ++i) {\n            if (parts[i].indexOf('utf8=') === 0) {\n                if (parts[i] === charsetSentinel) {\n                    charset = 'utf-8';\n                } else if (parts[i] === isoSentinel) {\n                    charset = 'iso-8859-1';\n                }\n                skipIndex = i;\n                i = parts.length; // The eslint settings do not allow break;\n            }\n        }\n    }\n\n    for (i = 0; i < parts.length; ++i) {\n        if (i === skipIndex) {\n            continue;\n        }\n        var part = parts[i];\n\n        var bracketEqualsPos = part.indexOf(']=');\n        var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1;\n\n        var key, val;\n        if (pos === -1) {\n            key = options.decoder(part, defaults.decoder, charset, 'key');\n            val = options.strictNullHandling ? null : '';\n        } else {\n            key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key');\n            val = utils.maybeMap(\n                parseArrayValue(part.slice(pos + 1), options),\n                function (encodedVal) {\n                    return options.decoder(encodedVal, defaults.decoder, charset, 'value');\n                }\n            );\n        }\n\n        if (val && options.interpretNumericEntities && charset === 'iso-8859-1') {\n            val = interpretNumericEntities(val);\n        }\n\n        if (part.indexOf('[]=') > -1) {\n            val = isArray(val) ? [val] : val;\n        }\n\n        var existing = has.call(obj, key);\n        if (existing && options.duplicates === 'combine') {\n            obj[key] = utils.combine(obj[key], val);\n        } else if (!existing || options.duplicates === 'last') {\n            obj[key] = val;\n        }\n    }\n\n    return obj;\n};\n\nvar parseObject = function (chain, val, options, valuesParsed) {\n    var leaf = valuesParsed ? val : parseArrayValue(val, options);\n\n    for (var i = chain.length - 1; i >= 0; --i) {\n        var obj;\n        var root = chain[i];\n\n        if (root === '[]' && options.parseArrays) {\n            obj = options.allowEmptyArrays && leaf === '' ? [] : [].concat(leaf);\n        } else {\n            obj = options.plainObjects ? Object.create(null) : {};\n            var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root;\n            var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, '.') : cleanRoot;\n            var index = parseInt(decodedRoot, 10);\n            if (!options.parseArrays && decodedRoot === '') {\n                obj = { 0: leaf };\n            } else if (\n                !isNaN(index)\n                && root !== decodedRoot\n                && String(index) === decodedRoot\n                && index >= 0\n                && (options.parseArrays && index <= options.arrayLimit)\n            ) {\n                obj = [];\n                obj[index] = leaf;\n            } else if (decodedRoot !== '__proto__') {\n                obj[decodedRoot] = leaf;\n            }\n        }\n\n        leaf = obj;\n    }\n\n    return leaf;\n};\n\nvar parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) {\n    if (!givenKey) {\n        return;\n    }\n\n    // Transform dot notation to bracket notation\n    var key = options.allowDots ? givenKey.replace(/\\.([^.[]+)/g, '[$1]') : givenKey;\n\n    // The regex chunks\n\n    var brackets = /(\\[[^[\\]]*])/;\n    var child = /(\\[[^[\\]]*])/g;\n\n    // Get the parent\n\n    var segment = options.depth > 0 && brackets.exec(key);\n    var parent = segment ? key.slice(0, segment.index) : key;\n\n    // Stash the parent if it exists\n\n    var keys = [];\n    if (parent) {\n        // If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties\n        if (!options.plainObjects && has.call(Object.prototype, parent)) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n\n        keys.push(parent);\n    }\n\n    // Loop through children appending to the array until we hit depth\n\n    var i = 0;\n    while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {\n        i += 1;\n        if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) {\n            if (!options.allowPrototypes) {\n                return;\n            }\n        }\n        keys.push(segment[1]);\n    }\n\n    // If there's a remainder, just add whatever is left\n\n    if (segment) {\n        keys.push('[' + key.slice(segment.index) + ']');\n    }\n\n    return parseObject(keys, val, options, valuesParsed);\n};\n\nvar normalizeParseOptions = function normalizeParseOptions(opts) {\n    if (!opts) {\n        return defaults;\n    }\n\n    if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n        throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n    }\n\n    if (typeof opts.decodeDotInKeys !== 'undefined' && typeof opts.decodeDotInKeys !== 'boolean') {\n        throw new TypeError('`decodeDotInKeys` option can only be `true` or `false`, when provided');\n    }\n\n    if (opts.decoder !== null && typeof opts.decoder !== 'undefined' && typeof opts.decoder !== 'function') {\n        throw new TypeError('Decoder has to be a function.');\n    }\n\n    if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n        throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n    }\n    var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset;\n\n    var duplicates = typeof opts.duplicates === 'undefined' ? defaults.duplicates : opts.duplicates;\n\n    if (duplicates !== 'combine' && duplicates !== 'first' && duplicates !== 'last') {\n        throw new TypeError('The duplicates option must be either combine, first, or last');\n    }\n\n    var allowDots = typeof opts.allowDots === 'undefined' ? opts.decodeDotInKeys === true ? true : defaults.allowDots : !!opts.allowDots;\n\n    return {\n        allowDots: allowDots,\n        allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n        allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes,\n        allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse,\n        arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit,\n        charset: charset,\n        charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n        comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma,\n        decodeDotInKeys: typeof opts.decodeDotInKeys === 'boolean' ? opts.decodeDotInKeys : defaults.decodeDotInKeys,\n        decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder,\n        delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter,\n        // eslint-disable-next-line no-implicit-coercion, no-extra-parens\n        depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth,\n        duplicates: duplicates,\n        ignoreQueryPrefix: opts.ignoreQueryPrefix === true,\n        interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities,\n        parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit,\n        parseArrays: opts.parseArrays !== false,\n        plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects,\n        strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling\n    };\n};\n\nmodule.exports = function (str, opts) {\n    var options = normalizeParseOptions(opts);\n\n    if (str === '' || str === null || typeof str === 'undefined') {\n        return options.plainObjects ? Object.create(null) : {};\n    }\n\n    var tempObj = typeof str === 'string' ? parseValues(str, options) : str;\n    var obj = options.plainObjects ? Object.create(null) : {};\n\n    // Iterate over the keys and setup the new object\n\n    var keys = Object.keys(tempObj);\n    for (var i = 0; i < keys.length; ++i) {\n        var key = keys[i];\n        var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');\n        obj = utils.merge(obj, newObj, options);\n    }\n\n    if (options.allowSparse === true) {\n        return obj;\n    }\n\n    return utils.compact(obj);\n};\n",
    "'use strict';\n\nvar stringify = require('./stringify');\nvar parse = require('./parse');\nvar formats = require('./formats');\n\nmodule.exports = {\n    formats: formats,\n    parse: parse,\n    stringify: stringify\n};\n",
    "/*! https://mths.be/punycode v1.4.1 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t    counter = 0,\n\t\t    length = string.length,\n\t\t    value,\n\t\t    extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t//  0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t    inputLength = input.length,\n\t\t    out,\n\t\t    i = 0,\n\t\t    n = initialN,\n\t\t    bias = initialBias,\n\t\t    basic,\n\t\t    j,\n\t\t    index,\n\t\t    oldi,\n\t\t    w,\n\t\t    k,\n\t\t    digit,\n\t\t    t,\n\t\t    /** Cached calculation results */\n\t\t    baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t    delta,\n\t\t    handledCPCount,\n\t\t    basicLength,\n\t\t    bias,\n\t\t    j,\n\t\t    m,\n\t\t    q,\n\t\t    k,\n\t\t    t,\n\t\t    currentValue,\n\t\t    output = [],\n\t\t    /** `inputLength` will hold the number of code points in `input`. */\n\t\t    inputLength,\n\t\t    /** Cached calculation results */\n\t\t    handledCPCountPlusOne,\n\t\t    baseMinusT,\n\t\t    qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.4.1',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n",
    "/*\n * Copyright Joyent, Inc. and other Node contributors.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to permit\n * persons to whom the Software is furnished to do so, subject to the\n * following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n'use strict';\n\nvar punycode = require('punycode');\n\nfunction Url() {\n  this.protocol = null;\n  this.slashes = null;\n  this.auth = null;\n  this.host = null;\n  this.port = null;\n  this.hostname = null;\n  this.hash = null;\n  this.search = null;\n  this.query = null;\n  this.pathname = null;\n  this.path = null;\n  this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n/*\n * define these here so at least they only have to be\n * compiled once on the first module load.\n */\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n  portPattern = /:[0-9]*$/,\n\n  // Special case for a simple path URL\n  simplePathPattern = /^(\\/\\/?(?!\\/)[^?\\s]*)(\\?[^\\s]*)?$/,\n\n  /*\n   * RFC 2396: characters reserved for delimiting URLs.\n   * We actually just auto-escape these.\n   */\n  delims = [\n    '<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'\n  ],\n\n  // RFC 2396: characters not allowed for various reasons.\n  unwise = [\n    '{', '}', '|', '\\\\', '^', '`'\n  ].concat(delims),\n\n  // Allowed by RFCs, but cause of XSS attacks.  Always escape these.\n  autoEscape = ['\\''].concat(unwise),\n  /*\n   * Characters that are never ever allowed in a hostname.\n   * Note that any invalid chars are also handled, but these\n   * are the ones that are *expected* to be seen, so we fast-path\n   * them.\n   */\n  nonHostChars = [\n    '%', '/', '?', ';', '#'\n  ].concat(autoEscape),\n  hostEndingChars = [\n    '/', '?', '#'\n  ],\n  hostnameMaxLen = 255,\n  hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n  hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n  // protocols that can allow \"unsafe\" and \"unwise\" chars.\n  unsafeProtocol = {\n    javascript: true,\n    'javascript:': true\n  },\n  // protocols that never have a hostname.\n  hostlessProtocol = {\n    javascript: true,\n    'javascript:': true\n  },\n  // protocols that always contain a // bit.\n  slashedProtocol = {\n    http: true,\n    https: true,\n    ftp: true,\n    gopher: true,\n    file: true,\n    'http:': true,\n    'https:': true,\n    'ftp:': true,\n    'gopher:': true,\n    'file:': true\n  },\n  querystring = require('qs');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n  if (url && typeof url === 'object' && url instanceof Url) { return url; }\n\n  var u = new Url();\n  u.parse(url, parseQueryString, slashesDenoteHost);\n  return u;\n}\n\nUrl.prototype.parse = function (url, parseQueryString, slashesDenoteHost) {\n  if (typeof url !== 'string') {\n    throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n  }\n\n  /*\n   * Copy chrome, IE, opera backslash-handling behavior.\n   * Back slashes before the query string get converted to forward slashes\n   * See: https://code.google.com/p/chromium/issues/detail?id=25916\n   */\n  var queryIndex = url.indexOf('?'),\n    splitter = queryIndex !== -1 && queryIndex < url.indexOf('#') ? '?' : '#',\n    uSplit = url.split(splitter),\n    slashRegex = /\\\\/g;\n  uSplit[0] = uSplit[0].replace(slashRegex, '/');\n  url = uSplit.join(splitter);\n\n  var rest = url;\n\n  /*\n   * trim before proceeding.\n   * This is to support parse stuff like \"  http://foo.com  \\n\"\n   */\n  rest = rest.trim();\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    var simplePath = simplePathPattern.exec(rest);\n    if (simplePath) {\n      this.path = rest;\n      this.href = rest;\n      this.pathname = simplePath[1];\n      if (simplePath[2]) {\n        this.search = simplePath[2];\n        if (parseQueryString) {\n          this.query = querystring.parse(this.search.substr(1));\n        } else {\n          this.query = this.search.substr(1);\n        }\n      } else if (parseQueryString) {\n        this.search = '';\n        this.query = {};\n      }\n      return this;\n    }\n  }\n\n  var proto = protocolPattern.exec(rest);\n  if (proto) {\n    proto = proto[0];\n    var lowerProto = proto.toLowerCase();\n    this.protocol = lowerProto;\n    rest = rest.substr(proto.length);\n  }\n\n  /*\n   * figure out if it's got a host\n   * user@server is *always* interpreted as a hostname, and url\n   * resolution will treat //foo/bar as host=foo,path=bar because that's\n   * how the browser resolves relative URLs.\n   */\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@/]+@[^@/]+/)) {\n    var slashes = rest.substr(0, 2) === '//';\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2);\n      this.slashes = true;\n    }\n  }\n\n  if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) {\n\n    /*\n     * there's a hostname.\n     * the first instance of /, ?, ;, or # ends the host.\n     *\n     * If there is an @ in the hostname, then non-host chars *are* allowed\n     * to the left of the last @ sign, unless some host-ending character\n     * comes *before* the @-sign.\n     * URLs are obnoxious.\n     *\n     * ex:\n     * http://a@b@c/ => user:a@b host:c\n     * http://a@b?@c => user:a host:c path:/?@c\n     */\n\n    /*\n     * v0.12 TODO(isaacs): This is not quite how Chrome does things.\n     * Review our test case against browsers more comprehensively.\n     */\n\n    // find the first instance of any hostEndingChars\n    var hostEnd = -1;\n    for (var i = 0; i < hostEndingChars.length; i++) {\n      var hec = rest.indexOf(hostEndingChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }\n    }\n\n    /*\n     * at this point, either we have an explicit point where the\n     * auth portion cannot go past, or the last @ char is the decider.\n     */\n    var auth, atSign;\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@');\n    } else {\n      /*\n       * atSign must be in auth portion.\n       * http://a@b/c@d => host:b auth:a path:/c@d\n       */\n      atSign = rest.lastIndexOf('@', hostEnd);\n    }\n\n    /*\n     * Now we have a portion which is definitely the auth.\n     * Pull that off.\n     */\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign);\n      rest = rest.slice(atSign + 1);\n      this.auth = decodeURIComponent(auth);\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1;\n    for (var i = 0; i < nonHostChars.length; i++) {\n      var hec = rest.indexOf(nonHostChars[i]);\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) { hostEnd = hec; }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) { hostEnd = rest.length; }\n\n    this.host = rest.slice(0, hostEnd);\n    rest = rest.slice(hostEnd);\n\n    // pull out port.\n    this.parseHost();\n\n    /*\n     * we've indicated that there is a hostname,\n     * so even if it's empty, it has to be present.\n     */\n    this.hostname = this.hostname || '';\n\n    /*\n     * if hostname begins with [ and ends with ]\n     * assume that it's an IPv6 address.\n     */\n    var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']';\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      var hostparts = this.hostname.split(/\\./);\n      for (var i = 0, l = hostparts.length; i < l; i++) {\n        var part = hostparts[i];\n        if (!part) { continue; }\n        if (!part.match(hostnamePartPattern)) {\n          var newpart = '';\n          for (var j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              /*\n               * we replace non-ASCII char with a temporary placeholder\n               * we need this to make sure size of hostname is not\n               * broken by replacing non-ASCII by nothing\n               */\n              newpart += 'x';\n            } else {\n              newpart += part[j];\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            var validParts = hostparts.slice(0, i);\n            var notHost = hostparts.slice(i + 1);\n            var bit = part.match(hostnamePartStart);\n            if (bit) {\n              validParts.push(bit[1]);\n              notHost.unshift(bit[2]);\n            }\n            if (notHost.length) {\n              rest = '/' + notHost.join('.') + rest;\n            }\n            this.hostname = validParts.join('.');\n            break;\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = '';\n    } else {\n      // hostnames are always lower case.\n      this.hostname = this.hostname.toLowerCase();\n    }\n\n    if (!ipv6Hostname) {\n      /*\n       * IDNA Support: Returns a punycoded representation of \"domain\".\n       * It only converts parts of the domain name that\n       * have non-ASCII characters, i.e. it doesn't matter if\n       * you call it with a domain that already is ASCII-only.\n       */\n      this.hostname = punycode.toASCII(this.hostname);\n    }\n\n    var p = this.port ? ':' + this.port : '';\n    var h = this.hostname || '';\n    this.host = h + p;\n    this.href += this.host;\n\n    /*\n     * strip [ and ] from the hostname\n     * the host field still retains them, though\n     */\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n      if (rest[0] !== '/') {\n        rest = '/' + rest;\n      }\n    }\n  }\n\n  /*\n   * now rest is set to the post-host stuff.\n   * chop off any delim chars.\n   */\n  if (!unsafeProtocol[lowerProto]) {\n\n    /*\n     * First, make 100% sure that any \"autoEscape\" chars get\n     * escaped, even if encodeURIComponent doesn't think they\n     * need to be.\n     */\n    for (var i = 0, l = autoEscape.length; i < l; i++) {\n      var ae = autoEscape[i];\n      if (rest.indexOf(ae) === -1) { continue; }\n      var esc = encodeURIComponent(ae);\n      if (esc === ae) {\n        esc = escape(ae);\n      }\n      rest = rest.split(ae).join(esc);\n    }\n  }\n\n  // chop off from the tail first.\n  var hash = rest.indexOf('#');\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash);\n    rest = rest.slice(0, hash);\n  }\n  var qm = rest.indexOf('?');\n  if (qm !== -1) {\n    this.search = rest.substr(qm);\n    this.query = rest.substr(qm + 1);\n    if (parseQueryString) {\n      this.query = querystring.parse(this.query);\n    }\n    rest = rest.slice(0, qm);\n  } else if (parseQueryString) {\n    // no query string, but parseQueryString still requested\n    this.search = '';\n    this.query = {};\n  }\n  if (rest) { this.pathname = rest; }\n  if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n    this.pathname = '/';\n  }\n\n  // to support http.request\n  if (this.pathname || this.search) {\n    var p = this.pathname || '';\n    var s = this.search || '';\n    this.path = p + s;\n  }\n\n  // finally, reconstruct the href based on what has been validated.\n  this.href = this.format();\n  return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n  /*\n   * ensure it's an object, and not a string url.\n   * If it's an obj, this is a no-op.\n   * this way, you can call url_format() on strings\n   * to clean up potentially wonky urls.\n   */\n  if (typeof obj === 'string') { obj = urlParse(obj); }\n  if (!(obj instanceof Url)) { return Url.prototype.format.call(obj); }\n  return obj.format();\n}\n\nUrl.prototype.format = function () {\n  var auth = this.auth || '';\n  if (auth) {\n    auth = encodeURIComponent(auth);\n    auth = auth.replace(/%3A/i, ':');\n    auth += '@';\n  }\n\n  var protocol = this.protocol || '',\n    pathname = this.pathname || '',\n    hash = this.hash || '',\n    host = false,\n    query = '';\n\n  if (this.host) {\n    host = auth + this.host;\n  } else if (this.hostname) {\n    host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']');\n    if (this.port) {\n      host += ':' + this.port;\n    }\n  }\n\n  if (this.query && typeof this.query === 'object' && Object.keys(this.query).length) {\n    query = querystring.stringify(this.query, {\n      arrayFormat: 'repeat',\n      addQueryPrefix: false\n    });\n  }\n\n  var search = this.search || (query && ('?' + query)) || '';\n\n  if (protocol && protocol.substr(-1) !== ':') { protocol += ':'; }\n\n  /*\n   * only the slashedProtocols get the //.  Not mailto:, xmpp:, etc.\n   * unless they had them to begin with.\n   */\n  if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) {\n    host = '//' + (host || '');\n    if (pathname && pathname.charAt(0) !== '/') { pathname = '/' + pathname; }\n  } else if (!host) {\n    host = '';\n  }\n\n  if (hash && hash.charAt(0) !== '#') { hash = '#' + hash; }\n  if (search && search.charAt(0) !== '?') { search = '?' + search; }\n\n  pathname = pathname.replace(/[?#]/g, function (match) {\n    return encodeURIComponent(match);\n  });\n  search = search.replace('#', '%23');\n\n  return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n  return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function (relative) {\n  return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n  if (!source) { return relative; }\n  return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function (relative) {\n  if (typeof relative === 'string') {\n    var rel = new Url();\n    rel.parse(relative, false, true);\n    relative = rel;\n  }\n\n  var result = new Url();\n  var tkeys = Object.keys(this);\n  for (var tk = 0; tk < tkeys.length; tk++) {\n    var tkey = tkeys[tk];\n    result[tkey] = this[tkey];\n  }\n\n  /*\n   * hash is always overridden, no matter what.\n   * even href=\"\" will remove it.\n   */\n  result.hash = relative.hash;\n\n  // if the relative url is empty, then there's nothing left to do here.\n  if (relative.href === '') {\n    result.href = result.format();\n    return result;\n  }\n\n  // hrefs like //foo/bar always cut to the protocol.\n  if (relative.slashes && !relative.protocol) {\n    // take everything except the protocol from relative\n    var rkeys = Object.keys(relative);\n    for (var rk = 0; rk < rkeys.length; rk++) {\n      var rkey = rkeys[rk];\n      if (rkey !== 'protocol') { result[rkey] = relative[rkey]; }\n    }\n\n    // urlParse appends trailing / to urls like http://www.example.com\n    if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) {\n      result.pathname = '/';\n      result.path = result.pathname;\n    }\n\n    result.href = result.format();\n    return result;\n  }\n\n  if (relative.protocol && relative.protocol !== result.protocol) {\n    /*\n     * if it's a known url protocol, then changing\n     * the protocol does weird things\n     * first, if it's not file:, then we MUST have a host,\n     * and if there was a path\n     * to begin with, then we MUST have a path.\n     * if it is file:, then the host is dropped,\n     * because that's known to be hostless.\n     * anything else is assumed to be absolute.\n     */\n    if (!slashedProtocol[relative.protocol]) {\n      var keys = Object.keys(relative);\n      for (var v = 0; v < keys.length; v++) {\n        var k = keys[v];\n        result[k] = relative[k];\n      }\n      result.href = result.format();\n      return result;\n    }\n\n    result.protocol = relative.protocol;\n    if (!relative.host && !hostlessProtocol[relative.protocol]) {\n      var relPath = (relative.pathname || '').split('/');\n      while (relPath.length && !(relative.host = relPath.shift())) { }\n      if (!relative.host) { relative.host = ''; }\n      if (!relative.hostname) { relative.hostname = ''; }\n      if (relPath[0] !== '') { relPath.unshift(''); }\n      if (relPath.length < 2) { relPath.unshift(''); }\n      result.pathname = relPath.join('/');\n    } else {\n      result.pathname = relative.pathname;\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    result.host = relative.host || '';\n    result.auth = relative.auth;\n    result.hostname = relative.hostname || relative.host;\n    result.port = relative.port;\n    // to support http.request\n    if (result.pathname || result.search) {\n      var p = result.pathname || '';\n      var s = result.search || '';\n      result.path = p + s;\n    }\n    result.slashes = result.slashes || relative.slashes;\n    result.href = result.format();\n    return result;\n  }\n\n  var isSourceAbs = result.pathname && result.pathname.charAt(0) === '/',\n    isRelAbs = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',\n    mustEndAbs = isRelAbs || isSourceAbs || (result.host && relative.pathname),\n    removeAllDots = mustEndAbs,\n    srcPath = result.pathname && result.pathname.split('/') || [],\n    relPath = relative.pathname && relative.pathname.split('/') || [],\n    psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n  /*\n   * if the url is a non-slashed url, then relative\n   * links like ../.. should be able\n   * to crawl up to the hostname, as well.  This is strange.\n   * result.protocol has already been set by now.\n   * Later on, put the first path part into the host field.\n   */\n  if (psychotic) {\n    result.hostname = '';\n    result.port = null;\n    if (result.host) {\n      if (srcPath[0] === '') { srcPath[0] = result.host; } else { srcPath.unshift(result.host); }\n    }\n    result.host = '';\n    if (relative.protocol) {\n      relative.hostname = null;\n      relative.port = null;\n      if (relative.host) {\n        if (relPath[0] === '') { relPath[0] = relative.host; } else { relPath.unshift(relative.host); }\n      }\n      relative.host = null;\n    }\n    mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n  }\n\n  if (isRelAbs) {\n    // it's absolute.\n    result.host = relative.host || relative.host === '' ? relative.host : result.host;\n    result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;\n    result.search = relative.search;\n    result.query = relative.query;\n    srcPath = relPath;\n    // fall through to the dot-handling below.\n  } else if (relPath.length) {\n    /*\n     * it's relative\n     * throw away the existing file, and take the new path instead.\n     */\n    if (!srcPath) { srcPath = []; }\n    srcPath.pop();\n    srcPath = srcPath.concat(relPath);\n    result.search = relative.search;\n    result.query = relative.query;\n  } else if (relative.search != null) {\n    /*\n     * just pull out the search.\n     * like href='?foo'.\n     * Put this after the other two cases because it simplifies the booleans\n     */\n    if (psychotic) {\n      result.host = srcPath.shift();\n      result.hostname = result.host;\n      /*\n       * occationaly the auth can get stuck only in host\n       * this especially happens in cases like\n       * url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n       */\n      var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n      if (authInHost) {\n        result.auth = authInHost.shift();\n        result.hostname = authInHost.shift();\n        result.host = result.hostname;\n      }\n    }\n    result.search = relative.search;\n    result.query = relative.query;\n    // to support http.request\n    if (result.pathname !== null || result.search !== null) {\n      result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  if (!srcPath.length) {\n    /*\n     * no path at all.  easy.\n     * we've already handled the other stuff above.\n     */\n    result.pathname = null;\n    // to support http.request\n    if (result.search) {\n      result.path = '/' + result.search;\n    } else {\n      result.path = null;\n    }\n    result.href = result.format();\n    return result;\n  }\n\n  /*\n   * if a url ENDs in . or .., then it must get a trailing slash.\n   * however, if it ends in anything else non-slashy,\n   * then it must NOT get a trailing slash.\n   */\n  var last = srcPath.slice(-1)[0];\n  var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === '';\n\n  /*\n   * strip single dots, resolve double dots to parent dir\n   * if the path tries to go above the root, `up` ends up > 0\n   */\n  var up = 0;\n  for (var i = srcPath.length; i >= 0; i--) {\n    last = srcPath[i];\n    if (last === '.') {\n      srcPath.splice(i, 1);\n    } else if (last === '..') {\n      srcPath.splice(i, 1);\n      up++;\n    } else if (up) {\n      srcPath.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (!mustEndAbs && !removeAllDots) {\n    for (; up--; up) {\n      srcPath.unshift('..');\n    }\n  }\n\n  if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n    srcPath.unshift('');\n  }\n\n  if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n    srcPath.push('');\n  }\n\n  var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n  // put the host back\n  if (psychotic) {\n    result.hostname = isAbsolute ? '' : srcPath.length ? srcPath.shift() : '';\n    result.host = result.hostname;\n    /*\n     * occationaly the auth can get stuck only in host\n     * this especially happens in cases like\n     * url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n     */\n    var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n    if (authInHost) {\n      result.auth = authInHost.shift();\n      result.hostname = authInHost.shift();\n      result.host = result.hostname;\n    }\n  }\n\n  mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n  if (mustEndAbs && !isAbsolute) {\n    srcPath.unshift('');\n  }\n\n  if (srcPath.length > 0) {\n    result.pathname = srcPath.join('/');\n  } else {\n    result.pathname = null;\n    result.path = null;\n  }\n\n  // to support request.http\n  if (result.pathname !== null || result.search !== null) {\n    result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n  }\n  result.auth = relative.auth || result.auth;\n  result.slashes = result.slashes || relative.slashes;\n  result.href = result.format();\n  return result;\n};\n\nUrl.prototype.parseHost = function () {\n  var host = this.host;\n  var port = portPattern.exec(host);\n  if (port) {\n    port = port[0];\n    if (port !== ':') {\n      this.port = port.substr(1);\n    }\n    host = host.substr(0, host.length - port.length);\n  }\n  if (host) { this.hostname = host; }\n};\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n",
    "var qs = require('qs')\nvar nodeUrl = require('url');\n\nmodule.exports = {\n  render: render\n, isTransitional: isTransitional\n, mapRoute: mapRoute\n}\n\nfunction isTransitional(pattern) {\n  return pattern.hasOwnProperty('from') && pattern.hasOwnProperty('to')\n}\n\nfunction mapRoute(from, params) {\n  var i = params.url.indexOf('?')\n  var queryString = (~i) ? params.url.slice(i) : ''\n  // If the route looks like /:a/:b?/:c/:d?\n  // and :b and :d are missing, return /a/c\n  // Thus, skip the / if the value is missing\n  var i = 0\n  var path = from.replace(/\\/(?:(?:\\:([^?\\/:*(]+)(?:\\([^)]+\\))?)|\\*)(\\?)?/g, onMatch)\n  function onMatch(match, key, optional) {\n    var value = key ? params[key] : params[i++]\n    return (optional && value == null) ? '' : '/' + encodeURIComponent(value)\n  }\n  return path + queryString\n}\n\nfunction render(history, options, e) {\n  var req = new RenderReq(history.app.page, history.routes, options, e)\n  req.routeTransitional(0, function() {\n    req.page = history.page()\n    req.routeQueue(0, function() {\n      // Cancel rendering by this app if no routes match\n      req.cancel()\n    })\n  })\n}\n\nfunction RenderReq(page, routes, options, e) {\n  this.page = page\n  this.options = options\n  this.e = e\n  this.setUrl(options.url.replace(/#.*/, ''))\n  var queryString = nodeUrl.parse(this.url).query;\n  this.query = queryString ? qs.parse(queryString) : {}\n  this.method = options.method\n  this.body = options.body || {}\n  this.setPrevious(options.previous)\n  this.transitional = routes.transitional[this.method]\n  this.queue = routes.queue[this.method]\n  this.app = routes.app\n}\n\nRenderReq.prototype.cancel = function() {\n  var options = this.options\n  // Don't do anything if this is the result of an event, since the\n  // appropriate action will happen by default\n  if (this.e || options.noNavigate) return\n  // Otherwise, manually perform appropriate action\n  if (options.form) {\n    options.form.setAttribute('data-router-ignore', '')\n    options.form.submit()\n  } else {\n    window.location.assign(options.url)\n  }\n}\n\nRenderReq.prototype.setUrl = function(url) {\n  this.url = url\n  this.path = url.replace(/\\?.*/, '')\n}\nRenderReq.prototype.setPrevious = function(previous) {\n  this.previous = previous\n  this.previousPath = previous && previous.replace(/\\?.*/, '')\n}\n\nRenderReq.prototype.routeTransitional = function(i, next) {\n  i || (i = 0)\n  var item\n  while (item = this.transitional[i++]) {\n    if (!item.to.match(this.path) || !item.from.match(this.previousPath)) continue\n    var req = this\n    var params = this.routeParams(item.to)\n    // Even though we don't need to do anything after a done, pass a\n    // no op function, so that routes can expect it to be defined\n    function done() {}\n    this.onMatch(item.to, params, function(err) {\n      if (err) return req.cancel()\n      req.routeTransitional(i, next)\n    }, done)\n    return\n  }\n  next()\n}\n\nRenderReq.prototype.routeQueue = function(i, next) {\n  i || (i = 0)\n  var route\n  while (route = this.queue[i++]) {\n    if (!route.match(this.path)) continue\n    var req = this\n    var params = this.routeParams(route)\n    this.onMatch(route, params, function(err) {\n      if (err) return req.cancel()\n      req.routeQueue(i, next)\n    })\n    return\n  }\n  next()\n}\n\nRenderReq.prototype.onMatch = function(route, params, next, done) {\n  if (!this.page) return next()\n  // Stop the default browser action, such as clicking a link or submitting a form\n  if (this.e) {\n    this.e.preventDefault()\n    this.e = null\n  }\n  this.page.params = params\n  if (route.isTransitional) {\n    this.app.onRoute(route.callbacks, this.page, next, done)\n  } else {\n    this.app.onRoute(route.callbacks, this.page, next)\n  }\n}\n\nRenderReq.prototype.routeParams = function(route) {\n  var routeParams = route.params\n  var params = routeParams.slice()\n\n  for (var key in routeParams) {\n    params[key] = routeParams[key]\n  }\n  params.previous = this.previous\n  params.url = this.url\n  params.body = this.body\n  params.query = this.query\n  params.method = this.method\n  return params\n}\n",
    "var qs = require('qs')\nvar parseUrl = require('url').parse\nvar resolveUrl = require('url').resolve\nvar router = require('./router')\nvar currentPath = window.location.pathname + window.location.search\n\n// Replace the initial state with the current URL immediately,\n// so that it will be rendered if the state is later popped\nif (window.history.replaceState) {\n  window.history.replaceState({\n    $render: true,\n    $method: 'get'\n  }, null, window.location.href)\n}\n\nmodule.exports = History\n\nfunction History(app, routes) {\n  this.app = app\n  this.routes = routes\n\n  if (window.history.pushState) {\n    addListeners(this)\n    return\n  }\n  this.push = function(url) {\n    window.location.assign(url)\n  }\n  this.replace = function(url) {\n    window.location.replace(url)\n  }\n}\n\nHistory.prototype.push = function(url, render, state, e) {\n  this._update('pushState', url, render, state, e)\n}\n\nHistory.prototype.replace = function(url, render, state, e) {\n  this._update('replaceState', url, render, state, e)\n}\n\n// Rerender the current url locally\nHistory.prototype.refresh = function() {\n  var path = routePath(window.location.href)\n  // Note that we don't pass previous to avoid triggering transitions\n  router.render(this, {url: path, method: 'get'})\n}\n\nHistory.prototype.back = function() {\n  window.history.back()\n}\n\nHistory.prototype.forward = function() {\n  window.history.forward()\n}\n\nHistory.prototype.go = function(i) {\n  window.history.go(i)\n}\n\nHistory.prototype._update = function(historyMethod, relativeUrl, render, state, e) {\n  var url = resolveUrl(window.location.href, relativeUrl)\n  var path = routePath(url)\n\n  // TODO: history.push should set the window.location with external urls\n  if (!path) return\n  if (render == null) render = true\n  if (state == null) state = {}\n\n  // Update the URL\n  var options = renderOptions(e, path)\n  state.$render = true\n  state.$method = options.method\n  window.history[historyMethod](state, null, options.url)\n  currentPath = window.location.pathname + window.location.search\n  if (render) router.render(this, options, e)\n}\n\nHistory.prototype.page = function() {\n  var page = this.app.createPage()\n  var history = this\n\n  function redirect(url) {\n    if (url === 'back') return history.back()\n    // TODO: Add support for `basepath` option like Express\n    if (url === 'home') url = '\\\\'\n    history.replace(url, true)\n  }\n\n  page.redirect = redirect\n  return page\n}\n\n// Get the pathname if it is on the same protocol and domain\nfunction routePath(url) {\n  var match = parseUrl(url)\n  return match &&\n    match.protocol === window.location.protocol &&\n    match.host === window.location.host &&\n    match.pathname + (match.search || '')\n}\n\nfunction renderOptions(e, path) {\n  // If this is a form submission, extract the form data and\n  // append it to the url for a get or params.body for a post\n  if (e && e.type === 'submit') {\n    var form = e.target\n    var elements = form.elements\n    var query = []\n    for (var i = 0, len = elements.length, el; i < len; i++) {\n      el = elements[i]\n      var name = el.name\n      if (!name) continue\n      var value = el.value\n      query.push(encodeURIComponent(name) + '=' + encodeURIComponent(value))\n      if (name === '_method') {\n        var override = value.toLowerCase()\n        if (override === 'delete') override = 'del'\n      }\n    }\n    query = query.join('&')\n    if (form.method.toLowerCase() === 'post') {\n      var method = override || 'post'\n      var body = qs.parse(query)\n    } else {\n      method = 'get'\n      path += '?' + query\n    }\n  } else {\n    method = 'get'\n  }\n  return {\n    method: method\n  , url: path\n  , previous: window.location.pathname + window.location.search\n  , body: body\n  , form: form\n  , link: e && e._tracksLink\n  }\n}\n\nfunction addListeners(history) {\n\n  // Detect clicks on links\n  function onClick(e) {\n    var el = e.target\n\n    // Ignore command click, control click, and non-left click\n    if (e.metaKey || e.which !== 1) return\n\n    // Ignore if already prevented\n    if (e.defaultPrevented) return\n\n    // Also look up for parent links (<a><img></a>)\n    while (el) {\n      var url = el.href\n      if (url) {\n\n        // Ignore if created by Tracks\n        if (el.hasAttribute && el.hasAttribute('data-router-ignore')) return\n\n        // Ignore links meant to open in a different window or frame\n        if (el.target && el.target !== '_self') return\n\n        // Ignore hash links to the same page\n        var hashIndex = url.indexOf('#')\n        if (~hashIndex && url.slice(0, hashIndex) === window.location.href.replace(/#.*/, '')) {\n          return\n        }\n\n        e._tracksLink = el\n        history.push(url, true, null, e)\n        return\n      }\n\n      el = el.parentNode\n    }\n  }\n\n  function onSubmit(e) {\n    var target = e.target\n\n    // Ignore if already prevented\n    if (e.defaultPrevented) return\n\n    // Only handle if emitted on a form element that isn't multipart\n    if (target.tagName.toLowerCase() !== 'form') return\n    if (target.enctype === 'multipart/form-data') return\n\n    // Ignore if created by Tracks\n    if (target.hasAttribute && target.hasAttribute('data-router-ignore')) return\n\n    // Use the url from the form action, defaulting to the current url\n    var url = target.action || window.location.href\n    history.push(url, true, null, e)\n  }\n\n  function onPopState(e) {\n    // HACK: Chrome sometimes does a pop state before the app is set up properly\n    if (!history.app.page) return\n\n    var previous = currentPath\n    var state = e.state\n    currentPath = window.location.pathname + window.location.search\n\n    var options = {\n      previous: previous\n    , url: currentPath\n    }\n\n    if (state) {\n      if (!state.$render) return\n      options.method = state.$method\n      // Note that the post body is only sent on the initial reqest\n      // and it is empty if the state is later popped\n      return router.render(history, options)\n    }\n\n    // The state object will be null for states created by jump links.\n    // window.location.hash cannot be used, because it returns nothing\n    // if the url ends in just a hash character\n    var url = window.location.href\n      , hashIndex = url.indexOf('#')\n      , el, id\n    if (~hashIndex && currentPath !== previous) {\n      options.method = 'get'\n      router.render(history, options)\n      id = url.slice(hashIndex + 1)\n      if (el = document.getElementById(id) || document.getElementsByName(id)[0]) {\n        el.scrollIntoView()\n      }\n    }\n  }\n\n  document.addEventListener('click', onClick, true)\n  document.addEventListener('submit', onSubmit, false)\n  window.addEventListener('popstate', onPopState, true)\n}\n",
    "var Route = require('../vendor/express/router/route')\nvar History = require('./History')\nvar router = module.exports = require('./router')\n\nrouter.setup = setup\n\nfunction setup(app) {\n  var routes = {\n    queue: {}\n  , transitional: {}\n  , app: app\n  }\n  app.history = new History(app, routes)\n\n  ;['get', 'post', 'put', 'del', 'enter', 'exit'].forEach(function(method) {\n    var queue = routes.queue[method] = []\n    var transitional = routes.transitional[method] = []\n\n    app[method] = function(pattern, callback) {\n      if (Array.isArray(pattern)) {\n        pattern.forEach(function(item) {\n          app[method](item, callback)\n        })\n        return app\n      }\n\n      if (router.isTransitional(pattern)) {\n        var from = pattern.from\n        var to = pattern.to\n        var forward = pattern.forward || (callback && callback.forward) || callback\n        var back = pattern.back || (callback && callback.back)\n\n        var fromRoute = new Route(method, from, back)\n        var toRoute = new Route(method, to, forward)\n        fromRoute.isTransitional = true\n        toRoute.isTransitional = true\n        transitional.push({\n          from: fromRoute\n        , to: toRoute\n        })\n        if (back) transitional.push({\n          from: toRoute\n        , to: fromRoute\n        })\n\n        return app\n      }\n\n      queue.push(new Route(method, pattern, callback))\n      return app\n    }\n  })\n}\n",
    "exports.ContextMeta = ContextMeta;\nexports.Context = Context;\n\nfunction noop() {}\n\n// TODO:\n// Implement removeItemContext\n\nfunction ContextMeta() {\n  this.addBinding = noop;\n  this.removeBinding = noop;\n  this.removeNode = noop;\n  this.addItemContext = noop;\n  this.removeItemContext = noop;\n  this.views = null;\n  this.idNamespace = '';\n  this.idCount = 0;\n  this.pending = [];\n  this.pauseCount = 0;\n}\n\nfunction Context(meta, controller, parent, unbound, expression) {\n  // Required properties //\n\n  // Properties which are globally inherited for the entire page\n  this.meta = meta;\n  // The page or component. Must have a `model` property with a `data` property\n  this.controller = controller;\n\n  // Optional properties //\n\n  // Containing context\n  this.parent = parent;\n  // Boolean set to true when bindings should be ignored\n  this.unbound = unbound;\n  // The expression for a block\n  this.expression = expression;\n  // Alias name for the given expression\n  this.alias = expression && expression.meta && expression.meta.as;\n  // Alias name for the index or iterated key\n  this.keyAlias = expression && expression.meta && expression.meta.keyAs;\n\n  // For Context::eachChild\n  // The context of the each at render time\n  this.item = null;\n\n  // For Context::viewChild\n  // Reference to the current view\n  this.view = null;\n  // Attribute values passed to the view instance\n  this.attributes = null;\n  // MarkupHooks to be called after insert into DOM of component\n  this.hooks = null;\n  // MarkupHooks to be called immediately before init of component\n  this.initHooks = null;\n\n  // For Context::closureChild\n  // Reference to another context established at render time by ContextClosure\n  this.closure = null;\n\n  // Used in EventModel\n  this._id = null;\n}\n\nContext.prototype.id = function() {\n  var count = ++this.meta.idCount;\n  return this.meta.idNamespace + '_' + count.toString(36);\n};\n\nContext.prototype.addBinding = function(binding) {\n  // Don't add bindings that wrap list items. Only their outer range is needed\n  if (binding.itemFor) return;\n  var expression = binding.template.expression;\n  // Don't rerender in unbound sections\n  if (expression ? expression.isUnbound(this) : this.unbound) return;\n  // Don't rerender to changes in a with expression\n  if (expression && expression.meta && expression.meta.blockType === 'with') return;\n  this.meta.addBinding(binding);\n};\nContext.prototype.removeBinding = function(binding) {\n  this.meta.removeBinding(binding);\n};\nContext.prototype.removeNode = function(node) {\n  this.meta.removeNode(node);\n};\n\nContext.prototype.child = function(expression) {\n  // Set or inherit the binding mode\n  var blockType = expression.meta && expression.meta.blockType;\n  var unbound = (blockType === 'unbound') ? true :\n    (blockType === 'bound') ? false :\n    this.unbound;\n  return new Context(this.meta, this.controller, this, unbound, expression);\n};\n\nContext.prototype.componentChild = function(component) {\n  return new Context(this.meta, component, this, this.unbound);\n};\n\n// Make a context for an item in an each block\nContext.prototype.eachChild = function(expression, item) {\n  var context = new Context(this.meta, this.controller, this, this.unbound, expression);\n  context.item = item;\n  this.meta.addItemContext(context);\n  return context;\n};\n\nContext.prototype.viewChild = function(view, attributes, hooks, initHooks) {\n  var context = new Context(this.meta, this.controller, this, this.unbound);\n  context.view = view;\n  context.attributes = attributes;\n  context.hooks = hooks;\n  context.initHooks = initHooks;\n  return context;\n};\n\nContext.prototype.closureChild = function(closure) {\n  var context = new Context(this.meta, this.controller, this, this.unbound);\n  context.closure = closure;\n  return context;\n};\n\nContext.prototype.forRelative = function(expression) {\n  var context = this;\n  while (context && context.expression === expression || context.view) {\n    context = context.parent;\n  }\n  return context;\n};\n\n// Returns the closest context which defined the named alias\nContext.prototype.forAlias = function(alias) {\n  var context = this;\n  while (context) {\n    if (context.alias === alias || context.keyAlias === alias) return context;\n    context = context.parent;\n  }\n};\n\n// Returns the closest containing context for a view attribute name or nothing\nContext.prototype.forAttribute = function(attribute) {\n  var context = this;\n  while (context) {\n    // Find the closest context associated with a view\n    if (context.view) {\n      var attributes = context.attributes;\n      if (!attributes) return;\n      if (attributes.hasOwnProperty(attribute)) return context;\n      // If the attribute isn't found, but the attributes inherit, continue\n      // looking in the next closest view context\n      if (!attributes.inherit && !attributes.extend) return;\n    }\n    context = context.parent;\n  }\n};\n\nContext.prototype.forViewParent = function() {\n  var context = this;\n  while (context) {\n    // When a context with a `closure` property is encountered, skip to its\n    // parent context rather than returning the nearest view's. This reference\n    // is created by wrapping a template in a ContextClosure template\n    if (context.closure) return context.closure.parent;\n    // Find the closest view and return the containing context\n    if (context.view) return context.parent;\n    context = context.parent;\n  }\n};\n\nContext.prototype.getView = function() {\n  var context = this;\n  while (context) {\n    // Find the closest view\n    if (context.view) return context.view;\n    context = context.parent;\n  }\n};\n\n// Returns the `this` value for a context\nContext.prototype.get = function() {\n  var value = (this.expression) ?\n    this.expression.get(this) :\n    this.controller.model.data;\n  if (this.item != null) {\n    return value && value[this.item];\n  }\n  return value;\n};\n\nContext.prototype.pause = function() {\n  this.meta.pauseCount++;\n};\n\nContext.prototype.unpause = function() {\n  if (--this.meta.pauseCount) return;\n  this.flush();\n};\n\nContext.prototype.flush = function() {\n  var pending = this.meta.pending;\n  var len = pending.length;\n  if (!len) return;\n  this.meta.pending = [];\n  for (var i = 0; i < len; i++) {\n    pending[i]();\n  }\n};\n\nContext.prototype.queue = function(cb) {\n  this.meta.pending.push(cb);\n};\n",
    "// `-` and `+` can be either unary or binary, so all unary operators are\n// postfixed with `U` to differentiate\n\nexports.get = {\n  // Unary operators\n  '!U': function(value) {\n    return !value;\n  }\n, '-U': function(value) {\n    return -value;\n  }\n, '+U': function(value) {\n    return +value;\n  }\n, '~U': function(value) {\n    return ~value;\n  }\n, 'typeofU': function(value) {\n    return typeof value;\n  }\n  // Binary operators\n, '||': function(left, right) {\n    return left || right;\n  }\n, '&&': function(left, right) {\n    return left && right;\n  }\n, '|': function(left, right) {\n    return left | right;\n  }\n, '^': function(left, right) {\n    return left ^ right;\n  }\n, '&': function(left, right) {\n    return left & right;\n  }\n, '==': function(left, right) {\n    return left == right; // jshint ignore:line\n  }\n, '!=': function(left, right) {\n    return left != right; // jshint ignore:line\n  }\n, '===': function(left, right) {\n    return left === right;\n  }\n, '!==': function(left, right) {\n    return left !== right;\n  }\n, '<': function(left, right) {\n    return left < right;\n  }\n, '>': function(left, right) {\n    return left > right;\n  }\n, '<=': function(left, right) {\n    return left <= right;\n  }\n, '>=': function(left, right) {\n    return left >= right;\n  }\n, 'instanceof': function(left, right) {\n    return left instanceof right;\n  }\n, 'in': function(left, right) {\n    return left in right;\n  }\n, '<<': function(left, right) {\n    return left << right;\n  }\n, '>>': function(left, right) {\n    return left >> right;\n  }\n, '>>>': function(left, right) {\n    return left >>> right;\n  }\n, '+': function(left, right) {\n    return left + right;\n  }\n, '-': function(left, right) {\n    return left - right;\n  }\n, '*': function(left, right) {\n    return left * right;\n  }\n, '/': function(left, right) {\n    return left / right;\n  }\n, '%': function(left, right) {\n    return left % right;\n  }\n  // Conditional operator\n, '?': function(test, consequent, alternate) {\n    return (test) ? consequent : alternate;\n  }\n, // Sequence\n  ',': function() {\n    return arguments[arguments.length - 1];\n  }\n};\n\nexports.set = {\n  // Unary operators\n  '!U': function(value) {\n    return [!value];\n  }\n, '-U': function(value) {\n    return [-value];\n  }\n  // Binary operators\n, '==': function(value, left, right) {\n    if (value) return [right];\n  }\n, '===': function(value, left, right) {\n    if (value) return [right];\n  }\n, 'in': function(value, left, right) {\n    right[left] = true;\n    return {1: right};\n  }\n, '+': function(value, left, right) {\n    return [value - right];\n  }\n, '-': function(value, left, right) {\n    return [value + right];\n  }\n, '*': function(value, left, right) {\n    return [value / right];\n  }\n, '/': function(value, left, right) {\n    return [value * right];\n  }\n};\n",
    "if (typeof require === 'function') {\n  var serializeObject = require('serialize-object');\n}\n\n// UPDATE_PROPERTIES map HTML attribute names to an Element DOM property that\n// should be used for setting on bindings updates instead of setAttribute.\n//\n// https://github.com/jquery/jquery/blob/1.x-master/src/attributes/prop.js\n// https://github.com/jquery/jquery/blob/master/src/attributes/prop.js\n// http://webbugtrack.blogspot.com/2007/08/bug-242-setattribute-doesnt-always-work.html\nvar BOOLEAN_PROPERTIES = {\n  checked: 'checked'\n, disabled: 'disabled'\n, indeterminate: 'indeterminate'\n, readonly: 'readOnly'\n, selected: 'selected'\n};\nvar INTEGER_PROPERTIES = {\n  colspan: 'colSpan'\n, maxlength: 'maxLength'\n, rowspan: 'rowSpan'\n, tabindex: 'tabIndex'\n};\nvar STRING_PROPERTIES = {\n  cellpadding: 'cellPadding'\n, cellspacing: 'cellSpacing'\n, 'class': 'className'\n, contenteditable: 'contentEditable'\n, enctype: 'encoding'\n, 'for': 'htmlFor'\n, frameborder: 'frameBorder'\n, id: 'id'\n, title: 'title'\n, type: 'type'\n, usemap: 'useMap'\n, value: 'value'\n};\nvar UPDATE_PROPERTIES = {};\nmergeInto(BOOLEAN_PROPERTIES, UPDATE_PROPERTIES);\nmergeInto(INTEGER_PROPERTIES, UPDATE_PROPERTIES);\nmergeInto(STRING_PROPERTIES, UPDATE_PROPERTIES);\n\n// CREATE_PROPERTIES map HTML attribute names to an Element DOM property that\n// should be used for setting on Element rendering instead of setAttribute.\n// input.defaultChecked and input.defaultValue affect the attribute, so we want\n// to use these for initial dynamic rendering. For binding updates,\n// input.checked and input.value are modified.\nvar CREATE_PROPERTIES = {};\nmergeInto(UPDATE_PROPERTIES, CREATE_PROPERTIES);\nCREATE_PROPERTIES.checked = 'defaultChecked';\nCREATE_PROPERTIES.value = 'defaultValue';\n\n// http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements\nvar VOID_ELEMENTS = {\n  area: true\n, base: true\n, br: true\n, col: true\n, embed: true\n, hr: true\n, img: true\n, input: true\n, keygen: true\n, link: true\n, menuitem: true\n, meta: true\n, param: true\n, source: true\n, track: true\n, wbr: true\n};\n\nvar NAMESPACE_URIS = {\n  svg: 'http://www.w3.org/2000/svg'\n, xlink: 'http://www.w3.org/1999/xlink'\n, xmlns: 'http://www.w3.org/2000/xmlns/'\n};\n\nexports.CREATE_PROPERTIES = CREATE_PROPERTIES;\nexports.BOOLEAN_PROPERTIES = BOOLEAN_PROPERTIES;\nexports.INTEGER_PROPERTIES = INTEGER_PROPERTIES;\nexports.STRING_PROPERTIES = STRING_PROPERTIES;\nexports.UPDATE_PROPERTIES = UPDATE_PROPERTIES;\nexports.VOID_ELEMENTS = VOID_ELEMENTS;\nexports.NAMESPACE_URIS = NAMESPACE_URIS;\n\n// Template Classes\nexports.Template = Template;\nexports.Doctype = Doctype;\nexports.Text = Text;\nexports.DynamicText = DynamicText;\nexports.Comment = Comment;\nexports.DynamicComment = DynamicComment;\nexports.Html = Html;\nexports.DynamicHtml = DynamicHtml;\nexports.Element = Element;\nexports.DynamicElement = DynamicElement;\nexports.Block = Block;\nexports.ConditionalBlock = ConditionalBlock;\nexports.EachBlock = EachBlock;\n\nexports.Attribute = Attribute;\nexports.DynamicAttribute = DynamicAttribute;\n\n// Binding Classes\nexports.Binding = Binding;\nexports.NodeBinding = NodeBinding;\nexports.AttributeBinding = AttributeBinding;\nexports.RangeBinding = RangeBinding;\n\nfunction Template(content, source) {\n  this.content = content;\n  this.source = source;\n}\nTemplate.prototype.toString = function() {\n  return this.source;\n};\nTemplate.prototype.get = function(context, unescaped) {\n  return contentHtml(this.content, context, unescaped);\n};\nTemplate.prototype.getFragment = function(context, binding) {\n  var fragment = document.createDocumentFragment();\n  this.appendTo(fragment, context, binding);\n  return fragment;\n};\nTemplate.prototype.appendTo = function(parent, context) {\n  context.pause();\n  appendContent(parent, this.content, context);\n  context.unpause();\n};\nTemplate.prototype.attachTo = function(parent, node, context) {\n  context.pause();\n  var node = attachContent(parent, node, this.content, context);\n  context.unpause();\n  return node;\n};\nTemplate.prototype.update = function() {};\nTemplate.prototype.stringify = function(value) {\n  return (value == null) ? '' : value + '';\n};\nTemplate.prototype.equals = function(other) {\n  return this === other;\n};\nTemplate.prototype.module = 'templates';\nTemplate.prototype.type = 'Template';\nTemplate.prototype.serialize = function() {\n  return serializeObject.instance(this, this.content, this.source);\n};\n\n\nfunction Doctype(name, publicId, systemId) {\n  this.name = name;\n  this.publicId = publicId;\n  this.systemId = systemId;\n}\nDoctype.prototype = Object.create(Template.prototype);\nDoctype.prototype.constructor = Doctype;\nDoctype.prototype.get = function() {\n  var publicText = (this.publicId) ?\n    ' PUBLIC \"' + this.publicId  + '\"' :\n    '';\n  var systemText = (this.systemId) ?\n    (this.publicId) ?\n      ' \"' + this.systemId + '\"' :\n      ' SYSTEM \"' + this.systemId + '\"' :\n    '';\n  return '<!DOCTYPE ' + this.name + publicText + systemText + '>';\n};\nDoctype.prototype.appendTo = function() {\n  // Doctype could be created via:\n  //   document.implementation.createDocumentType(this.name, this.publicId, this.systemId)\n  // However, it does not appear possible or useful to append it to the\n  // document fragment. Therefore, just don't render it in the browser\n};\nDoctype.prototype.attachTo = function(parent, node) {\n  if (!node || node.nodeType !== 10) {\n    throw attachError(parent, node);\n  }\n  return node.nextSibling;\n};\nDoctype.prototype.type = 'Doctype';\nDoctype.prototype.serialize = function() {\n  return serializeObject.instance(this, this.name, this.publicId, this.systemId);\n};\n\nfunction Text(data) {\n  this.data = data;\n  this.escaped = escapeHtml(data);\n}\nText.prototype = Object.create(Template.prototype);\nText.prototype.constructor = Text;\nText.prototype.get = function(context, unescaped) {\n  return (unescaped) ? this.data : this.escaped;\n};\nText.prototype.appendTo = function(parent) {\n  var node = document.createTextNode(this.data);\n  parent.appendChild(node);\n};\nText.prototype.attachTo = function(parent, node) {\n  return attachText(parent, node, this.data, this);\n};\nText.prototype.type = 'Text';\nText.prototype.serialize = function() {\n  return serializeObject.instance(this, this.data);\n};\n\n// DynamicText might be more accurately named DynamicContent. When its\n// expression returns a template, it acts similar to a Block, and it renders\n// the template surrounded by comment markers for range replacement. When its\n// expression returns any other type, it renders a DOM Text node with no\n// markers. Text nodes are bound by updating their data property dynamically.\n// The update method must take care to switch between these types of bindings\n// in case the expression return type changes dynamically.\nfunction DynamicText(expression) {\n  this.expression = expression;\n  this.unbound = false;\n}\nDynamicText.prototype = Object.create(Template.prototype);\nDynamicText.prototype.constructor = DynamicText;\nDynamicText.prototype.get = function(context, unescaped) {\n  var value = this.expression.get(context);\n  if (value instanceof Template) {\n    do {\n      value = value.get(context, unescaped);\n    } while (value instanceof Template);\n    return value;\n  }\n  var data = this.stringify(value);\n  return (unescaped) ? data : escapeHtml(data);\n};\nDynamicText.prototype.appendTo = function(parent, context, binding) {\n  var value = this.expression.get(context);\n  if (value instanceof Template) {\n    var start = document.createComment(this.expression);\n    var end = document.createComment('/' + this.expression);\n    var condition = this.getCondition(context);\n    parent.appendChild(start);\n    value.appendTo(parent, context);\n    parent.appendChild(end);\n    updateRange(context, binding, this, start, end, null, condition);\n    return;\n  }\n  var data = this.stringify(value);\n  var node = document.createTextNode(data);\n  parent.appendChild(node);\n  addNodeBinding(this, context, node);\n};\nDynamicText.prototype.attachTo = function(parent, node, context) {\n  var value = this.expression.get(context);\n  if (value instanceof Template) {\n    var start = document.createComment(this.expression);\n    var end = document.createComment('/' + this.expression);\n    var condition = this.getCondition(context);\n    parent.insertBefore(start, node || null);\n    node = value.attachTo(parent, node, context);\n    parent.insertBefore(end, node || null);\n    updateRange(context, null, this, start, end, null, condition);\n    return node;\n  }\n  var data = this.stringify(value);\n  return attachText(parent, node, data, this, context);\n};\nDynamicText.prototype.update = function(context, binding) {\n  if (binding instanceof RangeBinding) {\n    this._blockUpdate(context, binding);\n    return;\n  }\n  var value = this.expression.get(context);\n  if (value instanceof Template) {\n    var start = binding.node;\n    if (!start.parentNode) return;\n    var end = start;\n    var fragment = this.getFragment(context);\n    replaceRange(context, start, end, fragment, binding);\n    return;\n  }\n  binding.node.data = this.stringify(value);\n};\nDynamicText.prototype.getCondition = function(context) {\n  return this.expression.get(context);\n};\nDynamicText.prototype.type = 'DynamicText';\nDynamicText.prototype.serialize = function() {\n  return serializeObject.instance(this, this.expression);\n};\n\nfunction attachText(parent, node, data, template, context) {\n  if (!node) {\n    var newNode = document.createTextNode(data);\n    parent.appendChild(newNode);\n    addNodeBinding(template, context, newNode);\n    return;\n  }\n  if (node.nodeType === 3) {\n    // Proceed if nodes already match\n    if (node.data === data) {\n      addNodeBinding(template, context, node);\n      return node.nextSibling;\n    }\n    data = normalizeLineBreaks(data);\n    // Split adjacent text nodes that would have been merged together in HTML\n    var nextNode = splitData(node, data.length);\n    if (node.data !== data) {\n      throw attachError(parent, node);\n    }\n    addNodeBinding(template, context, node);\n    return nextNode;\n  }\n  // An empty text node might not be created at the end of some text\n  if (data === '') {\n    var newNode = document.createTextNode('');\n    parent.insertBefore(newNode, node || null);\n    addNodeBinding(template, context, newNode);\n    return node;\n  }\n  throw attachError(parent, node);\n}\n\nfunction Comment(data, hooks) {\n  this.data = data;\n  this.hooks = hooks;\n}\nComment.prototype = Object.create(Template.prototype);\nComment.prototype.constructor = Comment;\nComment.prototype.get = function() {\n  return '<!--' + this.data + '-->';\n};\nComment.prototype.appendTo = function(parent, context) {\n  var node = document.createComment(this.data);\n  parent.appendChild(node);\n  emitHooks(this.hooks, context, node);\n};\nComment.prototype.attachTo = function(parent, node, context) {\n  return attachComment(parent, node, this.data, this, context);\n};\nComment.prototype.type = 'Comment';\nComment.prototype.serialize = function() {\n  return serializeObject.instance(this, this.data, this.hooks);\n}\n\nfunction DynamicComment(expression, hooks) {\n  this.expression = expression;\n  this.hooks = hooks;\n}\nDynamicComment.prototype = Object.create(Template.prototype);\nDynamicComment.prototype.constructor = DynamicComment;\nDynamicComment.prototype.get = function(context) {\n  var value = getUnescapedValue(this.expression, context);\n  var data = this.stringify(value);\n  return '<!--' + data + '-->';\n};\nDynamicComment.prototype.appendTo = function(parent, context) {\n  var value = getUnescapedValue(this.expression, context);\n  var data = this.stringify(value);\n  var node = document.createComment(data);\n  parent.appendChild(node);\n  addNodeBinding(this, context, node);\n};\nDynamicComment.prototype.attachTo = function(parent, node, context) {\n  var value = getUnescapedValue(this.expression, context);\n  var data = this.stringify(value);\n  return attachComment(parent, node, data, this, context);\n};\nDynamicComment.prototype.update = function(context, binding) {\n  var value = getUnescapedValue(this.expression, context);\n  binding.node.data = this.stringify(value);\n};\nDynamicComment.prototype.type = 'DynamicComment';\nDynamicComment.prototype.serialize = function() {\n  return serializeObject.instance(this, this.expression, this.hooks);\n}\n\nfunction attachComment(parent, node, data, template, context) {\n  // Sometimes IE fails to create Comment nodes from HTML or innerHTML.\n  // This is an issue inside of <select> elements, for example.\n  if (!node || node.nodeType !== 8) {\n    var newNode = document.createComment(data);\n    parent.insertBefore(newNode, node || null);\n    addNodeBinding(template, context, newNode);\n    return node;\n  }\n  // Proceed if nodes already match\n  if (node.data === data) {\n    addNodeBinding(template, context, node);\n    return node.nextSibling;\n  }\n  throw attachError(parent, node);\n}\n\nfunction addNodeBinding(template, context, node) {\n  if (template.expression && !template.unbound) {\n    context.addBinding(new NodeBinding(template, context, node));\n  }\n  emitHooks(template.hooks, context, node);\n}\n\nfunction Html(data) {\n  this.data = data;\n}\nHtml.prototype = Object.create(Template.prototype);\nHtml.prototype.constructor = Html;\nHtml.prototype.get = function() {\n  return this.data;\n};\nHtml.prototype.appendTo = function(parent) {\n  var fragment = createHtmlFragment(parent, this.data);\n  parent.appendChild(fragment);\n};\nHtml.prototype.attachTo = function(parent, node) {\n  return attachHtml(parent, node, this.data);\n};\nHtml.prototype.type = \"Html\";\nHtml.prototype.serialize = function() {\n  return serializeObject.instance(this, this.data);\n};\n\nfunction DynamicHtml(expression) {\n  this.expression = expression;\n  this.ending = '/' + expression;\n}\nDynamicHtml.prototype = Object.create(Template.prototype);\nDynamicHtml.prototype.constructor = DynamicHtml;\nDynamicHtml.prototype.get = function(context) {\n  var value = getUnescapedValue(this.expression, context);\n  return this.stringify(value);\n};\nDynamicHtml.prototype.appendTo = function(parent, context, binding) {\n  var start = document.createComment(this.expression);\n  var end = document.createComment(this.ending);\n  var value = getUnescapedValue(this.expression, context);\n  var html = this.stringify(value);\n  var fragment = createHtmlFragment(parent, html);\n  parent.appendChild(start);\n  parent.appendChild(fragment);\n  parent.appendChild(end);\n  updateRange(context, binding, this, start, end);\n};\nDynamicHtml.prototype.attachTo = function(parent, node, context) {\n  var start = document.createComment(this.expression);\n  var end = document.createComment(this.ending);\n  var value = getUnescapedValue(this.expression, context);\n  var html = this.stringify(value);\n  parent.insertBefore(start, node || null);\n  node = attachHtml(parent, node, html);\n  parent.insertBefore(end, node || null);\n  updateRange(context, null, this, start, end);\n  return node;\n};\nDynamicHtml.prototype.update = function(context, binding) {\n  var parent = binding.start.parentNode;\n  if (!parent) return;\n  // Get start and end in advance, since binding is mutated in getFragment\n  var start = binding.start;\n  var end = binding.end;\n  var value = getUnescapedValue(this.expression, context);\n  var html = this.stringify(value);\n  var fragment = createHtmlFragment(parent, html);\n  var innerOnly = true;\n  replaceRange(context, start, end, fragment, binding, innerOnly);\n};\nDynamicHtml.prototype.type = 'DynamicHtml';\nDynamicHtml.prototype.serialize = function() {\n  return serializeObject.instance(this, this.expression);\n};\n\nfunction createHtmlFragment(parent, html) {\n  if (parent && parent.nodeType === 1) {\n    var range = document.createRange();\n    range.selectNodeContents(parent);\n    return range.createContextualFragment(html);\n  }\n  var div = document.createElement('div');\n  var range = document.createRange();\n  div.innerHTML = html;\n  range.selectNodeContents(div);\n  return range.extractContents();\n}\nfunction attachHtml(parent, node, html) {\n  var fragment = createHtmlFragment(parent, html);\n  for (var i = 0, len = fragment.childNodes.length; i < len; i++) {\n    if (!node) throw attachError(parent, node);\n    node = node.nextSibling;\n  }\n  return node;\n}\n\nfunction Attribute(data, ns) {\n  this.data = data;\n  this.ns = ns;\n}\nAttribute.prototype = Object.create(Template.prototype);\nAttribute.prototype.constructor = Attribute;\nAttribute.prototype.get = Attribute.prototype.getBound = function(context) {\n  return this.data;\n};\nAttribute.prototype.type = 'Attribute';\nAttribute.prototype.serialize = function() {\n  return serializeObject.instance(this, this.data, this.ns);\n};\n\nfunction DynamicAttribute(expression, ns) {\n  // In attributes, expression may be an instance of Template or Expression\n  this.expression = expression;\n  this.ns = ns;\n  this.elementNs = null;\n}\nDynamicAttribute.prototype = Object.create(Attribute.prototype);\nDynamicAttribute.prototype.constructor = DynamicAttribute;\nDynamicAttribute.prototype.get = function(context) {\n  return getUnescapedValue(this.expression, context);\n};\nDynamicAttribute.prototype.getBound = function(context, element, name, elementNs) {\n  this.elementNs = elementNs;\n  context.addBinding(new AttributeBinding(this, context, element, name));\n  return getUnescapedValue(this.expression, context);\n};\nDynamicAttribute.prototype.update = function(context, binding) {\n  var value = getUnescapedValue(this.expression, context);\n  var element = binding.element;\n  var propertyName = !this.elementNs && UPDATE_PROPERTIES[binding.name];\n  if (propertyName) {\n    // Update via DOM property, short-circuiting if no update is needed.\n    // Certain properties must be strings, so for those properties, the value gets stringified.\n    //\n    // There is one special case, when updating the string `input.value` property with a number.\n    // If a user tries to type \"1.01\" in an `<input type=\"number\">, then once they've typed \"1.0\",\n    // the context value is set to `1`, triggering this update function to set the input value to\n    // \"1\". That means typing \"1.01\" would be impossible without special handling to avoid\n    // overwriting an existing input value of \"1.0\" with a new value of \"1\".\n    if (element.tagName === 'INPUT' && propertyName === 'value' && typeof value === 'number') {\n      if (parseFloat(element.value) === value) {\n        return;\n      }\n    }\n    var propertyValue = (STRING_PROPERTIES[binding.name]) ?\n      this.stringify(value) : value;\n    if (element[propertyName] === propertyValue) return;\n    element[propertyName] = propertyValue;\n    return;\n  }\n  if (value === false || value == null) {\n    if (this.ns) {\n      element.removeAttributeNS(this.ns, binding.name);\n    } else {\n      element.removeAttribute(binding.name);\n    }\n    return;\n  }\n  if (value === true) value = binding.name;\n  if (this.ns) {\n    element.setAttributeNS(this.ns, binding.name, value);\n  } else {\n    element.setAttribute(binding.name, value);\n  }\n};\nDynamicAttribute.prototype.type = 'DynamicAttribute';\nDynamicAttribute.prototype.serialize = function() {\n  return serializeObject.instance(this, this.expression, this.ns);\n};\n\nfunction getUnescapedValue(expression, context) {\n  var unescaped = true;\n  var value = expression.get(context, unescaped);\n  while (value instanceof Template) {\n    value = value.get(context, unescaped);\n  }\n  return value;\n}\n\nfunction Element(tagName, attributes, content, hooks, selfClosing, notClosed, ns) {\n  this.tagName = tagName;\n  this.attributes = attributes;\n  this.content = content;\n  this.hooks = hooks;\n  this.selfClosing = selfClosing;\n  this.notClosed = notClosed;\n  this.ns = ns;\n\n  this.endTag = getEndTag(tagName, selfClosing, notClosed);\n  this.startClose = getStartClose(selfClosing);\n  var lowerTagName = tagName && tagName.toLowerCase();\n  this.unescapedContent = (lowerTagName === 'script' || lowerTagName === 'style');\n  this.bindContentToValue = (lowerTagName === 'textarea');\n}\nElement.prototype = Object.create(Template.prototype);\nElement.prototype.constructor = Element;\nElement.prototype.getTagName = function() {\n  return this.tagName;\n};\nElement.prototype.getEndTag = function() {\n  return this.endTag;\n};\nElement.prototype.get = function(context) {\n  var tagName = this.getTagName(context);\n  var endTag = this.getEndTag(tagName);\n  var tagItems = [tagName];\n  for (var key in this.attributes) {\n    var value = this.attributes[key].get(context);\n    if (value === true) {\n      tagItems.push(key);\n    } else if (value !== false && value != null) {\n      tagItems.push(key + '=\"' + escapeAttribute(value) + '\"');\n    }\n  }\n  var startTag = '<' + tagItems.join(' ') + this.startClose;\n  if (this.content) {\n    var inner = contentHtml(this.content, context, this.unescapedContent);\n    return startTag + inner + endTag;\n  }\n  return startTag + endTag;\n};\nElement.prototype.appendTo = function(parent, context) {\n  var tagName = this.getTagName(context);\n  var element = (this.ns) ?\n    document.createElementNS(this.ns, tagName) :\n    document.createElement(tagName);\n  for (var key in this.attributes) {\n    var attribute = this.attributes[key];\n    var value = attribute.getBound(context, element, key, this.ns);\n    if (value === false || value == null) continue;\n    var propertyName = !this.ns && CREATE_PROPERTIES[key];\n    if (propertyName) {\n      element[propertyName] = value;\n      continue;\n    }\n    if (value === true) value = key;\n    if (attribute.ns) {\n      element.setAttributeNS(attribute.ns, key, value);\n    } else {\n      element.setAttribute(key, value);\n    }\n  }\n  if (this.content) {\n    this._bindContent(context, element);\n    appendContent(element, this.content, context);\n  }\n  parent.appendChild(element);\n  emitHooks(this.hooks, context, element);\n};\nElement.prototype.attachTo = function(parent, node, context) {\n  var tagName = this.getTagName(context);\n  if (\n    !node ||\n    node.nodeType !== 1 ||\n    node.tagName.toLowerCase() !== tagName.toLowerCase()\n  ) {\n    throw attachError(parent, node);\n  }\n  for (var key in this.attributes) {\n    // Get each attribute to create bindings\n    this.attributes[key].getBound(context, node, key, this.ns);\n    // TODO: Ideally, this would also check that the node's current attributes\n    // are equivalent, but there are some tricky edge cases\n  }\n  if (this.content) {\n    this._bindContent(context, node);\n    attachContent(node, node.firstChild, this.content, context);\n  }\n  emitHooks(this.hooks, context, node);\n  return node.nextSibling;\n};\nElement.prototype._bindContent = function(context, element) {\n  // For textareas with dynamic text content, bind to the value property\n  var child = this.bindContentToValue &&\n    this.content.length === 1 &&\n    this.content[0];\n  if (child instanceof DynamicText) {\n    child.unbound = true;\n    var template = new DynamicAttribute(child.expression);\n    context.addBinding(new AttributeBinding(template, context, element, 'value'));\n  }\n};\nElement.prototype.type = 'Element';\nElement.prototype.serialize = function() {\n  return serializeObject.instance(\n    this\n  , this.tagName\n  , this.attributes\n  , this.content\n  , this.hooks\n  , this.selfClosing\n  , this.notClosed\n  , this.ns\n  );\n};\n\nfunction DynamicElement(tagName, attributes, content, hooks, selfClosing, notClosed, ns) {\n  this.tagName = tagName;\n  this.attributes = attributes;\n  this.content = content;\n  this.hooks = hooks;\n  this.selfClosing = selfClosing;\n  this.notClosed = notClosed;\n  this.ns = ns;\n\n  this.startClose = getStartClose(selfClosing);\n  this.unescapedContent = false;\n}\nDynamicElement.prototype = Object.create(Element.prototype);\nDynamicElement.prototype.constructor = DynamicElement;\nDynamicElement.prototype.getTagName = function(context) {\n  return getUnescapedValue(this.tagName, context);\n};\nDynamicElement.prototype.getEndTag = function(tagName) {\n  return getEndTag(tagName, this.selfClosing, this.notClosed);\n};\nDynamicElement.prototype.type = 'DynamicElement';\n\nfunction getStartClose(selfClosing) {\n  return (selfClosing) ? ' />' : '>';\n}\n\nfunction getEndTag(tagName, selfClosing, notClosed) {\n  var lowerTagName = tagName && tagName.toLowerCase();\n  var isVoid = VOID_ELEMENTS[lowerTagName];\n  return (isVoid || selfClosing || notClosed) ? '' : '</' + tagName + '>';\n}\n\nfunction getAttributeValue(element, name) {\n  var propertyName = UPDATE_PROPERTIES[name];\n  return (propertyName) ? element[propertyName] : element.getAttribute(name);\n}\n\nfunction emitHooks(hooks, context, value) {\n  if (!hooks) return;\n  context.queue(function queuedHooks() {\n    for (var i = 0, len = hooks.length; i < len; i++) {\n      hooks[i].emit(context, value);\n    }\n  });\n}\n\nfunction Block(expression, content) {\n  this.expression = expression;\n  this.ending = '/' + expression;\n  this.content = content;\n}\nBlock.prototype = Object.create(Template.prototype);\nBlock.prototype.constructor = Block;\nBlock.prototype.get = function(context, unescaped) {\n  var blockContext = context.child(this.expression);\n  return contentHtml(this.content, blockContext, unescaped);\n};\nBlock.prototype.appendTo = function(parent, context, binding) {\n  var blockContext = context.child(this.expression);\n  var start = document.createComment(this.expression);\n  var end = document.createComment(this.ending);\n  var condition = this.getCondition(context);\n  parent.appendChild(start);\n  appendContent(parent, this.content, blockContext);\n  parent.appendChild(end);\n  updateRange(context, binding, this, start, end, null, condition);\n};\nBlock.prototype.attachTo = function(parent, node, context) {\n  var blockContext = context.child(this.expression);\n  var start = document.createComment(this.expression);\n  var end = document.createComment(this.ending);\n  var condition = this.getCondition(context);\n  parent.insertBefore(start, node || null);\n  node = attachContent(parent, node, this.content, blockContext);\n  parent.insertBefore(end, node || null);\n  updateRange(context, null, this, start, end, null, condition);\n  return node;\n};\nBlock.prototype.type = 'Block';\nBlock.prototype.serialize = function() {\n  return serializeObject.instance(this, this.expression, this.content);\n};\nBlock.prototype.update = function(context, binding) {\n  if (!binding.start.parentNode) return;\n  var condition = this.getCondition(context);\n  // Cancel update if prior condition is equivalent to current value\n  if (equalConditions(condition, binding.condition)) return;\n  binding.condition = condition;\n  // Get start and end in advance, since binding is mutated in getFragment\n  var start = binding.start;\n  var end = binding.end;\n  var fragment = this.getFragment(context, binding);\n  replaceRange(context, start, end, fragment, binding);\n};\nBlock.prototype.getCondition = function(context) {\n  // We do an identity check to see if the value has changed before updating.\n  // With objects, the object would still be the same, so this identity check\n  // would fail to update enough. Thus, return NaN, which never equals anything\n  // including itself, so that we always update on objects.\n  //\n  // We could also JSON stringify or use some other hashing approach. However,\n  // that could be really expensive on gets of things that never change, and\n  // is probably not a good tradeoff. Perhaps there should be a separate block\n  // type that is only used in the case of dynamic updates\n  var value = this.expression.get(context);\n  return (typeof value === 'object') ? NaN : value;\n};\nDynamicText.prototype._blockUpdate = Block.prototype.update;\n\nfunction ConditionalBlock(expressions, contents) {\n  this.expressions = expressions;\n  this.beginning = expressions.join('; ');\n  this.ending = '/' + this.beginning;\n  this.contents = contents;\n}\nConditionalBlock.prototype = Object.create(Block.prototype);\nConditionalBlock.prototype.constructor = ConditionalBlock;\nConditionalBlock.prototype.get = function(context, unescaped) {\n  var condition = this.getCondition(context);\n  if (condition == null) return '';\n  var expression = this.expressions[condition];\n  var blockContext = context.child(expression);\n  return contentHtml(this.contents[condition], blockContext, unescaped);\n};\nConditionalBlock.prototype.appendTo = function(parent, context, binding) {\n  var start = document.createComment(this.beginning);\n  var end = document.createComment(this.ending);\n  parent.appendChild(start);\n  var condition = this.getCondition(context);\n  if (condition != null) {\n    var expression = this.expressions[condition];\n    var blockContext = context.child(expression);\n    appendContent(parent, this.contents[condition], blockContext);\n  }\n  parent.appendChild(end);\n  updateRange(context, binding, this, start, end, null, condition);\n};\nConditionalBlock.prototype.attachTo = function(parent, node, context) {\n  var start = document.createComment(this.beginning);\n  var end = document.createComment(this.ending);\n  parent.insertBefore(start, node || null);\n  var condition = this.getCondition(context);\n  if (condition != null) {\n    var expression = this.expressions[condition];\n    var blockContext = context.child(expression);\n    node = attachContent(parent, node, this.contents[condition], blockContext);\n  }\n  parent.insertBefore(end, node || null);\n  updateRange(context, null, this, start, end, null, condition);\n  return node;\n};\nConditionalBlock.prototype.type = 'ConditionalBlock';\nConditionalBlock.prototype.serialize = function() {\n  return serializeObject.instance(this, this.expressions, this.contents);\n};\nConditionalBlock.prototype.update = function(context, binding) {\n  if (!binding.start.parentNode) return;\n  var condition = this.getCondition(context);\n  // Cancel update if prior condition is equivalent to current value\n  if (equalConditions(condition, binding.condition)) return;\n  binding.condition = condition;\n  // Get start and end in advance, since binding is mutated in getFragment\n  var start = binding.start;\n  var end = binding.end;\n  var fragment = this.getFragment(context, binding);\n  replaceRange(context, start, end, fragment, binding);\n};\nConditionalBlock.prototype.getCondition = function(context) {\n  for (var i = 0, len = this.expressions.length; i < len; i++) {\n    if (this.expressions[i].truthy(context)) {\n      return i;\n    }\n  }\n};\n\nfunction EachBlock(expression, content, elseContent) {\n  this.expression = expression;\n  this.ending = '/' + expression;\n  this.content = content;\n  this.elseContent = elseContent;\n}\nEachBlock.prototype = Object.create(Block.prototype);\nEachBlock.prototype.constructor = EachBlock;\nEachBlock.prototype.get = function(context, unescaped) {\n  var items = this.expression.get(context);\n  if (items && items.length) {\n    var html = '';\n    for (var i = 0, len = items.length; i < len; i++) {\n      var itemContext = context.eachChild(this.expression, i);\n      html += contentHtml(this.content, itemContext, unescaped);\n    }\n    return html;\n  } else if (this.elseContent) {\n    return contentHtml(this.elseContent, context, unescaped);\n  }\n  return '';\n};\nEachBlock.prototype.appendTo = function(parent, context, binding) {\n  var items = this.expression.get(context);\n  var start = document.createComment(this.expression);\n  var end = document.createComment(this.ending);\n  parent.appendChild(start);\n  if (items && items.length) {\n    for (var i = 0, len = items.length; i < len; i++) {\n      var itemContext = context.eachChild(this.expression, i);\n      this.appendItemTo(parent, itemContext, start);\n    }\n  } else if (this.elseContent) {\n    appendContent(parent, this.elseContent, context);\n  }\n  parent.appendChild(end);\n  updateRange(context, binding, this, start, end);\n};\nEachBlock.prototype.appendItemTo = function(parent, context, itemFor, binding) {\n  var before = parent.lastChild;\n  var start, end;\n  appendContent(parent, this.content, context);\n  if (before === parent.lastChild) {\n    start = end = document.createComment('empty');\n    parent.appendChild(start);\n  } else {\n    start = (before && before.nextSibling) || parent.firstChild;\n    end = parent.lastChild;\n  }\n  updateRange(context, binding, this, start, end, itemFor);\n};\nEachBlock.prototype.attachTo = function(parent, node, context) {\n  var items = this.expression.get(context);\n  var start = document.createComment(this.expression);\n  var end = document.createComment(this.ending);\n  parent.insertBefore(start, node || null);\n  if (items && items.length) {\n    for (var i = 0, len = items.length; i < len; i++) {\n      var itemContext = context.eachChild(this.expression, i);\n      node = this.attachItemTo(parent, node, itemContext, start);\n    }\n  } else if (this.elseContent) {\n    node = attachContent(parent, node, this.elseContent, context);\n  }\n  parent.insertBefore(end, node || null);\n  updateRange(context, null, this, start, end);\n  return node;\n};\nEachBlock.prototype.attachItemTo = function(parent, node, context, itemFor) {\n  var start, end;\n  var oldPrevious = node && node.previousSibling;\n  var nextNode = attachContent(parent, node, this.content, context);\n  if (nextNode === node) {\n    start = end = document.createComment('empty');\n    parent.insertBefore(start, node || null);\n  } else {\n    start = (oldPrevious && oldPrevious.nextSibling) || parent.firstChild;\n    end = (nextNode && nextNode.previousSibling) || parent.lastChild;\n  }\n  updateRange(context, null, this, start, end, itemFor);\n  return nextNode;\n};\nEachBlock.prototype.update = function(context, binding) {\n  if (!binding.start.parentNode) return;\n  var start = binding.start;\n  var end = binding.end;\n  if (binding.itemFor) {\n    var fragment = document.createDocumentFragment();\n    this.appendItemTo(fragment, context, binding.itemFor, binding);\n  } else {\n    var fragment = this.getFragment(context, binding);\n  }\n  replaceRange(context, start, end, fragment, binding);\n};\nEachBlock.prototype.insert = function(context, binding, index, howMany) {\n  var parent = binding.start.parentNode;\n  if (!parent) return;\n  // In case we are inserting all of the items, update instead. This is needed\n  // when we were previously rendering elseContent so that it is replaced\n  if (index === 0 && this.expression.get(context).length === howMany) {\n    return this.update(context, binding);\n  }\n  var node = indexStartNode(binding, index);\n  var fragment = document.createDocumentFragment();\n  for (var i = index, len = index + howMany; i < len; i++) {\n    var itemContext = context.eachChild(this.expression, i);\n    this.appendItemTo(fragment, itemContext, binding.start);\n  }\n  parent.insertBefore(fragment, node || null);\n};\nEachBlock.prototype.remove = function(context, binding, index, howMany) {\n  var parent = binding.start.parentNode;\n  if (!parent) return;\n  // In case we are removing all of the items, update instead. This is needed\n  // when elseContent should be rendered\n  if (index === 0 && this.expression.get(context).length === 0) {\n    return this.update(context, binding);\n  }\n  var node = indexStartNode(binding, index);\n  var i = 0;\n  while (node) {\n    if (node === binding.end) return;\n    if (node.$bindItemStart && node.$bindItemStart.itemFor === binding.start) {\n      if (howMany === i++) return;\n    }\n    var nextNode = node.nextSibling;\n    parent.removeChild(node);\n    emitRemoved(context, node, binding);\n    node = nextNode;\n  }\n};\nEachBlock.prototype.move = function(context, binding, from, to, howMany) {\n  var parent = binding.start.parentNode;\n  if (!parent) return;\n  var node = indexStartNode(binding, from);\n  var fragment = document.createDocumentFragment();\n  var i = 0;\n  while (node) {\n    if (node === binding.end) break;\n    if (node.$bindItemStart && node.$bindItemStart.itemFor === binding.start) {\n      if (howMany === i++) break;\n    }\n    var nextNode = node.nextSibling;\n    fragment.appendChild(node);\n    node = nextNode;\n  }\n  node = indexStartNode(binding, to);\n  parent.insertBefore(fragment, node || null);\n};\nEachBlock.prototype.type = 'EachBlock';\nEachBlock.prototype.serialize = function() {\n  return serializeObject.instance(this, this.expression, this.content, this.elseContent);\n};\n\nfunction indexStartNode(binding, index) {\n  var node = binding.start;\n  var i = 0;\n  while (node = node.nextSibling) {\n    if (node === binding.end) return node;\n    if (node.$bindItemStart && node.$bindItemStart.itemFor === binding.start) {\n      if (index === i) return node;\n      i++;\n    }\n  }\n}\n\nfunction updateRange(context, binding, template, start, end, itemFor, condition) {\n  if (binding) {\n    binding.start = start;\n    binding.end = end;\n    binding.condition = condition;\n    setNodeBounds(binding, start, itemFor);\n  } else {\n    context.addBinding(new RangeBinding(template, context, start, end, itemFor, condition));\n  }\n}\nfunction setNodeBounds(binding, start, itemFor) {\n  if (itemFor) {\n    setNodeProperty(start, '$bindItemStart', binding);\n  } else {\n    setNodeProperty(start, '$bindStart', binding);\n  }\n}\n\nfunction appendContent(parent, content, context) {\n  for (var i = 0, len = content.length; i < len; i++) {\n    content[i].appendTo(parent, context);\n  }\n}\nfunction attachContent(parent, node, content, context) {\n  for (var i = 0, len = content.length; i < len; i++) {\n    while (node && node.hasAttribute && node.hasAttribute('data-no-attach')) {\n      node = node.nextSibling;\n    }\n    node = content[i].attachTo(parent, node, context);\n  }\n  return node;\n}\nfunction contentHtml(content, context, unescaped) {\n  var html = '';\n  for (var i = 0, len = content.length; i < len; i++) {\n    html += content[i].get(context, unescaped);\n  }\n  return html;\n}\nfunction replaceRange(context, start, end, fragment, binding, innerOnly) {\n  // Note: the calling function must make sure to check that there is a parent\n  var parent = start.parentNode;\n  // Copy item binding from old start to fragment being inserted\n  if (start.$bindItemStart && fragment.firstChild) {\n    setNodeProperty(fragment.firstChild, '$bindItemStart', start.$bindItemStart);\n    start.$bindItemStart.start = fragment.firstChild;\n  }\n  // Fast path for single node replacements\n  if (start === end) {\n    parent.replaceChild(fragment, start);\n    emitRemoved(context, start, binding);\n    return;\n  }\n  // Remove all nodes from start to end\n  var node = (innerOnly) ? start.nextSibling : start;\n  var nextNode;\n  while (node) {\n    nextNode = node.nextSibling;\n    emitRemoved(context, node, binding);\n    if (innerOnly && node === end) {\n      nextNode = end;\n      break;\n    }\n    parent.removeChild(node);\n    if (node === end) break;\n    node = nextNode;\n  }\n  // This also works if nextNode is null, by doing an append\n  parent.insertBefore(fragment, nextNode || null);\n}\nfunction emitRemoved(context, node, ignore) {\n  context.removeNode(node);\n  emitRemovedBinding(context, ignore, node, '$bindNode');\n  emitRemovedBinding(context, ignore, node, '$bindStart');\n  emitRemovedBinding(context, ignore, node, '$bindItemStart');\n  var attributes = node.$bindAttributes;\n  if (attributes) {\n    node.$bindAttributes = null;\n    for (var key in attributes) {\n      context.removeBinding(attributes[key]);\n    }\n  }\n  for (node = node.firstChild; node; node = node.nextSibling) {\n    emitRemoved(context, node, ignore);\n  }\n}\nfunction emitRemovedBinding(context, ignore, node, property) {\n  var binding = node[property];\n  if (binding) {\n    node[property] = null;\n    if (binding !== ignore) {\n      context.removeBinding(binding);\n    }\n  }\n}\n\nfunction attachError(parent, node) {\n  if (typeof console !== 'undefined') {\n    console.error('Attach failed for', node, 'within', parent);\n  }\n  return new Error('Attaching bindings failed, because HTML structure ' +\n    'does not match client rendering.'\n  );\n}\n\nfunction Binding() {\n  this.meta = null;\n}\nBinding.prototype.type = 'Binding';\nBinding.prototype.update = function() {\n  this.context.pause();\n  this.template.update(this.context, this);\n  this.context.unpause();\n};\nBinding.prototype.insert = function() {\n  this.update();\n};\nBinding.prototype.remove = function() {\n  this.update();\n};\nBinding.prototype.move = function() {\n  this.update();\n};\n\nfunction NodeBinding(template, context, node) {\n  this.template = template;\n  this.context = context;\n  this.node = node;\n  this.meta = null;\n  setNodeProperty(node, '$bindNode', this);\n}\nNodeBinding.prototype = Object.create(Binding.prototype);\nNodeBinding.prototype.constructor = NodeBinding;\nNodeBinding.prototype.type = 'NodeBinding';\n\nfunction AttributeBindingsMap() {}\nfunction AttributeBinding(template, context, element, name) {\n  this.template = template;\n  this.context = context;\n  this.element = element;\n  this.name = name;\n  this.meta = null;\n  var map = element.$bindAttributes ||\n    (element.$bindAttributes = new AttributeBindingsMap());\n  map[name] = this;\n}\nAttributeBinding.prototype = Object.create(Binding.prototype);\nAttributeBinding.prototype.constructor = AttributeBinding;\nAttributeBinding.prototype.type = 'AttributeBinding';\n\nfunction RangeBinding(template, context, start, end, itemFor, condition) {\n  this.template = template;\n  this.context = context;\n  this.start = start;\n  this.end = end;\n  this.itemFor = itemFor;\n  this.condition = condition;\n  this.meta = null;\n  setNodeBounds(this, start, itemFor);\n}\nRangeBinding.prototype = Object.create(Binding.prototype);\nRangeBinding.prototype.constructor = RangeBinding;\nRangeBinding.prototype.type = 'RangeBinding';\nRangeBinding.prototype.insert = function(index, howMany) {\n  this.context.pause();\n  if (this.template.insert) {\n    this.template.insert(this.context, this, index, howMany);\n  } else {\n    this.template.update(this.context, this);\n  }\n  this.context.unpause();\n};\nRangeBinding.prototype.remove = function(index, howMany) {\n  this.context.pause();\n  if (this.template.remove) {\n    this.template.remove(this.context, this, index, howMany);\n  } else {\n    this.template.update(this.context, this);\n  }\n  this.context.unpause();\n};\nRangeBinding.prototype.move = function(from, to, howMany) {\n  this.context.pause();\n  if (this.template.move) {\n    this.template.move(this.context, this, from, to, howMany);\n  } else {\n    this.template.update(this.context, this);\n  }\n  this.context.unpause();\n};\n\n\n//// Utility functions ////\n\nfunction noop() {}\n\nfunction mergeInto(from, to) {\n  for (var key in from) {\n    to[key] = from[key];\n  }\n}\n\nfunction escapeHtml(string) {\n  string = string + '';\n  return string.replace(/[&<]/g, function(match) {\n    return (match === '&') ? '&amp;' : '&lt;';\n  });\n}\n\nfunction escapeAttribute(string) {\n  string = string + '';\n  return string.replace(/[&\"]/g, function(match) {\n    return (match === '&') ? '&amp;' : '&quot;';\n  });\n}\n\nfunction equalConditions(a, b) {\n  // First, test for strict equality\n  if (a === b) return true;\n  // Failing that, allow for template objects used as a condition to define a\n  // custom `equals()` method to indicate equivalence\n  return (a instanceof Template) && a.equals(b);\n}\n\n\n//// Shims & workarounds ////\n\n// General notes:\n//\n// In all cases, Node.insertBefore should have `|| null` after its second\n// argument. IE works correctly when the argument is ommitted or equal\n// to null, but it throws and error if it is equal to undefined.\n\nif (!Array.isArray) {\n  Array.isArray = function(value) {\n    return Object.prototype.toString.call(value) === '[object Array]';\n  };\n}\n\n// Equivalent to textNode.splitText, which is buggy in IE <=9\nfunction splitData(node, index) {\n  var newNode = node.cloneNode(false);\n  newNode.deleteData(0, index);\n  node.deleteData(index, node.length - index);\n  node.parentNode.insertBefore(newNode, node.nextSibling || null);\n  return newNode;\n}\n\n// Defined so that it can be overriden in IE <=8\nfunction setNodeProperty(node, key, value) {\n  return node[key] = value;\n}\n\nfunction normalizeLineBreaks(string) {\n  return string;\n}\n\n(function() {\n  // Don't try to shim in Node.js environment\n  if (typeof document === 'undefined') return;\n\n  var div = document.createElement('div');\n  div.innerHTML = '\\r\\n<br>\\n'\n  var windowsLength = div.firstChild.data.length;\n  var unixLength = div.lastChild.data.length;\n  if (windowsLength === 1 && unixLength === 1) {\n    normalizeLineBreaks = function(string) {\n      return string.replace(/\\r\\n/g, '\\n');\n    };\n  } else if (windowsLength === 2 && unixLength === 2) {\n    normalizeLineBreaks = function(string) {\n      return string.replace(/(^|[^\\r])(\\n+)/g, function(match, value, newLines) {\n        for (var i = newLines.length; i--;) {\n          value += '\\r\\n';\n        }\n        return value;\n      });\n    };\n  }\n\n  // TODO: Shim createHtmlFragment for old IE\n\n  // TODO: Shim setAttribute('style'), which doesn't work in IE <=7\n  // http://webbugtrack.blogspot.com/2007/10/bug-245-setattribute-style-does-not.html\n\n  // TODO: Investigate whether input name attribute works in IE <=7. We could\n  // override Element::appendTo to use IE's alternative createElement syntax:\n  // document.createElement('<input name=\"xxx\">')\n  // http://webbugtrack.blogspot.com/2007/10/bug-235-createelement-is-broken-in-ie.html\n\n  // In IE, input.defaultValue doesn't work correctly, so use input.value,\n  // which mistakenly but conveniently sets both the value property and attribute.\n  //\n  // Surprisingly, in IE <=7, input.defaultChecked must be used instead of\n  // input.checked before the input is in the document.\n  // http://webbugtrack.blogspot.com/2007/11/bug-299-setattribute-checked-does-not.html\n  var input = document.createElement('input');\n  input.defaultValue = 'x';\n  if (input.value !== 'x') {\n    CREATE_PROPERTIES.value = 'value';\n  }\n\n  try {\n    // TextNodes are not expando in IE <=8\n    document.createTextNode('').$try = 0;\n  } catch (err) {\n    setNodeProperty = function(node, key, value) {\n      // If trying to set a property on a TextNode, create a proxy CommentNode\n      // and set the property on that node instead. Put the proxy after the\n      // TextNode if marking the end of a range, and before otherwise.\n      if (node.nodeType === 3) {\n        var proxyNode = node.previousSibling;\n        if (!proxyNode || proxyNode.$bindProxy !== node) {\n          proxyNode = document.createComment('proxy');\n          proxyNode.$bindProxy = node;\n          node.parentNode.insertBefore(proxyNode, node || null);\n        }\n        return proxyNode[key] = value;\n      }\n      // Set the property directly on other node types\n      return node[key] = value;\n    };\n  }\n})();\n",
    "\nexports.concat = function(a, b) {\n  if (!a) return b;\n  if (!b) return a;\n  return a.concat(b);\n};\n\nexports.hasKeys = function(value) {\n  if (!value) return false;\n  for (var key in value) {\n    return true;\n  }\n  return false;\n};\n\nexports.traverseAndCreate = function(node, segments) {\n  var len = segments.length;\n  if (!len) return node;\n  for (var i = 0; i < len; i++) {\n    var segment = segments[i];\n    node = node[segment] || (node[segment] = {});\n  }\n  return node;\n};\n",
    "var serializeObject = require('serialize-object');\nvar operatorFns = require('./operatorFns');\nvar templates = require('./templates');\nvar Template = templates.Template;\nvar util = require('./util');\nvar concat = util.concat;\n\nexports.lookup = lookup;\nexports.templateTruthy = templateTruthy;\nexports.pathSegments = pathSegments;\nexports.renderValue = renderValue;\nexports.renderTemplate = renderTemplate;\nexports.ExpressionMeta = ExpressionMeta;\n\nexports.Expression = Expression;\nexports.LiteralExpression = LiteralExpression;\nexports.PathExpression = PathExpression;\nexports.RelativePathExpression = RelativePathExpression;\nexports.AliasPathExpression = AliasPathExpression;\nexports.AttributePathExpression = AttributePathExpression;\nexports.BracketsExpression = BracketsExpression;\nexports.DeferRenderExpression = DeferRenderExpression;\nexports.ArrayExpression = ArrayExpression;\nexports.ObjectExpression = ObjectExpression;\nexports.FnExpression = FnExpression;\nexports.OperatorExpression = OperatorExpression;\nexports.NewExpression = NewExpression;\nexports.SequenceExpression = SequenceExpression;\nexports.ViewParentExpression = ViewParentExpression;\nexports.ScopedModelExpression = ScopedModelExpression;\n\nfunction lookup(segments, value) {\n  if (!segments) return value;\n\n  for (var i = 0, len = segments.length; i < len; i++) {\n    if (value == null) return value;\n    value = value[segments[i]];\n  }\n  return value;\n}\n\n// Unlike JS, `[]` is falsey. Otherwise, truthiness is the same as JS\nfunction templateTruthy(value) {\n  return (Array.isArray(value)) ? value.length > 0 : !!value;\n}\n\nfunction pathSegments(segments) {\n  var result = [];\n  for (var i = 0; i < segments.length; i++) {\n    var segment = segments[i];\n    result[i] = (typeof segment === 'object') ? segment.item : segment;\n  }\n  return result;\n}\n\nfunction renderValue(value, context) {\n  return (typeof value !== 'object') ? value :\n    (value instanceof Template) ? renderTemplate(value, context) :\n    (Array.isArray(value)) ? renderArray(value, context) :\n    renderObject(value, context);\n}\nfunction renderTemplate(value, context) {\n  var i = 1000;\n  while (value instanceof Template) {\n    if (--i < 0) throw new Error('Maximum template render passes exceeded');\n    value = value.get(context, true);\n  }\n  return value;\n}\nfunction renderArray(array, context) {\n  for (var i = 0; i < array.length; i++) {\n    if (hasTemplateProperty(array[i])) {\n      return renderArrayProperties(array, context);\n    }\n  }\n  return array;\n}\nfunction renderObject(object, context) {\n  return (hasTemplateProperty(object)) ?\n    renderObjectProperties(object, context) : object;\n}\nfunction hasTemplateProperty(object) {\n  if (!object) return false;\n  if (object.constructor !== Object) return false;\n  for (var key in object) {\n    if (object[key] instanceof Template) return true;\n  }\n  return false;\n}\nfunction renderArrayProperties(array, context) {\n  var out = new Array(array.length);\n  for (var i = 0; i < array.length; i++) {\n    out[i] = renderValue(array[i], context);\n  }\n  return out;\n}\nfunction renderObjectProperties(object, context) {\n  var out = {};\n  for (var key in object) {\n    out[key] = renderValue(object[key], context);\n  }\n  return out;\n}\n\nfunction ExpressionMeta(source, blockType, isEnd, as, keyAs, unescaped, bindType, valueType) {\n  this.source = source;\n  this.blockType = blockType;\n  this.isEnd = isEnd;\n  this.as = as;\n  this.keyAs = keyAs;\n  this.unescaped = unescaped;\n  this.bindType = bindType;\n  this.valueType = valueType;\n}\nExpressionMeta.prototype.module = 'expressions';\nExpressionMeta.prototype.type = 'ExpressionMeta';\nExpressionMeta.prototype.serialize = function() {\n  return serializeObject.instance(\n    this\n  , this.source\n  , this.blockType\n  , this.isEnd\n  , this.as\n  , this.keyAs\n  , this.unescaped\n  , this.bindType\n  , this.valueType\n  );\n};\n\nfunction Expression(meta) {\n  this.meta = meta;\n}\nExpression.prototype.module = 'expressions';\nExpression.prototype.type = 'Expression';\nExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.meta);\n};\nExpression.prototype.toString = function() {\n  return this.meta && this.meta.source;\n};\nExpression.prototype.truthy = function(context) {\n  var blockType = this.meta.blockType;\n  if (blockType === 'else') return true;\n  var value = this.get(context, true);\n  var truthy = templateTruthy(value);\n  return (blockType === 'unless') ? !truthy : truthy;\n};\nExpression.prototype.get = function() {};\n// Return the expression's segment list with context objects\nExpression.prototype.resolve = function() {};\n// Return a list of segment lists or null\nExpression.prototype.dependencies = function() {};\n// Return the pathSegments that the expression currently resolves to or null\nExpression.prototype.pathSegments = function(context) {\n  var segments = this.resolve(context);\n  return segments && pathSegments(segments);\n};\nExpression.prototype.set = function(context, value) {\n  var segments = this.pathSegments(context);\n  if (!segments) throw new Error('Expression does not support setting');\n  context.controller.model._set(segments, value);\n};\nExpression.prototype._resolvePatch = function(context, segments) {\n  return (context && context.expression === this && context.item != null) ?\n    segments.concat(context) : segments;\n};\nExpression.prototype.isUnbound = function(context) {\n  // If the template being rendered has an explicit bindType keyword, such as:\n  // {{unbound #item.text}}\n  var bindType = this.meta && this.meta.bindType;\n  if (bindType === 'unbound') return true;\n  if (bindType === 'bound') return false;\n  // Otherwise, inherit from the context\n  return context.unbound;\n};\nExpression.prototype._lookupAndContextifyValue = function(value, context) {\n  if (this.segments && this.segments.length) {\n    // If expression has segments, e.g. `bar.baz` in `#foo.bar.baz`, then\n    // render the base value (e.g. `#foo`) if it's a template and look up the\n    // value at the indicated path.\n    value = renderTemplate(value, context);\n    value = lookup(this.segments, value);\n  }\n  if (value instanceof Template && !(value instanceof templates.ContextClosure)) {\n    // If we're not immediately rendering the template, then create a ContextClosure\n    // so that the value renders with the correct context later.\n    value = new templates.ContextClosure(value, context);\n  }\n  return value;\n};\n\n\nfunction LiteralExpression(value, meta) {\n  this.value = value;\n  this.meta = meta;\n}\nLiteralExpression.prototype = Object.create(Expression.prototype);\nLiteralExpression.prototype.constructor = LiteralExpression;\nLiteralExpression.prototype.type = 'LiteralExpression';\nLiteralExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.value, this.meta);\n};\nLiteralExpression.prototype.get = function() {\n  return this.value;\n};\n\nfunction PathExpression(segments, meta) {\n  this.segments = segments;\n  this.meta = meta;\n}\nPathExpression.prototype = Object.create(Expression.prototype);\nPathExpression.prototype.constructor = PathExpression;\nPathExpression.prototype.type = 'PathExpression';\nPathExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.segments, this.meta);\n};\nPathExpression.prototype.get = function(context) {\n  // See View::dependencies. This is needed in order to handle the case of\n  // getting dependencies within a component template, in which case we cannot\n  // access model data separate from rendering.\n  if (!context.controller) return;\n  return lookup(this.segments, context.controller.model.data);\n};\nPathExpression.prototype.resolve = function(context) {\n  // See View::dependencies. This is needed in order to handle the case of\n  // getting dependencies within a component template, in which case we cannot\n  // access model data separate from rendering.\n  if (!context.controller) return;\n  var segments = concat(context.controller._scope, this.segments);\n  return this._resolvePatch(context, segments);\n};\nPathExpression.prototype.dependencies = function(context, options) {\n  // See View::dependencies. This is needed in order to handle the case of\n  // getting dependencies within a component template, in which case we cannot\n  // access model data separate from rendering.\n  if (!context.controller) return;\n  var value = lookup(this.segments, context.controller.model.data);\n  var dependencies = getDependencies(value, context, options);\n  return appendDependency(dependencies, this, context);\n};\n\nfunction RelativePathExpression(segments, meta) {\n  this.segments = segments;\n  this.meta = meta;\n}\nRelativePathExpression.prototype = Object.create(Expression.prototype);\nRelativePathExpression.prototype.constructor = RelativePathExpression;\nRelativePathExpression.prototype.type = 'RelativePathExpression';\nRelativePathExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.segments, this.meta);\n};\nRelativePathExpression.prototype.get = function(context) {\n  var relativeContext = context.forRelative(this);\n  var value = relativeContext.get();\n  return this._lookupAndContextifyValue(value, relativeContext);\n};\nRelativePathExpression.prototype.resolve = function(context) {\n  var relativeContext = context.forRelative(this);\n  var base = (relativeContext.expression) ?\n    relativeContext.expression.resolve(relativeContext) :\n    [];\n  if (!base) return;\n  var segments = base.concat(this.segments);\n  return this._resolvePatch(context, segments);\n};\nRelativePathExpression.prototype.dependencies = function(context, options) {\n  // Return inner dependencies from our ancestor\n  // (e.g., {{ with foo[bar] }} ... {{ this.x }} has 'bar' as a dependency.)\n  var relativeContext = context.forRelative(this);\n  var dependencies = relativeContext.expression &&\n    relativeContext.expression.dependencies(relativeContext, options);\n  return swapLastDependency(dependencies, this, context);\n};\n\nfunction AliasPathExpression(alias, segments, meta) {\n  this.alias = alias;\n  this.segments = segments;\n  this.meta = meta;\n}\nAliasPathExpression.prototype = Object.create(Expression.prototype);\nAliasPathExpression.prototype.constructor = AliasPathExpression;\nAliasPathExpression.prototype.type = 'AliasPathExpression';\nAliasPathExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.alias, this.segments, this.meta);\n};\nAliasPathExpression.prototype.get = function(context) {\n  var aliasContext = context.forAlias(this.alias);\n  if (!aliasContext) return;\n  if (aliasContext.keyAlias === this.alias) {\n    return aliasContext.item;\n  }\n  var value = aliasContext.get();\n  return this._lookupAndContextifyValue(value, aliasContext);\n};\nAliasPathExpression.prototype.resolve = function(context) {\n  var aliasContext = context.forAlias(this.alias);\n  if (!aliasContext) return;\n  if (aliasContext.keyAlias === this.alias) return;\n  var base = aliasContext.expression.resolve(aliasContext);\n  if (!base) return;\n  var segments = base.concat(this.segments);\n  return this._resolvePatch(context, segments);\n};\nAliasPathExpression.prototype.dependencies = function(context, options) {\n  var aliasContext = context.forAlias(this.alias);\n  if (!aliasContext) return;\n  if (aliasContext.keyAlias === this.alias) {\n    // For keyAliases, use a dependency of the entire list, so that it will\n    // always update when the list itself changes. This is over-binding, but\n    // would otherwise be much more complex\n    var base = aliasContext.expression.resolve(aliasContext.parent);\n    if (!base) return;\n    return [base];\n  }\n\n  var dependencies = aliasContext.expression.dependencies(aliasContext, options);\n  return swapLastDependency(dependencies, this, context);\n};\n\nfunction AttributePathExpression(attribute, segments, meta) {\n  this.attribute = attribute;\n  this.segments = segments;\n  this.meta = meta;\n}\nAttributePathExpression.prototype = Object.create(Expression.prototype);\nAttributePathExpression.prototype.constructor = AttributePathExpression;\nAttributePathExpression.prototype.type = 'AttributePathExpression';\nAttributePathExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.attribute, this.segments, this.meta);\n};\nAttributePathExpression.prototype.get = function(context) {\n  var attributeContext = context.forAttribute(this.attribute);\n  if (!attributeContext) return;\n  var value = attributeContext.attributes[this.attribute];\n  if (value instanceof Expression) {\n    value = value.get(attributeContext);\n  }\n  return this._lookupAndContextifyValue(value, attributeContext);\n};\nAttributePathExpression.prototype.resolve = function(context) {\n  var attributeContext = context.forAttribute(this.attribute);\n  if (!attributeContext) return;\n  // Attributes may be a template, an expression, or a literal value\n  var base;\n  var value = attributeContext.attributes[this.attribute];\n  if (value instanceof Expression || value instanceof Template) {\n    base = value.resolve(attributeContext);\n  }\n  if (!base) return;\n  var segments = base.concat(this.segments);\n  return this._resolvePatch(context, segments);\n};\nAttributePathExpression.prototype.dependencies = function(context, options) {\n  var attributeContext = context.forAttribute(this.attribute);\n  if (!attributeContext) return;\n\n  // Attributes may be a template, an expression, or a literal value\n  var value = attributeContext.attributes[this.attribute];\n  var dependencies = getDependencies(value, attributeContext, options);\n  return swapLastDependency(dependencies, this, context);\n};\n\nfunction BracketsExpression(before, inside, afterSegments, meta) {\n  this.before = before;\n  this.inside = inside;\n  this.afterSegments = afterSegments;\n  this.meta = meta;\n}\nBracketsExpression.prototype = Object.create(Expression.prototype);\nBracketsExpression.prototype.constructor = BracketsExpression;\nBracketsExpression.prototype.type = 'BracketsExpression';\nBracketsExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.before, this.inside, this.afterSegments, this.meta);\n};\nBracketsExpression.prototype.get = function(context) {\n  var inside = this.inside.get(context);\n  if (inside == null) return;\n  var before = this.before.get(context);\n  if (!before) return;\n  var base = before[inside];\n  return (this.afterSegments) ? lookup(this.afterSegments, base) : base;\n};\nBracketsExpression.prototype.resolve = function(context) {\n  // Get and split the current value of the expression inside the brackets\n  var inside = this.inside.get(context);\n  if (inside == null) return;\n\n  // Concat the before, inside, and optional after segments\n  var base = this.before.resolve(context);\n  if (!base) return;\n  var segments = (this.afterSegments) ?\n    base.concat(inside, this.afterSegments) :\n    base.concat(inside);\n  return this._resolvePatch(context, segments);\n};\nBracketsExpression.prototype.dependencies = function(context, options) {\n  var before = this.before.dependencies(context, options);\n  if (before) before.pop();\n  var inner = this.inside.dependencies(context, options);\n  var dependencies = concat(before, inner);\n  return appendDependency(dependencies, this, context);\n};\n\n// This Expression is used to wrap a template so that when its containing\n// Expression--such as an ObjectExpression or ArrayExpression--is evaluated,\n// it returns the template unrendered and wrapped in the current context.\n// Separating evaluation of the containing expression from template rendering\n// is used to support array attributes of views. This way, we can evaluate an\n// array and iterate through it separately from rendering template content\nfunction DeferRenderExpression(template, meta) {\n  if (!(template instanceof Template)) {\n    throw new Error('DeferRenderExpression requires a Template argument');\n  }\n  this.template = template;\n  this.meta = meta;\n}\nDeferRenderExpression.prototype = Object.create(Expression.prototype);\nDeferRenderExpression.prototype.constructor = DeferRenderExpression;\nDeferRenderExpression.prototype.type = 'DeferRenderExpression';\nDeferRenderExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.template, this.meta);\n};\nDeferRenderExpression.prototype.get = function(context) {\n  return new templates.ContextClosure(this.template, context);\n};\n\nfunction ArrayExpression(items, afterSegments, meta) {\n  this.items = items;\n  this.afterSegments = afterSegments;\n  this.meta = meta;\n}\nArrayExpression.prototype = Object.create(Expression.prototype);\nArrayExpression.prototype.constructor = ArrayExpression;\nArrayExpression.prototype.type = 'ArrayExpression';\nArrayExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.items, this.afterSegments, this.meta);\n};\nArrayExpression.prototype.get = function(context) {\n  var items = new Array(this.items.length);\n  for (var i = 0; i < this.items.length; i++) {\n    var value = this.items[i].get(context);\n    items[i] = value;\n  }\n  return (this.afterSegments) ? lookup(this.afterSegments, items) : items;\n};\nArrayExpression.prototype.dependencies = function(context, options) {\n  if (!this.items) return;\n  var dependencies;\n  for (var i = 0; i < this.items.length; i++) {\n    var itemDependencies = this.items[i].dependencies(context, options);\n    dependencies = concat(dependencies, itemDependencies);\n  }\n  return dependencies;\n};\n\nfunction ObjectExpression(properties, afterSegments, meta) {\n  this.properties = properties;\n  this.afterSegments = afterSegments;\n  this.meta = meta;\n}\nObjectExpression.prototype = Object.create(Expression.prototype);\nObjectExpression.prototype.constructor = ObjectExpression;\nObjectExpression.prototype.type = 'ObjectExpression';\nObjectExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.properties, this.afterSegments, this.meta);\n};\nObjectExpression.prototype.get = function(context) {\n  var object = {};\n  for (var key in this.properties) {\n    var value = this.properties[key].get(context);\n    object[key] = value;\n  }\n  return (this.afterSegments) ? lookup(this.afterSegments, object) : object;\n};\nObjectExpression.prototype.dependencies = function(context, options) {\n  if (!this.properties) return;\n  var dependencies;\n  for (var key in this.properties) {\n    var propertyDependencies = this.properties[key].dependencies(context, options);\n    dependencies = concat(dependencies, propertyDependencies);\n  }\n  return dependencies;\n};\n\nfunction FnExpression(segments, args, afterSegments, meta) {\n  this.segments = segments;\n  this.args = args;\n  this.afterSegments = afterSegments;\n  this.meta = meta;\n  var parentSegments = segments && segments.slice();\n  this.lastSegment = parentSegments && parentSegments.pop();\n  this.parentSegments = (parentSegments && parentSegments.length) ? parentSegments : null;\n}\nFnExpression.prototype = Object.create(Expression.prototype);\nFnExpression.prototype.constructor = FnExpression;\nFnExpression.prototype.type = 'FnExpression';\nFnExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.segments, this.args, this.afterSegments, this.meta);\n};\nFnExpression.prototype.get = function(context) {\n  var value = this.apply(context);\n  // Lookup property underneath computed value if needed\n  return (this.afterSegments) ? lookup(this.afterSegments, value) : value;\n};\nFnExpression.prototype.apply = function(context, extraInputs) {\n  // See View::dependencies. This is needed in order to handle the case of\n  // getting dependencies within a component template, in which case we cannot\n  // access model data separate from rendering.\n  if (!context.controller) return;\n  var parent = this._lookupParent(context);\n  var fn = parent[this.lastSegment];\n  var getFn = fn.get || fn;\n  var out = this._applyFn(getFn, context, extraInputs, parent);\n  return out;\n};\nFnExpression.prototype._lookupParent = function(context) {\n  // Lookup function on current controller\n  var controller = context.controller;\n  var segments = this.parentSegments;\n  var parent = (segments) ? lookup(segments, controller) : controller;\n  if (parent && parent[this.lastSegment]) return parent;\n  // Otherwise lookup function on page\n  var page = controller.page;\n  if (controller !== page) {\n    parent = (segments) ? lookup(segments, page) : page;\n    if (parent && parent[this.lastSegment]) return parent;\n  }\n  // Otherwise lookup function on global\n  parent = (segments) ? lookup(segments, global) : global;\n  if (parent && parent[this.lastSegment]) return parent;\n  // Throw if not found\n  throw new Error('Function not found for: ' + this.segments.join('.'));\n};\nFnExpression.prototype._getInputs = function(context) {\n  var inputs = [];\n  for (var i = 0, len = this.args.length; i < len; i++) {\n    var value = this.args[i].get(context);\n    inputs.push(renderValue(value, context));\n  }\n  return inputs;\n};\nFnExpression.prototype._applyFn = function(fn, context, extraInputs, thisArg) {\n  // Apply if there are no path inputs\n  if (!this.args) {\n    return (extraInputs) ?\n      fn.apply(thisArg, extraInputs) :\n      fn.call(thisArg);\n  }\n  // Otherwise, get the current value for path inputs and apply\n  var inputs = this._getInputs(context);\n  if (extraInputs) {\n    for (var i = 0, len = extraInputs.length; i < len; i++) {\n      inputs.push(extraInputs[i]);\n    }\n  }\n  return fn.apply(thisArg, inputs);\n};\nFnExpression.prototype.dependencies = function(context, options) {\n  var dependencies = [];\n  if (!this.args) return dependencies;\n  for (var i = 0, len = this.args.length; i < len; i++) {\n    var argDependencies = this.args[i].dependencies(context, options);\n    if (!argDependencies || argDependencies.length < 1) continue;\n    var end = argDependencies.length - 1;\n    for (var j = 0; j < end; j++) {\n      dependencies.push(argDependencies[j]);\n    }\n    var last = argDependencies[end];\n    if (last[last.length - 1] !== '*') {\n      last = last.concat('*');\n    }\n    dependencies.push(last);\n  }\n  return dependencies;\n};\nFnExpression.prototype.set = function(context, value) {\n  var controller = context.controller;\n  var fn, parent;\n  while (controller) {\n    parent = (this.parentSegments) ?\n      lookup(this.parentSegments, controller) :\n      controller;\n    fn = parent && parent[this.lastSegment];\n    if (fn) break;\n    controller = controller.parent;\n  }\n  var setFn = fn && fn.set;\n  if (!setFn) throw new Error('No setter function for: ' + this.segments.join('.'));\n  var inputs = this._getInputs(context);\n  inputs.unshift(value);\n  var out = setFn.apply(parent, inputs);\n  for (var i in out) {\n    this.args[i].set(context, out[i]);\n  }\n};\n\nfunction NewExpression(segments, args, afterSegments, meta) {\n  FnExpression.call(this, segments, args, afterSegments, meta);\n}\nNewExpression.prototype = Object.create(FnExpression.prototype);\nNewExpression.prototype.constructor = NewExpression;\nNewExpression.prototype.type = 'NewExpression';\nNewExpression.prototype._applyFn = function(Fn, context) {\n  // Apply if there are no path inputs\n  if (!this.args) return new Fn();\n  // Otherwise, get the current value for path inputs and apply\n  var inputs = this._getInputs(context);\n  inputs.unshift(null);\n  return new (Fn.bind.apply(Fn, inputs))();\n};\n\nfunction OperatorExpression(name, args, afterSegments, meta) {\n  this.name = name;\n  this.args = args;\n  this.afterSegments = afterSegments;\n  this.meta = meta;\n  this.getFn = operatorFns.get[name];\n  this.setFn = operatorFns.set[name];\n}\nOperatorExpression.prototype = Object.create(FnExpression.prototype);\nOperatorExpression.prototype.constructor = OperatorExpression;\nOperatorExpression.prototype.type = 'OperatorExpression';\nOperatorExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.name, this.args, this.afterSegments, this.meta);\n};\nOperatorExpression.prototype.apply = function(context) {\n  var inputs = this._getInputs(context);\n  return this.getFn.apply(null, inputs);\n};\nOperatorExpression.prototype.set = function(context, value) {\n  var inputs = this._getInputs(context);\n  inputs.unshift(value);\n  var out = this.setFn.apply(null, inputs);\n  for (var i in out) {\n    this.args[i].set(context, out[i]);\n  }\n};\n\nfunction SequenceExpression(args, afterSegments, meta) {\n  this.args = args;\n  this.afterSegments = afterSegments;\n  this.meta = meta;\n}\nSequenceExpression.prototype = Object.create(OperatorExpression.prototype);\nSequenceExpression.prototype.constructor = SequenceExpression;\nSequenceExpression.prototype.type = 'SequenceExpression';\nSequenceExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.args, this.afterSegments, this.meta);\n};\nSequenceExpression.prototype.name = ',';\nSequenceExpression.prototype.getFn = operatorFns.get[','];\nSequenceExpression.prototype.resolve = function(context) {\n  var last = this.args[this.args.length - 1];\n  return last.resolve(context);\n};\nSequenceExpression.prototype.dependencies = function(context, options) {\n  var dependencies = [];\n  for (var i = 0, len = this.args.length; i < len; i++) {\n    var argDependencies = this.args[i].dependencies(context, options);\n    for (var j = 0, jLen = argDependencies.length; j < jLen; j++) {\n      dependencies.push(argDependencies[j]);\n    }\n  }\n  return dependencies;\n};\n\n// For each method that takes a context argument, get the nearest parent view\n// context, then delegate methods to the inner expression\nfunction ViewParentExpression(expression, meta) {\n  this.expression = expression;\n  this.meta = meta;\n}\nViewParentExpression.prototype = Object.create(Expression.prototype);\nViewParentExpression.prototype.constructor = ViewParentExpression;\nViewParentExpression.prototype.type = 'ViewParentExpression';\nViewParentExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.expression, this.meta);\n};\nViewParentExpression.prototype.get = function(context) {\n  var parentContext = context.forViewParent();\n  return this.expression.get(parentContext);\n};\nViewParentExpression.prototype.resolve = function(context) {\n  var parentContext = context.forViewParent();\n  return this.expression.resolve(parentContext);\n};\nViewParentExpression.prototype.dependencies = function(context, options) {\n  var parentContext = context.forViewParent();\n  return this.expression.dependencies(parentContext, options);\n};\nViewParentExpression.prototype.pathSegments = function(context) {\n  var parentContext = context.forViewParent();\n  return this.expression.pathSegments(parentContext);\n};\nViewParentExpression.prototype.set = function(context, value) {\n  var parentContext = context.forViewParent();\n  return this.expression.set(parentContext, value);\n};\n\nfunction ScopedModelExpression(expression, meta) {\n  this.expression = expression;\n  this.meta = meta;\n}\nScopedModelExpression.prototype = Object.create(Expression.prototype);\nScopedModelExpression.prototype.constructor = ScopedModelExpression;\nScopedModelExpression.prototype.type = 'ScopedModelExpression';\nScopedModelExpression.prototype.serialize = function() {\n  return serializeObject.instance(this, this.expression, this.meta);\n};\n// Return a scoped model instead of the value\nScopedModelExpression.prototype.get = function(context) {\n  var segments = this.pathSegments(context);\n  if (!segments) return;\n  return context.controller.model.scope(segments.join('.'));\n};\n// Delegate other methods to the inner expression\nScopedModelExpression.prototype.resolve = function(context) {\n  return this.expression.resolve(context);\n};\nScopedModelExpression.prototype.dependencies = function(context, options) {\n  return this.expression.dependencies(context, options);\n};\nScopedModelExpression.prototype.pathSegments = function(context) {\n  return this.expression.pathSegments(context);\n};\nScopedModelExpression.prototype.set = function(context, value) {\n  return this.expression.set(context, value);\n};\n\nfunction getDependencies(value, context, options) {\n  if (value instanceof Expression || value instanceof Template) {\n    return value.dependencies(context, options);\n  }\n}\n\nfunction appendDependency(dependencies, expression, context) {\n  var segments = expression.resolve(context);\n  if (!segments) return dependencies;\n  if (dependencies) {\n    dependencies.push(segments);\n    return dependencies;\n  }\n  return [segments];\n}\n\nfunction swapLastDependency(dependencies, expression, context) {\n  if (!expression.segments.length) {\n    return dependencies;\n  }\n  var segments = expression.resolve(context);\n  if (!segments) return dependencies;\n  if (dependencies) {\n    dependencies.pop();\n    dependencies.push(segments);\n    return dependencies;\n  }\n  return [segments];\n}\n",
    "exports.contexts = require('./lib/contexts');\nexports.expressions = require('./lib/expressions');\nexports.operatorFns = require('./lib/operatorFns');\nexports.options = require('./lib/options');\nexports.templates = require('./lib/templates');\n",
    "module.exports = Dom;\n\nfunction Dom(controller) {\n  this.controller = controller;\n  this._listeners = null;\n}\n\nDom.prototype._initListeners = function() {\n  var dom = this;\n  this.controller.on('destroy', function domOnDestroy() {\n    var listeners = dom._listeners;\n    if (!listeners) return;\n    for (var i = listeners.length; i--;) {\n      listeners[i].remove();\n    }\n    dom._listeners = null;\n  });\n  return this._listeners = [];\n};\n\nDom.prototype._listenerIndex = function(domListener) {\n  var listeners = this._listeners;\n  if (!listeners) return -1;\n  for (var i = listeners.length; i--;) {\n    if (listeners[i].equals(domListener)) return i;\n  }\n  return -1;\n};\n\nDom.prototype.addListener = function(type, target, listener, useCapture) {\n  if (typeof target === 'function') {\n    useCapture = listener;\n    listener = target;\n    target = document;\n  }\n  var domListener =\n    (type === 'destroy') ? new DestroyListener(target, listener) :\n    new DomListener(type, target, listener, useCapture);\n  if (-1 === this._listenerIndex(domListener)) {\n    var listeners = this._listeners || this._initListeners();\n    listeners.push(domListener);\n  }\n  domListener.add();\n};\nDom.prototype.on = Dom.prototype.addListener;\n\nDom.prototype.once = function(type, target, listener, useCapture) {\n  if (typeof target === 'function') {\n    useCapture = listener;\n    listener = target;\n    target = document;\n  }\n  this.addListener(type, target, wrappedListener, useCapture);\n  var dom = this;\n  function wrappedListener() {\n    dom.removeListener(type, target, wrappedListener, useCapture);\n    return listener.apply(this, arguments);\n  }\n};\n\nDom.prototype.removeListener = function(type, target, listener, useCapture) {\n  if (typeof target === 'function') {\n    useCapture = listener;\n    listener = target;\n    target = document;\n  }\n  var domListener = new DomListener(type, target, listener, useCapture);\n  domListener.remove();\n  var i = this._listenerIndex(domListener);\n  if (i > -1) this._listeners.splice(i, 1);\n};\n\nfunction DomListener(type, target, listener, useCapture) {\n  this.type = type;\n  this.target = target;\n  this.listener = listener;\n  this.useCapture = !!useCapture;\n}\nDomListener.prototype.equals = function(domListener) {\n  return this.listener === domListener.listener &&\n    this.target === domListener.target &&\n    this.type === domListener.type &&\n    this.useCapture === domListener.useCapture;\n};\nDomListener.prototype.add = function() {\n  this.target.addEventListener(this.type, this.listener, this.useCapture);\n};\nDomListener.prototype.remove = function() {\n  this.target.removeEventListener(this.type, this.listener, this.useCapture);\n};\n\nfunction DestroyListener(target, listener) {\n  DomListener.call(this, 'destroy', target, listener);\n}\nDestroyListener.prototype = new DomListener();\nDestroyListener.prototype.add = function() {\n  var listeners = this.target.$destroyListeners || (this.target.$destroyListeners = []);\n  if (listeners.indexOf(this.listener) === -1) {\n    listeners.push(this.listener);\n  }\n};\nDestroyListener.prototype.remove = function() {\n  var listeners = this.target.$destroyListeners;\n  if (!listeners) return;\n  var index = listeners.indexOf(this.listener);\n  if (index !== -1) {\n    listeners.splice(index, 1);\n  }\n};\n",
    "var EventEmitter = require('events').EventEmitter;\nvar util = require('racer/lib/util');\nvar Dom = require('./Dom');\n\nmodule.exports = Controller;\n\nfunction Controller(app, page, model) {\n  EventEmitter.call(this);\n  this.dom = new Dom(this);\n  this.app = app;\n  this.page = page;\n  this.model = model;\n  model.data.$controller = this;\n}\n\nutil.mergeInto(Controller.prototype, EventEmitter.prototype);\n\nController.prototype.emitCancellable = function() {\n  var cancelled = false;\n  function cancel() {\n    cancelled = true;\n  }\n\n  var args = Array.prototype.slice.call(arguments);\n  args.push(cancel);\n  this.emit.apply(this, args);\n\n  return cancelled;\n};\n\nController.prototype.emitDelayable = function() {\n  var args = Array.prototype.slice.call(arguments);\n  var callback = args.pop();\n\n  var delayed = false;\n  function delay() {\n    delayed = true;\n    return callback;\n  }\n\n  args.push(delay);\n  this.emit.apply(this, args);\n  if (!delayed) callback();\n\n  return delayed;\n};\n",
    "/*\n * components.js\n *\n * Components associate custom script functionality with a view. They can be\n * distributed as standalone modules containing templates, scripts, and styles.\n * They can also be used to modularize application functionality.\n *\n */\n\nvar util = require('racer/lib/util');\nvar derbyTemplates = require('derby-templates');\nvar templates = derbyTemplates.templates;\nvar expressions = derbyTemplates.expressions;\nvar Controller = require('./Controller');\nvar slice = [].slice;\n\nexports.Component = Component;\nexports.ComponentAttribute = ComponentAttribute;\nexports.ComponentAttributeBinding = ComponentAttributeBinding;\nexports.ComponentFactory = ComponentFactory;\nexports.SingletonComponentFactory = SingletonComponentFactory;\nexports.createFactory = createFactory;\nexports.extendComponent = extendComponent;\n\nfunction Component(context, data) {\n  var parent = context.controller;\n  var id = context.id();\n  var scope = ['$components', id];\n  var model = parent.model.root.eventContext(id);\n  model._at = scope.join('.');\n  data.id = id;\n  model._set(scope, data);\n  // Store a reference to the component's scope such that the expression\n  // getters are relative to the component\n  model.data = data;\n\n  Controller.call(this, parent.app, parent.page, model);\n  this.parent = parent;\n  this.context = context.componentChild(this);\n  this.id = id;\n  this._scope = scope;\n\n  // Add reference to this component on the page so that all components\n  // associated with a page can be destroyed when the page transitions\n  this.page._components[id] = this;\n  this.isDestroyed = false;\n}\n\nutil.mergeInto(Component.prototype, Controller.prototype);\n\nComponent.prototype.destroy = function() {\n  this.emit('destroy');\n  this.model.removeContextListeners();\n  this.model.destroy();\n  delete this.page._components[this.id];\n  if (this.page._eventModel.object) {\n    var components = this.page._eventModel.object.$components;\n    if (components) delete components.object[this.id];\n  }\n  this.isDestroyed = true;\n};\n\n// Apply calls to the passed in function with the component as the context.\n// Stop calling back once the component is destroyed, which avoids possible bugs\n// and memory leaks.\nComponent.prototype.bind = function(callback) {\n  var component = this;\n  this.on('destroy', function() {\n    // Reduce potential for memory leaks by removing references to the component\n    // and the passed in callback, which could have closure references\n    component = null;\n    // Cease calling back after component is removed from the DOM\n    callback = null;\n  });\n  return function componentBindWrapper() {\n    if (!callback) return;\n    return callback.apply(component, arguments);\n  };\n};\n\n// When passing in a numeric delay, calls the function at most once per that\n// many milliseconds. Like Underscore, the function will be called on the\n// leading and the trailing edge of the delay as appropriate. Unlike Underscore,\n// calls are consistently called via setTimeout and are never synchronous. This\n// should be used for reducing the frequency of ongoing updates, such as scroll\n// events or other continuous streams of events.\n//\n// Additionally, implements an interface intended to be used with\n// window.requestAnimationFrame or process.nextTick. If one of these is passed,\n// it will be used to create a single async call following any number of\n// synchronous calls. This mode is typically used to coalesce many synchronous\n// events (such as multiple model events) into a single async event.\n//\n// Like component.bind(), will no longer call back once the component is\n// destroyed, which avoids possible bugs and memory leaks.\nComponent.prototype.throttle = function(callback, delayArg) {\n  var component = this;\n  this.on('destroy', function() {\n    // Reduce potential for memory leaks by removing references to the component\n    // and the passed in callback, which could have closure references\n    component = null;\n    // Cease calling back after component is removed from the DOM\n    callback = null;\n  });\n\n  // throttle(callback)\n  // throttle(callback, 150)\n  if (delayArg == null || typeof delayArg === 'number') {\n    var delay = delayArg || 0;\n    var nextArgs;\n    var previous;\n    var boundCallback = function() {\n      var args = nextArgs;\n      nextArgs = null;\n      previous = +new Date();\n      if (callback && args) {\n        callback.apply(component, args);\n      }\n    };\n    return function componentThrottleWrapper() {\n      var queueCall = !nextArgs;\n      nextArgs = slice.call(arguments);\n      if (queueCall) {\n        var now = +new Date();\n        var remaining = Math.max(previous + delay - now, 0);\n        setTimeout(boundCallback, remaining);\n      }\n    };\n  }\n\n  // throttle(callback, window.requestAnimationFrame)\n  // throttle(callback, process.nextTick)\n  if (typeof delayArg === 'function') {\n    var nextArgs;\n    var boundCallback = function() {\n      var args = nextArgs;\n      nextArgs = null;\n      if (callback && args) {\n        callback.apply(component, args);\n      }\n    };\n    return function componentThrottleWrapper() {\n      var queueCall = !nextArgs;\n      nextArgs = slice.call(arguments);\n      if (queueCall) delayArg(boundCallback);\n    };\n  }\n\n  throw new Error('Second argument must be a delay function or number');\n};\n\n// Suppresses calls until the function is no longer called for that many\n// milliseconds. This should be used for delaying updates triggered by user\n// input, such as window resizing, or typing text that has a live preview or\n// client-side validation. This should not be used for inputs that trigger\n// server requests, such as search autocomplete; use debounceAsync for those\n// cases instead.\n//\n// Like component.bind(), will no longer call back once the component is\n// destroyed, which avoids possible bugs and memory leaks.\nComponent.prototype.debounce = function(callback, delay) {\n  delay = delay || 0;\n  if (typeof delay !== 'number') {\n    throw new Error('Second argument must be a number');\n  }\n  var component = this;\n  this.on('destroy', function() {\n    // Reduce potential for memory leaks by removing references to the component\n    // and the passed in callback, which could have closure references\n    component = null;\n    // Cease calling back after component is removed from the DOM\n    callback = null;\n  });\n  var nextArgs;\n  var timeout;\n  var boundCallback = function() {\n    var args = nextArgs;\n    nextArgs = null;\n    timeout = null;\n    if (callback && args) {\n      callback.apply(component, args);\n    }\n  };\n  return function componentDebounceWrapper() {\n    nextArgs = slice.call(arguments);\n    if (timeout) clearTimeout(timeout);\n    timeout = setTimeout(boundCallback, delay);\n  };\n};\n\n// Forked from: https://github.com/juliangruber/async-debounce\n//\n// Like debounce(), suppresses calls until the function is no longer called for\n// that many milliseconds. In addition, suppresses calls while the callback\n// function is running. In other words, the callback will not be called again\n// until the supplied done() argument is called. When the debounced function is\n// called while the callback is running, the callback will be called again\n// immediately after done() is called. Thus, the callback will always receive\n// the last value passed to the debounced function.\n//\n// This avoids the potential for multiple callbacks to execute in parallel and\n// complete out of order. It also acts as an adaptive rate limiter. Use this\n// method to debounce any field that triggers an async call as the user types.\n//\n// Like component.bind(), will no longer call back once the component is\n// destroyed, which avoids possible bugs and memory leaks.\nComponent.prototype.debounceAsync = function(callback, delay) {\n  var applyArguments = callback.length !== 1;\n  delay = delay || 0;\n  if (typeof delay !== 'number') {\n    throw new Error('Second argument must be a number');\n  }\n  var component = this;\n  this.on('destroy', function() {\n    // Reduce potential for memory leaks by removing references to the component\n    // and the passed in callback, which could have closure references\n    component = null;\n    // Cease calling back after component is removed from the DOM\n    callback = null;\n  });\n  var running = false;\n  var nextArgs;\n  var timeout;\n  function done() {\n    var args = nextArgs;\n    nextArgs = null;\n    timeout = null;\n    if (callback && args) {\n      running = true;\n      args.push(done);\n      callback.apply(component, args);\n    } else {\n      running = false;\n    }\n  }\n  return function componentDebounceAsyncWrapper() {\n    nextArgs = (applyArguments) ? slice.call(arguments) : [];\n    if (timeout) clearTimeout(timeout);\n    if (running) return;\n    timeout = setTimeout(done, delay);\n  };\n};\n\nComponent.prototype.get = function(viewName, unescaped) {\n  var view = this.getView(viewName);\n  return view.get(this.context, unescaped);\n};\n\nComponent.prototype.getFragment = function(viewName) {\n  var view = this.getView(viewName);\n  return view.getFragment(this.context);\n};\n\nComponent.prototype.getView = function(viewName) {\n  var contextView = this.context.getView();\n  return (viewName) ?\n    this.app.views.find(viewName, contextView.namespace) : contextView;\n};\n\nComponent.prototype.getAttribute = function(key) {\n  var attributeContext = this.context.forAttribute(key);\n  if (!attributeContext) return;\n  var value = attributeContext.attributes[key];\n  if (value instanceof expressions.Expression) {\n    value = value.get(attributeContext);\n  }\n  return expressions.renderValue(value, this.context);\n};\n\nComponent.prototype.setAttribute = function(key, value) {\n  this.context.parent.attributes[key] = value;\n};\n\nComponent.prototype.setNullAttribute = function(key, value) {\n  var attributes = this.context.parent.attributes;\n  if (attributes[key] == null) attributes[key] = value;\n};\n\nfunction ComponentAttribute(expression, model, key) {\n  this.expression = expression;\n  this.model = model;\n  this.key = key;\n}\nComponentAttribute.prototype.update = function(context, binding) {\n  var value = this.expression.get(context);\n  binding.condition = value;\n  this.model.setDiff(this.key, value);\n};\nfunction ComponentAttributeBinding(expression, model, key, context) {\n  this.template = new ComponentAttribute(expression, model, key);\n  this.context = context;\n  this.condition = expression.get(context);\n}\nComponentAttributeBinding.prototype = Object.create(templates.Binding.prototype);\nComponentAttributeBinding.prototype.constructor = ComponentAttributeBinding;\n\nfunction setModelAttributes(context, model) {\n  var attributes = context.parent.attributes;\n  if (!attributes) return;\n  // Set attribute values on component model\n  for (var key in attributes) {\n    var value = attributes[key];\n    setModelAttribute(context, model, key, value);\n  }\n}\n\nfunction setModelAttribute(context, model, key, value) {\n  // If an attribute is an Expression, set its current value in the model\n  // and keep it up to date. When it is a resolvable path, use a Racer ref,\n  // which makes it a two-way binding. Otherwise, set to the current value\n  // and create a binding that will set the value in the model as the\n  // expression's dependencies change.\n  if (value instanceof expressions.Expression) {\n    var segments = value.pathSegments(context);\n    if (segments) {\n      model.root.ref(model._at + '.' + key, segments.join('.'), {updateIndices: true});\n    } else {\n      var binding = new ComponentAttributeBinding(value, model, key, context);\n      context.addBinding(binding);\n      model.set(key, binding.condition);\n    }\n    return;\n  }\n\n  // If an attribute is a Template, set a template object in the model.\n  // Eagerly rendering a template can cause excessive rendering when the\n  // developer wants to pass in a complex chunk of HTML, and if we were to\n  // set a string in the model that represents the template value, we'd lose\n  // the ability to use the value in the component's template, since HTML\n  // would be escaped and we'd lose the ability to create proper bindings.\n  //\n  // This may be of surprise to developers, since it may not be intuitive\n  // whether a passed in value will produce an expression or a template. To\n  // get the rendered value consistently, the component's getAttribute(key)\n  // method may be used to get the value that would be rendered.\n  if (value instanceof templates.Template) {\n    var template = new templates.ContextClosure(value, context);\n    model.set(key, template);\n    return;\n  }\n\n  // For all other value types, set the passed in value directly. Passed in\n  // values will only be set initially, so model paths should be used if\n  // bindings are desired.\n  model.set(key, value);\n}\n\nfunction createFactory(constructor) {\n  // DEPRECATED: constructor.prototype.singleton is deprecated. \"singleton\"\n  // static property on the constructor is preferred\n  return (constructor.singleton || constructor.prototype.singleton) ?\n    new SingletonComponentFactory(constructor) :\n    new ComponentFactory(constructor);\n}\n\nfunction emitInitHooks(context, component) {\n  if (!context.initHooks) return;\n  // Run initHooks for `on` listeners immediately before init\n  for (var i = 0, len = context.initHooks.length; i < len; i++) {\n    context.initHooks[i].emit(context, component);\n  }\n}\n\nfunction ComponentModelData() {\n  this.id = null;\n  this.$controller = null;\n}\n\nfunction ComponentFactory(constructor) {\n  this.constructor = constructor;\n}\nComponentFactory.prototype.init = function(context) {\n  var DataConstructor = this.constructor.DataConstructor || ComponentModelData;\n  var data = new DataConstructor();\n  var component = new this.constructor(context, data);\n  // Detect whether the component constructor already called super by checking\n  // for one of the properties it sets. If not, call the Component constructor\n  if (!component.context) {\n    Component.call(component, context, data);\n  }\n\n  setModelAttributes(component.context, component.model);\n\n  // Do the user-specific initialization. The component constructor should be\n  // an empty function and the actual initialization code should be done in the\n  // component's init method. This means that we don't have to rely on users\n  // properly calling the Component constructor method and avoids having to\n  // play nice with how CoffeeScript extends class constructors\n  emitInitHooks(context, component);\n  component.emit('init', component);\n  if (component.init) component.init(component.model);\n\n  return component.context;\n};\nComponentFactory.prototype.create = function(context) {\n  var component = context.controller;\n  component.emit('create', component);\n  // Call the component's create function after its view is rendered\n  if (component.create) {\n    component.create(component.model, component.dom);\n  }\n};\n\nfunction noop() {}\n\nfunction SingletonComponentFactory(constructor) {\n  this.constructor = constructor;\n  this.component = null;\n  // Disable component from being destroyed, since it is intended to\n  // be used multiple times\n  constructor.prototype.destroy = noop;\n}\nSingletonComponentFactory.prototype.isSingleton = true;\nSingletonComponentFactory.prototype.init = function(context) {\n  if (!this.component) this.component = new this.constructor();\n  return context.componentChild(this.component);\n};\n// Don't call the init or create methods for singleton components\nSingletonComponentFactory.prototype.create = noop;\n\nfunction isBasePrototype(object) {\n  return (object === Object.prototype) ||\n    (object === Function.prototype) ||\n    (object === null);\n}\nfunction getRootPrototype(object) {\n  while (true) {\n    var prototype = Object.getPrototypeOf(object);\n    if (isBasePrototype(prototype)) return object;\n    object = prototype;\n  }\n}\nvar _extendComponent = (Object.setPrototypeOf && Object.getPrototypeOf) ?\n  // Modern version, which supports ES6 classes\n  function(constructor) {\n    // Find the end of the prototype chain\n    var rootPrototype = getRootPrototype(constructor.prototype);\n\n    // This guard is a workaroud to a bug that has occurred in Chakra when\n    // app.component() is invoked twice on the same constructor. In that case,\n    // the `instanceof Component` check in extendComponent incorrectly returns\n    // false after the prototype has already been set to `Component.prototype`.\n    // Then, this code proceeds to set the prototype of Component.prototype\n    // to itself, which throws a \"Cyclic __proto__ value\" error.\n    // https://github.com/Microsoft/ChakraCore/issues/5915\n    if (rootPrototype === Component.prototype) return;\n\n    // Establish inheritance with the pattern that Node's util.inherits() uses\n    // if Object.setPrototypeOf() is available (all modern browsers & IE11).\n    // This inhertance pattern is not equivalent to class extends, but it does\n    // work to make instances of the constructor inherit the desired prototype\n    // https://github.com/nodejs/node/issues/4179\n    Object.setPrototypeOf(rootPrototype, Component.prototype);\n  } :\n  // Fallback for older browsers\n  function(constructor) {\n    // In this version, we iterate over all of the properties on the\n    // constructor's prototype and merge them into a new prototype object.\n    // This flattens the prototype chain, meaning that instanceof will not\n    // work for classes from which the current component inherits\n    var prototype = constructor.prototype;\n    // Otherwise, modify constructor.prototype. This won't work with ES6\n    // classes, since their prototype property is non-writeable. However, it\n    // does work in older browsers that don't support Object.setPrototypeOf(),\n    // and those browsers don't support ES6 classes either\n    constructor.prototype = Object.create(Component.prototype);\n    constructor.prototype.constructor = constructor;\n    util.mergeInto(constructor.prototype, prototype);\n  };\nfunction extendComponent(constructor) {\n  // Don't do anything if the constructor already extends Component\n  if (constructor.prototype instanceof Component) return;\n  // Otherwise, append Component.prototype to constructor's prototype chain\n  _extendComponent(constructor);\n}\n",
    "var expressions = require('derby-templates').expressions;\n\n// The many trees of bindings:\n//\n// - Model tree, containing your actual data. Eg:\n//    {users:{fred:{age:40}, wilma:{age:37}}}\n//\n// - Event model tree, whose structure mirrors the model tree. The event model\n//   tree lets us annotate the model tree with listeners which fire when events\n//   change. I think there are three types of listeners:\n//\n//   1. Reference binding binds to whatever is referred to by the path. Eg,\n//   {{each items as item}} binds item by reference as it goes through the\n//   list.\n//   2. Fixed path bindings explicitly bind to whatever is at that path\n//   regardless of how the model changes underneath the event model\n//   3. Listen on a subtree and fire when anything in the subtree changes. This\n//   is used for custom functions.\n//\n// {{foo.id}} would listen on the fixed path ['foo', 'id'].\n//\n//\n// - Context tree represents the changing (embedded) contexts of the templating\n//   engine. This maps to the tree of templates and allows templates to reference\n//   anything in any of their enclosing template scopes.\n//\n\nmodule.exports = EventModel;\n\n// The code here uses object-based set pattern where objects are keyed using\n// sequentially generated IDs.\nvar nextId = 1;\n\n// A binding object is something with update(), insert()/move()/remove() defined.\n\n\n// Given x[y] with model.get(y) == 5:\n//  item = 5\n//  segments = ['y']\n//  outside = the EventModel for x.\n//\n// Note that item could be a Context or another ModelRef - eg:\n//\n// {{ each foo as bar }} ... {{ x[bar] }}  -or-  {{ x[y[z]] }}\nfunction ModelRef(model, item, segments, outside) {\n  this.id = nextId++;\n\n  // We need a reference to the model & our segment list so we can update our\n  // value.\n  this.model = model;\n  this.segments = segments;\n\n  // Our current value.\n  this.item = item;\n\n  // outside is a reference to the EventModel of the thing on the lhs of the\n  // brackets. For example, in x[y].z, outside is the EventModel of x.\n  this.outside = outside;\n\n  // result is the EventModel of the evaluated version of the brackets. In\n  // x[y].z, its the EventModel of x[y].\n  this.result = outside.child(item).refChild(this);\n}\n\nModelRef.prototype.update = function() {\n  var segments = expressions.pathSegments(this.segments);\n  var newItem = expressions.lookup(segments, this.model.data);\n  if (this.item === newItem) return;\n\n  // First remove myself.\n  delete this.outside.child(this.item).refChildren[this.id];\n\n  this.item = newItem;\n\n  var container = this.outside.child(this.item);\n  // I want to just call refChild but that would create a new EM. Instead I\n  // want to just implant my current EM there.\n  if (!container.refChildren) container.refChildren = new RefChildrenMap();\n  container.refChildren[this.id] = this.result;\n\n  // Finally, update all the bindings in the tree.\n  this.result.update();\n};\n\n\nfunction RefOutMap() {}\nfunction RefChildrenMap() {}\nfunction BindingsMap() {}\nfunction ItemContextsMap() {}\nfunction EventModelsMap() {}\n\nfunction EventModel() {\n  this.id = nextId++;\n\n  // Most of these won't ever be filled in, so I'm just leaving them null.\n  //\n  // These contain our EventModel children.\n  this.object = null;\n  this.array = null;\n\n  // This contains any EventModel children which have floating references.\n  this.arrayByReference = null;\n\n  // If the data stored here is ever used to lookup other values, this is an\n  // object mapping remote child ID -> ref.\n  //\n  // Eg given x[y], y.refOut[x.id] = <Binding>\n  this.refOut = null;\n\n  // This is a map from ref id -> event model for events bound to this\n  // EventModel but via a ref. We could just merge them into the main tree, but\n  // this way they're easy to move.\n  //\n  // Eg, given x[y] (y=1), x.1.refChildren[ref id] is an EventModel.\n  this.refChildren = null;\n\n  this.bindings = null;\n\n  // Item contexts are contexts which need their item number changed as this\n  // EventModel object moves around its surrounding list.\n  this.itemContexts = null;\n}\n\nEventModel.prototype.refChild = function(ref) {\n  if (!this.refChildren) this.refChildren = new RefChildrenMap();\n  var id = ref.id;\n\n  if (!this.refChildren[id]) {\n    this.refChildren[id] = new EventModel();\n  }\n  return this.refChildren[id];\n};\n\nEventModel.prototype.arrayLookup = function(model, segmentsBefore, segmentsInside) {\n  var segments = expressions.pathSegments(segmentsInside);\n  var item = expressions.lookup(segments, model.data);\n\n  var source = this.at(segmentsInside);\n\n  // What the array currently resolves to. Given x[y] with y=1, container is\n  // the EM for x\n  var container = this.at(segmentsBefore);\n\n  if (!source.refOut) source.refOut = new RefOutMap();\n\n  var ref = source.refOut[container.id];\n  if (ref == null) {\n    ref = new ModelRef(model, item, segmentsInside, container);\n    source.refOut[container.id] = ref;\n  }\n\n  return ref;\n};\n\n// Returns the EventModel node of the named child.\nEventModel.prototype.child = function(segment) {\n  var container;\n  if (typeof segment === 'string') {\n    // Object\n    if (!this.object) this.object = {};\n    container = this.object;\n\n  } else if (typeof segment === 'number') {\n    // Array by value\n    if (!this.array) this.array = [];\n    container = this.array;\n\n  } else if (segment instanceof ModelRef) {\n    // Array reference. We'll need to lookup the child with the right\n    // value, then look inside its ref children for the right EventModel\n    // (so we can update it later). This is pretty janky, but should be\n    // *correct* even in the face of recursive array accessors.\n    //\n    // This will calculate it based on the current segment values, but refs\n    // cache the EM anyway.\n    //return this.child(segment.item).refChild(segment);\n    return segment.result;\n\n  } else {\n    // Array by reference\n    if (!this.arrayByReference) this.arrayByReference = [];\n    container = this.arrayByReference;\n    segment = segment.item;\n  }\n\n  return container[segment] || (container[segment] = new EventModel());\n};\n\n// Returns the EventModel node at the given segments list. Note that although\n// EventModel nodes are unique, its possible for multiple EventModel nodes to\n// refer to the same section of the model because of references.\n//\n// If you want to update the bindings that refer to a specific path, use\n// each().\n//\n// EventModel objects are created as needed.\nEventModel.prototype.at = function(segments) {\n  // For unbound dependancies.\n  if (segments == null) return this;\n\n  var eventModel = this;\n\n  for (var i = 0; i < segments.length; i++) {\n    eventModel = eventModel.child(segments[i]);\n  }\n\n  return eventModel;\n};\n\nEventModel.prototype.isEmpty = function() {\n  if (hasKeys(this.dependancies)) return false;\n  if (hasKeys(this.itemContexts)) return false;\n\n  if (this.object) {\n    if (hasKeys(this.object)) return false;\n    this.object = null;\n  }\n\n  if (this.arrayByReference) {\n    for (var i = 0; i < this.arrayByReference.length; i++) {\n      if (this.arrayByReference[i] != null) return false;\n    }\n    this.arrayByReference = null;\n  }\n\n  if (this.array) {\n    for (var i = 0; i < this.array.length; i++) {\n      if (this.array[i] != null) return false;\n    }\n    this.array = null;\n  }\n\n  return true;\n};\n\nfunction hasKeys(object) {\n  for (var key in object) {\n    return true;\n  }\n  return false;\n}\n\n\n// **** Updating the EventModel\n\nEventModel.prototype._addItemContext = function(context) {\n  if (!context._id) context._id = nextId++;\n  if (!this.itemContexts) this.itemContexts = new ItemContextsMap();\n  this.itemContexts[context._id] = context;\n};\n\nEventModel.prototype._removeItemContext = function(context) {\n  if (this.itemContexts) {\n    delete this.itemContexts[context._id];\n  }\n};\n\nEventModel.prototype._addBinding = function(binding) {\n  var bindings = this.bindings || (this.bindings = new BindingsMap());\n  binding.eventModels || (binding.eventModels = new EventModelsMap());\n  bindings[binding.id] = binding;\n  binding.eventModels[this.id] = this;\n};\n\n// This is the main hook to add bindings to the event model tree. It should\n// only be called on the root EventModel object.\nEventModel.prototype.addBinding = function(segments, binding) {\n  this.at(segments)._addBinding(binding);\n};\n\n// This is used for objects (contexts in derby's case) that have a .item\n// property which refers to an array index.\nEventModel.prototype.addItemContext = function(segments, context) {\n  this.at(segments)._addItemContext(context);\n};\n\nEventModel.prototype.removeBinding = function(binding) {\n  if (!binding.eventModels) return;\n  for (var id in binding.eventModels) {\n    var eventModel = binding.eventModels[id];\n    if (eventModel.bindings) delete eventModel.bindings[binding.id];\n  }\n  binding.eventModels = null;\n};\n\nEventModel.prototype._each = function(segments, pos, fn) {\n  // Our refChildren are effectively merged into this object.\n  if (this.refChildren) {\n    for (var id in this.refChildren) {\n      var refChild = this.refChildren[id];\n      if (refChild) refChild._each(segments, pos, fn);\n    }\n  }\n\n  if (segments.length === pos) {\n    fn(this);\n    return;\n  }\n\n  var segment = segments[pos];\n  var child;\n  if (typeof segment === 'string') {\n    // Object. Just recurse into our objects set. Its possible to rewrite this\n    // function to simply loop in the case of object lookups, but I don't think\n    // it'll buy us much.\n    child = this.object && this.object[segment];\n    if (child) child._each(segments, pos + 1, fn);\n\n  } else {\n    // Number. Recurse both into the fixed list and the reference list.\n    child = this.array && this.array[segment];\n    if (child) child._each(segments, pos + 1, fn);\n\n    child = this.arrayByReference && this.arrayByReference[segment];\n    if (child) child._each(segments, pos + 1, fn);\n  }\n};\n\n// Called when the scalar value at the path changes. This only calls update()\n// on this node. See update() below if you want to update entire\n// subtrees.\nEventModel.prototype.localUpdate = function(previous, pass) {\n  if (this.bindings) {\n    for (var id in this.bindings) {\n      var binding = this.bindings[id];\n      if (binding) binding.update(previous, pass);\n    }\n  }\n\n  // If our value changed, we also need to update anything that depends on it\n  // via refOut.\n  if (this.refOut) {\n    for (var id in this.refOut) {\n      var ref = this.refOut[id];\n      if (ref) ref.update();\n    }\n  }\n};\n\n// This is used when an object subtree is replaced / removed.\nEventModel.prototype.update = function(previous, pass) {\n  this.localUpdate(previous, pass);\n\n  if (this.object) {\n    for (var key in this.object) {\n      var binding = this.object[key];\n      if (binding) binding.update();\n    }\n  }\n\n  if (this.array) {\n    for (var i = 0; i < this.array.length; i++) {\n      var binding = this.array[i];\n      if (binding) binding.update();\n    }\n  }\n\n  if (this.arrayByReference) {\n    for (var i = 0; i < this.arrayByReference.length; i++) {\n      var binding = this.arrayByReference[i];\n      if (binding) binding.update();\n    }\n  }\n};\n\n// Updates the indexes in itemContexts of our children in the range of\n// [from, to). from and to both optional.\nEventModel.prototype._updateChildItemContexts = function(from, to) {\n  if (!this.arrayByReference) return;\n\n  if (from == null) from = 0;\n  if (to == null) to = this.arrayByReference.length;\n\n  for (var i = from; i < to; i++) {\n    var contexts = this.arrayByReference[i] &&\n      this.arrayByReference[i].itemContexts;\n    if (contexts) {\n      for (var key in contexts) {\n        contexts[key].item = i;\n      }\n    }\n  }\n};\n\n// Updates our array-by-value values. They have to recursively update every\n// binding in their children. Sad.\nEventModel.prototype._updateArray = function(from, to) {\n  if (!this.array) return;\n\n  if (from == null) from = 0;\n  if (to == null) to = this.array.length;\n\n  for (var i = from; i < to; i++) {\n    var binding = this.array[i];\n    if (binding) binding.update();\n  }\n};\n\nEventModel.prototype._updateObject = function() {\n  if (this.object) {\n    for (var key in this.object) {\n      var binding = this.object[key];\n      if (binding) binding.update();\n    }\n  }\n};\n\nEventModel.prototype._set = function(previous, pass) {\n  // This just updates anything thats bound to the whole subtree. An alternate\n  // implementation could be passed in the new value at this node (which we\n  // cache), then compare with the old version and only update parts of the\n  // subtree which are relevant. I don't know if thats an important\n  // optimization - it really depends on your use case.\n  this.update(previous, pass);\n};\n\n// Insert into this EventModel node.\nEventModel.prototype._insert = function(index, howMany) {\n  // Update fixed paths\n  this._updateArray(index);\n\n  // Update relative paths\n  if (this.arrayByReference && this.arrayByReference.length > index) {\n    // Shift the actual items in the array references array.\n\n    // This probably isn't the best way to implement insert. Other options are\n    // using concat() on slices or though constructing a temporary array and\n    // using splice.call. Hopefully if this method is slow it'll come up during\n    // profiling.\n    for (var i = 0; i < howMany; i++) {\n      this.arrayByReference.splice(index, 0, null);\n    }\n\n    // Update the path in the contexts\n    this._updateChildItemContexts(index + howMany);\n  }\n\n  // Finally call our bindings.\n  if (this.bindings) {\n    for (var id in this.bindings) {\n      var binding = this.bindings[id];\n      if (binding) binding.insert(index, howMany);\n    }\n  }\n  this._updateObject();\n};\n\n// Remove howMany child elements from this EventModel at index.\nEventModel.prototype._remove = function(index, howMany) {\n  // Update fixed paths. Both the removed items and items after it may have changed.\n  this._updateArray(index);\n\n  if (this.arrayByReference) {\n    // Update relative paths. First throw away all the children which have been removed.\n    this.arrayByReference.splice(index, howMany);\n\n    this._updateChildItemContexts(index);\n  }\n\n  // Call bindings.\n  if (this.bindings) {\n    for (var id in this.bindings) {\n      var binding = this.bindings[id];\n      if (binding) binding.remove(index, howMany);\n    }\n  }\n  this._updateObject();\n};\n\n// Move howMany items from `from` to `to`.\nEventModel.prototype._move = function(from, to, howMany) {\n  // first points to the first element that was moved. end points to the list\n  // element past the end of the changed region.\n  var first, end;\n  if (from < to) {\n    first = from;\n    end = to + howMany;\n  } else {\n    first = to;\n    end = from + howMany;\n  }\n\n  // Update fixed paths.\n  this._updateArray(first, end);\n\n  // Update relative paths\n  var arr = this.arrayByReference;\n  if (arr && arr.length > first) {\n    // Remove from the old location\n    var values = arr.splice(from, howMany);\n\n    // Insert at the new location\n    arr.splice.apply(arr, [to, 0].concat(values));\n\n    // Update the path in the contexts\n    this._updateChildItemContexts(first, end);\n  }\n\n  // Finally call our bindings.\n  if (this.bindings) {\n    for (var id in this.bindings) {\n      var binding = this.bindings[id];\n      if (binding) binding.move(from, to, howMany);\n    }\n  }\n  this._updateObject();\n};\n\n\n// Helpers.\n\nEventModel.prototype.mutate = function(segments, fn) {\n  // This finds & returns a list of all event models which exist and could match\n  // the specified path. The path cannot contain contexts like derby expression\n  // segment lists (just because I don't think thats a useful feature and its not\n  // implemented)\n  this._each(segments, 0, fn);\n\n  // Also emit all mutations as sets on star paths, which are how dependencies\n  // for view helper functions are represented. They should react to a path\n  // or any child path being modified\n  for (var i = 0, len = segments.length; i++ < len;) {\n    var wildcardSegments = segments.slice(0, i);\n    wildcardSegments.push('*');\n    this._each(wildcardSegments, 0, childSetWildcard);\n  }\n};\n\nfunction childSetWildcard(child) {\n  child._set();\n}\n\nEventModel.prototype.set = function(segments, previous, pass) {\n  this.mutate(segments, function childSet(child) {\n    child._set(previous, pass);\n  });\n};\n\nEventModel.prototype.insert = function(segments, index, howMany) {\n  this.mutate(segments, function childInsert(child) {\n    child._insert(index, howMany);\n  });\n};\n\nEventModel.prototype.remove = function(segments, index, howMany) {\n  this.mutate(segments, function childRemove(child) {\n    child._remove(index, howMany);\n  });\n};\n\nEventModel.prototype.move = function(segments, from, to, howMany) {\n  this.mutate(segments, function childMove(child) {\n    child._move(from, to, howMany);\n  });\n};\n",
    "exports.onStringInsert = onStringInsert;\nexports.onStringRemove = onStringRemove;\nexports.onTextInput = onTextInput;\n\nfunction onStringInsert(el, previous, index, text) {\n  function transformCursor(cursor) {\n    return (index < cursor) ? cursor + text.length : cursor;\n  }\n  previous || (previous = '');\n  var newText = previous.slice(0, index) + text + previous.slice(index);\n  replaceText(el, newText, transformCursor);\n}\n\nfunction onStringRemove(el, previous, index, howMany) {\n  function transformCursor(cursor) {\n    return (index < cursor) ? cursor - Math.min(howMany, cursor - index) : cursor;\n  }\n  previous || (previous = '');\n  var newText = previous.slice(0, index) + previous.slice(index + howMany);\n  replaceText(el, newText, transformCursor);\n}\n\nfunction replaceText(el, newText, transformCursor) {\n  var selectionStart = transformCursor(el.selectionStart);\n  var selectionEnd = transformCursor(el.selectionEnd);\n\n  var scrollTop = el.scrollTop;\n  el.value = newText;\n  if (el.scrollTop !== scrollTop) {\n    el.scrollTop = scrollTop;\n  }\n  if (document.activeElement === el) {\n    el.selectionStart = selectionStart;\n    el.selectionEnd = selectionEnd;\n  }\n}\n\nfunction onTextInput(model, segments, value) {\n  var previous = model._get(segments) || '';\n  if (previous === value) return;\n  var start = 0;\n  while (previous.charAt(start) === value.charAt(start)) {\n    start++;\n  }\n  var end = 0;\n  while (\n    previous.charAt(previous.length - 1 - end) === value.charAt(value.length - 1 - end) &&\n    end + start < previous.length &&\n    end + start < value.length\n  ) {\n    end++;\n  }\n\n  if (previous.length !== start + end) {\n    var howMany = previous.length - start - end;\n    model._stringRemove(segments, start, howMany);\n  }\n  if (value.length !== start + end) {\n    var inserted = value.slice(start, value.length - end);\n    model._stringInsert(segments, start, inserted);\n  }\n}\n",
    "var derbyTemplates = require('derby-templates');\nvar contexts = derbyTemplates.contexts;\nvar expressions = derbyTemplates.expressions;\nvar templates = derbyTemplates.templates;\nvar DependencyOptions = derbyTemplates.options.DependencyOptions;\nvar util = require('racer/lib/util');\nvar components = require('./components');\nvar EventModel = require('./eventmodel');\nvar textDiff = require('./textDiff');\nvar Controller = require('./Controller');\nvar documentListeners = require('./documentListeners');\n\nmodule.exports = Page;\n\nfunction Page(app, model) {\n  Controller.call(this, app, this, model);\n  this.params = null;\n  if (this.init) this.init(model);\n  this.context = this._createContext();\n  this._eventModel = null;\n  this._removeModelListeners = null;\n  this._components = {};\n  this._addListeners();\n}\n\nutil.mergeInto(Page.prototype, Controller.prototype);\n\nPage.prototype.$bodyClass = function(ns) {\n  if (!ns) return;\n  var classNames = [];\n  var segments = ns.split(':');\n  for (var i = 0, len = segments.length; i < len; i++) {\n    var className = segments.slice(0, i + 1).join('-');\n    classNames.push(className);\n  }\n  return classNames.join(' ');\n};\n\nPage.prototype.$preventDefault = function(e) {\n  e.preventDefault();\n};\n\nPage.prototype.$stopPropagation = function(e) {\n  e.stopPropagation();\n};\n\nPage.prototype._setRenderParams = function(ns) {\n  this.model.set('$render.ns', ns);\n  this.model.set('$render.params', this.params);\n  this.model.set('$render.url', this.params && this.params.url);\n  this.model.set('$render.query', this.params && this.params.query);\n};\n\nPage.prototype._setRenderPrefix = function(ns) {\n  var prefix = (ns) ? ns + ':' : '';\n  this.model.set('$render.prefix', prefix);\n};\n\nPage.prototype.get = function(viewName, ns, unescaped) {\n  this._setRenderPrefix(ns);\n  var view = this.getView(viewName, ns);\n  return view.get(this.context, unescaped);\n};\n\nPage.prototype.getFragment = function(viewName, ns) {\n  this._setRenderPrefix(ns);\n  var view = this.getView(viewName, ns);\n  return view.getFragment(this.context);\n};\n\nPage.prototype.getView = function(viewName, ns) {\n  return this.app.views.find(viewName, ns);\n};\n\nPage.prototype.render = function(ns) {\n  this.app.emit('render', this);\n  this.context.pause();\n  this._setRenderParams(ns);\n  var titleFragment = this.getFragment('TitleElement', ns);\n  var bodyFragment = this.getFragment('BodyElement', ns);\n  var titleElement = document.getElementsByTagName('title')[0];\n  titleElement.parentNode.replaceChild(titleFragment, titleElement);\n  document.body.parentNode.replaceChild(bodyFragment, document.body);\n  this.context.unpause();\n  if (this.create) this.create(this.model, this.dom);\n  this.app.emit('routeDone', this, 'render');\n};\n\nPage.prototype.attach = function() {\n  this.context.pause();\n  var ns = this.model.get('$render.ns');\n  var titleView = this.getView('TitleElement', ns);\n  var bodyView = this.getView('BodyElement', ns);\n  var titleElement = document.getElementsByTagName('title')[0];\n  titleView.attachTo(titleElement.parentNode, titleElement, this.context);\n  bodyView.attachTo(document.body.parentNode, document.body, this.context);\n  this.context.unpause();\n  if (this.create) this.create(this.model, this.dom);\n};\n\nPage.prototype._createContext = function() {\n  var contextMeta = new contexts.ContextMeta();\n  contextMeta.views = this.app && this.app.views;\n  var context = new contexts.Context(contextMeta, this);\n  context.expression = new expressions.PathExpression([]);\n  context.alias = '#root';\n  return context;\n};\n\nPage.prototype._addListeners = function() {\n  var eventModel = this._eventModel = new EventModel();\n  this._addModelListeners(eventModel);\n  this._addContextListeners(eventModel);\n};\n\nPage.prototype.destroy = function() {\n  this.emit('destroy');\n  this._removeModelListeners();\n  for (var id in this._components) {\n    var component = this._components[id];\n    component.destroy();\n  }\n  // Remove all data, refs, listeners, and reactive functions\n  // for the previous page\n  var silentModel = this.model.silent();\n  silentModel.destroy('_page');\n  silentModel.destroy('$components');\n  // Unfetch and unsubscribe from all queries and documents\n  silentModel.unloadAll && silentModel.unloadAll();\n};\n\nPage.prototype._addModelListeners = function(eventModel) {\n  var model = this.model;\n  if (!model) return;\n  // Registering model listeners with the *Immediate events helps to prevent\n  // a bug with binding updates where a model listener causes a change to the\n  // path being listened on, directly or indirectly.\n\n  // TODO: Remove this when upgrading Racer to the next major version. Feature\n  // detect which type of event listener to register by emitting a test event\n  if (useLegacyListeners(model)) {\n    return this._addModelListenersLegacy(eventModel);\n  }\n\n  // `util.castSegments(segments)` is needed to cast string segments into\n  // numbers, since EventModel#child does typeof checks against segments. This\n  // could be done once in Racer's Model#emit, instead of in every listener.\n  var changeListener = model.on('changeImmediate', function onChange(segments, event) {\n    // The pass parameter is passed in for special handling of updates\n    // resulting from stringInsert or stringRemove\n    segments = util.castSegments(segments.slice());\n    eventModel.set(segments, event.previous, event.passed);\n  });\n  var loadListener = model.on('loadImmediate', function onLoad(segments) {\n    segments = util.castSegments(segments.slice());\n    eventModel.set(segments);\n  });\n  var unloadListener = model.on('unloadImmediate', function onUnload(segments, event) {\n    segments = util.castSegments(segments.slice());\n    eventModel.set(segments, event.previous);\n  });\n  var insertListener = model.on('insertImmediate', function onInsert(segments, event) {\n    segments = util.castSegments(segments.slice());\n    eventModel.insert(segments, event.index, event.values.length);\n  });\n  var removeListener = model.on('removeImmediate', function onRemove(segments, event) {\n    segments = util.castSegments(segments.slice());\n    eventModel.remove(segments, event.index, event.values.length);\n  });\n  var moveListener = model.on('moveImmediate', function onMove(segments, event) {\n    segments = util.castSegments(segments.slice());\n    eventModel.move(segments, event.from, event.to, event.howMany);\n  });\n\n  this._removeModelListeners = function() {\n    model.removeListener('changeImmediate', changeListener);\n    model.removeListener('loadImmediate', loadListener);\n    model.removeListener('unloadImmediate', unloadListener);\n    model.removeListener('insertImmediate', insertListener);\n    model.removeListener('removeImmediate', removeListener);\n    model.removeListener('moveImmediate', moveListener);\n  };\n};\nfunction useLegacyListeners(model) {\n  var useLegacy = true;\n  // model.once is broken in older racer, so manually remove event\n  var listener = model.on('changeImmediate', function(segments, event) {\n    model.removeListener('changeImmediate', listener);\n    // Older Racer emits an array of eventArgs, whereas newer racer emits an event object\n    useLegacy = Array.isArray(event);\n  });\n  model.set('$derby.testEvent', true);\n  return useLegacy;\n}\nPage.prototype._addModelListenersLegacy = function(eventModel) {\n  var model = this.model;\n  if (!model) return;\n\n  // `util.castSegments(segments)` is needed to cast string segments into\n  // numbers, since EventModel#child does typeof checks against segments. This\n  // could be done once in Racer's Model#emit, instead of in every listener.\n  var changeListener = model.on('changeImmediate', function onChange(segments, eventArgs) {\n    // eventArgs[0] is the new value, which Derby bindings don't use directly.\n    var previous = eventArgs[1];\n    // The pass parameter is passed in for special handling of updates\n    // resulting from stringInsert or stringRemove\n    var pass = eventArgs[2];\n    segments = util.castSegments(segments.slice());\n    eventModel.set(segments, previous, pass);\n  });\n  var loadListener = model.on('loadImmediate', function onLoad(segments) {\n    segments = util.castSegments(segments.slice());\n    eventModel.set(segments);\n  });\n  var unloadListener = model.on('unloadImmediate', function onUnload(segments) {\n    segments = util.castSegments(segments.slice());\n    eventModel.set(segments);\n  });\n  var insertListener = model.on('insertImmediate', function onInsert(segments, eventArgs) {\n    var index = eventArgs[0];\n    var values = eventArgs[1];\n    segments = util.castSegments(segments.slice());\n    eventModel.insert(segments, index, values.length);\n  });\n  var removeListener = model.on('removeImmediate', function onRemove(segments, eventArgs) {\n    var index = eventArgs[0];\n    var values = eventArgs[1];\n    segments = util.castSegments(segments.slice());\n    eventModel.remove(segments, index, values.length);\n  });\n  var moveListener = model.on('moveImmediate', function onMove(segments, eventArgs) {\n    var from = eventArgs[0];\n    var to = eventArgs[1];\n    var howMany = eventArgs[2];\n    segments = util.castSegments(segments.slice());\n    eventModel.move(segments, from, to, howMany);\n  });\n\n  this._removeModelListeners = function() {\n    model.removeListener('changeImmediate', changeListener);\n    model.removeListener('loadImmediate', loadListener);\n    model.removeListener('unloadImmediate', unloadListener);\n    model.removeListener('insertImmediate', insertListener);\n    model.removeListener('removeImmediate', removeListener);\n    model.removeListener('moveImmediate', moveListener);\n  };\n};\n\nPage.prototype._addContextListeners = function(eventModel) {\n  this.context.meta.addBinding = addBinding;\n  this.context.meta.removeBinding = removeBinding;\n  this.context.meta.removeNode = removeNode;\n  this.context.meta.addItemContext = addItemContext;\n  this.context.meta.removeItemContext = removeItemContext;\n\n  function addItemContext(context) {\n    var segments = context.expression.resolve(context);\n    eventModel.addItemContext(segments, context);\n  }\n  function removeItemContext(context) {\n    // TODO\n  }\n  function addBinding(binding) {\n    patchTextBinding(binding);\n    var expressions = binding.template.expressions;\n    if (expressions) {\n      for (var i = 0, len = expressions.length; i < len; i++) {\n        addDependencies(eventModel, expressions[i], binding);\n      }\n    } else {\n      var expression = binding.template.expression;\n      addDependencies(eventModel, expression, binding);\n    }\n  }\n  function removeBinding(binding) {\n    var bindingWrappers = binding.meta;\n    if (!bindingWrappers) return;\n    for (var i = bindingWrappers.length; i--;) {\n      eventModel.removeBinding(bindingWrappers[i]);\n    }\n  }\n  function removeNode(node) {\n    var component = node.$component;\n    if (component) component.destroy();\n    var destroyListeners = node.$destroyListeners;\n    if (destroyListeners) {\n      for (var i = 0; i < destroyListeners.length; i++) {\n        destroyListeners[i]();\n      }\n    }\n  }\n};\n\nfunction addDependencies(eventModel, expression, binding) {\n  var bindingWrapper = new BindingWrapper(eventModel, expression, binding);\n  bindingWrapper.updateDependencies();\n}\n\n// The code here uses object-based set pattern where objects are keyed using\n// sequentially generated IDs.\nvar nextId = 1;\nfunction BindingWrapper(eventModel, expression, binding) {\n  this.eventModel = eventModel;\n  this.expression = expression;\n  this.binding = binding;\n  this.id = nextId++;\n  this.eventModels = null;\n  this.dependencies = null;\n  this.ignoreTemplateDependency = (\n    binding instanceof components.ComponentAttributeBinding\n  ) || (\n    (binding.template instanceof templates.DynamicText) &&\n    (binding instanceof templates.RangeBinding)\n  );\n  if (binding.meta) {\n    binding.meta.push(this);\n  } else {\n    binding.meta = [this];\n  }\n}\nBindingWrapper.prototype.updateDependencies = function() {\n  var dependencyOptions;\n  if (this.ignoreTemplateDependency && this.binding.condition instanceof templates.Template) {\n    dependencyOptions = new DependencyOptions();\n    dependencyOptions.setIgnoreTemplate(this.binding.condition);\n  }\n  var dependencies = this.expression.dependencies(this.binding.context, dependencyOptions);\n  if (this.dependencies) {\n    // Do nothing if dependencies haven't changed\n    if (equalDependencies(this.dependencies, dependencies)) return;\n    // Otherwise, remove current dependencies\n    this.eventModel.removeBinding(this);\n  }\n  // Add new dependencies\n  if (!dependencies) return;\n  this.dependencies = dependencies;\n  for (var i = 0, len = dependencies.length; i < len; i++) {\n    var dependency = dependencies[i];\n    if (dependency) this.eventModel.addBinding(dependency, this);\n  }\n};\nBindingWrapper.prototype.update = function(previous, pass) {\n  this.binding.update(previous, pass);\n  this.updateDependencies();\n};\nBindingWrapper.prototype.insert = function(index, howMany) {\n  this.binding.insert(index, howMany);\n  this.updateDependencies();\n};\nBindingWrapper.prototype.remove = function(index, howMany) {\n  this.binding.remove(index, howMany);\n  this.updateDependencies();\n};\nBindingWrapper.prototype.move = function(from, to, howMany) {\n  this.binding.move(from, to, howMany);\n  this.updateDependencies();\n};\n\nfunction equalDependencies(a, b) {\n  var lenA = a ? a.length : -1;\n  var lenB = b ? b.length : -1;\n  if (lenA !== lenB) return false;\n  for (var i = 0; i < lenA; i++) {\n    var itemA = a[i];\n    var itemB = b[i];\n    var lenItemA = itemA ? itemA.length : -1;\n    var lenItemB = itemB ? itemB.length : -1;\n    if (lenItemA !== lenItemB) return false;\n    for (var j = 0; j < lenItemB; j++) {\n      if (itemA[j] !== itemB[j]) return false;\n    }\n  }\n  return true;\n}\n\nfunction patchTextBinding(binding) {\n  if (\n    binding instanceof templates.AttributeBinding &&\n    binding.name === 'value' &&\n    (binding.element.tagName === 'INPUT' || binding.element.tagName === 'TEXTAREA') &&\n    documentListeners.inputSupportsSelection(binding.element) &&\n    binding.template.expression.resolve(binding.context)\n  ) {\n    binding.update = textInputUpdate;\n  }\n}\n\nfunction textInputUpdate(previous, pass) {\n  textUpdate(this, this.element, previous, pass);\n}\nfunction textUpdate(binding, element, previous, pass) {\n  if (pass) {\n    if (pass.$event && pass.$event.target === element) {\n      return;\n    } else if (pass.$stringInsert) {\n      return textDiff.onStringInsert(\n        element,\n        previous,\n        pass.$stringInsert.index,\n        pass.$stringInsert.text\n      );\n    } else if (pass.$stringRemove) {\n      return textDiff.onStringRemove(\n        element,\n        previous,\n        pass.$stringRemove.index,\n        pass.$stringRemove.howMany\n      );\n    }\n  }\n  binding.template.update(binding.context, binding);\n}\n",
    "/*DERBY_SERIALIZED_VIEWS*/module.exports = function(derbyTemplates, views){var expressions = derbyTemplates.expressions,templates = derbyTemplates.templates;views.deserialize([[function(){return this.template=new templates.Template([new templates.Element('title', void 0, [new templates.Block(new templates.Template([new templates.DynamicText(new expressions.PathExpression(['$render', 'prefix'], new expressions.ExpressionMeta('$render.prefix'))), new templates.Text('Title')], '{{$render.prefix}}Title'), [new templates.DynamicViewInstance(new templates.Template([new templates.DynamicText(new expressions.PathExpression(['$render', 'prefix'], new expressions.ExpressionMeta('$render.prefix'))), new templates.Text('Title')], '{{$render.prefix}}Title'), {})])], void 0, false)])},'TitleElement'],[function(){return this.template=new templates.Template([new templates.Element('body', {'class': new templates.DynamicAttribute(new expressions.FnExpression(['$bodyClass'], [new expressions.PathExpression(['$render', 'ns'])], void 0, new expressions.ExpressionMeta('$bodyClass($render.ns)')))}, [new templates.Block(new templates.Template([new templates.DynamicText(new expressions.PathExpression(['$render', 'prefix'], new expressions.ExpressionMeta('$render.prefix'))), new templates.Text('Body')], '{{$render.prefix}}Body'), [new templates.DynamicViewInstance(new templates.Template([new templates.DynamicText(new expressions.PathExpression(['$render', 'prefix'], new expressions.ExpressionMeta('$render.prefix'))), new templates.Text('Body')], '{{$render.prefix}}Body'), {})])], void 0, false, true)])},'BodyElement'],[function(){return this.template=new templates.Template([new templates.Text('Widgets')])},'Title'],[function(){return this.template=new templates.Template([new templates.ViewInstance('d-connection-alert', {}), new templates.ViewInstance('d-before-unload', {}), new templates.ViewInstance('modal', {'title': new templates.ViewParent(new templates.Template([new templates.Text('Modal '), new templates.Element('i', void 0, [new templates.Text('town')], void 0, false)])), 'actions': [{'content': 'Meh'}, {'class': 'btn-primary', 'content': 'You too!'}], 'content': 'How nice to see you!'}, [new templates.AsProperty(['testModal'])], [new templates.ComponentOn('hide', new expressions.FnExpression(['hideModal'], []))]), new templates.Element('div', {'class': new templates.Attribute('container')}, [new templates.Element('h1', {'style': new templates.DynamicAttribute(new templates.Template([new templates.Text('color: '), new templates.DynamicText(new expressions.PathExpression(['widgets', 'data', 'color'], new expressions.ExpressionMeta('widgets.data.color')))], 'color: {{widgets.data.color}}'))}, [new templates.Text('Bootstrap widgets')], void 0, false), new templates.Element('div', {'class': new templates.Attribute('btn-toolbar'), 'role': new templates.Attribute('toolbar')}, [new templates.Element('div', {'class': new templates.Attribute('btn-group')}, [new templates.ViewInstance('dropdown', {'class': 'btn-group', 'options': new expressions.ViewParentExpression(new expressions.PathExpression(['_page', 'numbers'], new expressions.ExpressionMeta('_page.numbers')))}), new templates.ViewInstance('dropdown', {'class': 'btn-group', 'value': new expressions.ViewParentExpression(new expressions.PathExpression(['widgets', 'data', 'color'], new expressions.ExpressionMeta('widgets.data.color'))), 'options': new expressions.ViewParentExpression(new expressions.PathExpression(['_page', 'colors'], new expressions.ExpressionMeta('_page.colors')))})], void 0, false), new templates.Element('button', {'class': new templates.Attribute('btn btn-default')}, [new templates.Text('Show modal')], [new templates.ElementOn('click', new expressions.FnExpression(['testModal', 'show'], []))], false)], void 0, false), new templates.ViewInstance('tabs', {'selectedIndex': new expressions.ViewParentExpression(new expressions.PathExpression(['widgets', 'data', 'currentTab'], new expressions.ExpressionMeta('widgets.data.currentTab'))), 'panes': [{'title': 'One', 'content': 'Stuff\\'n'}, {'title': 'Two', 'content': 'More stuff'}]})], void 0, false)])},'Body'],[function(){return this.template=new templates.Template([])},'Tail'],[function(){return this.template=new templates.Template([new templates.Marker('dropdown:index'), new templates.Element('div', {'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('dropdown '), new templates.DynamicText(new expressions.AttributePathExpression('class', [], new expressions.ExpressionMeta('@class'))), new templates.ConditionalBlock([new expressions.PathExpression(['open'], new expressions.ExpressionMeta('if open', 'if'))], [[new templates.Text(' open')]])], 'dropdown {{@class}}{{if open}} open{{/if}}'))}, [new templates.Element('button', {'id': new templates.DynamicAttribute(new templates.Template([new templates.Text('dropdown-toggle'), new templates.DynamicText(new expressions.PathExpression(['id'], new expressions.ExpressionMeta('id')))], 'dropdown-toggle{{id}}')), 'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('btn '), new templates.DynamicText(new expressions.OperatorExpression('||', [new expressions.AttributePathExpression('buttonClass', []), new expressions.LiteralExpression('btn-default')], void 0, new expressions.ExpressionMeta('@buttonClass || \\'btn-default\\''))), new templates.Text(' dropdown-toggle')], 'btn {{@buttonClass || \\'btn-default\\'}} dropdown-toggle')), 'type': new templates.Attribute('button')}, [new templates.DynamicText(new expressions.FnExpression(['label'], [new expressions.PathExpression(['value'])], void 0, new expressions.ExpressionMeta('label(value)'))), new templates.Text(' '), new templates.Element('span', {'class': new templates.Attribute('caret')}, [], void 0, false)], [new templates.AsProperty(['toggleButton']), new templates.ElementOn('click', new expressions.FnExpression(['toggle'], []))], false), new templates.Element('ul', {'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('dropdown-menu '), new templates.DynamicText(new expressions.AttributePathExpression('menuClass', [], new expressions.ExpressionMeta('@menuClass')))], 'dropdown-menu {{@menuClass}}')), 'role': new templates.Attribute('menu'), 'aria-labelledby': new templates.DynamicAttribute(new templates.Template([new templates.Text('dropdown-toggle'), new templates.DynamicText(new expressions.PathExpression(['id'], new expressions.ExpressionMeta('id')))], 'dropdown-toggle{{id}}'))}, [new templates.EachBlock(new expressions.AttributePathExpression('options', [], new expressions.ExpressionMeta('each @options', 'each')), [new templates.Element('li', {'role': new templates.Attribute('presentation'), 'class': new templates.DynamicAttribute(new expressions.RelativePathExpression(['class'], new expressions.ExpressionMeta('this.class')))}, [new templates.Element('a', {'role': new templates.Attribute('menuitem'), 'tabindex': new templates.Attribute('-1'), 'href': new templates.Attribute('#')}, [new templates.DynamicText(new expressions.RelativePathExpression(['content'], new expressions.ExpressionMeta('this.content')))], [new templates.ElementOn('click', new expressions.FnExpression(['select'], [new expressions.RelativePathExpression([])])), new templates.ElementOn('click', new expressions.FnExpression(['$preventDefault'], [new expressions.PathExpression(['$event'])]))], false)], void 0, false)])], [new templates.AsProperty(['menu'])], false)], void 0, false)])},'dropdown:index', null, {'arrays': 'option/options', 'element': 'dropdown'}],[function(){return this.template=new templates.Template([new templates.Marker('modal:index'), new templates.Element('div', {'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('modal fade'), new templates.ConditionalBlock([new expressions.PathExpression(['faded'], new expressions.ExpressionMeta('if faded', 'if'))], [[new templates.Text(' in')]])], 'modal fade{{if faded}} in{{/if}}')), 'style': new templates.DynamicAttribute(new templates.ConditionalBlock([new expressions.PathExpression(['show'], new expressions.ExpressionMeta('if show', 'if'))], [[new templates.Text('display: block')]]))}, [new templates.Element('div', {'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('modal-dialog'), new templates.ConditionalBlock([new expressions.AttributePathExpression('size', [], new expressions.ExpressionMeta('if @size', 'if'))], [[new templates.Text(' modal-'), new templates.DynamicText(new expressions.AttributePathExpression('size', [], new expressions.ExpressionMeta('@size')))]])], 'modal-dialog{{if @size}} modal-{{@size}}{{/}}'))}, [new templates.Element('div', {'class': new templates.Attribute('modal-content')}, [new templates.Element('div', {'class': new templates.Attribute('modal-header')}, [new templates.Element('button', {'type': new templates.Attribute('button'), 'class': new templates.Attribute('close'), 'aria-hidden': new templates.Attribute('true')}, [new templates.Text('Ã')], [new templates.ElementOn('click', new expressions.FnExpression(['hide'], [new expressions.LiteralExpression('close')]))], false), new templates.Element('h4', {'class': new templates.Attribute('modal-title')}, [new templates.DynamicText(new expressions.AttributePathExpression('title', [], new expressions.ExpressionMeta('@title')))], void 0, false)], void 0, false), new templates.Element('div', {'class': new templates.Attribute('modal-body')}, [new templates.DynamicText(new expressions.AttributePathExpression('content', [], new expressions.ExpressionMeta('@content')))], void 0, false), new templates.Element('div', {'class': new templates.Attribute('modal-footer')}, [new templates.EachBlock(new expressions.AttributePathExpression('actions', [], new expressions.ExpressionMeta('each @actions', 'each')), [new templates.Element('button', {'type': new templates.Attribute('button'), 'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('btn '), new templates.DynamicText(new expressions.OperatorExpression('||', [new expressions.RelativePathExpression(['class']), new expressions.LiteralExpression('btn-default')], void 0, new expressions.ExpressionMeta('this.class || \\'btn-default\\'')))], 'btn {{this.class || \\'btn-default\\'}}'))}, [new templates.DynamicText(new expressions.RelativePathExpression(['content'], new expressions.ExpressionMeta('this.content')))], [new templates.ElementOn('click', new expressions.FnExpression(['hide'], [new expressions.OperatorExpression('||', [new expressions.RelativePathExpression(['value']), new expressions.RelativePathExpression(['content'])])]))], false)])], void 0, false)], [new templates.ElementOn('click', new expressions.FnExpression(['$stopPropagation'], [new expressions.PathExpression(['$event'])]))], false)], void 0, false)], [new templates.ElementOn('click', new expressions.FnExpression(['hide'], [new expressions.LiteralExpression('backdrop')]))], false), new templates.ConditionalBlock([new expressions.PathExpression(['show'], new expressions.ExpressionMeta('if show', 'if'))], [[new templates.Element('div', {'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('modal-backdrop fade'), new templates.ConditionalBlock([new expressions.PathExpression(['faded'], new expressions.ExpressionMeta('if faded', 'if'))], [[new templates.Text(' in')]])], 'modal-backdrop fade{{if faded}} in{{/if}}'))}, [], void 0, false)]])])},'modal:index', null, {'arrays': 'action/actions', 'attributes': 'title', 'element': 'modal'}],[function(){return this.template=new templates.Template([new templates.Marker('tabs:index'), new templates.Element('ul', {'class': new templates.Attribute('nav nav-tabs')}, [new templates.EachBlock(new expressions.AttributePathExpression('panes', [], new expressions.ExpressionMeta('each @panes as #pane, #i', 'each', void 0, '#pane', '#i')), [new templates.Element('li', {'class': new templates.DynamicAttribute(new templates.ConditionalBlock([new expressions.OperatorExpression('===', [new expressions.PathExpression(['selectedIndex']), new expressions.AliasPathExpression('#i', [])], void 0, new expressions.ExpressionMeta('if selectedIndex === #i', 'if'))], [[new templates.Text('active')]]))}, [new templates.Element('a', {'href': new templates.Attribute('#')}, [new templates.DynamicText(new expressions.AliasPathExpression('#pane', ['title'], new expressions.ExpressionMeta('#pane.title')))], [new templates.ElementOn('click', new expressions.FnExpression(['select'], [new expressions.AliasPathExpression('#i', [])])), new templates.ElementOn('click', new expressions.FnExpression(['$preventDefault'], [new expressions.PathExpression(['$event'])]))], false)], void 0, false)])], void 0, false), new templates.Element('div', {'class': new templates.Attribute('tab-content')}, [new templates.EachBlock(new expressions.AttributePathExpression('panes', [], new expressions.ExpressionMeta('each @panes as #pane, #i', 'each', void 0, '#pane', '#i')), [new templates.Element('div', {'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('tab-pane'), new templates.ConditionalBlock([new expressions.OperatorExpression('===', [new expressions.PathExpression(['selectedIndex']), new expressions.AliasPathExpression('#i', [])], void 0, new expressions.ExpressionMeta('if selectedIndex === #i', 'if'))], [[new templates.Text(' active')]])], 'tab-pane{{if selectedIndex === #i}} active{{/if}}'))}, [new templates.DynamicText(new expressions.AliasPathExpression('#pane', ['content'], new expressions.ExpressionMeta('#pane.content')))], void 0, false)])], void 0, false)])},'tabs:index', null, {'arrays': 'pane/panes', 'element': 'tabs'}],[function(){return this.template=new templates.Template([new templates.Marker('alert:index'), new templates.Element('div', {'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('alert alert-'), new templates.DynamicText(new expressions.AttributePathExpression('type', [], new expressions.ExpressionMeta('@type'))), new templates.Text(' '), new templates.ConditionalBlock([new expressions.AttributePathExpression('dismiss', [], new expressions.ExpressionMeta('if @dismiss', 'if'))], [[new templates.Text('alert-dismissable')]]), new templates.Text(' '), new templates.ConditionalBlock([new expressions.PathExpression(['faded'], new expressions.ExpressionMeta('if faded', 'if'))], [[new templates.Text('fade')]])], 'alert alert-{{@type}} {{if @dismiss}}alert-dismissable{{/}} {{if faded}}fade{{/}}')), 'style': new templates.DynamicAttribute(new templates.ConditionalBlock([new expressions.PathExpression(['hidden'], new expressions.ExpressionMeta('if hidden', 'if'))], [[new templates.Text('display: none')]]))}, [new templates.ConditionalBlock([new expressions.AttributePathExpression('dismiss', [], new expressions.ExpressionMeta('if @dismiss', 'if'))], [[new templates.Element('button', {'type': new templates.Attribute('button'), 'class': new templates.Attribute('close'), 'aria-hidden': new templates.Attribute('true')}, [new templates.DynamicText(new expressions.AttributePathExpression('dismiss', [], new expressions.ExpressionMeta('@dismiss')))], [new templates.ElementOn('click', new expressions.FnExpression(['hide'], []))], false)]]), new templates.DynamicText(new expressions.AttributePathExpression('content', [], new expressions.ExpressionMeta('@content')))], void 0, false)])},'alert:index', null, {'element': 'alert', 'attributes': 'dismiss'}],[function(){return this.template=new templates.Template([new templates.Marker('contextMenu:index'), new templates.Element('div', {'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('context-menu dropdown '), new templates.DynamicText(new expressions.AttributePathExpression('class', [], new expressions.ExpressionMeta('@class'))), new templates.ConditionalBlock([new expressions.PathExpression(['open'], new expressions.ExpressionMeta('if open', 'if'))], [[new templates.Text(' open')]])], 'context-menu dropdown {{@class}}{{if open}} open{{/if}}'))}, [new templates.Element('ul', {'class': new templates.DynamicAttribute(new templates.Template([new templates.Text('dropdown-menu '), new templates.DynamicText(new expressions.AttributePathExpression('menuClass', [], new expressions.ExpressionMeta('@menuClass')))], 'dropdown-menu {{@menuClass}}')), 'role': new templates.Attribute('menu'), 'style': new templates.Attribute('position: fixed')}, [new templates.ConditionalBlock([new expressions.AttributePathExpression('header', [], new expressions.ExpressionMeta('if @header', 'if'))], [[new templates.Element('li', {'class': new templates.Attribute('dropdown-header')}, [new templates.DynamicText(new expressions.AttributePathExpression('header', [], new expressions.ExpressionMeta('@header')))], void 0, false)]]), new templates.EachBlock(new expressions.AttributePathExpression('options', [], new expressions.ExpressionMeta('each @options as #option', 'each', void 0, '#option')), [new templates.Element('li', {'role': new templates.Attribute('presentation'), 'class': new templates.DynamicAttribute(new expressions.AliasPathExpression('#option', ['class'], new expressions.ExpressionMeta('#option.class')))}, [new templates.ConditionalBlock([new expressions.AliasPathExpression('#option', ['content'], new expressions.ExpressionMeta('if #option.content', 'if'))], [[new templates.Element('a', {'role': new templates.Attribute('menuitem'), 'tabindex': new templates.Attribute('-1'), 'href': new templates.Attribute('#')}, [new templates.DynamicText(new expressions.AliasPathExpression('#option', ['content'], new expressions.ExpressionMeta('#option.content')))], [new templates.ElementOn('click', new expressions.FnExpression(['select'], [new expressions.AliasPathExpression('#option', [])])), new templates.ElementOn('click', new expressions.FnExpression(['$preventDefault'], [new expressions.PathExpression(['$event'])]))], false)]])], void 0, false)])], [new templates.AsProperty(['menu'])], false)], void 0, false)])},'contextMenu:index', null, {'arrays': 'option/options', 'element': 'contextmenu'}],[function(){return this.template=new templates.Template([new templates.Marker('d-connection-alert:index'), new templates.ConditionalBlock([new expressions.OperatorExpression('!==', [new expressions.AliasPathExpression('#root', ['$connection', 'state']), new expressions.LiteralExpression('connected')], void 0, new expressions.ExpressionMeta('if #root.$connection.state !== \\'connected\\'', 'if'))], [[new templates.Element('div', {'class': new templates.Attribute('connection')}, [new templates.Element('p', {'class': new templates.Attribute('alert alert-warning')}, [new templates.ConditionalBlock([new expressions.OperatorExpression('===', [new expressions.AliasPathExpression('#root', ['$connection', 'state']), new expressions.LiteralExpression('stopped')], void 0, new expressions.ExpressionMeta('if #root.$connection.state === \\'stopped\\'', 'if')), new expressions.Expression(new expressions.ExpressionMeta('else', 'else'))], [[new templates.Text('Unable to reconnect â '), new templates.Element('a', {'href': new templates.Attribute('#')}, [new templates.Text('Reload')], [new templates.ElementOn('click', new expressions.FnExpression(['reload'], [])), new templates.ElementOn('click', new expressions.FnExpression(['$preventDefault'], [new expressions.PathExpression(['$event'])]))], false)], [new templates.DynamicText(new expressions.FnExpression(['sentenceCase'], [new expressions.AliasPathExpression('#root', ['$connection', 'state'])], void 0, new expressions.ExpressionMeta('sentenceCase(#root.$connection.state)'))), new templates.ConditionalBlock([new expressions.PathExpression(['hideReconnect'], new expressions.ExpressionMeta('unless hideReconnect', 'unless'))], [[new templates.Text(' â '), new templates.Element('a', {'href': new templates.Attribute('#')}, [new templates.Text('Reconnect')], [new templates.ElementOn('click', new expressions.FnExpression(['reconnect'], [])), new templates.ElementOn('click', new expressions.FnExpression(['$preventDefault'], [new expressions.PathExpression(['$event'])]))], false)]])]])], void 0, false)], void 0, false)]])])},'d-connection-alert:index'],[function(){return this.template=new templates.Template([new templates.Marker('d-before-unload')])},'d-before-unload']])};/*DERBY_SERIALIZED_VIEWS_END*/",
    "/*\n * App.js\n *\n * Provides the glue between views, controllers, and routes for an\n * application's functionality. Apps are responsible for creating pages.\n *\n */\n\nvar path = require('path');\nvar EventEmitter = require('events').EventEmitter;\nvar tracks = require('tracks');\nvar util = require('racer/lib/util');\nvar derbyTemplates = require('derby-templates');\nvar templates = derbyTemplates.templates;\nvar components = require('./components');\nvar PageBase = require('./Page');\nvar serializedViews = require('./_views');\n\nmodule.exports = App;\n\nfunction App(derby, name, filename, options) {\n  EventEmitter.call(this);\n  this.derby = derby;\n  this.name = name;\n  this.filename = filename;\n  this.scriptHash = '{{DERBY_SCRIPT_HASH}}';\n  this.bundledAt = '{{DERBY_BUNDLED_AT}}';\n  this.Page = createAppPage(derby);\n  this.proto = this.Page.prototype;\n  this.views = new templates.Views();\n  this.tracksRoutes = tracks.setup(this);\n  this.model = null;\n  this.page = null;\n  this._pendingComponentMap = {};\n  this._init(options);\n}\n\nfunction createAppPage(derby) {\n  var Page = (derby && derby.Page) || PageBase;\n  // Inherit from Page/PageForServer so that we can add controller functions as prototype\n  // methods on this app's pages\n  function AppPage() {\n    Page.apply(this, arguments);\n  }\n  AppPage.prototype = Object.create(Page.prototype);\n  return AppPage;\n}\n\nutil.mergeInto(App.prototype, EventEmitter.prototype);\n\n// Overriden on server\nApp.prototype._init = function() {\n  this._waitForAttach = true;\n  this._cancelAttach = false;\n  this.model = new this.derby.Model();\n  serializedViews(derbyTemplates, this.views);\n  // Must init async so that app.on('model') listeners can be added.\n  // Must also wait for content ready so that bundle is fully downloaded.\n  this._contentReady();\n};\nApp.prototype._finishInit = function() {\n  var script = this._getScript();\n  var data = JSON.parse(script.nextSibling.innerHTML);\n  this.model.createConnection(data);\n  this.emit('model', this.model);\n  util.isProduction = data.nodeEnv === 'production';\n  if (!util.isProduction) this._autoRefresh();\n  this.model.unbundle(data);\n  var page = this.createPage();\n  page.params = this.model.get('$render.params');\n  this.emit('ready', page);\n  this._waitForAttach = false;\n  // Instead of attaching, do a route and render if a link was clicked before\n  // the page finished attaching\n  if (this._cancelAttach) {\n    this.history.refresh();\n    return;\n  }\n  // Since an attachment failure is *fatal* and could happen as a result of a\n  // browser extension like AdBlock, an invalid template, or a small bug in\n  // Derby or Saddle, re-render from scratch on production failures\n  if (util.isProduction) {\n    try {\n      page.attach();\n    } catch (err) {\n      this.history.refresh();\n      console.warn('attachment error', err.stack);\n    }\n  } else {\n    page.attach();\n  }\n  this.emit('load', page);\n};\n// Modified from: https://github.com/addyosmani/jquery.parts/blob/master/jquery.documentReady.js\nApp.prototype._contentReady = function() {\n  // Is the DOM ready to be used? Set to true once it occurs.\n  var isReady = false;\n  var app = this;\n\n  // The ready event handler\n  function onDOMContentLoaded() {\n    if (document.addEventListener) {\n      document.removeEventListener('DOMContentLoaded', onDOMContentLoaded, false);\n    } else {\n      // we're here because readyState !== 'loading' in oldIE\n      // which is good enough for us to call the dom ready!\n      document.detachEvent('onreadystatechange', onDOMContentLoaded);\n    }\n    onDOMReady();\n  }\n\n  // Handle when the DOM is ready\n  function onDOMReady() {\n    // Make sure that the DOM is not already loaded\n    if (isReady) return;\n    // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n    if (!document.body) return setTimeout(onDOMReady, 0);\n    // Remember that the DOM is ready\n    isReady = true;\n    // Make sure this is always async and then finishin init\n    setTimeout(function() {\n      app._finishInit();\n    }, 0);\n  }\n\n  // The DOM ready check for Internet Explorer\n  function doScrollCheck() {\n    if (isReady) return;\n    try {\n      // If IE is used, use the trick by Diego Perini\n      // http://javascript.nwbox.com/IEContentLoaded/\n      document.documentElement.doScroll('left');\n    } catch (err) {\n      setTimeout(doScrollCheck, 0);\n      return;\n    }\n    // and execute any waiting functions\n    onDOMReady();\n  }\n\n  // Catch cases where called after the browser event has already occurred.\n  if (document.readyState !== 'loading') return onDOMReady();\n\n  // Mozilla, Opera and webkit nightlies currently support this event\n  if (document.addEventListener) {\n    // Use the handy event callback\n    document.addEventListener('DOMContentLoaded', onDOMContentLoaded, false);\n    // A fallback to window.onload, that will always work\n    window.addEventListener('load', onDOMContentLoaded, false);\n    // If IE event model is used\n  } else if (document.attachEvent) {\n    // ensure firing before onload,\n    // maybe late but safe also for iframes\n    document.attachEvent('onreadystatechange', onDOMContentLoaded);\n    // A fallback to window.onload, that will always work\n    window.attachEvent('onload', onDOMContentLoaded);\n    // If IE and not a frame\n    // continually check to see if the document is ready\n    var toplevel;\n    try {\n      toplevel = window.frameElement == null;\n    } catch (err) {}\n    if (document.documentElement.doScroll && toplevel) {\n      doScrollCheck();\n    }\n  }\n};\n\nApp.prototype._getScript = function() {\n  return document.querySelector('script[data-derby-app]');\n};\n\nApp.prototype.use = util.use;\nApp.prototype.serverUse = util.serverUse;\n\nApp.prototype.loadViews = function() {};\n\nApp.prototype.loadStyles = function() {};\n\n// This function is overriden by requiring 'derby/parsing'\nApp.prototype.addViews = function() {\n  throw new Error(\n    'Parsing not available. Registering a view from source should not be used ' +\n    'in application code. Instead, specify a filename with view.file.'\n  );\n};\n\nApp.prototype.component = function(name, constructor, isDependency) {\n  if (typeof name === 'function') {\n    constructor = name;\n    name = null;\n  }\n  if (typeof constructor !== 'function') {\n    throw new Error('Missing component constructor argument');\n  }\n\n  var viewProp = constructor.view;\n  var viewIs, viewFilename, viewSource, viewDependencies;\n  // Always using an object for the static `view` property is preferred\n  if (viewProp && typeof viewProp === 'object') {\n    viewIs = viewProp.is;\n    viewFilename = viewProp.file;\n    viewSource = viewProp.source;\n    viewDependencies = viewProp.dependencies;\n  } else {\n    // Ignore other properties when `view` is an object. It is possible that\n    // properties could be inherited from a parent component when extending it.\n    //\n    // DEPRECATED: constructor.prototype.name and constructor.prototype.view\n    // use the equivalent static properties instead\n    viewIs = constructor.is || constructor.prototype.name;\n    viewFilename = constructor.view || constructor.prototype.view;\n  }\n  var viewName = name || viewIs ||\n    (viewFilename && path.basename(viewFilename, '.html'));\n\n  if (!viewName) {\n    throw new Error('No view specified for component');\n  }\n  if (viewFilename && viewSource) {\n    throw new Error('Component may not specify both a view file and source');\n  }\n\n  // TODO: DRY. This is copy-pasted from derby-templates\n  var mapName = viewName.replace(/:index$/, '');\n  var currentView = this.views.nameMap[mapName];\n  var currentConstructor = (currentView && currentView.componentFactory) ?\n    currentView.componentFactory.constructor :\n    this._pendingComponentMap[mapName];\n\n  // Avoid registering the same component twice; we want to avoid the overhead\n  // of loading view files from disk again. This is also what prevents\n  // circular dependencies from infinite looping\n  if (currentConstructor === constructor) return;\n\n  // Calling app.component() overrides existing views or components. Prevent\n  // dependencies from doing this without warning\n  if (isDependency && currentView && !currentView.fromSerialized) {\n    throw new Error('Dependencies cannot override existing views. Already registered \"' + viewName + '\"');\n  }\n\n  // This map is used to prevent infinite loops from circular dependencies\n  this._pendingComponentMap[mapName] = constructor;\n\n  // Recursively register component dependencies\n  if (viewDependencies) {\n    for (var i = 0; i < viewDependencies.length; i++) {\n      var dependency = viewDependencies[i];\n      if (Array.isArray(dependency)) {\n        this.component(dependency[0], dependency[1], true);\n      } else {\n        this.component(null, dependency, true);\n      }\n    }\n  }\n\n  // Register or find views specified by the component\n  var view;\n  if (viewFilename) {\n    this.loadViews(viewFilename, viewName);\n    view = this.views.find(viewName);\n\n  } else if (viewSource) {\n    this.addViews(viewSource, viewName);\n    view = this.views.find(viewName);\n\n  } else if (name) {\n    view = this.views.find(viewName);\n\n  } else {\n    view = this.views.register(viewName, '');\n  }\n  if (!view) {\n    var message = this.views.findErrorMessage(viewName);\n    throw new Error(message);\n  }\n\n  // Inherit from Component\n  components.extendComponent(constructor);\n  // Associate the appropriate view with the component constructor\n  view.componentFactory = components.createFactory(constructor);\n\n  delete this._pendingComponentMap[mapName];\n\n  // Make chainable\n  return this;\n};\n\nApp.prototype.createPage = function() {\n  if (this.page) {\n    this.emit('destroyPage', this.page);\n    this.page.destroy();\n  }\n  var page = new this.Page(this, this.model);\n  this.page = page;\n  return page;\n};\n\nApp.prototype.onRoute = function(callback, page, next, done) {\n  if (this._waitForAttach) {\n    // Cancel any routing before the initial page attachment. Instead, do a\n    // render once derby is ready\n    this._cancelAttach = true;\n    return;\n  }\n  this.emit('route', page);\n  // HACK: To update render in transitional routes\n  page.model.set('$render.params', page.params);\n  page.model.set('$render.url', page.params.url);\n  page.model.set('$render.query', page.params.query);\n  // If transitional\n  if (done) {\n    var app = this;\n    var _done = function() {\n      app.emit('routeDone', page, 'transition');\n      done();\n    };\n    callback.call(page, page, page.model, page.params, next, _done);\n    return;\n  }\n  callback.call(page, page, page.model, page.params, next);\n};\n\nApp.prototype._autoRefresh = function() {\n  var app = this;\n  var connection = this.model.connection;\n  connection.on('connected', function() {\n    connection.send({\n      derby: 'app',\n      name: app.name,\n      hash: app.scriptHash\n    });\n  });\n  connection.on('receive', function(request) {\n    if (request.data.derby) {\n      var message = request.data;\n      request.data = null;\n      app._handleMessage(message.derby, message);\n    }\n  });\n};\n\nApp.prototype._handleMessage = function(action, message) {\n  if (action === 'refreshViews') {\n    var fn = new Function('return ' + message.views)(); // jshint ignore:line\n    fn(derbyTemplates, this.views);\n    var ns = this.model.get('$render.ns');\n    this.page.render(ns);\n\n  } else if (action === 'refreshStyles') {\n    var styleElement = document.querySelector('style[data-filename=\"' +\n      message.filename + '\"]');\n    if (styleElement) styleElement.innerHTML = message.css;\n\n  } else if (action === 'reload') {\n    this.model.whenNothingPending(function() {\n      window.location = window.location;\n    });\n  }\n};\n",
    "/*\n * Derby.js\n * Meant to be the entry point for the framework.\n *\n */\nvar racer = require('racer');\n\nmodule.exports = Derby;\n\nfunction Derby() {}\nDerby.prototype = Object.create(racer);\nDerby.prototype.constructor = Derby;\n\nDerby.prototype.App = require('./App');\nDerby.prototype.Page = require('./Page');\nDerby.prototype.Component = require('./components').Component;\n\nDerby.prototype.createApp = function(name, filename, options) {\n  return new this.App(this, name, filename, options);\n};\n\nif (!racer.util.isServer) {\n  require('./documentListeners').add(document);\n}\n",
    "var serverRequire = require('racer').util.serverRequire;\nvar Derby = serverRequire(module, './lib/DerbyForServer') || require('./lib/Derby');\nmodule.exports = new Derby();\n",
    "\nmodule.exports = function(app) {\n  app.on('ready', function(page) {\n    window.MODEL = page.model;\n    window.APP = app;\n    app.findComponent = findComponent;\n    app.componentCommand = componentCommand;\n    app.derby.Model.prototype.logEvents = logEvents;\n  });\n}\n\nfunction findComponent(name, index) {\n  if (index == null) index = 0;\n  var commentIterator = document.createTreeWalker(document, 128, null, false);\n  var node;\n  while ((node = commentIterator.nextNode())) {\n    if (node.data !== name) continue;\n    if (index === 0) {\n      return node.$component;\n    }\n    index--;\n  }\n};\n\nfunction componentCommand(comment) {\n  var count = 0;\n  var commentIterator = document.createTreeWalker(document, 128, null, false);\n  var node;\n  while ((node = commentIterator.nextNode())) {\n    if (node === comment) {\n      return '(component = APP.findComponent(\\'' + node.data + '\\',' + count + '))';\n    }\n    if (node.data === comment.data) count++;\n  }\n};\n\nfunction logEvents(path) {\n  if (path == null) path = '';\n  this.on('all', path + '**', console.log.bind(console));\n};\n",
    "module.exports = function(app, options) {\n  app.component(require('./dropdown'));\n  app.component(require('./modal'));\n  app.component(require('./tabs'));\n  app.component(require('./alert'));\n  app.component(require('./contextMenu'));\n  if (require && require.resolve && !options || (options && options.loadStyles)) {\n    var filename = require.resolve('bootstrap/dist/css/bootstrap.min.css');\n    app.loadStyles(filename);\n  }\n};\n",
    "module.exports = ConnectionAlert;\nfunction ConnectionAlert() {}\nConnectionAlert.prototype.view = __dirname;\n\nConnectionAlert.prototype.reconnect = function() {\n  var model = this.model;\n  // Hide the reconnect link for a second after clicking it\n  model.set('hideReconnect', true);\n  setTimeout(function() {\n    model.set('hideReconnect', false);\n  }, 1000);\n  model.reconnect();\n};\n\nConnectionAlert.prototype.reload = function() {\n  window.location.reload();\n};\n\nConnectionAlert.prototype.sentenceCase = function(text) {\n  return text && (text.charAt(0).toUpperCase() + text.slice(1));\n};\n",
    "module.exports = BeforeUnload;\nfunction BeforeUnload() {}\nBeforeUnload.prototype.name = 'd-before-unload';\n\nBeforeUnload.prototype.create = function(model, dom) {\n  // Stop the user from leaving the page whenever a change might be pending\n  dom.on('beforeunload', window, listenerFn(model));\n};\n\nfunction listenerFn(model) {\n  return function beforeunloadListener(e) {\n    if (!model.hasWritePending()) return;\n    var confirmationMessage = model.get('message') ||\n      'You have unsaved changes. Do you want to leave this page and discard your changes?';\n    e.returnValue = confirmationMessage;\n    return confirmationMessage;\n  };\n}\n",
    "\nexposedRequire.m[\"racer\"] = _$lib_racer;\nexposedRequire.m[\"derby\"] = _$derby_derby;\nreturn exposedRequire;\n}(typeof require === 'function' ? require : void 0));",
    "var app = module.exports = require('derby').createApp('widgets', __filename);\napp.use(require('derby-debug'));\napp.serverUse(module, 'derby-stylus');\napp.use(require('d-bootstrap'));\napp.loadViews(__dirname);\napp.loadStyles(__dirname);\napp.component(require('d-connection-alert'));\napp.component(require('d-before-unload'));\n\napp.get('/', function(page, model, params, next) {\n  var data = model.at('widgets.data');\n  data.subscribe(function(err) {\n    if (err) return next(err);\n    data.createNull({color: 'Purple'});\n    model.set('_page.numbers', [\n      {content: 'First'},\n      {content: 'Second'},\n      {content: 'Third'}\n    ]);\n    model.set('_page.colors', [\n      {content: 'Red'},\n      {content: 'Orange'},\n      {content: 'Purple'}\n    ]);\n    page.render();\n  });\n});\n\napp.proto.hideModal = function(action, cancel) {\n  if (!window.confirm('Action: ' + action + '\\n\\nContinue to hide?')) {\n    cancel();\n  }\n};\n"
  ],
  "sourceRoot": ""
}